📄 message-fun.c
字号:
#if DEBUG > 5 printf( "in mesage_get_reply_quoted()\n" ) ;#endif headinfo = 0 ; body=message_load (folder_seek (folder_seek_by_name (msg->rfolder)), msg); if (tm_globs->flags&SHOW_SOME_HEADER) { headinfo=SHOW_SOME_HEADER; } else if (tm_globs->flags&SHOW_ALL_HEADER) { headinfo=SHOW_ALL_HEADER; } tm_globs->flags&=~SHOW_SOME_HEADER; tm_globs->flags&=~SHOW_ALL_HEADER; att=(Attachment *)calloc (1, sizeof (Attachment)); att->name=strdup ("dummyatt"); /* Before we MIME process it, pull out some header values */ info = parse_header( body ) ; body_processed=mime_process (body, att, 0); free( body ) ; /* Now, parse the fromm field to get it's parts */ parse_from_line( info -> from, &email, &first, &last ) ; /* Insert our he said, she said string. */ body_ret = insert_reply_indicator( body_processed ) ; free( body_processed ) ; /* Now, place in a fancy retort for the quoted reply */ if (!body_ret) body_ret = strdup(""); if (!first) first = strdup(""); if (!last) last = strdup(""); if (!email) email = strdup(""); if (!info->subject) info->subject = strdup(""); newMsgLen = strlen(body_ret) + strlen(qvar) + strlen (info->date) + strlen (info->from) + 1; newMsg = malloc( newMsgLen ) ; snprintf( newMsg, newMsgLen-1, qvar, info->date, info->from, body_ret ) ; free( body_ret ) ; body_ret = newMsg ; if( first ) free( first ) ; if( last ) free( last ) ; if( email ) free( email ) ; destroy_hinfo( info ) ; tm_globs->flags|=headinfo; return body_ret;}char *message_get_reply_quoted_stream (char *body) { int headinfo ; char *newMsg ; int newMsgLen ; Attachment *att ; Header_Info *info ; char *email, *first, *last ; char *body_processed, *body_ret ; const char qvar[] = "\n\nOn %s, %s wrote:\n%s" ; headinfo = 0 ;#if DEBUG > 5 printf( "in mesage_get_reply_quoted_stream()\n" ) ;#endif if (tm_globs->flags&SHOW_SOME_HEADER) { headinfo=SHOW_SOME_HEADER; } else if (tm_globs->flags&SHOW_ALL_HEADER) { headinfo=SHOW_ALL_HEADER; } tm_globs->flags&=~SHOW_SOME_HEADER; tm_globs->flags&=~SHOW_ALL_HEADER; att=(Attachment *)calloc (1, sizeof (Attachment)); att->name=strdup ("dummyatt"); /* Before we MIME process it, pull out some header values */ info = parse_header( body ) ; body_processed=mime_process (body, att, 0); /* Insert our he said, she said string. */ body_ret = insert_reply_indicator( body_processed ) ; free( body_processed ) ; /* Now, parse the fromm field to get it's parts */ parse_from_line( info -> from, &email, &first, &last ) ; /* Now, place in a fancy retort for the quoted reply */ if (!body_ret) body_ret = strdup(""); if (!first) first = strdup(""); if (!last) last = strdup(""); if (!email) email = strdup(""); if (!info->subject) info->subject = strdup(""); newMsgLen = strlen(body_ret) + strlen(qvar) + strlen (info->date) + strlen (info->from) + 1; newMsg = malloc( newMsgLen ) ; snprintf( newMsg, newMsgLen-1, qvar, info->date, info->from, body_ret ) ; free( body_ret ) ; body_ret = newMsg ; if( first ) free( first ) ; if( last ) free( last ) ; if( email ) free( email ) ; destroy_hinfo( info ) ; tm_globs->flags|=headinfo; return body_ret;}void message_transpose_folders (Folder *fl) { GList *seek=message_get_selection (); GtkWidget *clist=lookup_widget (tm_globs->main_window, "message_clist"); GtkCTree *folder_ctree=GTK_CTREE (lookup_widget (tm_globs->main_window, "folder_tree")); Folder *rfolder; msg_info *info; Message *msg; char *number=(char *)calloc (20, sizeof (char)); int row; if (!seek) return; if (fl) { gtk_clist_freeze (GTK_CLIST (clist)); while (seek) { info=seek->data; if (info) { msg=info->msg; if (msg->folder) { rfolder=folder_seek (folder_seek_by_name (msg->folder)); } else { rfolder=folder_seek (folder_seek_by_name (msg->rfolder)); } rfolder->total--; fl->total++; if (msg->flags & MESSAGE_UNREAD) { rfolder->unread--; fl->unread++; } snprintf (number, 5, "%d", fl->unread); gtk_ctree_node_set_text (folder_ctree, fl->tree_item, 1, number); snprintf (number, 5, "%d", fl->total); gtk_ctree_node_set_text (folder_ctree, fl->tree_item, 2, number); snprintf (number, 5, "%d", rfolder->unread); gtk_ctree_node_set_text (folder_ctree, rfolder->tree_item, 1, number); snprintf (number, 5, "%d", rfolder->total); gtk_ctree_node_set_text (folder_ctree, rfolder->tree_item, 2, number); if (msg->folder) free (msg->folder); msg->folder=strdup (fl->name); } seek=seek->next; } seek=message_get_selection (); while (seek) { info=seek->data; row=gtk_clist_find_row_from_data (GTK_CLIST (clist), seek->data); seek=seek->next; gtk_clist_remove (GTK_CLIST (clist), row); } gtk_clist_thaw (GTK_CLIST (clist)); message_clist_reset_shading (clist); } message_selection_null (); free (number);}void hinfo_destroy (Header_Info *hinfo) { if (hinfo) { if (hinfo->from) free (hinfo->from); if (hinfo->to) free (hinfo->to); if (hinfo->cc) free (hinfo->cc); if (hinfo->subject) free (hinfo->subject); if (hinfo->date) free (hinfo->date); if (hinfo->priority) free (hinfo->priority); if (hinfo->replyto) free (hinfo->replyto); if (hinfo->sensitivity) free (hinfo->sensitivity); if (hinfo->expiry) free (hinfo->expiry); if (hinfo->replyby) free (hinfo->replyby); if (hinfo->keywords) free (hinfo->keywords); if (hinfo->content_type) free (hinfo->content_type); if (hinfo->content_t_e) free (hinfo->content_t_e); if (hinfo->content_d) free (hinfo->content_d); if (hinfo->uidl) free (hinfo->uidl); if (hinfo->mid) free (hinfo->mid); free (hinfo); }}char *message_fix_for_send (char *string) { char *ret=(char *)calloc (strlen (string)*2, sizeof(char)); char *tmps1=NULL; char *tmps2=NULL; char *tmps3=NULL; CNSS *ss=(CNSS *)calloc(1, sizeof(CNSS)); CNSS *ss2=(CNSS *)calloc(1, sizeof(CNSS)); tmps1=add_cr(string); ss->str=tmps1; ss->len=strlen (tmps1); ss->pos=0; ss2->str=ret; ss2->len=strlen (string)*2; ss2->pos=0; while ((tmps2=getnl_rfc822(ss))!=NULL) { if (tmps2[0]=='.') { tmps3=(char *)calloc (strlen (tmps2)+4, sizeof(char)); tmps3[0]='.'; memmove (tmps3+1, tmps2, strlen (tmps2)); free (tmps2); tmps2=tmps3; tmps3=NULL; } putnline (ss2, tmps2); free (tmps2); } ss->str=NULL; free (ss); ss2->str=NULL; free (ss2); free (tmps1); return ret;}/* * Walk through all messages looking for a matching * UIDL and/or msgID. Remember, msgID doesn't have * to be unique. * msgID can optionally be NULL as input. * Return Zero (0) on no match, 1 if uidl matches, and * two if uidl and msgID match. */intindex_find_uidl( const char *uidl, const char *msgID ){ int retValue; Message *mseek; Folder *folder; GList *fseek; char *msg; Header_Info *hinfo; retValue = 0; /* Make sure we have a UIDL to work with */ if(uidl) { /* Since we have a UIDL that we are looking for, walk through all indexes */ for (fseek = folder_create_glist (); fseek; fseek = fseek->next) { folder = folder_seek (folder_seek_by_name (fseek->data)); for (mseek = folder->msglst; mseek; mseek = mseek->next) { if (mseek->uidl) { if (strncmp(mseek->uidl,uidl,strlen(uidl)-4)==0) { retValue = 1; if (msgID) { msg = message_load (folder_seek (folder_seek_by_name (mseek->rfolder)), mseek); hinfo = parse_header (msg); if (strcmp(hinfo->mid,msgID)==0) retValue = 2; free (msg); destroy_hinfo (hinfo); } } } if (retValue) break; } if (retValue) break; } } return retValue;}char*find_message_uidl(char *msg){ char *tmp = NULL; if (msg) { tmp = strstr (msg, "X-UIDL:"); if (tmp) { tmp += 7; while (*(++tmp) == ' '); } } return tmp;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -