use gio::prelude::*; use gtk::prelude::*; use gtk::Orientation; use std::env::args; use std::process::Command; const SPACING: i32 = 16; fn build_ui(application: >k::Application) { let window = gtk::ApplicationWindow::new(application); window.set_title("youtube-dl"); window.set_border_width(SPACING as u32); window.set_position(gtk::WindowPosition::Center); window.set_default_size(400, 100); let vertical = gtk::Box::new(Orientation::Vertical, SPACING); let input_url = gtk::Entry::new(); let horizontal = gtk::Box::new(Orientation::Horizontal, SPACING); let convert_to_mp3 = gtk::CheckButton::with_label("convert to mp3"); let button = gtk::Button::with_label("Go!"); input_url.set_placeholder_text(Some("Enter URL here")); horizontal.set_spacing(SPACING); horizontal.set_homogeneous(true); window.add(&vertical); vertical.add(&input_url); vertical.add(&horizontal); horizontal.add(&convert_to_mp3); horizontal.add(&button); window.show_all(); button.connect_clicked(move |_| { let url = input_url.get_buffer().get_text(); println!("url: {}", url); let mut youtube_dl = Command::new("youtube-dl"); if convert_to_mp3.get_active() { println!("convert to mp3: true"); youtube_dl.arg("--extract-audio"); youtube_dl.arg("--audio-format"); youtube_dl.arg("mp3"); } youtube_dl.arg("--output"); youtube_dl.arg("~/Downloads/%(title)s.%(ext)s"); youtube_dl.arg(url); let output = youtube_dl.output().expect("failed to execute process"); println!("exit status: {:#?}", output); }); } fn main() { let application = gtk::Application::new( Some("dev.tinybird.max.youtube-dl-gtk"), Default::default() ).expect("Initialization failed..."); application.connect_activate(|app| { build_ui(app); }); application.run(&args().collect::>()); }