folder_item_prefs.c (8782B)
1 /* 2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client 3 * Copyright (C) 1999-2021 the Claws Mail team and Hiroyuki Yamamoto 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 #include <glib.h> 21 #include <glib/gi18n.h> 22 23 #include "defs.h" 24 #include "folder.h" 25 #include "utils.h" 26 #include "prefs_gtk.h" 27 #include "folder_item_prefs.h" 28 29 FolderItemPrefs tmp_prefs; 30 31 static PrefParam param[] = { 32 {"enable_default_from", "", &tmp_prefs.enable_default_from, P_BOOL, 33 NULL, NULL, NULL}, 34 {"default_from", "", &tmp_prefs.default_from, P_STRING, 35 NULL, NULL, NULL}, 36 {"enable_default_to", "", &tmp_prefs.enable_default_to, P_BOOL, 37 NULL, NULL, NULL}, 38 {"default_to", "", &tmp_prefs.default_to, P_STRING, 39 NULL, NULL, NULL}, 40 {"enable_default_reply_to", "", &tmp_prefs.enable_default_reply_to, P_BOOL, 41 NULL, NULL, NULL}, 42 {"default_reply_to", "", &tmp_prefs.default_reply_to, P_STRING, 43 NULL, NULL, NULL}, 44 {"enable_default_cc", "", &tmp_prefs.enable_default_cc, P_BOOL, 45 NULL, NULL, NULL}, 46 {"default_cc", "", &tmp_prefs.default_cc, P_STRING, 47 NULL, NULL, NULL}, 48 {"enable_default_bcc", "", &tmp_prefs.enable_default_bcc, P_BOOL, 49 NULL, NULL, NULL}, 50 {"default_bcc", "", &tmp_prefs.default_bcc, P_STRING, 51 NULL, NULL, NULL}, 52 {"enable_default_replyto", "", &tmp_prefs.enable_default_replyto, P_BOOL, 53 NULL, NULL, NULL}, 54 {"default_replyto", "", &tmp_prefs.default_replyto, P_STRING, 55 NULL, NULL, NULL}, 56 {"enable_simplify_subject", "", &tmp_prefs.enable_simplify_subject, P_BOOL, 57 NULL, NULL, NULL}, 58 {"simplify_subject_regexp", "", &tmp_prefs.simplify_subject_regexp, P_STRING, 59 NULL, NULL, NULL}, 60 {"enable_folder_chmod", "", &tmp_prefs.enable_folder_chmod, P_BOOL, 61 NULL, NULL, NULL}, 62 {"folder_chmod", "", &tmp_prefs.folder_chmod, P_INT, 63 NULL, NULL, NULL}, 64 {"enable_default_account", "", &tmp_prefs.enable_default_account, P_BOOL, 65 NULL, NULL, NULL}, 66 {"default_account", NULL, &tmp_prefs.default_account, P_INT, 67 NULL, NULL, NULL}, 68 {"save_copy_to_folder", NULL, &tmp_prefs.save_copy_to_folder, P_BOOL, 69 NULL, NULL, NULL}, 70 {"enable_processing", "FALSE", &tmp_prefs.enable_processing, P_BOOL, 71 NULL, NULL, NULL}, 72 {"enable_processing_when_opening", "TRUE", &tmp_prefs.enable_processing_when_opening, P_BOOL, 73 NULL, NULL, NULL}, 74 {"newmailcheck", "TRUE", &tmp_prefs.newmailcheck, P_BOOL, 75 NULL, NULL, NULL}, 76 {"offlinesync", "FALSE", &tmp_prefs.offlinesync, P_BOOL, 77 NULL, NULL, NULL}, 78 {"offlinesync_days", "0", &tmp_prefs.offlinesync_days, P_INT, 79 NULL, NULL, NULL}, 80 {"remove_old_bodies", "FALSE", &tmp_prefs.remove_old_bodies, P_BOOL, 81 NULL, NULL, NULL}, 82 {"render_html", "0", &tmp_prefs.render_html, P_ENUM, 83 NULL, NULL, NULL}, 84 {"skip_on_goto_unread_or_new", "FALSE", &tmp_prefs.skip_on_goto_unread_or_new, P_BOOL, 85 NULL, NULL, NULL}, 86 87 {"config_version", "-1", &tmp_prefs.config_version, P_INT, 88 NULL, NULL, NULL}, 89 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL} 90 }; 91 92 static FolderItemPrefs *folder_item_prefs_clear(FolderItemPrefs *prefs); 93 94 void folder_item_prefs_read_config(FolderItem * item) 95 { 96 gchar * id; 97 gchar *rcpath; 98 99 id = folder_item_get_identifier(item); 100 folder_item_prefs_clear(&tmp_prefs); 101 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FOLDERITEM_RC, NULL); 102 prefs_read_config(param, id, rcpath, NULL); 103 g_free(id); 104 g_free(rcpath); 105 106 *item->prefs = tmp_prefs; 107 } 108 109 void folder_item_prefs_save_config(FolderItem * item) 110 { 111 gchar * id; 112 113 tmp_prefs = * item->prefs; 114 115 id = folder_item_get_identifier(item); 116 if (id == NULL) 117 return; 118 119 debug_print("saving prefs for %s\n", id); 120 prefs_write_config(param, id, FOLDERITEM_RC); 121 g_free(id); 122 } 123 124 static gboolean folder_item_prefs_save_config_func(GNode *node, gpointer data) 125 { 126 FolderItem *item = (FolderItem *) node->data; 127 folder_item_prefs_save_config(item); 128 return FALSE; 129 } 130 131 void folder_item_prefs_save_config_recursive(FolderItem * item) 132 { 133 g_node_traverse(item->node, G_PRE_ORDER, G_TRAVERSE_ALL, 134 -1, folder_item_prefs_save_config_func, NULL); 135 } 136 137 void folder_prefs_save_config_recursive(Folder *folder) 138 { 139 g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, 140 -1, folder_item_prefs_save_config_func, NULL); 141 } 142 143 static FolderItemPrefs *folder_item_prefs_clear(FolderItemPrefs *prefs) 144 { 145 prefs->enable_default_from = FALSE; 146 prefs->default_from = NULL; 147 prefs->enable_default_to = FALSE; 148 prefs->default_to = NULL; 149 prefs->enable_default_reply_to = FALSE; 150 prefs->default_reply_to = NULL; 151 prefs->enable_default_cc = FALSE; 152 prefs->default_cc = NULL; 153 prefs->enable_default_bcc = FALSE; 154 prefs->default_bcc = NULL; 155 prefs->enable_default_replyto = FALSE; 156 prefs->default_replyto = NULL; 157 prefs->enable_simplify_subject = FALSE; 158 prefs->simplify_subject_regexp = NULL; 159 prefs->enable_folder_chmod = FALSE; 160 prefs->folder_chmod = 0; 161 prefs->enable_default_account = FALSE; 162 prefs->default_account = 0; 163 prefs->save_copy_to_folder = FALSE; 164 165 prefs->enable_processing = FALSE; 166 prefs->enable_processing_when_opening = FALSE; 167 prefs->processing = NULL; 168 169 prefs->newmailcheck = TRUE; 170 prefs->offlinesync = FALSE; 171 prefs->offlinesync_days = 0; 172 prefs->remove_old_bodies = FALSE; 173 prefs->render_html = HTML_RENDER_DEFAULT; 174 prefs->skip_on_goto_unread_or_new = FALSE; 175 return prefs; 176 } 177 178 FolderItemPrefs * folder_item_prefs_new(void) 179 { 180 FolderItemPrefs * prefs; 181 182 prefs = g_new0(FolderItemPrefs, 1); 183 184 return folder_item_prefs_clear(prefs); 185 } 186 187 void folder_item_prefs_free(FolderItemPrefs * prefs) 188 { 189 g_free(prefs->default_from); 190 g_free(prefs->default_to); 191 g_free(prefs->default_reply_to); 192 g_free(prefs->default_cc); 193 g_free(prefs->default_bcc); 194 g_free(prefs->default_replyto); 195 g_free(prefs); 196 } 197 198 #define SAFE_STRING(str) \ 199 (str) ? (str) : "" 200 201 void folder_item_prefs_copy_prefs(FolderItem * src, FolderItem * dest) 202 { 203 GSList *tmp_prop_list = NULL; 204 folder_item_prefs_read_config(src); 205 206 tmp_prefs.directory = g_strdup(src->prefs->directory); 207 tmp_prefs.enable_processing = src->prefs->enable_processing; 208 tmp_prefs.enable_processing_when_opening = src->prefs->enable_processing_when_opening; 209 tmp_prefs.newmailcheck = src->prefs->newmailcheck; 210 tmp_prefs.offlinesync = src->prefs->offlinesync; 211 tmp_prefs.offlinesync_days = src->prefs->offlinesync_days; 212 tmp_prefs.remove_old_bodies = src->prefs->remove_old_bodies; 213 tmp_prefs.render_html = src->prefs->render_html; 214 tmp_prefs.skip_on_goto_unread_or_new = src->prefs->skip_on_goto_unread_or_new; 215 216 tmp_prefs.processing = tmp_prop_list; 217 218 tmp_prefs.enable_default_from = src->prefs->enable_default_from; 219 tmp_prefs.default_from = g_strdup(src->prefs->default_from); 220 tmp_prefs.enable_default_to = src->prefs->enable_default_to; 221 tmp_prefs.default_to = g_strdup(src->prefs->default_to); 222 tmp_prefs.enable_default_reply_to = src->prefs->enable_default_reply_to; 223 tmp_prefs.default_reply_to = g_strdup(src->prefs->default_reply_to); 224 tmp_prefs.enable_default_cc = src->prefs->enable_default_cc; 225 tmp_prefs.default_cc = g_strdup(src->prefs->default_cc); 226 tmp_prefs.enable_default_bcc = src->prefs->enable_default_bcc; 227 tmp_prefs.default_bcc = g_strdup(src->prefs->default_bcc); 228 tmp_prefs.enable_default_replyto = src->prefs->enable_default_replyto; 229 tmp_prefs.default_replyto = g_strdup(src->prefs->default_replyto); 230 tmp_prefs.enable_simplify_subject = src->prefs->enable_simplify_subject; 231 tmp_prefs.simplify_subject_regexp = g_strdup(src->prefs->simplify_subject_regexp); 232 tmp_prefs.enable_folder_chmod = src->prefs->enable_folder_chmod; 233 tmp_prefs.folder_chmod = src->prefs->folder_chmod; 234 tmp_prefs.enable_default_account = src->prefs->enable_default_account; 235 tmp_prefs.default_account = src->prefs->default_account; 236 tmp_prefs.save_copy_to_folder = src->prefs->save_copy_to_folder; 237 238 *dest->prefs = tmp_prefs; 239 folder_item_prefs_save_config(dest); 240 241 dest->collapsed = src->collapsed; 242 dest->thread_collapsed = src->thread_collapsed; 243 dest->threaded = src->threaded; 244 dest->hide_read_msgs = src->hide_read_msgs; 245 dest->hide_del_msgs = src->hide_del_msgs; 246 dest->hide_read_threads = src->hide_read_threads; 247 dest->sort_key = src->sort_key; 248 dest->sort_type = src->sort_type; 249 }