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

📄 downloads.c

📁 linux下的飞鸽传书 日本人设计 使用非常方便
💻 C
📖 第 1 页 / 共 3 页
字号:
  g_object_set(renderer, "value", persent, NULL);  g_object_set(renderer, "text", size_string, NULL);}static intsetup_download_view(GtkTreeView *view,GList *dlist) {  GList *node;  GtkTreeModel *model;  GtkListStore        *liststore;  GtkTreeViewColumn   *col;  GtkCellRenderer     *renderer;  if ( (!view) || (!dlist) )    return -EINVAL;  liststore = gtk_list_store_new(7, 				 G_TYPE_INT,				 G_TYPE_STRING,				 G_TYPE_UINT,				 G_TYPE_UINT,				 G_TYPE_INT,				 G_TYPE_INT,				 G_TYPE_STRING);  g_assert(liststore);    gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(liststore));  g_object_unref(liststore); /* bind to view */  /*   * タイトル設定   */  /* --- Column #1 --- */  col = gtk_tree_view_column_new();  gtk_tree_view_column_set_title(col, _("FileID"));  /* pack tree view column into tree view */  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);  renderer = gtk_cell_renderer_text_new();  /* pack cell renderer into tree view column */  gtk_tree_view_column_pack_start(col, renderer, TRUE);  /* connect 'text' property of the cell renderer to   *  model column that contains the id */  gtk_tree_view_column_add_attribute(col, renderer, "text", DOWNLOAD_FILEID_NUM);  gtk_tree_view_column_set_resizable (col,TRUE);  /* --- Column #2 --- */  col = gtk_tree_view_column_new();  gtk_tree_view_column_set_title(col, _("FileType"));  /* pack tree view column into tree view */  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);  renderer = gtk_cell_renderer_text_new();  /* pack cell renderer into tree view column */  gtk_tree_view_column_pack_start(col, renderer, TRUE);  /* connect 'text' property of the cell renderer to   *  model column that contains the file type */  gtk_tree_view_column_add_attribute(col, renderer, "text", DOWNLOAD_FILETYPE_NUM);  gtk_tree_view_column_set_resizable (col,TRUE);  /* --- Column #3 --- */  col = gtk_tree_view_column_new();  gtk_tree_view_column_set_title(col, _("FileName"));  /* pack tree view column into tree view */  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);  renderer = gtk_cell_renderer_text_new();  /* pack cell renderer into tree view column */  gtk_tree_view_column_pack_start(col, renderer, TRUE);  /* connect 'text' property of the cell renderer to   *  model column that contains the file name */  gtk_tree_view_column_add_attribute(col, renderer, "text", DOWNLOAD_FILENAME_NUM);  gtk_tree_view_column_set_resizable (col,TRUE);  /* --- Column #3 --- */  col = gtk_tree_view_column_new();  gtk_tree_view_column_set_title(col, _("Recv Size"));  /* pack tree view column into tree view */  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);  renderer = gtk_cell_renderer_text_new();  /* pack cell renderer into tree view column */  gtk_tree_view_column_pack_start(col, renderer, TRUE);  /* connect 'text' property of the cell renderer to   *  model column that contains the recv size */  gtk_tree_view_column_add_attribute(col, renderer, "text", DOWNLOAD_RECVSIZE_NUM);  gtk_tree_view_column_set_resizable (col,TRUE);  /* --- Column #4 --- */  col = gtk_tree_view_column_new();  gtk_tree_view_column_set_title(col, _("FileSize"));  /* pack tree view column into tree view */  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);  renderer = gtk_cell_renderer_text_new();  /* pack cell renderer into tree view column */  gtk_tree_view_column_pack_start(col, renderer, TRUE);  /* connect 'text' property of the cell renderer to   *  model column that contains the file size */  gtk_tree_view_column_add_attribute(col, renderer, "text", DOWNLOAD_FILESIZE_NUM);  gtk_tree_view_column_set_resizable (col,TRUE);  /* --- Column #5 --- */  col = gtk_tree_view_column_new();  gtk_tree_view_column_set_title(col, _("Progress"));  /* pack tree view column into tree view */  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);  renderer = gtk_cell_renderer_progress_new ();  /* pack cell renderer into tree view column */  gtk_tree_view_column_pack_start(col, renderer, TRUE);  /* connect 'text' property of the cell renderer to   *  model column that contains the progress */  gtk_tree_view_column_add_attribute(col, renderer, "text", DOWNLOAD_PROGRESS_NUM);  gtk_tree_view_column_set_cell_data_func(col, renderer, progress_cell_data_func, GTK_TREE_VIEW(view), NULL);  gtk_tree_view_column_set_resizable (col,TRUE);      for(node=g_list_first (dlist);node;node=g_list_next(node)) {      GtkTreeIter   newrow;      download_file_block_t  *element = node->data;      gchar *filename=NULL;      dbg_out("add view:%d,%s,%d\n",element->fileid,element->filename,element->size);      model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));      gtk_list_store_append(GTK_LIST_STORE(model), &newrow);      if (!convert_string_internal(element->filename,(const gchar **)&filename)) {	gtk_list_store_set(GTK_LIST_STORE(model), &newrow, 			   DOWNLOAD_FILEID_NUM, element->fileid, 			   DOWNLOAD_FILENAME_NUM, filename, 			   DOWNLOAD_RECVSIZE_NUM, 0,			   DOWNLOAD_FILESIZE_NUM, element->size,			   DOWNLOAD_PROGRESS_NUM, 0,			   DOWNLOAD_FILEATTR_NUM, element->ipmsg_fattr,			   DOWNLOAD_FILETYPE_NUM, get_file_type_name(element->ipmsg_fattr),			   -1);	g_free(filename);      }  }  gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)),			      GTK_SELECTION_MULTIPLE );    return 0;}/* end static *//* begin public */int internal_create_download_window(GtkWidget *recvWin,GtkWidget **window){  GtkWidget *new_window;  GtkWidget *view;  ipmsg_recvmsg_private_t *new_sender;  ipmsg_recvmsg_private_t *sender_info;  ipmsg_private_data_t *recv_priv;  ipmsg_private_data_t *new_priv;  GtkWidget *entry;  char cwd[PATH_MAX];  GList *downloads=NULL;  if ( (!recvWin) && (!window) )    return -EINVAL;  dbg_out("here\n");  if (getcwd(cwd,PATH_MAX)<0)    cwd[0]='\0';  else    cwd[PATH_MAX-1]='\0';  recv_priv=(ipmsg_private_data_t *)lookup_widget(GTK_WIDGET(recvWin),"senderInfo");  g_assert(recv_priv);  sender_info=recv_priv->data;   g_assert( (sender_info->ipaddr) && (sender_info->ext_part) );  g_assert(!init_recvmsg_private(sender_info->ipaddr,sender_info->flags,sender_info->pktno,&new_priv));  g_assert((new_priv) && (new_priv->data));  new_sender=(ipmsg_recvmsg_private_t *)new_priv->data;  dbg_out("new_priv:%x new_priv->ext_part:%x\n",	  (unsigned int)new_priv,	  (unsigned int)new_sender->ext_part);  g_assert((new_sender) && (!(new_sender->ext_part)));  new_sender->ext_part=strdup(sender_info->ext_part);  if (!(new_sender->ext_part)) {    destroy_ipmsg_private(new_priv);    return -ENOMEM;  }  g_assert(!parse_download_string(sender_info->ext_part, &downloads));      if (!downloads)    return -ENOENT;  new_window=GTK_WIDGET(create_downloadWindow ());  g_assert(new_window);  dbg_out("Hook private:%x\n",(unsigned int)&new_priv);  IPMSG_HOOKUP_DATA(new_window,new_priv,"senderInfo"); /* pktid用  */  view=lookup_widget(GTK_WIDGET(new_window),"DownLoadFileTree");  g_assert(view);  setup_download_view(GTK_TREE_VIEW(view),downloads);  entry=lookup_widget(new_window,"DownLoadDirectoryEntry");  gtk_entry_set_text(GTK_ENTRY(entry),cwd);   *window=new_window;    return 0;}intdownload_dir_open_operation(const char *dir){  GtkWidget *dialog=create_downloadOpenDirOnlydialog();  GtkWidget *dir_label;  gint result;  gchar *dir_url;  gchar buffer[1024];  int rc;  if (!dir)    return -EINVAL;  dir_url=gnome_vfs_get_uri_from_local_path(dir);  if (!dir_url)    return -EINVAL;  dir_label=lookup_widget(dialog,"downloadOpenDirNameLabel");  g_assert(dir_label);  snprintf(buffer,1023,"%s : %s",_("Directory"),dir);  buffer[1023]='\0';  gtk_label_set_text(GTK_LABEL(dir_label),buffer);  result=gtk_dialog_run (GTK_DIALOG (dialog));      switch (result) {  case GTK_RESPONSE_OK:    dbg_out("Accept for directory\n");    break;  case GTK_RESPONSE_CANCEL:  default:    dbg_out("response:%d cancel\n",result);    goto err_out;    break;  }  rc=gnome_vfs_url_show(dir_url);  if ( rc != GNOME_VFS_OK)    rc=-rc;  else    rc=0;   err_out:  gtk_widget_destroy (dialog);  g_free(dir_url);  return rc;}intdownload_file_ok_operation(const char *file,const char *filepath,size_t size,const char *dir){  GtkWidget *dialog=create_DownloadConfirmDialog();  GtkWidget *file_label;  GtkWidget *size_label;  GtkWidget *app_label;  GtkWidget *exec_btn;  GtkWidget *dir_btn;  char buff[1024];  gint result;  gchar *url;  gchar *file_url;  gchar *dir_url;  gchar *utf8_fname;  char *mime_type;  GnomeVFSMimeApplication *app;  int rc=-EINVAL;  int exec_ok;  if ( (!file) || (!filepath) || (!dir) )    return -EINVAL;  dbg_out("Post down load opetation filepath:%s dir:%s\n",filepath,dir);  g_assert(dialog);  file_label=GTK_WIDGET(lookup_widget(dialog,"DownLoadCompleteFileLabel"));  size_label=GTK_WIDGET(lookup_widget(dialog,"DownLoadConfirmFileSizeLabel"));  app_label=GTK_WIDGET(lookup_widget(dialog,"DownLoadConfirmAppLabel"));  exec_btn=GTK_WIDGET(lookup_widget(dialog,"DownLoadConfirmExec"));  dir_btn=GTK_WIDGET(lookup_widget(dialog,"DownLoadConfirmOpen"));  g_assert(file_label);  g_assert(size_label);  g_assert(app_label);  g_assert(exec_btn);  g_assert(dir_btn);  buff[1023]='\0';  snprintf(buff,1023,"%s : %s",_("Downloaded File"),file);  gtk_label_set_text(GTK_LABEL(file_label),buff);  snprintf(buff,1023,"%s : %d (%d KB)",_("Downloaded Size"),size,(size/1024));  gtk_label_set_text(GTK_LABEL(size_label),buff);  file_url=gnome_vfs_get_uri_from_local_path(filepath);  if (!file_url)    return -EINVAL;  dir_url=gnome_vfs_get_uri_from_local_path(dir);  if (!dir_url)    goto free_url_out;  mime_type=gnome_vfs_get_mime_type(file_url);  if (mime_type) {    app=gnome_vfs_mime_get_default_application_for_uri(file_url,mime_type);    if (app){      snprintf(buff,1023,"%s : %s",_("Helper Application"),gnome_vfs_mime_application_get_name(app));      gnome_vfs_mime_application_free(app);    }else{      snprintf(buff,1023,"%s : %s",_("Helper Application"),_("Undefined"));      exec_ok=0;      gtk_widget_set_sensitive(exec_btn, FALSE);    }    g_free(mime_type);  }  gtk_label_set_text(GTK_LABEL(app_label),buff);    mime_type=gnome_vfs_get_mime_type(dir_url);  if (mime_type) {    app=gnome_vfs_mime_get_default_application_for_uri(dir_url,mime_type);    if (!app)      gtk_widget_set_sensitive(dir_btn, FALSE);    gnome_vfs_mime_application_free(app);    g_free(mime_type);  }  result=gtk_dialog_run (GTK_DIALOG (dialog));  switch (result) {  case GTK_RESPONSE_OK:    dbg_out("Accept for directory\n");    url=dir_url;    break;  case GTK_RESPONSE_ACCEPT:    dbg_out("Accept for exec\n");    url=file_url;    break;  case GTK_RESPONSE_CLOSE:  default:    dbg_out("response:%d close\n",result);    gtk_widget_destroy (dialog);    rc=-ENOENT;    goto free_dir_url_out;    break;  }  gtk_widget_destroy (dialog);  rc=gnome_vfs_url_show(url);  if ( rc != GNOME_VFS_OK)    rc=-rc;  else    rc=0; free_dir_url_out:  g_free(dir_url); free_url_out:  g_free(file_url); no_free_out:  return rc;}intdownload_file_failed_operation(const char *filepath,const char *basename){  GtkWidget *dialog=create_downLoadFailDialog ();  GtkWidget *flabel;  gint result;  int rc;  if (!dialog) {    err_out("Can not create dialog\n");    return -ENOMEM;  }  flabel=lookup_widget(dialog,"downLoadFailFileLabel");  g_assert(flabel);  if (basename)    gtk_label_set_text(GTK_LABEL(flabel),basename);  else    gtk_label_set_text(GTK_LABEL(flabel),_("UnKnown"));  rc=0;  result=gtk_dialog_run (GTK_DIALOG (dialog));  switch (result) {  case GTK_RESPONSE_OK:    dbg_out("response:%d ok\n",result);    rc=-EAGAIN;    break;  case GTK_RESPONSE_CANCEL:  default:    dbg_out("response:%d cancel\n",result);    if (filepath) {    dbg_out("remove:%s\n",filepath);      unlink(filepath);    }    break;  }  gtk_widget_destroy (dialog);  return rc;}intpost_download_operation(int code,const char *filepath,size_t size,size_t all_size,const char *dir,gboolean exec){  int rc;  char *file;    if ( (!filepath) || (!dir) )    return -EINVAL;  file=g_path_get_basename(filepath);  if (!file)    return -ENOMEM;  if ( (exec) && (!code) && (size == all_size) ) {    rc=download_file_ok_operation(file,filepath,size,dir);  }  else {    if ( (code) && (code != -EFAULT) )      rc=download_file_failed_operation(filepath,file);  }  g_free(file);  return rc;}intdownload_overwrite_confirm_generic(const char *filepath){  GtkWidget *dialog=create_ipmsgDownloadOverWrite ();  GtkWidget *label;  gint result;  if (!filepath)    return -EINVAL;  g_assert(dialog);  label=GTK_WIDGET(lookup_widget(dialog,"overwriteFileNameLabel"));  gtk_label_set_text(GTK_LABEL(label),filepath);  result=gtk_dialog_run (GTK_DIALOG (dialog));  switch (result) {  case GTK_RESPONSE_OK:    dbg_out("Accept for overwrite\n");    break;  default:    return -ENOENT;    break;  }  err_out("Can not open file:%s (%d)\n",strerror(errno),errno);  gtk_widget_destroy (dialog);  return 0;  }intdo_download_regular_file(tcp_con_t *con, const char *filepath,size_t file_size,size_t *written,GtkTreeModel *model,GtkTreeIter *iter){  int rc;  int fd;  char *buff=NULL;  ssize_t recv_len;  ssize_t write_len;  size_t total_write=0;  ssize_t file_remains;  int wait_max=TCP_DOWNLOAD_RETRY;

⌨️ 快捷键说明

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