talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

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 }