📄 netfolders.c
字号:
GtkWidget *imapf_popup; GtkWidget *imapf_title; GtkWidget *imapf_sep; GtkWidget *new_folder; GtkWidget *delete_folder; GtkWidget *subscribe; GtkWidget *unsubscribe; imapf_popup = gtk_menu_new (); gtk_object_set_data (GTK_OBJECT (imapf_popup), "imapf_popup", imapf_popup); gtk_widget_show (imapf_popup); imapf_title = gtk_menu_item_new_with_label ("Folder Actions"); gtk_widget_ref (imapf_title); gtk_object_set_data_full (GTK_OBJECT (imapf_popup), "imapf_title", imapf_title, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapf_popup), imapf_title); gtk_widget_show (imapf_title); imapf_sep = gtk_menu_item_new (); gtk_widget_ref (imapf_sep); gtk_object_set_data_full (GTK_OBJECT (imapf_popup), "imapf_sep", imapf_sep, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapf_popup), imapf_sep); gtk_widget_show (imapf_sep); new_folder = gtk_menu_item_new_with_label ("New Folder..."); gtk_widget_ref (new_folder); gtk_object_set_data_full (GTK_OBJECT (imapf_popup), "new_folder", new_folder, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapf_popup), new_folder); gtk_widget_show (new_folder); delete_folder = gtk_menu_item_new_with_label ("Delete Folder..."); gtk_widget_ref (delete_folder); gtk_object_set_data_full (GTK_OBJECT (imapf_popup), "delete_folder", delete_folder, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapf_popup), delete_folder); gtk_widget_show (delete_folder); imapf_sep = gtk_menu_item_new (); gtk_widget_ref (imapf_sep); gtk_object_set_data_full (GTK_OBJECT (imapf_popup), "imapf_sep", imapf_sep, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapf_popup), imapf_sep); gtk_widget_show (imapf_sep); subscribe = gtk_menu_item_new_with_label ("Subscribe to..."); gtk_widget_ref (subscribe); gtk_object_set_data_full (GTK_OBJECT (imapf_popup), "subscribe", subscribe, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapf_popup), subscribe); gtk_widget_show (subscribe); unsubscribe = gtk_menu_item_new_with_label ("Unsubscribe..."); gtk_widget_ref (unsubscribe); gtk_object_set_data_full (GTK_OBJECT (imapf_popup), "unsubscribe", unsubscribe, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add (GTK_CONTAINER (imapf_popup), unsubscribe); gtk_widget_show (unsubscribe); gtk_signal_connect (GTK_OBJECT (new_folder), "activate", GTK_SIGNAL_FUNC (nf_imap_new_folder), NULL); gtk_signal_connect (GTK_OBJECT (delete_folder), "activate", GTK_SIGNAL_FUNC (nf_imap_delete_folder), NULL); gtk_signal_connect (GTK_OBJECT (subscribe), "activate", GTK_SIGNAL_FUNC (nf_imap_subscribe), NULL); gtk_signal_connect (GTK_OBJECT (unsubscribe), "activate", GTK_SIGNAL_FUNC (nf_imap_unsubscribe), NULL); return imapf_popup;}voidnf_imap_subscribe (GtkWidget * widget, gpointer userdata){ GtkWidget *win = imap_win_subscribe (); GtkWidget *ctree = lookup_widget (win, "ctree1"); ImapInfo *imapinfo, *newimapinfo; PopAccount *acct; GList *seek; char *data[1]; char *list, *mailbox; tm_globs->imap_list = ctree; gtk_clist_freeze (GTK_CLIST (ctree)); for (seek = nf_imap_list; seek; seek = seek->next) { imapinfo = seek->data; acct = imapinfo->acct; newimapinfo = (ImapInfo *) calloc (1, sizeof (ImapInfo)); newimapinfo->acct = acct; newimapinfo->tree = ctree; newimapinfo->parent = NULL; newimapinfo->mailbox = NULL; data[0] = strdup (acct->name); newimapinfo->node = (GtkWidget *) gtk_ctree_insert_node (GTK_CTREE (ctree), NULL, NULL, data, 0, NULL, NULL, NULL, NULL, FALSE, FALSE); gtk_ctree_node_set_row_data (GTK_CTREE (ctree), GTK_CTREE_NODE (newimapinfo->node), (gpointer) newimapinfo); tm_globs->imap_list_node = newimapinfo->node; list = (char *) calloc (4096, sizeof (char)); snprintf (list, 4094, "{%s:%d/imap/user=\"%s\"}*", acct->phost, acct->pport, acct->puser); mailbox = (char *) calloc (4096, sizeof (char)); snprintf (mailbox, 4094, "{%s:%d/imap/user=\"%s\"}INBOX", acct->phost, acct->pport, acct->puser); mmpopid = acct->id; tm_globs->mailstream = mail_open (tm_globs->mailstream, mailbox, OP_HALFOPEN); free (mailbox); if (!tm_globs->mailstream) return; mail_list (tm_globs->mailstream, NULL, list); } gtk_clist_thaw (GTK_CLIST (ctree)); tm_globs->imap_list = NULL; gtk_widget_show (win);}voidnf_imap_unsubscribe (GtkWidget * widget, gpointer userdata){ GtkWidget *yesno; char *string; GtkWidget *ctree = lookup_widget (tm_globs->main_window, "folder_ntree"); GtkCTreeNode *node; int len; ImapInfo *imapinfo; char *mbox; if (GTK_CLIST (ctree)->selection) { node = GTK_CLIST (ctree)->selection->data; } else { insert_warning ("Please select a folder, then choose Unsubscribe.\n"); return; } imapinfo = gtk_ctree_node_get_row_data (GTK_CTREE (ctree), node); if (!imapinfo->mailbox) { insert_warning ("You can't subscribe from your INBOX!\n"); return; } else { mbox = cut_string (imapinfo->mailbox, '}', 2, 1); } len = strlen ("Are you sure you want to unsubscribe from \"\"?") + strlen (mbox); string = (char *) malloc (len * sizeof (char)); snprintf (string, len, "Are you sure you want to unsubscribe from \"%s\"?", mbox); free (mbox); yesno = create_yesno ("Unsubscribe From Folder", string, GTK_SIGNAL_FUNC (on_imap_unsubscribe_clicked), node); free (string); gtk_widget_show (yesno);}voidnf_imap_new_folder (GtkWidget * widget, gpointer userdata){ GtkWidget *win = imap_new_folder (); gtk_widget_show (win);}voidnf_imap_delete_folder (GtkWidget * widget, gpointer userdata){ GtkWidget *yesno; char *string; GtkWidget *ctree = lookup_widget (tm_globs->main_window, "folder_ntree"); GtkCTreeNode *node; int len; ImapInfo *imapinfo; char *mbox; if (GTK_CLIST (ctree)->selection) { node = GTK_CLIST (ctree)->selection->data; } else { insert_warning ("Please select a folder, then choose Delete Folder\n"); return; } imapinfo = gtk_ctree_node_get_row_data (GTK_CTREE (ctree), node); if (!imapinfo->mailbox) { insert_error ("You cannot delete the IMAP INBOX!\n"); return; } mbox = cut_string (imapinfo->mailbox, '}', 2, 1); len = strlen ("Are you sure you want to delete \"\"?") + strlen (mbox); string = (char *) malloc (len * sizeof (char)); snprintf (string, len, "Are you sure you want to delete \"%s\"?", mbox); free (mbox); yesno = create_yesno ("Delete Folder", string, GTK_SIGNAL_FUNC (on_imap_delete_clicked), node); free (string); gtk_widget_show (yesno);}voidnf_imap_moveto (GtkWidget * widget, gpointer userdata){ char *mailbox = userdata; GtkWidget *clist = lookup_widget (tm_globs->imap_window, "imap_clist"); GList *selection = NULL; ImapMsg *imapmsg; GList *seek; char *msgno; GList *movelist = NULL; int row; selection = GTK_CLIST (clist)->selection; if (!selection) return; for (seek = selection; seek; seek = seek->next) { imapmsg = gtk_clist_get_row_data (GTK_CLIST (clist), (int) seek->data); msgno = (char *) calloc (5, sizeof (char)); snprintf (msgno, 5, "%d", imapmsg->msgno); mail_move (tm_globs->mailstream, msgno, mailbox); movelist = g_list_append (movelist, imapmsg); free (msgno); } for (seek = movelist; seek; seek = seek->next) { row = gtk_clist_find_row_from_data (GTK_CLIST (clist), (gpointer) seek->data); gtk_clist_remove (GTK_CLIST (clist), row); }}intnf_imap_check_mail (PopAccount *checkacct){ GList *seek; ImapInfo *imapinfo; PopAccount *acct; char *mailbox; char *list; GList *boxes; char *box, *tmpbox; ImapInfo *tmpimap; GList *seekthis = NULL; ImapInfo *checkinfo = NULL; if (tm_globs->mailstream) mail_expunge (tm_globs->mailstream); if (checkacct) { checkinfo = (ImapInfo *) calloc (1, sizeof (ImapInfo)); checkinfo->acct = checkacct; seekthis = g_list_append (seekthis, checkinfo); } else { seekthis = nf_imap_list; } for (seek = seekthis; seek; seek = seek->next) { imapinfo = seek->data; acct = imapinfo->acct; if ((acct->flags & CHECK_WITH_ALL)) { insert_message ("Syncing with IMAP mail server for %s...", acct->name); tm_globs->imap_node = imapinfo->node; if ((!imapinfo) || (!imapinfo->acct)) return 1; mailbox = (char *) calloc (4096, sizeof (char)); snprintf (mailbox, 4094, "{%s:%d/imap/user=\"%s\"}%s", imapinfo->acct->phost, imapinfo->acct->pport, imapinfo->acct->puser, "INBOX"); if ((tm_globs->mailstream) && (mmpopid == imapinfo->acct->id)) { mmpopid = imapinfo->acct->id; mail_ping (tm_globs->mailstream); if (imapinfo->mailbox) { mail_status (tm_globs->mailstream, imapinfo->mailbox, SA_UNSEEN | SA_MESSAGES); } else { mail_status (tm_globs->mailstream, mailbox, SA_UNSEEN | SA_MESSAGES); } } else { mmpopid = imapinfo->acct->id; /* open new mailstream */ tm_globs->mailstream = mail_open (tm_globs->mailstream, mailbox, OP_HALFOPEN | MAIL_OP); if (!imapinfo->mailbox) mail_status (tm_globs->mailstream, mailbox, SA_UNSEEN | SA_MESSAGES); free (mailbox); if (!tm_globs->mailstream) return 3; } /* find all boxes */ nf_imap_lsub = NULL; list = (char *) calloc (4096, sizeof (char)); snprintf (list, 4094, "{%s:%d/imap/user=\"%s\"}*", imapinfo->acct->phost, imapinfo->acct->pport, imapinfo->acct->puser); if (imapinfo->parent == NULL) { mail_lsub (tm_globs->mailstream, NULL, list); imapinfo->lsub = 1; } if (list) free (list); /* update counts for each */ if (nf_imap_lsub) { for (boxes = nf_imap_lsub; boxes; boxes = boxes->next) { tmpimap = (ImapInfo *) boxes->data; box = tmpimap->mailbox; tm_globs->imap_node = tmpimap->node; mail_status (tm_globs->mailstream, box, SA_UNSEEN | SA_MESSAGES); } } insert_message (" Done.\n", acct->name); gtk_ctree_expand (GTK_CTREE (imapinfo->tree), GTK_CTREE_NODE (imapinfo->node)); } } if (tm_globs->imap_tmp) { if (tm_globs->imap_window) { if (tm_globs->imap_tmp->mailbox) { tmpbox = strdup (tm_globs->imap_tmp->mailbox); } else { tmpbox = (char *) calloc (4096, sizeof (char)); snprintf (tmpbox, 4094, "{%s:%d/imap/user=\"%s\"}%s", tm_globs->imap_tmp->acct->phost, tm_globs->imap_tmp->acct->pport, tm_globs->imap_tmp->acct->puser, "INBOX"); } mmpopid = tm_globs->imap_tmp->acct->id; nf_imap_fill_up (tm_globs->imap_window, tm_globs->imap_tmp->acct, tmpbox); if (tmpbox) free (tmpbox); } tm_globs->imap_tmp = NULL; } if (checkinfo) free (checkinfo); return 0;}voidnf_imap_copyto (GtkWidget * widget, gpointer userdata){ Folder *fl = userdata; GtkWidget *clist = lookup_widget (tm_globs->imap_window, "imap_clist"); GList *selection = NULL; ImapMsg *imapmsg; GList *seek; char *header, *body, *message; Message *msg = NULL; int length; selection = GTK_CLIST (clist)->selection; if (!selection) return; for (seek = selection; seek; seek = seek->next) { imapmsg = gtk_clist_get_row_data (GTK_CLIST (clist), (int) seek->data); header = mail_fetchheader (tm_globs->mailstream, imapmsg->msgno); body = mail_fetchtext (tm_globs->mailstream, imapmsg->msgno); length = strlen (header) + strlen (body) + 2; message = (char *) malloc (length * sizeof (char)); message = strncpy (message, header, length); message = strncat (message, body, length); if (!message) return; msg = message_seek (fl, message_save (fl->name, message)); if (msg) { msg->rfolder = strdup (fl->name); create_new_message (fl, msg); } free (message); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -