📄 main-window-callbacks.c
字号:
GTK_CLIST (clist)->sort_type=GTK_SORT_DESCENDING; } else { GTK_CLIST (clist)->sort_type=GTK_SORT_ASCENDING; } gtk_clist_freeze (GTK_CLIST(clist)); gtk_clist_set_sort_column (GTK_CLIST(clist), column);#if 1 if((column==4)||(column==5)) gtk_clist_set_compare_func (GTK_CLIST (clist), (GtkCListCompareFunc) new_clist_sort_func); else gtk_clist_set_compare_func (GTK_CLIST (clist), (GtkCListCompareFunc) NULL);#endif gtk_clist_sort (GTK_CLIST (clist)); message_clist_reset_shading (clist); gtk_clist_thaw (GTK_CLIST (clist));}char *parsedate(char *date) { char *text[7] = {NULL}; char *timebuf = NULL; char *buffer = NULL; int add, month; char *cs; add = 0; text[0] = cut_string(date, ' ', 1, 1); if (!isdigit(*text[0])) add = 1; if (add) { cs = cut_string(date, ' ', 1, 2); text[0] = cut_string(cs,' ',2,1); free (cs); } else { text[0] = cut_string(date, ' ', 1, 1); } cs = cut_string(date, ' ', 1, 2+add); text[1] = cut_string(cs,' ',2,1+add); // month free (cs); cs = cut_string(date, ' ', 1, 3+add); text[2] = cut_string(cs,' ',2,2+add); // year free (cs); cs = cut_string(date, ' ', 1, 4+add); timebuf = cut_string(cs,' ',2,3+add); // time free (cs); text[3] = cut_string(timebuf, ':', 1, 1); // hour cs = cut_string(timebuf, ':', 1, 2); text[4] = cut_string(cs,':',2,1); // minute free (cs); text[5] = cut_string(timebuf, ':', 2, 2); // day text[6] = cut_string(date, ' ', 2, 4+add); if((strncasecmp(text[1],"Jan",3)==0)) month=10; else if((strncasecmp(text[1],"Feb",3)==0)) month=11; else if((strncasecmp(text[1],"Mar",3)==0)) month=12; else if((strncasecmp(text[1],"Apr",3)==0)) month=13; else if((strncasecmp(text[1],"May",3)==0)) month=14; else if((strncasecmp(text[1],"Jun",3)==0)) month=15; else if((strncasecmp(text[1],"Jul",3)==0)) month=16; else if((strncasecmp(text[1],"Aug",3)==0)) month=17; else if((strncasecmp(text[1],"Sep",3)==0)) month=18; else if((strncasecmp(text[1],"Oct",3)==0)) month=19; else if((strncasecmp(text[1],"Nov",3)==0)) month=20; else if((strncasecmp(text[1],"Dec",3)==0)) month=21; else month=0; buffer=(char *)malloc(255*sizeof(char)); snprintf(buffer,255,"%s%d%s%s%s%s",text[2],month,text[0], text[3], text[4], text[5]); if (text[0]) free (text[0]); if (text[1]) free (text[1]); if (text[2]) free (text[2]); if (text[3]) free (text[3]); if (text[4]) free (text[4]); if (text[5]) free (text[5]); if (text[6]) free (text[6]); if (timebuf) free (timebuf); return buffer;}gint new_clist_sort_func (GtkCList *clist, gconstpointer *ptr1, gconstpointer *ptr2) { GtkCListRow *row1 = (GtkCListRow *) ptr1; GtkCListRow *row2 = (GtkCListRow *) ptr2; char *text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text; char *text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text; char *one, *two; int retval; if (!text2) return (text1 != NULL); if (!text1) return -1; one = parsedate(text1); two = parsedate(text2); if (!two) return (one != NULL); if (!one) return -1; retval = strcmp(one,two); if (one) free (one); if (two) free (two); return retval;}void message_resend (GtkWidget *widget, gpointer data) { Message *msg=(Message *)data; Header_Info *info; char *body, *header, *recipline; PopAccount *pop=seek_popaccount (seek_popaccount_by_name (tm_globs->default_account)); int length=0; if (!msg) { insert_error (_("Message was not sent successfully\n")); return; } body=message_load (folder_seek (folder_seek_by_name (msg->rfolder)), msg); header=message_load_head (folder_seek (folder_seek_by_name (msg->rfolder)), msg); info=parse_header (header); free (header); if (!info->to) { insert_error (_("Message has no To line and cannot be resent\n")); return; } length+=strlen (info->to); if (info->cc) length+=strlen (info->cc); if (info->bcc) length+=strlen (info->bcc); recipline=(char *)calloc (length+1, 1); sprintf (recipline, "%s", info->to); if (info->cc) sprintf (recipline, "%s,%s", recipline, info->cc); if (info->bcc) sprintf (recipline, "%s,%s", recipline, info->bcc); new_fork_send_message (pop, NULL, recipline);#if DEBUG printf( "I'm pretty sure this is currently broken!!!\n" ) ; printf( "I'm pretty sure this is currently broken!!!\n" ) ; printf( "I'm pretty sure this is currently broken!!!\n" ) ; printf( "I'm pretty sure this is currently broken!!!\n" ) ;#endif tm_globs->send_timeout=gtk_timeout_add (750, (GtkFunction)send_message_timeout, NULL); free (body); destroy_hinfo (info);}void clicked_on_attachment (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) { GtkCList *clist=GTK_CLIST (widget); Message *message=tm_globs->msg_selected; if (message) { char *tmpat, *msg, *retmsg; Attachment *att=gtk_clist_get_row_data (clist, row); Attachment *att2; if (!event) return; if ((event->type==5) && (event->button==1)) { if (!data) { msg=message_load (folder_seek (folder_seek_by_name (message->rfolder)), message); } else { msg=strdup((char *)data); } tmpat=mime_get_attachment (msg, att); att2=(Attachment *)calloc (1, sizeof (Attachment)); att2->name=strdup ("dummyatt"); retmsg=mime_process (tmpat, att2, 1); free (tmpat);/* att3=att2->next; free (att2->name); free (att2);*/ if ( (retmsg) && (retmsg[0]!='\0') ) { create_docsource_stream (strdup(retmsg)); free (retmsg); retmsg=NULL; } attachments_destroy (att2); if (msg) free (msg); if (retmsg) free (retmsg); } }}void clicked_on_attachment_event (GtkWidget *widget, GdkEventButton *event, gpointer data) { GtkWidget *popup; int row, column; Attachment *att; gtk_clist_get_selection_info (GTK_CLIST (widget), event->x, event->y, &row, &column); att=gtk_clist_get_row_data (GTK_CLIST (widget), row); if (row < GTK_CLIST (widget)->rows && row >= 0) { if (event->button==3) { gtk_clist_select_row (GTK_CLIST (widget), row, 0); popup=mime_popup_new (att); gtk_menu_popup (GTK_MENU (popup), NULL, NULL, NULL, NULL, 3, 0); } }}void attachment_save (GtkWidget *widget, gpointer data) { Message *msg=tm_globs->msg_selected; if(msg) { Attachment *att=(Attachment *)data; char *message; char *matt; message=message_load (folder_seek(folder_seek_by_name(msg->rfolder)), msg); matt=mime_get_attachment (message, att); if (message) free (message); message_save_body (NULL, (gpointer *)matt);// if (matt) free (matt); }}void attachment_view (GtkWidget *widget, gpointer data) { Message *msg=tm_globs->msg_selected; if (msg) { Attachment *att=(Attachment *)data; Attachment *att2=(Attachment *)calloc (1, sizeof(Attachment)); char *message=message_load (folder_seek(folder_seek_by_name(msg->rfolder)), msg); char *matt=mime_get_attachment (message, att); int hsize=message_hsize (matt); char *head=(char *)calloc(hsize+2, sizeof(char)); char *retmsg; char *tmpmsg; Header_Info *hinfo; memmove (head, matt, hsize); hinfo=parse_header (head); free (head); if (message) free (message); if (hinfo) { if (strncasecmp (hinfo->content_type, "message/rfc822", 14)==0) { tmpmsg=strdup(matt+hsize); message_window_new_stream (tmpmsg); } else if (strncasecmp (hinfo->content_type, "multipart/digest", 16)==0) { digest_window_create_stream (strdup(matt)); } else if (mime_handle (hinfo->content_type)==MIMEHANDLE_EXT) { message_use_ext_prog (NULL, strdup (matt)); } else { retmsg=mime_process (matt, att2, 1); if (retmsg[0]!='\0') create_docsource_stream (retmsg); } } if (matt) free (matt); free (att2); destroy_hinfo (hinfo); }}void attachment_view_source (GtkWidget *widget, gpointer data) { Message *msg=tm_globs->msg_selected; if(msg) { Attachment *att=(Attachment *)data; char *message=message_load (folder_seek(folder_seek_by_name(msg->rfolder)), msg); char *matt=mime_get_attachment (message, att); int hsize=message_hsize (matt); char *head=(char *)calloc(hsize+2, sizeof(char)); Header_Info *hinfo;#if DEBUG > 1 printf ("hsize=%d\n", hsize);#endif memmove (head, matt, hsize); hinfo=parse_header (head); free (head); if (message) free (message); if (hinfo) { create_docsource_stream (strdup(matt)); } if (matt) free (matt); destroy_hinfo (hinfo); }}void attachment_open_with (GtkWidget *widget, gpointer data) {// Message *msg=tm_globs->msg_selected;// Attachment *att=(Attachment *)data;#if DEBUG > 1 printf ("Viewing attachment with external progam\n");#endif}void message_print_stream (char *stream) { int fd; char *buf = (char *)malloc (2048 * sizeof (char)); char *message; int flags = tm_globs->flags; Attachment *att = (Attachment *) calloc (1, sizeof (Attachment)); g_return_if_fail (stream != NULL); att->mtype = strdup ("dummyatt"); tm_globs->flags &=~SHOW_ALL_HEADER; tm_globs->flags |=SHOW_SOME_HEADER; message = mime_process (stream, att, 0); tm_globs->flags = flags;#if DEBUG > 4 printf ("====== BEGIN printed message =======\n%s\n======= END printed message =======\n", message);#endif mkdir ("/tmp/tradeclient", S_IREAD | S_IWRITE | S_IEXEC); fd=open ("/tmp/tradeclient/print-tmp", O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR); if (fd<0) { perror ("Cannot open /tmp/tradeclient/print-tmp"); return; } write (fd, message, strlen (stream)); close (fd); snprintf(buf, 2048, "%s /tmp/tradeclient/print-tmp", tm_globs->printer); system (buf); if (message) free (message); if (att->mtype) free (att->mtype); if (att) free (att); free (buf); unlink ("/tmp/tradeclient/print-tmp");}void message_print (GtkWidget *widget, gpointer data) { Message *msg=tm_globs->msg_selected; Folder *fl; char *full_message; if (!msg) return; fl=folder_seek (folder_seek_by_name (msg->rfolder)); full_message=message_load (fl, msg); insert_message ("Printing Message ... "); message_print_stream (full_message); free (full_message); insert_message ("Done!\n");}#define getnaddr(p,ret,pos,tmps) tmps=strchr(p+pos, ',');\ if (tmps) {\ ret=(char *)calloc (tmps-(p+pos)+2, sizeof(char));\ memmove (ret, p+pos, tmps-(p+pos));\ pos+=tmps-(p+pos)+1;\ } else {\ ret=(char *)calloc (strlen (p+pos), sizeof(char));\ memmove (ret, p+pos, strlen (p+pos));\ pos+=strlen (p+pos);\ }void reply_to_all_stream (char *message) { int hsize; Header_Info *hinfo; char *tmp, *head; GtkWidget *window; GtkTree *tree; GtkWidget *body=NULL; GtkWidget *subject; GtkCList *clist2; char *cl_data[3]; RecipSignalData *recip ; ADDRESS *adrlist = NIL, *adrseek = NIL; char adrbuffer[4096]; AFS *afs; window=make_new_message_window (NULL, NULL); tree=GTK_TREE (lw (window, "recip_tree")); gtk_tree_clear_items (tree, 0, g_list_length (tree->children)); body=lookup_widget (window, "body_textbox"); // fixes your problems hsize=message_hsize (message); head=(char *)calloc (hsize+2, sizeof(char)); memmove (head, message, hsize); hinfo=parse_header (head); free (head); recip = calloc( 1, sizeof(RecipSignalData) ) ; if (!(tm_globs->flags & REPLY_NONE)) { if (tm_globs->flags & REPLY_QUOTED) { tmp=message_get_reply_quoted_stream (message); gtk_text_insert (GTK_TEXT (body), NULL, NULL, NULL, tmp, -1); free (tmp); } else { clist2=GTK_CLIST (lw (window, "attachment_clist")); afs=(AFS *)calloc (1, sizeof (AFS)); afs->data=strdup (message); afs->type=strdup ("message/rfc822"); cl_data[0]=strdup ("message/rfc822"); cl_data[1]=strdup ("Original Message"); cl_data[2]=(char *)calloc (20, sizeof (char)); snprintf (cl_data[2], 19, "%lu", (unsigned long)strlen (message));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -