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