?? downloads.c
字號:
fd=open(path_string,O_RDONLY); if (fd>0) { is_exist=TRUE; close(fd); persent=100; } } // dbg_out("transfer: %d/%d(%3d)\n",sent,size,persent); g_free(filename); output_out: if (persent<0) persent=0; if (persent>100) persent=100; snprintf(size_string,31,"%d %%",persent); size_string[31]='\0'; 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=g_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; }int
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -