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

📄 janela.c

📁 youtube的视频下载工具
💻 C
📖 第 1 页 / 共 2 页
字号:
static gint focusin_event_cb(GtkWidget* window, GdkEventAny* e, gpointer data){   mapped_window = 1;   gtk_window_set_title(GTK_WINDOW(window), "U2B Downloader");   return FALSE;}static gint unmap_event_cb(GtkWidget* window, GdkEventAny* e, gpointer data){   if( mapped_window ){       gtk_window_set_title(GTK_WINDOW(window), "U2B Downloader");   }    return TRUE;}static gint delete_event_cb(GtkWidget* window, GdkEventAny* e, gpointer data){   gtk_main_quit();   if(curl != NULL)     curl_easy_cleanup(curl);   exit(0);  return TRUE;}void * fecth_page(void * arg){   void ** ret = arg ;   const gchar* text1 = gtk_entry_get_text(GTK_ENTRY(text_entry));   *ret = (void*)find_url_to_download((char*)text1);   gtk_main_quit();   return NULL;}static void button_chdir_clear_cb(GtkWidget* w, gpointer data){   gtk_entry_set_text(GTK_ENTRY(saveToDir),""); }static void button_link_clear_cb(GtkWidget* w, gpointer data){   gtk_entry_set_text(GTK_ENTRY(text_entry),""); }void * convert_thread(void * arg){      char tmp[1024];      if(dvd_quality){         sprintf(tmp,"ffmpeg -y -i \"%s.flv\" -target ntsc-dvd -aspect 4:3 \"%s.mpg\"", (char*)arg, (char*)arg);      }      else{          sprintf(tmp,"ffmpeg -y -acodec mp2 -i \"%s.flv\" -ab 128 -ar 22050 -b 500 -s 320x240 \"%s.mpg\"",(char*)arg,(char*)arg);      }      int ret = system(tmp);      if(ret == 0)         ((char*)arg)[0] = 0 ;      gtk_main_quit();      return NULL;}static void button_click_cb(GtkWidget* w, gpointer data){   static int init = 0 ;      gtk_widget_set_sensitive(w,FALSE);   gtk_widget_set_sensitive(chdir_button, FALSE);   gtk_widget_set_sensitive(check_button,FALSE);   gtk_widget_set_sensitive(radio1, FALSE);   gtk_widget_set_sensitive(radio2, FALSE);   gtk_progress_set_value(GTK_PROGRESS(Bar), 0.0);     const gchar* text1 = gtk_entry_get_text(GTK_ENTRY(text_entry));  const gchar* text2 = gtk_entry_get_text(GTK_ENTRY(saveToDir));  if((text1 != NULL && text2 != NULL) &&       (strlen((const char*)text1) > 0 && strlen((const char*)text2)>0)){     char buf[1024];     char tmp[1024];     char *ptr = NULL;     FILE * fd = NULL;     char * url = NULL;         ptr =  match((const char *)text1,"^((http://)?(\\w+\\.)?youtube\\.com/watch\\\?v=)([0-9A-Za-z_-]+)([&/].*)?$");     if(ptr == NULL){        ptr =  match((const char *)text1, "(http://)?(www\\.)?metacafe\\.com/watch/([^/]+)/([^/]+/)?.*");        if(ptr == NULL){           open_dialog("\nwrong url format! check it.",GTK_MESSAGE_WARNING);           return ;        }     }     free(ptr);     strcpy(tmp,text2);     int size = strlen(tmp);     if(tmp[size-1] == '/')        tmp[size-1] = '\0';     if(strstr(tmp,".flv") == NULL){        DIR * dir = NULL;        if((dir = opendir(tmp)) == NULL){            strcat(tmp,".flv");        // file is not a directory, just attach .flv         }        else{           closedir(dir);           char tmp2[1024];           char term[32];           int i=0;                         strcpy(tmp2,tmp);           strcat(tmp,"/video.flv");           while((fd = fopen(tmp,"r")) != NULL){              fclose(fd);              sprintf(term,"/video(%d).flv",++i);              strcpy(tmp,tmp2);              strcat(tmp,term);           }        }     }            strcpy(buf,tmp);      char * r = rindex(tmp,'/');      if(r != NULL)         *r = '\0';     if(access(tmp,W_OK) != 0){        open_dialog("\nCan't open file to write.\nPermission denied.",GTK_MESSAGE_ERROR);        return ;     }          if( init == 0){        if (!g_thread_supported ())            g_thread_init (NULL);        gdk_threads_init ();        init = 1;     }         if (!g_thread_create(&fecth_page, (void*)&url, FALSE, NULL) != 0){        gtk_label_set_text(( GtkLabel*)label_percent, " ");        open_dialog("\ncan't create the thread",GTK_MESSAGE_ERROR);        return ;     }     gtk_main();     if(url == NULL){        gtk_label_set_text(( GtkLabel*)label_percent, " ");        open_dialog("\nError fetching url.\n-Check the video link.\n-Check your internet connection.",GTK_MESSAGE_ERROR);     }     else{        int status = start_download(url, buf);        if(convert && status){           ptr = strstr(buf,".flv");           if(ptr != NULL)              *ptr = '\0';                  if (!g_thread_create(&convert_thread, &(buf[0]), FALSE, NULL) != 0){              gtk_label_set_text(( GtkLabel*)label_percent, " ");              open_dialog("\ncan't create the thread",GTK_MESSAGE_ERROR);              return ;           }           gtk_main();           if(buf[0] == 0)              open_dialog("\nThe operation was a success!",GTK_MESSAGE_INFO);           else              open_dialog("\nError: conversion failed!",GTK_MESSAGE_ERROR);        }        else if(status){           open_dialog("\nThe operation was a success!",GTK_MESSAGE_INFO);        }        gtk_label_set_text(( GtkLabel*)label_percent, "Done." );     }  }  else{      open_dialog("\nYou should fill both fields.", GTK_MESSAGE_WARNING);  }}void open_dialog(char * msg, GtkMessageType type){    GtkWidget *dialog;       /* Create the widgets */   dialog = gtk_message_dialog_new(GTK_WINDOW(window),                                   GTK_DIALOG_DESTROY_WITH_PARENT,                                   type,                                   GTK_BUTTONS_OK,                                   "%s",                                   msg);      gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);   gtk_dialog_run (GTK_DIALOG (dialog));   gtk_widget_destroy (dialog);   gtk_widget_set_sensitive(button, TRUE);   gtk_widget_set_sensitive(chdir_button, TRUE);   gtk_widget_set_sensitive(check_button,TRUE);   if(convert){      gtk_widget_set_sensitive(radio1, TRUE);      gtk_widget_set_sensitive(radio2, TRUE);   }}size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream){   return fwrite(ptr, size, nmemb, stream);}  size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream){   return fread(ptr, size, nmemb, stream);}  int my_progress_func(GtkWidget *Bar,                       double t, /* dltotal */                       double d, /* dlnow */                       double ultotal,                       double ulnow){   /*  printf("%d / %d (%g %%)\n", d, t, d*100.0/t);*/   static char value[64];      if((int)(d*100.0/t) >= 0){      gdk_threads_enter();     sprintf(value,"%.1f KB of %.1f KB",d/1024,t/1024);      gtk_label_set_text(( GtkLabel*)label_percent, value );     if( !mapped_window ){        sprintf(value,"%d%% - U2B Downloader",(int)(d*100.0/t));         gtk_window_set_title(GTK_WINDOW(window), value);     }     else{        gtk_window_set_title(GTK_WINDOW(window), "U2B Downloader");     }     if( ((int)(d*100.0/t) == 100) && convert ){        gtk_label_set_text(( GtkLabel*)label_percent, "Converting... wait." );     }     gtk_progress_set_value(GTK_PROGRESS(Bar), d*100.0/t);     gdk_threads_leave();       }      return 0;}void *my_thread(void *ptr){   CURLcode res;   FILE *outfile;   stThread_info * info = (stThread_info*)ptr ;   gchar *url = info->url;   info->ret = NULL ;   char * filename = info->filename ;   curl = curl_easy_init();   if(curl)   {      outfile = fopen(filename, "w");      if(outfile == NULL){         curl_easy_cleanup(curl);         info->ret = strerror(errno);         gtk_main_quit();         return NULL;       }            curl_easy_setopt(curl, CURLOPT_URL, url);      curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);      curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);      curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);      curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);      curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);      curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);         res = curl_easy_perform(curl);         if (res) {         fclose(outfile);         if(curl != NULL)            curl_easy_cleanup(curl);         curl = NULL;         gtk_main_quit();         return NULL;      }      fclose(outfile);      /* always cleanup */      if(curl != NULL)        curl_easy_cleanup(curl);      curl = NULL;   }   gtk_main_quit();   return NULL;}int start_download(char * url, char * filename){   stThread_info info ;   info.url = url ;   info.filename = filename ;   printf("url=%s\n",url);   if (!g_thread_create(&my_thread, (void*)&info, FALSE, NULL) != 0){      open_dialog("\nError: can't create thread!",GTK_MESSAGE_ERROR);      return 0;   }   // g_thread_set_priority(thread,G_THREAD_PRIORITY_HIGH);      gtk_main();      if(info.ret != NULL){      open_dialog(info.ret,GTK_MESSAGE_ERROR);      return 0;   }   return 1;}

⌨️ 快捷键说明

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