⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 janela.c

📁 youtube的视频下载工具
💻 C
📖 第 1 页 / 共 2 页
字号:
/*U2B Downloader is a simple program with a user interface to download videosfrom youTube.com and convert them to mpeg format (optional).           Copyright (c) 2007, Fabio Bruno Pereira <fabytes@gmail.com>This file is part of U2B Downloader.    U2B Downloader is free software: you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation, either version 3 of the License, or    (at your option) any later version.    U2B Downloader is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with U2B Downloader.  If not, see <http://www.gnu.org/licenses/>.*/#include <gtk/gtk.h>#include <sys/wait.h>#include <sys/types.h>#include <dirent.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <stdlib.h>#include <unistd.h>#include <curl/curl.h>#include <curl/types.h> #include <curl/easy.h> #include "download.h"void toggle_radio_button( GtkWidget *widget);void togg(GtkWidget *widget, gpointer *data);static void button_chdir_clear_cb(GtkWidget* w, gpointer data);static void button_link_clear_cb(GtkWidget* w, gpointer data);static gint unmap_event_cb(GtkWidget* window, GdkEventAny* e, gpointer data);static gint focusin_event_cb(GtkWidget* window, GdkEventAny* e, gpointer data);static gint focus_event_cb(GtkWidget* window, GdkEventAny* e, gpointer data);static gint delete_event_cb(GtkWidget* w, GdkEventAny* e, gpointer data);static void button_click_cb(GtkWidget* w, gpointer data);void create_file_selection(void) ;void open_dialog(char * msg, GtkMessageType type);size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream);size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream);void *my_thread(void *ptr);int start_download(char * url, char * filename);int my_progress_func(GtkWidget *Bar, double t, double d, double ultotal, double ulnow);GtkWidget *file_selection_box;gchar *filename=NULL;GtkWidget *saveToDir;GtkWidget *text_entry;GtkWidget *vbox;GtkWidget *hbox;GtkWidget *hbox2;GtkWidget *hbox3;GtkWidget *hbox4;GtkWidget* window;GtkWidget *Bar;GtkWidget *radio1;GtkWidget *radio2;GtkWidget* button;GtkWidget* button_clear1;GtkWidget* button_clear2;GtkWidget* chdir_button;GtkWidget *label_percent;GtkWidget *check_button;int mapped_window = 0; // tells weather the the main wondow is not minimized CURL *curl = NULL;int dvd_quality = 0 ;struct thread_info{   char * url ;   char * filename ;   char * ret ;};typedef struct thread_info stThread_info ;int main(int argc, char* argv[]){  GtkAdjustment *adj;  GtkWidget *label;  GtkWidget *label2;  GtkWidget *label3;   gtk_init(&argc, &argv);    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // gtk_widget_set_size_request (GTK_WIDGET (window), 200, 100);  gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);  gtk_window_set_default_icon_from_file ("/usr/share/pixmaps/U2Bdownloader32x32.png", NULL);  vbox = gtk_vbox_new(FALSE,0);  gtk_container_add(GTK_CONTAINER(window), vbox);    button = gtk_button_new_with_label("Download!");  chdir_button = gtk_button_new_with_label("Change Dir");  button_clear1 = gtk_button_new_with_label("Clear");   button_clear2 = gtk_button_new_with_label("Clear");  text_entry = gtk_entry_new();  saveToDir = gtk_entry_new();  gtk_entry_set_max_length(GTK_ENTRY(text_entry),200);  gtk_entry_set_max_length(GTK_ENTRY(saveToDir),200);  label = gtk_label_new("  Enter the youtube video link:                    ");  label2 = gtk_label_new("Save to:                                                   ");  label3 = gtk_label_new("by Fabio Bruno Pereira  -  v 1.0.1");  label_percent = gtk_label_new("                             ");  radio1 = gtk_radio_button_new_with_label (NULL, "Medium Quality");  radio2 = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (radio1)), "DVD Quality");  check_button =  gtk_check_button_new_with_label("Convert to .mpg");                                   GdkColor color;  gdk_color_parse ("gray", &color);  gtk_widget_modify_fg (label3, GTK_STATE_NORMAL, &color);     hbox = gtk_hbox_new(FALSE,0);  hbox2 = gtk_hbox_new(FALSE,0);  hbox3 = gtk_hbox_new(FALSE,0);  hbox4 = gtk_hbox_new(FALSE,0);   gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5);     gtk_box_pack_start(GTK_BOX(vbox),hbox, TRUE, TRUE, 0);     gtk_box_pack_start(GTK_BOX(hbox), text_entry, TRUE, TRUE, 4);  gtk_widget_show(text_entry);   gtk_box_pack_start(GTK_BOX(hbox),button_clear1, FALSE, FALSE, 0);     gtk_box_pack_start(GTK_BOX(vbox), label2, FALSE, FALSE, 5);   gtk_box_pack_start(GTK_BOX(vbox),hbox2, TRUE, TRUE, 0);   gtk_box_pack_start(GTK_BOX(hbox2), saveToDir, TRUE, TRUE, 4);  gtk_box_pack_start(GTK_BOX(hbox2),button_clear2, FALSE, FALSE, 0);     gtk_box_pack_start(GTK_BOX(vbox), chdir_button, FALSE, FALSE, 10);  gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 10);        adj = (GtkAdjustment*)gtk_adjustment_new(0, 0, 100, 0, 0, 0);  Bar = gtk_progress_bar_new_with_adjustment(adj);  gtk_progress_set_format_string (GTK_PROGRESS (Bar),"%p%%");  gtk_progress_set_show_text (GTK_PROGRESS (Bar),TRUE);  gtk_box_pack_start(GTK_BOX(vbox), Bar, FALSE, FALSE, 10);   gtk_box_pack_start(GTK_BOX(vbox), label_percent, FALSE, FALSE, 0);   gtk_box_pack_start(GTK_BOX(vbox), check_button, FALSE, FALSE, 3);   gtk_box_pack_start(GTK_BOX(vbox),hbox3, TRUE, TRUE, 0);   gtk_box_pack_start(GTK_BOX(vbox),hbox4, TRUE, TRUE, 0);   gtk_box_pack_start(GTK_BOX(hbox3), radio1, FALSE, FALSE, 16);   gtk_box_pack_start(GTK_BOX(hbox4), radio2, FALSE, FALSE, 16);     gtk_box_pack_start(GTK_BOX(vbox), label3, FALSE, FALSE, 10);      gtk_window_set_resizable (GTK_WINDOW (window), FALSE);   gtk_window_set_title(GTK_WINDOW(window), "U2B Downloader");  gtk_container_set_border_width(GTK_CONTAINER(window), 15);    gtk_widget_set_sensitive(radio1, FALSE);  gtk_widget_set_sensitive(radio2, FALSE);       gtk_signal_connect(GTK_OBJECT(window),                     "delete_event",                     GTK_SIGNAL_FUNC(delete_event_cb),                     NULL);     gtk_signal_connect(GTK_OBJECT (radio2),                             "toggled",                               GTK_SIGNAL_FUNC (toggle_radio_button),                                 NULL);         gtk_signal_connect(GTK_OBJECT(window),                           "focus_out_event",                           G_CALLBACK(focus_event_cb),                                           NULL);                gtk_signal_connect(GTK_OBJECT(window),                           "focus_in_event",                           GTK_SIGNAL_FUNC(focusin_event_cb),                                           NULL);                 gtk_signal_connect(GTK_OBJECT(window),                     "unmap_event",                     GTK_SIGNAL_FUNC(unmap_event_cb),                                     NULL);    gtk_signal_connect(GTK_OBJECT(window),                     "map_event",                     GTK_SIGNAL_FUNC(unmap_event_cb),                                     NULL);    gtk_signal_connect(GTK_OBJECT(button),                     "clicked",                     GTK_SIGNAL_FUNC(button_click_cb),                     NULL);    gtk_signal_connect(GTK_OBJECT(button_clear2),                     "clicked",                     GTK_SIGNAL_FUNC(button_chdir_clear_cb),                                     NULL);    gtk_signal_connect(GTK_OBJECT(button_clear1),                     "clicked",                     GTK_SIGNAL_FUNC(button_link_clear_cb),                                     NULL);    gtk_signal_connect(GTK_OBJECT(chdir_button),                     "clicked",                     GTK_SIGNAL_FUNC(create_file_selection),                                     NULL);  gtk_signal_connect (GTK_OBJECT (check_button), "toggled",                      GTK_SIGNAL_FUNC(togg), (gpointer *)check_button);      gtk_widget_show_all(window);  gtk_main();  return 0;}static void response_cb (GtkDialog *dialog, gint response_id){   if (response_id == GTK_RESPONSE_OK){      filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_selection_box));      gtk_entry_set_text(GTK_ENTRY(saveToDir), filename);   }}void create_file_selection(void) {   file_selection_box = gtk_file_chooser_dialog_new("Please select a directory.",                                            GTK_WINDOW(window),                                            GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,                                            NULL,NULL);      gtk_dialog_add_button (GTK_DIALOG (file_selection_box),                                      GTK_STOCK_OK,                                     GTK_RESPONSE_OK);              char * home = getenv("HOME");   if(home != NULL){      gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_selection_box),home);      gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(file_selection_box),home);    }    gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(file_selection_box), FALSE);   g_signal_connect (GTK_DIALOG (file_selection_box), "response", G_CALLBACK (response_cb), NULL);   gtk_dialog_run (GTK_DIALOG (file_selection_box));   gtk_widget_destroy (file_selection_box);}void toggle_radio_button( GtkWidget *widget){   if( GTK_TOGGLE_BUTTON( widget )->active )   {      dvd_quality = 1;   } else {      dvd_quality = 0 ;   }}static int convert = 0 ;void togg(GtkWidget *widget, gpointer *data){   if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data))){      convert = 1;      gtk_widget_set_sensitive(radio1, TRUE);      gtk_widget_set_sensitive(radio2, TRUE);   }   else{      convert = 0 ;      gtk_widget_set_sensitive(radio1, FALSE);      gtk_widget_set_sensitive(radio2, FALSE);   }}static gint focus_event_cb(GtkWidget* window, GdkEventAny* e, gpointer data){   mapped_window = 0;   return FALSE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -