/** * Read address book, creating all entries in the completion index. */ static void read_address_book(gchar *folderpath) { free_all_addresses(); free_completion_list(); #ifndef USE_ALT_ADDRBOOK addrindex_load_completion( add_address, folderpath ); #else GError* error = NULL; addrcompl_initialize(); if (! addrindex_dbus_load_completion(add_address, &error)) { g_warning("Failed to populate address completion list"); g_error_free(error); return; } #endif /* plugins may hook in here to modify/extend the completion list */ if(!folderpath) { hooks_invoke(ADDDRESS_COMPLETION_BUILD_ADDRESS_LIST_HOOKLIST, &g_address_list); } g_address_list = g_list_reverse(g_address_list); g_completion_list = g_list_reverse(g_completion_list); /* merge the completion entry list into g_completion */ if (g_completion_list) { g_completion_add_items(g_completion, g_completion_list); if (debug_get_mode()) debug_print("read %d items in %s\n", g_list_length(g_completion_list), folderpath?folderpath:"(null)"); } }
static gint pop3_retr_recv(Pop3Session *session, const gchar *data, guint len) { gchar *file; gint drop_ok; MailReceiveData mail_receive_data; /* NOTE: we allocate a slightly larger buffer with a zero terminator * because some plugins may think that it has a C string. */ mail_receive_data.session = session; mail_receive_data.data = g_new0(gchar, len + 1); mail_receive_data.data_len = len; memcpy(mail_receive_data.data, data, len); hooks_invoke(MAIL_RECEIVE_HOOKLIST, &mail_receive_data); file = get_tmp_file(); if (pop3_write_msg_to_file(file, mail_receive_data.data, mail_receive_data.data_len, NULL) < 0) { g_free(file); g_free(mail_receive_data.data); session->error_val = PS_IOERR; return -1; } g_free(mail_receive_data.data); if (session->msg[session->cur_msg].partial_recv == POP3_MUST_COMPLETE_RECV) { gchar *old_file = partial_get_filename( session->ac_prefs->recv_server, session->ac_prefs->userid, session->msg[session->cur_msg].uidl); if (old_file) { partial_delete_old(old_file); g_free(old_file); } } /* drop_ok: 0: success 1: don't receive -1: error */ drop_ok = session->drop_message(session, file); g_free(file); if (drop_ok < 0) { session->error_val = PS_IOERR; return -1; } session->cur_total_bytes += session->msg[session->cur_msg].size; session->cur_total_recv_bytes += session->msg[session->cur_msg].size; session->cur_total_num++; session->msg[session->cur_msg].received = TRUE; session->msg[session->cur_msg].partial_recv = POP3_TOTALLY_RECEIVED; session->msg[session->cur_msg].recv_time = drop_ok == 1 ? RECV_TIME_KEEP : session->current_time; return PS_SUCCESS; }
static gboolean invoke_hook_cb (gpointer data) { LogText *logtext = (LogText *)data; hooks_invoke(get_log_hook(logtext->instance), logtext); g_free(logtext->text); g_free(logtext); return FALSE; }
static gint pop3_top_recv(Pop3Session *session, const gchar *data, guint len) { gchar *file; gint drop_ok; MailReceiveData mail_receive_data; gchar *partial_notice = NULL; /* NOTE: we allocate a slightly larger buffer with a zero terminator * because some plugins may think that it has a C string. */ mail_receive_data.session = session; mail_receive_data.data = g_new0(gchar, len + 1); mail_receive_data.data_len = len; memcpy(mail_receive_data.data, data, len); hooks_invoke(MAIL_RECEIVE_HOOKLIST, &mail_receive_data); partial_notice = g_strdup_printf("SC-Marked-For-Download: 0\n" "SC-Partially-Retrieved: %s\n" "SC-Account-Server: %s\n" "SC-Account-Login: %s\n" "SC-Message-Size: %d", session->msg[session->cur_msg].uidl, session->ac_prefs->recv_server, session->ac_prefs->userid, session->msg[session->cur_msg].size); file = get_tmp_file(); if (pop3_write_msg_to_file(file, mail_receive_data.data, mail_receive_data.data_len, partial_notice) < 0) { g_free(file); g_free(mail_receive_data.data); session->error_val = PS_IOERR; g_free(partial_notice); return -1; } g_free(mail_receive_data.data); g_free(partial_notice); /* drop_ok: 0: success 1: don't receive -1: error */ drop_ok = session->drop_message(session, file); g_free(file); if (drop_ok < 0) { session->error_val = PS_IOERR; return -1; } session->cur_total_bytes += session->msg[session->cur_msg].size; session->cur_total_recv_bytes += session->msg[session->cur_msg].size; session->cur_total_num++; session->msg[session->cur_msg].received = TRUE; session->msg[session->cur_msg].partial_recv = POP3_PARTIALLY_RECEIVED; session->msg[session->cur_msg].recv_time = drop_ok == 1 ? RECV_TIME_KEEP : session->current_time; return PS_SUCCESS; }
void progressindicator_stop(ProgressType type) { ProgressData data; data.cmd = PROGRESS_COMMAND_START; data.type = type; hooks_invoke(PROGRESSINDICATOR_HOOKLIST, &data); }
void progressindicator_set_percentage(ProgressType type, gfloat percent) { ProgressData data; data.cmd = PROGRESS_COMMAND_SET_PERCENTAGE; data.type = type; data.value = percent; hooks_invoke(PROGRESSINDICATOR_HOOKLIST, &data); }
void procmsg_msginfo_unset_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgTmpFlags tmp_flags) { FolderItem *item; MsgInfoUpdate msginfo_update; MsgPermFlags perm_flags_new, perm_flags_old; MsgTmpFlags tmp_flags_old; g_return_if_fail(msginfo != NULL); item = msginfo->folder; g_return_if_fail(item != NULL); debug_print("Unsetting flags for message %d in folder %s\n", msginfo->msgnum, item->path); /* Perm Flags handling */ perm_flags_old = msginfo->flags.perm_flags; perm_flags_new = msginfo->flags.perm_flags & ~perm_flags; if (perm_flags_old != perm_flags_new) { folder_item_change_msg_flags(msginfo->folder, msginfo, perm_flags_new); update_folder_msg_counts(item, msginfo, perm_flags_old); msginfo_update.msginfo = msginfo; msginfo_update.flags = MSGINFO_UPDATE_FLAGS; hooks_invoke(MSGINFO_UPDATE_HOOKLIST, &msginfo_update); folder_item_update(msginfo->folder, F_ITEM_UPDATE_MSGCNT); } /* Tmp flags hanlding */ tmp_flags_old = msginfo->flags.tmp_flags; msginfo->flags.tmp_flags &= ~tmp_flags; /* update notification */ if ((perm_flags_old != perm_flags_new) || (tmp_flags_old != msginfo->flags.tmp_flags)) { msginfo_update.msginfo = msginfo; msginfo_update.flags = MSGINFO_UPDATE_FLAGS; hooks_invoke(MSGINFO_UPDATE_HOOKLIST, &msginfo_update); folder_item_update(msginfo->folder, F_ITEM_UPDATE_MSGCNT); } }
static void alertpanel_message(const gchar *title, const gchar *message, gint type) { if (alertpanel_is_open) return; else { alertpanel_is_open = TRUE; hooks_invoke(ALERTPANEL_OPENED_HOOKLIST, &alertpanel_is_open); } alertpanel_create(title, message, GTK_STOCK_CLOSE, NULL, NULL, ALERTFOCUS_FIRST, FALSE, NULL, type); alertpanel_show(); }
/** * Apply filtering actions to the msginfo * * \param msginfo The MsgInfo describing the message that should be filtered * \return TRUE if the message was moved and MsgInfo is now invalid, * FALSE otherwise */ gboolean procmsg_msginfo_filter(MsgInfo *msginfo) { MailFilteringData mail_filtering_data; mail_filtering_data.msginfo = msginfo; if (hooks_invoke(MAIL_FILTERING_HOOKLIST, &mail_filtering_data)) return TRUE; /* filter if enabled in prefs or move to inbox if not */ if((filtering_rules != NULL) && filter_message_by_msginfo(filtering_rules, msginfo)) return TRUE; return FALSE; }
static void alertpanel_show(void) { gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); manage_window_set_transient(GTK_WINDOW(dialog)); gtk_widget_show_all(dialog); value = G_ALERTWAIT; if (gdk_pointer_is_grabbed()) gdk_pointer_ungrab(GDK_CURRENT_TIME); inc_lock(); while ((value & G_ALERT_VALUE_MASK) == G_ALERTWAIT) gtk_main_iteration(); gtk_widget_destroy(dialog); GTK_EVENTS_FLUSH(); alertpanel_is_open = FALSE; hooks_invoke(ALERTPANEL_OPENED_HOOKLIST, &alertpanel_is_open); inc_unlock(); }
AlertValue alertpanel_full(const gchar *title, const gchar *message, const gchar *button1_label, const gchar *button2_label, const gchar *button3_label, AlertFocus focus, gboolean can_disable, GtkWidget *widget, AlertType alert_type) { if (alertpanel_is_open) return -1; else { alertpanel_is_open = TRUE; hooks_invoke(ALERTPANEL_OPENED_HOOKLIST, &alertpanel_is_open); } alertpanel_create(title, message, button1_label, button2_label, button3_label, focus, can_disable, widget, alert_type); alertpanel_show(); debug_print("return value = %d\n", value); return value; }
static gint headerview_show_avatar (HeaderView *headerview, MsgInfo *msginfo) { AvatarRender *avatarr = avatars_avatarrender_new(msginfo); GtkWidget *hbox = headerview->hbox; hooks_invoke(AVATAR_IMAGE_RENDER_HOOKLIST, avatarr); if (!avatarr->image) { if (headerview->image && gtk_widget_get_visible(headerview->image)) { gtk_widget_hide(headerview->image); gtk_widget_queue_resize(hbox); } avatars_avatarrender_free(avatarr); return -1; } if (!gtk_widget_get_visible(hbox)) { avatars_avatarrender_free(avatarr); return -1; } if (headerview->image) { gtk_widget_destroy(headerview->image); headerview->image = NULL; } gtk_box_pack_start(GTK_BOX(hbox), avatarr->image, FALSE, FALSE, 0); gtk_widget_show(avatarr->image); headerview->image = avatarr->image; avatarr->image = NULL; /* avoid destroying */ avatars_avatarrender_free(avatarr); headerview_save_contact_pic(headerview, msginfo); return 0; }
static void subscribe_newsgroup_cb(GtkAction *action, gpointer data) { FolderView *folderview = (FolderView *)data; Folder *folder; FolderItem *item; FolderItem *rootitem; FolderItem *newitem; GSList *new_subscr; GSList *cur; GNode *gnode; MainWindow *mainwin = mainwindow_get_mainwindow(); if ((item = folderview_get_selected_item(folderview)) == NULL) return; if (mainwin->lock_count || news_folder_locked(item->folder)) return; folder = item->folder; cm_return_if_fail(folder != NULL); cm_return_if_fail(FOLDER_TYPE(folder) == F_NEWS); cm_return_if_fail(folder->account != NULL); if ((rootitem = folder_item_parent(item)) == NULL) rootitem = item; new_subscr = grouplist_dialog(folder); /* remove unsubscribed newsgroups */ for (gnode = folder->node->children; gnode != NULL; ) { GNode *next = gnode->next; item = FOLDER_ITEM(gnode->data); if (g_slist_find_custom(new_subscr, item->path, (GCompareFunc)g_ascii_strcasecmp) != NULL) { gnode = next; continue; } if (folderview_get_opened_item(folderview) == item) { summary_clear_all(folderview->summaryview); folderview_close_opened(folderview, TRUE); } folderview_remove_item(folderview, item); folder_item_remove(item); gnode = next; } folderview_freeze(folderview); /* add subscribed newsgroups */ for (cur = new_subscr; cur != NULL; cur = cur->next) { gchar *name = (gchar *)cur->data; FolderUpdateData hookdata; if (news_find_child_item(rootitem, name) != NULL) continue; newitem = folder_item_new(folder, name, name); folder_item_append(rootitem, newitem); hookdata.folder = newitem->folder; hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDERITEM; hookdata.item = newitem; hookdata.item2 = NULL; hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata); } folderview_thaw(folderview); slist_free_strings_full(new_subscr); folder_write_list(); }