1 /*
2  * preferences.h
3  * vim: expandtab:ts=4:sts=4:sw=4
4  *
5  * Copyright (C) 2012 - 2019 James Booth <boothj5@gmail.com>
6  * Copyright (C) 2019 - 2021 Michael Vetter <jubalh@iodoru.org>
7  *
8  * This file is part of Profanity.
9  *
10  * Profanity is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * Profanity is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Profanity.  If not, see <https://www.gnu.org/licenses/>.
22  *
23  * In addition, as a special exception, the copyright holders give permission to
24  * link the code of portions of this program with the OpenSSL library under
25  * certain conditions as described in each individual source file, and
26  * distribute linked combinations including the two.
27  *
28  * You must obey the GNU General Public License in all respects for all of the
29  * code used other than OpenSSL. If you modify file(s) with this exception, you
30  * may extend this exception to your version of the file(s), but you are not
31  * obligated to do so. If you do not wish to do so, delete this exception
32  * statement from your version. If you delete this exception statement from all
33  * source files in the program, then also delete it here.
34  *
35  */
36 
37 #ifndef CONFIG_PREFERENCES_H
38 #define CONFIG_PREFERENCES_H
39 
40 #include "config.h"
41 
42 #include <glib.h>
43 
44 #define PREFS_MIN_LOG_SIZE 64
45 #define PREFS_MAX_LOG_SIZE 1048580
46 
47 // represents all settings in .profrc
48 // each enum value is mapped to a group and key in .profrc (see preferences.c)
49 typedef enum {
50     PREF_CLEAR_PERSIST_HISTORY,
51     PREF_SPLASH,
52     PREF_BEEP,
53     PREF_VERCHECK,
54     PREF_THEME,
55     PREF_WINTITLE_SHOW,
56     PREF_WINTITLE_GOODBYE,
57     PREF_FLASH,
58     PREF_TRAY,
59     PREF_TRAY_READ,
60     PREF_ADV_NOTIFY_DISCO_OR_VERSION,
61     PREF_INTYPE,
62     PREF_INTYPE_CONSOLE,
63     PREF_HISTORY,
64     PREF_CARBONS,
65     PREF_RECEIPTS_SEND,
66     PREF_RECEIPTS_REQUEST,
67     PREF_REVEAL_OS,
68     PREF_OCCUPANTS,
69     PREF_OCCUPANTS_SIZE,
70     PREF_OCCUPANTS_JID,
71     PREF_OCCUPANTS_OFFLINE,
72     PREF_ROSTER,
73     PREF_ROSTER_SIZE,
74     PREF_ROSTER_OFFLINE,
75     PREF_ROSTER_RESOURCE,
76     PREF_ROSTER_PRESENCE,
77     PREF_ROSTER_STATUS,
78     PREF_ROSTER_EMPTY,
79     PREF_ROSTER_BY,
80     PREF_ROSTER_ORDER,
81     PREF_ROSTER_UNREAD,
82     PREF_ROSTER_COUNT,
83     PREF_ROSTER_COUNT_ZERO,
84     PREF_ROSTER_PRIORITY,
85     PREF_ROSTER_WRAP,
86     PREF_ROSTER_RESOURCE_JOIN,
87     PREF_ROSTER_CONTACTS,
88     PREF_ROSTER_UNSUBSCRIBED,
89     PREF_ROSTER_ROOMS,
90     PREF_ROSTER_ROOMS_POS,
91     PREF_ROSTER_ROOMS_BY,
92     PREF_ROSTER_ROOMS_ORDER,
93     PREF_ROSTER_ROOMS_UNREAD,
94     PREF_ROSTER_ROOMS_SERVER,
95     PREF_ROSTER_ROOMS_USE_AS_NAME,
96     PREF_ROSTER_PRIVATE,
97     PREF_MUC_PRIVILEGES,
98     PREF_PRESENCE,
99     PREF_WRAP,
100     PREF_TIME_CONSOLE,
101     PREF_TIME_CHAT,
102     PREF_TIME_MUC,
103     PREF_TIME_CONFIG,
104     PREF_TIME_PRIVATE,
105     PREF_TIME_XMLCONSOLE,
106     PREF_TIME_STATUSBAR,
107     PREF_TIME_LASTACTIVITY,
108     PREF_STATUSES,
109     PREF_STATUSES_CONSOLE,
110     PREF_STATUSES_CHAT,
111     PREF_STATUSES_MUC,
112     PREF_STATES,
113     PREF_OUTTYPE,
114     PREF_NOTIFY_TYPING,
115     PREF_NOTIFY_TYPING_CURRENT,
116     PREF_NOTIFY_CHAT,
117     PREF_NOTIFY_CHAT_CURRENT,
118     PREF_NOTIFY_CHAT_TEXT,
119     PREF_NOTIFY_ROOM,
120     PREF_NOTIFY_ROOM_MENTION,
121     PREF_NOTIFY_ROOM_TRIGGER,
122     PREF_NOTIFY_ROOM_CURRENT,
123     PREF_NOTIFY_ROOM_TEXT,
124     PREF_NOTIFY_INVITE,
125     PREF_NOTIFY_SUB,
126     PREF_NOTIFY_MENTION_CASE_SENSITIVE,
127     PREF_NOTIFY_MENTION_WHOLE_WORD,
128     PREF_CHLOG,
129     PREF_GRLOG,
130     PREF_AUTOAWAY_CHECK,
131     PREF_AUTOAWAY_MODE,
132     PREF_AUTOAWAY_MESSAGE,
133     PREF_AUTOXA_MESSAGE,
134     PREF_CONNECT_ACCOUNT,
135     PREF_DEFAULT_ACCOUNT,
136     PREF_LOG_ROTATE,
137     PREF_LOG_SHARED,
138     PREF_OTR_LOG,
139     PREF_OTR_POLICY,
140     PREF_OTR_SENDFILE,
141     PREF_RESOURCE_TITLE,
142     PREF_RESOURCE_MESSAGE,
143     PREF_INPBLOCK_DYNAMIC,
144     PREF_ENC_WARN,
145     PREF_TITLEBAR_MUC_TITLE_JID,
146     PREF_TITLEBAR_MUC_TITLE_NAME,
147     PREF_PGP_LOG,
148     PREF_PGP_SENDFILE,
149     PREF_TLS_CERTPATH,
150     PREF_TLS_SHOW,
151     PREF_LASTACTIVITY,
152     PREF_CONSOLE_MUC,
153     PREF_CONSOLE_PRIVATE,
154     PREF_CONSOLE_CHAT,
155     PREF_COLOR_NICK,
156     PREF_COLOR_NICK_OWN,
157     PREF_ROSTER_COLOR_NICK,
158     PREF_OCCUPANTS_COLOR_NICK,
159     PREF_BOOKMARK_INVITE,
160     PREF_PLUGINS_SOURCEPATH,
161     PREF_ROOM_LIST_CACHE,
162     PREF_STATUSBAR_SHOW_NAME,
163     PREF_STATUSBAR_SHOW_NUMBER,
164     PREF_STATUSBAR_SHOW_READ,
165     PREF_STATUSBAR_SELF,
166     PREF_STATUSBAR_CHAT,
167     PREF_STATUSBAR_ROOM,
168     PREF_OMEMO_LOG,
169     PREF_OMEMO_POLICY,
170     PREF_OMEMO_TRUST_MODE,
171     PREF_OCCUPANTS_WRAP,
172     PREF_CORRECTION_ALLOW,
173     PREF_AVATAR_CMD,
174     PREF_SLASH_GUARD,
175     PREF_MAM,
176     PREF_URL_OPEN_CMD,
177     PREF_URL_SAVE_CMD,
178     PREF_COMPOSE_EDITOR,
179     PREF_SILENCE_NON_ROSTER,
180 } preference_t;
181 
182 typedef struct prof_alias_t
183 {
184     gchar* name;
185     gchar* value;
186 } ProfAlias;
187 
188 typedef struct prof_winplacement_t
189 {
190     int titlebar_pos;
191     int mainwin_pos;
192     int statusbar_pos;
193     int inputwin_pos;
194 } ProfWinPlacement;
195 
196 void prefs_load(char* config_file);
197 void prefs_save(void);
198 void prefs_close(void);
199 void prefs_reload(void);
200 
201 char* prefs_find_login(char* prefix);
202 void prefs_reset_login_search(void);
203 
204 char* prefs_autocomplete_boolean_choice(const char* const prefix, gboolean previous, void* context);
205 void prefs_reset_boolean_choice(void);
206 
207 char* prefs_autocomplete_room_trigger(const char* const prefix, gboolean previous, void* context);
208 void prefs_reset_room_trigger_ac(void);
209 
210 gint prefs_get_gone(void);
211 void prefs_set_gone(gint value);
212 
213 void prefs_set_notify_remind(gint period);
214 gint prefs_get_notify_remind(void);
215 
216 void prefs_set_max_log_size(gint value);
217 gint prefs_get_max_log_size(void);
218 gint prefs_get_priority(void);
219 void prefs_set_reconnect(gint value);
220 gint prefs_get_reconnect(void);
221 void prefs_set_autoping(gint value);
222 gint prefs_get_autoping(void);
223 void prefs_set_autoping_timeout(gint value);
224 gint prefs_get_autoping_timeout(void);
225 gint prefs_get_inpblock(void);
226 void prefs_set_inpblock(gint value);
227 
228 void prefs_set_statusbartabs(gint value);
229 gint prefs_get_statusbartabs(void);
230 void prefs_set_statusbartablen(gint value);
231 gint prefs_get_statusbartablen(void);
232 
233 void prefs_set_occupants_size(gint value);
234 gint prefs_get_occupants_size(void);
235 void prefs_set_roster_size(gint value);
236 gint prefs_get_roster_size(void);
237 
238 gint prefs_get_autoaway_time(void);
239 void prefs_set_autoaway_time(gint value);
240 gint prefs_get_autoxa_time(void);
241 void prefs_set_autoxa_time(gint value);
242 
243 gchar** prefs_get_plugins(void);
244 void prefs_free_plugins(gchar** plugins);
245 void prefs_add_plugin(const char* const name);
246 void prefs_remove_plugin(const char* const name);
247 
248 char* prefs_get_otr_char(void);
249 gboolean prefs_set_otr_char(char* ch);
250 char* prefs_get_pgp_char(void);
251 gboolean prefs_set_pgp_char(char* ch);
252 char* prefs_get_omemo_char(void);
253 gboolean prefs_set_omemo_char(char* ch);
254 // XEP-0373: OpenPGP for XMPP
255 char* prefs_get_ox_char(void);
256 gboolean prefs_set_ox_char(char* ch);
257 
258 char prefs_get_roster_header_char(void);
259 void prefs_set_roster_header_char(char ch);
260 void prefs_clear_roster_header_char(void);
261 char prefs_get_roster_contact_char(void);
262 void prefs_set_roster_contact_char(char ch);
263 void prefs_clear_roster_contact_char(void);
264 char prefs_get_roster_resource_char(void);
265 void prefs_set_roster_resource_char(char ch);
266 void prefs_clear_roster_resource_char(void);
267 char prefs_get_roster_private_char(void);
268 void prefs_set_roster_private_char(char ch);
269 void prefs_clear_roster_private_char(void);
270 char prefs_get_roster_room_char(void);
271 void prefs_set_roster_room_char(char ch);
272 void prefs_clear_roster_room_char(void);
273 char prefs_get_roster_room_private_char(void);
274 void prefs_set_roster_room_private_char(char ch);
275 void prefs_clear_roster_room_private_char(void);
276 char prefs_get_occupants_char(void);
277 void prefs_set_occupants_char(char ch);
278 void prefs_clear_occupants_char(void);
279 char prefs_get_occupants_header_char(void);
280 void prefs_set_occupants_header_char(char ch);
281 void prefs_clear_occupants_header_char(void);
282 
283 gint prefs_get_roster_contact_indent(void);
284 void prefs_set_roster_contact_indent(gint value);
285 gint prefs_get_roster_resource_indent(void);
286 void prefs_set_roster_resource_indent(gint value);
287 gint prefs_get_roster_presence_indent(void);
288 void prefs_set_roster_presence_indent(gint value);
289 gint prefs_get_occupants_indent(void);
290 void prefs_set_occupants_indent(gint value);
291 
292 char* prefs_get_correction_char(void);
293 void prefs_set_correction_char(char ch);
294 
295 void prefs_add_login(const char* jid);
296 
297 void prefs_set_tray_timer(gint value);
298 gint prefs_get_tray_timer(void);
299 
300 gboolean prefs_add_alias(const char* const name, const char* const value);
301 gboolean prefs_remove_alias(const char* const name);
302 char* prefs_get_alias(const char* const name);
303 GList* prefs_get_aliases(void);
304 void prefs_free_aliases(GList* aliases);
305 
306 gboolean prefs_add_room_notify_trigger(const char* const text);
307 gboolean prefs_remove_room_notify_trigger(const char* const text);
308 GList* prefs_get_room_notify_triggers(void);
309 
310 ProfWinPlacement* prefs_get_win_placement(void);
311 void prefs_free_win_placement(ProfWinPlacement* placement);
312 
313 gboolean prefs_titlebar_pos_up(void);
314 gboolean prefs_titlebar_pos_down(void);
315 gboolean prefs_mainwin_pos_up(void);
316 gboolean prefs_mainwin_pos_down(void);
317 gboolean prefs_statusbar_pos_up(void);
318 gboolean prefs_statusbar_pos_down(void);
319 gboolean prefs_inputwin_pos_up(void);
320 gboolean prefs_inputwin_pos_down(void);
321 ProfWinPlacement* prefs_create_profwin_placement(int titlebar, int mainwin, int statusbar, int inputwin);
322 void prefs_save_win_placement(ProfWinPlacement* placement);
323 
324 gboolean prefs_get_boolean(preference_t pref);
325 void prefs_set_boolean(preference_t pref, gboolean value);
326 char* prefs_get_string(preference_t pref);
327 char* prefs_get_string_with_option(preference_t pref, gchar* option);
328 void prefs_set_string(preference_t pref, char* value);
329 void prefs_set_string_with_option(preference_t pref, char* option, char* value);
330 void prefs_set_string_list_with_option(preference_t pref, char* option, const gchar* const* values);
331 
332 char* prefs_get_tls_certpath(void);
333 
334 gboolean prefs_do_chat_notify(gboolean current_win);
335 gboolean prefs_do_room_notify(gboolean current_win, const char* const roomjid, const char* const mynick,
336                               const char* const theirnick, const char* const message, gboolean mention, gboolean trigger_found);
337 gboolean prefs_do_room_notify_mention(const char* const roomjid, int unread, gboolean mention, gboolean trigger);
338 GList* prefs_message_get_triggers(const char* const message);
339 
340 void prefs_set_room_notify(const char* const roomjid, gboolean value);
341 void prefs_set_room_notify_mention(const char* const roomjid, gboolean value);
342 void prefs_set_room_notify_trigger(const char* const roomjid, gboolean value);
343 gboolean prefs_reset_room_notify(const char* const roomjid);
344 gboolean prefs_has_room_notify(const char* const roomjid);
345 gboolean prefs_has_room_notify_mention(const char* const roomjid);
346 gboolean prefs_has_room_notify_trigger(const char* const roomjid);
347 gboolean prefs_get_room_notify(const char* const roomjid);
348 gboolean prefs_get_room_notify_mention(const char* const roomjid);
349 gboolean prefs_get_room_notify_trigger(const char* const roomjid);
350 
351 gchar* prefs_get_inputrc(void);
352 
353 #endif
354