void plugin_gtk_done(void) { MainWindow *mainwin = mainwindow_get_mainwindow(); if (mainwin == NULL || claws_is_exiting()) return; folderview_unregister_popup(&claws_mailmbox_popup); MENUITEM_REMUI_MANAGER(mainwin->ui_manager,mainwin->action_group, "File/AddMailbox/Mbox", main_menu_id); main_menu_id = 0; }
gboolean plugin_done(void) { if(!claws_is_exiting()) { hooks_unregister_hook(ADDDRESS_COMPLETION_BUILD_ADDRESS_LIST_HOOKLIST, hook_address_completion); hooks_unregister_hook(OFFLINE_SWITCH_HOOKLIST, hook_offline_switch); g_source_remove(timer_query_contacts); } cm_gdata_prefs_done(); cm_gdata_contacts_done(); cm_gdata_save_config(); debug_print("GData plugin unloaded\n"); /* returning FALSE because dependant libraries may not be unload-safe. */ return FALSE; }
static void python_menu_done(void) { MainWindow *mainwin; mainwin = mainwindow_get_mainwindow(); if(mainwin && !claws_is_exiting()) { GSList *walk; remove_python_scripts_menus(); for(walk = menu_id_list; walk; walk = walk->next) gtk_ui_manager_remove_ui(mainwin->ui_manager, GPOINTER_TO_UINT(walk->data)); MENUITEM_REMUI_MANAGER(mainwin->ui_manager, mainwin->action_group, "Tools/ShowPythonConsole", 0); MENUITEM_REMUI_MANAGER(mainwin->ui_manager, mainwin->action_group, "Tools/PythonScripts", 0); MENUITEM_REMUI_MANAGER(mainwin->ui_manager, mainwin->action_group, "Tools/PythonScripts/Refresh", 0); MENUITEM_REMUI_MANAGER(mainwin->ui_manager, mainwin->action_group, "Tools/PythonScripts/Browse", 0); MENUITEM_REMUI_MANAGER(mainwin->ui_manager, mainwin->action_group, "Tools/PythonScripts/---", 0); } }
gboolean rssyl_parse_feed(RFolderItem *ritem, Feed *feed) { gchar *tmp = NULL, *tmp2 = NULL; gint i = 1; g_return_val_if_fail(ritem != NULL, FALSE); g_return_val_if_fail(feed != NULL, FALSE); g_return_val_if_fail(feed->title != NULL, FALSE); debug_print("RSSyl: parse_feed\n"); /* Set the last_update timestamp here, so it is the same for all items */ ritem->last_update = time(NULL); /* If the upstream feed changed its title, change name of our folder * accordingly even if user has renamed it before. This makes sure that * user will be aware of the upstream title change. */ if( !ritem->ignore_title_rename && (ritem->official_title == NULL || strcmp(feed->title, ritem->official_title)) ) { g_free(ritem->official_title); ritem->official_title = g_strdup(feed->title); tmp = rssyl_format_string(feed->title, TRUE, TRUE); tmp2 = g_strdup(tmp); while (folder_item_rename(&ritem->item, tmp2) != 0 && i < 20) { g_free(tmp2); tmp2 = g_strdup_printf("%s__%d", tmp, ++i); debug_print("RSSyl: couldn't rename, trying '%s'\n", tmp2); } /* TODO: handle case when i reaches 20 */ g_free(tmp); g_free(tmp2); /* FIXME: update name in properties */ /* FIXME: store feed properties */ } folder_item_update_freeze(); /* Read contents of folder, so we can check for duplicates/updates */ rssyl_folder_read_existing(ritem); if( claws_is_exiting() ) { debug_print("RSSyl: Claws-Mail is exiting, bailing out\n"); log_print(LOG_PROTOCOL, RSSYL_LOG_ABORTED_EXITING, ritem->url); folder_item_update_thaw(); return TRUE; } /* Populate the ->deleted_items list so that we can check it when * adding each item. */ ritem->deleted_items = rssyl_deleted_update(ritem); /* Parse each item in the feed, adding or updating existing items if * necessary */ if( feed_n_items(feed) > 0 ) feed_foreach_item(feed, rssyl_foreach_parse_func, (gpointer)ritem); if( !ritem->keep_old && !ritem->fetching_comments ) { rssyl_folder_read_existing(ritem); rssyl_expire_items(ritem, feed); } rssyl_deleted_free(ritem->deleted_items); folder_item_scan(&ritem->item); folder_item_update_thaw(); if( !ritem->fetching_comments ) log_print(LOG_PROTOCOL, RSSYL_LOG_UPDATED, ritem->url); return TRUE; }
void rssyl_update_comments(RFolderItem *ritem) { FolderItem *item = &ritem->item; FeedItem *fi = NULL; RFetchCtx *ctx = NULL; GDir *dp; const gchar *d; GError *error = NULL; gint num; gchar *path, *msg, *fname; MainWindow *mainwin = mainwindow_get_mainwindow(); g_return_if_fail(ritem != NULL); if( ritem->fetch_comments == FALSE ) return; path = folder_item_get_path(item); g_return_if_fail(path != NULL); debug_print("RSSyl: starting to parse comments, path is '%s'\n", path); if( (dp = g_dir_open(path, 0, &error)) == NULL ) { debug_print("g_dir_open on \"%s\" failed with error %d (%s)\n", path, error->code, error->message); g_error_free(error); g_free(path); return; } ritem->fetching_comments = TRUE; while( (d = g_dir_read_name(dp)) != NULL ) { if (claws_is_exiting()) { g_dir_close(dp); g_free(path); debug_print("RSSyl: bailing out, app is exiting\n"); return; } if( (num = to_number(d)) > 0) { fname = g_strdup_printf("%s%c%s", path, G_DIR_SEPARATOR, d); if (!g_file_test(fname, G_FILE_TEST_IS_REGULAR)) continue; debug_print("RSSyl: starting to parse '%s'\n", d); if( (fi = rssyl_parse_folder_item_file(fname)) != NULL ) { if( feed_item_get_comments_url(fi) && feed_item_get_id(fi) && (ritem->fetch_comments_max_age == -1 || time(NULL) - feed_item_get_date_modified(fi) <= ritem->fetch_comments_max_age*86400)) { msg = g_strdup_printf(_("Updating comments for '%s'..."), feed_item_get_title(fi)); debug_print("RSSyl: updating comments for '%s' (%s)\n", feed_item_get_title(fi), feed_item_get_comments_url(fi)); STATUSBAR_PUSH(mainwin, msg); ctx = rssyl_prep_fetchctx_from_url(feed_item_get_comments_url(fi)); g_return_if_fail(ctx != NULL); feed_set_ssl_verify_peer(ctx->feed, ritem->ssl_verify_peer); rssyl_fetch_feed(ctx, FALSE); if( ctx->success && feed_n_items(ctx->feed) > 0 ) { g_free(ctx->feed->title); ctx->feed->title = g_strdup(ritem->official_title); feed_foreach_item(ctx->feed, rssyl_update_reference_func, feed_item_get_id(fi)); if( !rssyl_parse_feed(ritem, ctx->feed) ) { debug_print("RSSyl: Error processing comments feed\n"); log_error(LOG_PROTOCOL, RSSYL_LOG_ERROR_PROC, ctx->feed->url); } } } STATUSBAR_POP(mainwin); feed_item_free(fi); } g_free(fname); } } g_dir_close(dp); g_free(path); ritem->fetching_comments = FALSE; debug_print("RSSyl: rssyl_update_comments() is done\n"); }