static void set_sensitivity(GtkUIManager *ui_manager, FolderItem *item) { gboolean folder_is_normal = item != NULL && item->stype == F_NORMAL && !folder_has_parent_of_type(item, F_OUTBOX) && !folder_has_parent_of_type(item, F_DRAFT) && !folder_has_parent_of_type(item, F_QUEUE) && !folder_has_parent_of_type(item, F_TRASH); #define SET_SENS(name, sens) \ cm_menu_set_sensitive_full(ui_manager, "Popup/"name, sens) SET_SENS("FolderViewPopup/CreateNewFolder", item && item->stype != F_INBOX); SET_SENS("FolderViewPopup/RenameFolder", item && item->stype == F_NORMAL && folder_item_parent(item) != NULL); SET_SENS("FolderViewPopup/MoveFolder", folder_is_normal && folder_item_parent(item) != NULL); SET_SENS("FolderViewPopup/DeleteFolder", item && item->stype == F_NORMAL && folder_item_parent(item) != NULL); SET_SENS("FolderViewPopup/CheckNewMessages", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/CheckNewFolders", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/RebuildTree", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/RemoveMailbox", folder_item_parent(item) == NULL); #undef SET_SENS }
static void set_sensitivity(GtkUIManager *ui_manager, FolderItem *item) { gboolean folder_is_normal = item != NULL && item->stype == F_NORMAL && !folder_has_parent_of_type(item, F_OUTBOX) && !folder_has_parent_of_type(item, F_DRAFT) && !folder_has_parent_of_type(item, F_QUEUE) && !folder_has_parent_of_type(item, F_JUNK) && !folder_has_parent_of_type(item, F_TRASH); #define SET_SENS(name, sens) \ cm_menu_set_sensitive_full(ui_manager, "Popup/"name, sens) SET_SENS("FolderViewPopup/CreateNewFolder", item && item->no_sub == FALSE); SET_SENS("FolderViewPopup/RenameFolder", item && item->stype == F_NORMAL && folder_item_parent(item) != NULL); SET_SENS("FolderViewPopup/MoveFolder", item && folder_is_normal && folder_item_parent(item) != NULL); SET_SENS("FolderViewPopup/DeleteFolder", item && item->stype == F_NORMAL && folder_item_parent(item) != NULL); SET_SENS("FolderViewPopup/CheckNewMessages", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/CheckNewFolders", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/RebuildTree", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/Synchronise", item ? (folder_item_parent(item) != NULL && folder_want_synchronise(item->folder)) : FALSE); SET_SENS("FolderViewPopup/DownloadMessages", item && !item->no_select); SET_SENS("FolderViewPopup/CheckNewMessages", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/CheckNewFolders", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/RebuildTree", folder_item_parent(item) == NULL); SET_SENS("FolderViewPopup/Subscriptions/Unsubscribe", item && item->stype == F_NORMAL && folder_item_parent(item) != NULL); SET_SENS("FolderViewPopup/Subscriptions/Subscribe", TRUE); if (item && item->folder && item->folder->account) cm_toggle_menu_set_active_full(ui_manager, "Popup/FolderViewPopup/Subscriptions/ShowOnlySubs", item->folder->account->imap_subsonly); #undef SET_SENS }
static void set_sensitivity(GtkUIManager *ui_manager, FolderItem *item) { MainWindow *mainwin = mainwindow_get_mainwindow(); #define SET_SENS(name, sens) \ cm_menu_set_sensitive_full(ui_manager, "Popup/"name, sens) SET_SENS("FolderViewPopup/Subscribe", folder_item_parent(item) == NULL && mainwin->lock_count == 0 && news_folder_locked(item->folder) == 0); SET_SENS("FolderViewPopup/Unsubscribe", folder_item_parent(item) != NULL && mainwin->lock_count == 0 && news_folder_locked(item->folder) == 0); SET_SENS("FolderViewPopup/CheckNewMessages", folder_item_parent(item) == NULL && mainwin->lock_count == 0 && news_folder_locked(item->folder) == 0); SET_SENS("FolderViewPopup/Synchronise", item ? (folder_item_parent(item) != NULL && folder_want_synchronise(item->folder)) : FALSE); SET_SENS("FolderViewPopup/DownloadMessages", item ? (folder_item_parent(item) != NULL && !item->no_select) : FALSE); SET_SENS("FolderViewPopup/RenameFolder", folder_item_parent(item) != NULL && mainwin->lock_count == 0 && news_folder_locked(item->folder) == 0); #undef SET_SENS }
static gchar *_old_rssyl_item_get_path(Folder *folder, FolderItem *item) { gchar *result, *tmp; if (folder_item_parent(item) == NULL) return g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, RSSYL_DIR, NULL); tmp = rssyl_strreplace(item->name, "/", "\\"); result = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, RSSYL_DIR, G_DIR_SEPARATOR_S, tmp, NULL); g_free(tmp); return result; }
static void rssyl_start_default_refresh_timeouts_func(FolderItem *item, gpointer data) { RFolderItem *ritem = (RFolderItem *)item; guint prefs_interval = GPOINTER_TO_UINT(data); if( !IS_RSSYL_FOLDER_ITEM(item) ) return; if( folder_item_parent(item) == NULL || ritem->url == NULL ) return; /* Feeds which use default refresh interval */ if( ritem->default_refresh_interval ) { /* Start a new timer if the default value has changed * (ritem->refresh_interval should contain previous default * value in this case). */ if( ritem->refresh_interval != prefs_interval ) { ritem->refresh_interval = prefs_interval; rssyl_feed_start_refresh_timeout(ritem); } } }
static void rssyl_update_format_func(FolderItem *item, gpointer data) { RFolderItem *ritem; RUpdateFormatCtx *ctx = (RUpdateFormatCtx *)data; Folder *f = NULL; FolderItem *new_item = NULL; gchar *name; OldRFeed *of; if( !IS_RSSYL_FOLDER_ITEM(item) ) return; /* Do not do anything once we reached first new folder * (which we created earlier in this process) */ if( ctx->reached_first_new ) return; if( item->folder == ctx->n_first ) { ctx->reached_first_new = TRUE; debug_print("RSSyl: (FORMAT) reached first new folder\n"); return; } debug_print("RSSyl: (FORMAT) item '%s'\n", item->name); if( folder_item_parent(item) == NULL ) { /* Root rssyl folder */ ctx->oldroots = g_slist_prepend(ctx->oldroots, item); /* Create its counterpart */ name = rssyl_strreplace(folder_item_get_name(item), " (RSSyl)", ""); debug_print("RSSyl: (FORMAT) adding new root folder '%s'\n", name); f = folder_new(rssyl_folder_get_class(), name, NULL); g_free(name); g_return_if_fail(f != NULL); folder_add(f); folder_write_list(); new_item = FOLDER_ITEM(f->node->data); /* If user has more than one old rssyl foldertrees, keep the n_first * pointer at the beginning of first one. */ if (ctx->n_first == NULL) ctx->n_first = f; ctx->n_parent = new_item; } else { /* Non-root folder */ if (folder_item_parent(item) == ctx->o_prev) { /* We went one step deeper in folder hierarchy, adjust pointers * to parents */ ctx->o_parent = ctx->o_prev; ctx->n_parent = ctx->n_prev; } else if (folder_item_parent(item) != ctx->o_parent) { /* We are not in same folder anymore, which can only mean we have * moved up in the hierarchy. Find a correct parent */ while (folder_item_parent(item) != ctx->o_parent) { ctx->o_parent = folder_item_parent(ctx->o_parent); ctx->n_parent = folder_item_parent(ctx->n_parent); if (ctx->o_parent == NULL) { /* This shouldn't happen, unless we are magically moved to a * completely different folder structure */ debug_print("RSSyl: MISHAP WHILE UPGRADING STORAGE FORMAT: couldn't find folder parent\n"); alertpanel_error(_("Internal problem while upgrading storage format. This should not happen. Please report this, with debug output attached.\n")); return; } } } else { /* We have remained in the same subfolder, nothing to do here */ } debug_print("RSSyl: (FORMAT) adding folder '%s'\n", item->name); new_item = folder_create_folder(ctx->n_parent, item->name); if (new_item == NULL) { debug_print("RSSyl: (FORMAT) couldn't add folder '%s', skipping it\n", item->name); return; } of = rssyl_old_feed_get_by_name(ctx->oldfeeds, item->name); if (of != NULL && of->url != NULL) { /* Folder with an actual subscribed feed */ debug_print("RSSyl: (FORMAT) making '%s' a feed with URL '%s'\n", item->name, of->url); ritem = (RFolderItem *)new_item; ritem->url = g_strdup(of->url); rssyl_feed_start_refresh_timeout(ritem); ritem->official_title = g_strdup(of->official_name); ritem->default_refresh_interval = (of->default_refresh_interval != 0 ? TRUE : FALSE); ritem->refresh_interval = of->refresh_interval; ritem->keep_old = (of->expired_num > -1 ? TRUE : FALSE); ritem->fetch_comments = (of->fetch_comments != 0 ? TRUE : FALSE); ritem->fetch_comments_max_age = of->fetch_comments_for; ritem->silent_update = of->silent_update; ritem->ssl_verify_peer = of->ssl_verify_peer; folder_item_prefs_copy_prefs(item, &ritem->item); } rssyl_update_format_move_contents(item, new_item); /* destroy the new folder's cache so we'll re-read the migrated one */ if (new_item->cache) { msgcache_destroy(new_item->cache); new_item->cache = NULL; } /* Store folderlist with the new folder */ folder_item_scan(new_item); folder_write_list(); } ctx->o_prev = item; ctx->n_prev = new_item; }
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(); }
static void rssyl_opml_export_func(FolderItem *item, gpointer data) { RSSylOpmlCtx *ctx = (RSSylOpmlCtx *)data; RFolderItem *ritem = (RFolderItem *)item; gboolean isfolder = FALSE, err = FALSE; gboolean haschildren = FALSE; gchar *indent = NULL, *xmlurl = NULL; gchar *tmpoffn = NULL, *tmpurl = NULL, *tmpname = NULL; gint depth; if( !IS_RSSYL_FOLDER_ITEM(item) ) return; if( folder_item_parent(item) == NULL ) return; /* Check for depth and adjust indentation */ depth = rssyl_folder_depth(item); if( depth < ctx->depth ) { for( ctx->depth--; depth <= ctx->depth; ctx->depth-- ) { indent = g_strnfill(ctx->depth + 1, '\t'); err |= (fprintf(ctx->f, "%s</outline>\n", indent) < 0); g_free(indent); } } ctx->depth = depth; if( ritem->url == NULL ) { isfolder = TRUE; } else { tmpurl = rssyl_strreplace(ritem->url, "&", "&"); xmlurl = g_strdup_printf("xmlUrl=\"%s\"", tmpurl); g_free(tmpurl); } if( g_node_n_children(item->node) ) haschildren = TRUE; indent = g_strnfill(ctx->depth + 1, '\t'); tmpname = rssyl_strreplace(item->name, "&", "&"); if( ritem->official_title != NULL ) tmpoffn = rssyl_strreplace(ritem->official_title, "&", "&"); else tmpoffn = g_strdup(tmpname); err |= (fprintf(ctx->f, "%s<outline title=\"%s\" text=\"%s\" description=\"%s\" type=\"%s\" %s%s>\n", indent, tmpname, tmpoffn, tmpoffn, (isfolder ? "folder" : "rss"), (xmlurl ? xmlurl : ""), (haschildren ? "" : "/")) < 0); g_free(indent); g_free(xmlurl); g_free(tmpname); g_free(tmpoffn); if( err ) { log_warning(LOG_PROTOCOL, _("RSSyl: Error while writing '%s' to feed export list.\n"), item->name); debug_print("Error while writing '%s' to feed_export list.\n", item->name); } }