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

📄 netfolders.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
  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 + -