/*---------------------------------------------------------------------- Offer to delete old sent-mail folders Args: sml -- The list of sent-mail folders fcc_cntxt -- context to delete list of folders in type -- label indicating type of folders being deleted ----*/ void delete_old_mail(struct sm_folder *sml, CONTEXT_S *fcc_cntxt, char *type) { char prompt[150]; struct sm_folder *sm; for(sm = sml; sm != NULL && sm->name != NULL; sm++){ if(sm->name[0] == '\0') /* can't happen */ continue; snprintf(prompt, sizeof(prompt), "To save disk space, delete old%.10s mail folder \"%.30s\" ", type, sm->name); if(want_to(prompt, 'n', 0, h_wt_delete_old, WT_FLUSH_IN) == 'y'){ if(!context_delete(fcc_cntxt, NULL, sm->name)){ q_status_message1(SM_ORDER, 3, 3, "Error deleting \"%s\".", sm->name); dprint((1, "Error context_deleting %s in %s\n", sm->name, (fcc_cntxt && fcc_cntxt->context) ? fcc_cntxt->context : "<null>")); } else{ int index; if((index = folder_index(sm->name, fcc_cntxt, FI_FOLDER)) >= 0) folder_delete(index, FOLDERS(fcc_cntxt)); } }else{ /* break;*/ /* skip out of the whole thing when he says no */ /* Decided to keep asking anyway */ } } }
/* folder_new */ Folder * folder_new(AccountFolder * folder, FolderType type, char const * name, GtkTreeStore * store, GtkTreeIter * iter) { Folder * ret; GtkTreePath * path; #ifdef DEBUG fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, name); #endif if((ret = object_new(sizeof(*ret))) == NULL) return NULL; name = _get_local_name(type, name); ret->name = string_new(name); ret->store = store; path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), iter); ret->row = gtk_tree_row_reference_new(GTK_TREE_MODEL(store), path); gtk_tree_path_free(path); gtk_tree_store_set(store, iter, MFC_FOLDER, ret, MFC_NAME, name, -1); folder_set_type(ret, type); ret->messages = gtk_tree_store_new(MHC_COUNT, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_UINT); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ret->messages), MHC_DATE, GTK_SORT_DESCENDING); ret->data = folder; if(ret->name == NULL) { folder_delete(ret); return NULL; } return ret; }
bool folder_delete (const std::string& directory, bool recurse) { std::string dir = directory; if (dir.empty()) dir = "."; if (!folder_exists(dir)) return false; bool result = true; // depth-first traversal ensures that directory contents are deleted before trying to delete the directory itself if (recurse) { std::vector<std::string> subdirectories = folder_subdirectories(dir); for (std::vector<std::string>::size_type d = 0; d < subdirectories.size(); ++d) if (!folder_delete(folder_down(dir,subdirectories[d]),true)) result = false; std::vector<std::string> files = folder_files(dir); for (std::vector<std::string>::size_type f = 0; f < files.size(); ++f) if (!file_delete(create_filespec(dir, files[f]))) result = false; } if (rmdir(dir.c_str())!=0) result = false; return result; }