static void add_mailbox(GtkAction *action, gpointer callback_data) { MainWindow *mainwin = (MainWindow *) callback_data; gchar *path, *basename; Folder *folder; path = input_dialog(_("Add mailbox"), _("Input the location of mailbox.\n" "If the existing mailbox is specified, it will be\n" "scanned automatically."), "Mail"); if (!path) return; if (folder_find_from_path(path)) { alertpanel_error(_("The mailbox '%s' already exists."), path); g_free(path); return; } basename = g_path_get_basename(path); if (!folder_local_name_ok(basename)) { g_free(path); g_free(basename); return; } folder = folder_new(folder_get_class_from_string("mailmbox"), !strcmp(path, "Mail") ? _("Mailbox") : basename, path); g_free(basename); g_free(path); if (folder->klass->create_tree(folder) < 0) { alertpanel_error(_("Creation of the mailbox failed.\n" "Maybe some files already exist, or you don't have the permission to write there.")); folder_destroy(folder); return; } folder_add(folder); folder_scan_tree(folder, TRUE); folderview_set(mainwin->folderview); return; }
int ui_run() { int ch; int load_worked = 0; #ifdef DEBUG int debug_i = 0; #endif time_base = time(NULL); while (1) { can_resize = TRUE; if (should_resize) { ui_resize(); } ch = getch(); ui_statusline_clear(); can_resize = FALSE; if ((time_base < (time(NULL) - (options->passphrase_timeout * 60))) && options->passphrase_timeout != 0 && tolower(ch) != 'q') { folder_write_file(); folder_free_all(); ui_statusline_msg("Passphrase has timed out and you must enter it again."); getch(); load_worked = folder_read_file(); if (load_worked != 0) { ui_statusline_msg("Error - unable to re-load the password file!"); break; } if (search_results != NULL) search_remove(); time_base = time(NULL); continue; } switch (ch) { case 'Q': case 'q': if (search_results != NULL) search_remove(); else if (action_list_at_top_level()) return 0; break; case '?': ui_display_help(); break; case KEY_PPAGE: uilist_page_up(); break; case KEY_NPAGE: uilist_page_down(); break; case KEY_UP: case 'k': uilist_up(); break; case KEY_DOWN: case 'j': uilist_down(); break; case 'A': if (!options->readonly) action_list_add_sublist(); else statusline_readonly(); break; case 'U': action_list_up_one_level(); break; case 'r': if (!options->readonly) { action_list_rename(); folder_write_file(); } else { statusline_readonly(); } break; case 'a': if (!options->readonly) { action_list_add_pw(); folder_write_file(); } else { statusline_readonly(); } break; case 'e': case ' ': case 13: /* return/enter key */ action_list_select_item(); break; case 'x': action_list_mark(); break; case 'B': action_list_copy_username(); break; case 'C': action_list_copy_pw(); break; case 'd': case 0x14A: /* DEL key */ if (!options->readonly) action_list_delete_item(); else statusline_readonly(); break; case 'm': if (!options->readonly) action_list_move_item(); else statusline_readonly(); break; case 'o': action_edit_options(); break; case 0x17: /* control-w */ if (!options->readonly) folder_write_file(); else statusline_readonly(); break; case 0x12: /* control-r */ action_list_read_file(); break; case 0x07: /* control-g */ pwgen_indep(); break; case 0x06: /* control-f */ gnupg_forget_passphrase(); break; case 0x0C: /* control-l */ ui_refresh_windows(); break; case '/': case 'F': search_get(); break; case 'f': filter_get(); break; case 'E': action_list_export(); break; case 'I': if (!options->readonly) { folder_import_passwd(); uilist_refresh(); } else { statusline_readonly(); } break; case 'L': action_list_locate(); break; case 'l': action_list_launch(); break; case 0x0B: /* control-k (up) */ case '[': action_list_move_item_up(); break; case 0x0A: /* control-j (down) */ case ']': action_list_move_item_down(); break; #ifdef DEBUG case '$': debug_i++; snprintf(msg, 80, "Name %d", debug_i); folder_add(current_pw_sublist, msg, "myhost", "myuser", "mypasswd", "mylaucnh"); uilist_refresh(); break; #endif default: break; } } return 0; }
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; }