2012-10-21 15:02:20 -04:00
/*
2012-05-09 22:29:48 -04:00
* preferences . c
2019-11-13 06:11:05 -05:00
* vim : expandtab : ts = 4 : sts = 4 : sw = 4
2012-05-09 22:29:48 -04:00
*
2019-01-22 05:31:45 -05:00
* Copyright ( C ) 2012 - 2019 James Booth < boothj5 @ gmail . com >
2023-01-10 04:37:25 -05:00
* Copyright ( C ) 2019 - 2023 Michael Vetter < jubalh @ iodoru . org >
2012-10-21 15:02:20 -04:00
*
2012-05-09 22:29:48 -04:00
* This file is part of Profanity .
*
* Profanity is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* Profanity is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2016-07-23 20:14:49 -04:00
* along with Profanity . If not , see < https : //www.gnu.org/licenses/>.
2012-05-09 22:29:48 -04:00
*
2014-08-24 15:57:39 -04:00
* In addition , as a special exception , the copyright holders give permission to
* link the code of portions of this program with the OpenSSL library under
* certain conditions as described in each individual source file , and
* distribute linked combinations including the two .
*
* You must obey the GNU General Public License in all respects for all of the
* code used other than OpenSSL . If you modify file ( s ) with this exception , you
* may extend this exception to your version of the file ( s ) , but you are not
* obligated to do so . If you do not wish to do so , delete this exception
* statement from your version . If you delete this exception statement from all
* source files in the program , then also delete it here .
*
2012-05-09 22:29:48 -04:00
*/
2016-03-31 16:05:02 -04:00
# include "config.h"
2013-02-02 15:55:58 -05:00
2012-05-09 22:37:24 -04:00
# include <stdlib.h>
2020-07-07 07:53:30 -04:00
# include <stdio.h>
2012-05-10 17:18:08 -04:00
# include <string.h>
2012-05-09 22:29:48 -04:00
# include <glib.h>
2014-10-18 16:26:38 -04:00
# include <glib/gstdio.h>
2013-02-02 17:18:08 -05:00
# include "common.h"
2013-02-02 15:55:58 -05:00
# include "log.h"
2013-02-02 17:18:08 -05:00
# include "preferences.h"
2013-02-02 16:43:59 -05:00
# include "tools/autocomplete.h"
2020-07-07 07:53:30 -04:00
# include "config/files.h"
# include "config/conflists.h"
2012-05-10 18:51:06 -04:00
2020-01-29 05:50:04 -05:00
// preference groups refer to the sections in .profrc or theme files
// for example [ui] but not [colours] which is handled in theme.c
2020-07-07 08:18:57 -04:00
# define PREF_GROUP_LOGGING "logging"
# define PREF_GROUP_CHATSTATES "chatstates"
# define PREF_GROUP_UI "ui"
2013-02-02 21:35:04 -05:00
# define PREF_GROUP_NOTIFICATIONS "notifications"
2020-07-07 08:18:57 -04:00
# define PREF_GROUP_PRESENCE "presence"
# define PREF_GROUP_CONNECTION "connection"
# define PREF_GROUP_ALIAS "alias"
# define PREF_GROUP_OTR "otr"
# define PREF_GROUP_PGP "pgp"
# define PREF_GROUP_OMEMO "omemo"
# define PREF_GROUP_OX "ox"
# define PREF_GROUP_MUC "muc"
# define PREF_GROUP_PLUGINS "plugins"
# define PREF_GROUP_EXECUTABLES "executables"
2013-02-02 21:35:04 -05:00
2015-02-10 18:40:23 -05:00
# define INPBLOCK_DEFAULT 1000
2014-12-21 13:15:29 -05:00
2020-07-07 08:18:57 -04:00
static gchar * prefs_loc ;
static GKeyFile * prefs ;
2012-11-12 04:13:03 -05:00
gint log_maxsize = 0 ;
2012-05-09 22:29:48 -04:00
2013-01-24 20:11:49 -05:00
static Autocomplete boolean_choice_ac ;
2015-11-23 20:34:06 -05:00
static Autocomplete room_trigger_ac ;
2012-05-10 17:44:23 -04:00
2012-05-10 05:12:02 -04:00
static void _save_prefs ( void ) ;
2015-10-25 18:23:38 -04:00
static const char * _get_group ( preference_t pref ) ;
static const char * _get_key ( preference_t pref ) ;
2013-02-02 21:51:15 -05:00
static gboolean _get_default_boolean ( preference_t pref ) ;
2015-10-25 18:23:38 -04:00
static char * _get_default_string ( preference_t pref ) ;
2012-05-10 05:02:03 -04:00
2020-07-07 08:18:57 -04:00
static void
_prefs_load ( void )
2012-05-09 22:29:48 -04:00
{
2020-07-07 08:18:57 -04:00
GError * err = NULL ;
2013-02-02 21:35:04 -05:00
log_maxsize = g_key_file_get_integer ( prefs , PREF_GROUP_LOGGING , " maxsize " , & err ) ;
2015-05-04 17:33:19 -04:00
if ( err ) {
2012-11-12 04:13:03 -05:00
log_maxsize = 0 ;
g_error_free ( err ) ;
}
2015-12-01 19:34:27 -05:00
// move pre 0.5.0 autoaway.time to autoaway.awaytime
2015-09-27 18:08:30 -04:00
if ( g_key_file_has_key ( prefs , PREF_GROUP_PRESENCE , " autoaway.time " , NULL ) ) {
gint time = g_key_file_get_integer ( prefs , PREF_GROUP_PRESENCE , " autoaway.time " , NULL ) ;
g_key_file_set_integer ( prefs , PREF_GROUP_PRESENCE , " autoaway.awaytime " , time ) ;
g_key_file_remove_key ( prefs , PREF_GROUP_PRESENCE , " autoaway.time " , NULL ) ;
}
2015-12-01 19:34:27 -05:00
// move pre 0.5.0 autoaway.message to autoaway.awaymessage
2015-09-27 18:08:30 -04:00
if ( g_key_file_has_key ( prefs , PREF_GROUP_PRESENCE , " autoaway.message " , NULL ) ) {
2023-04-18 20:44:19 -04:00
auto_gchar gchar * message = g_key_file_get_string ( prefs , PREF_GROUP_PRESENCE , " autoaway.message " , NULL ) ;
2015-09-27 18:08:30 -04:00
g_key_file_set_string ( prefs , PREF_GROUP_PRESENCE , " autoaway.awaymessage " , message ) ;
g_key_file_remove_key ( prefs , PREF_GROUP_PRESENCE , " autoaway.message " , NULL ) ;
}
2015-12-01 19:34:27 -05:00
// migrate pre 0.5.0 time settings
2015-07-02 11:31:09 -04:00
if ( g_key_file_has_key ( prefs , PREF_GROUP_UI , " time " , NULL ) ) {
2023-04-18 20:44:19 -04:00
auto_gchar gchar * time = g_key_file_get_string ( prefs , PREF_GROUP_UI , " time " , NULL ) ;
char * val = time ? time : " off " ;
2015-09-30 17:34:27 -04:00
g_key_file_set_string ( prefs , PREF_GROUP_UI , " time.console " , val ) ;
g_key_file_set_string ( prefs , PREF_GROUP_UI , " time.chat " , val ) ;
g_key_file_set_string ( prefs , PREF_GROUP_UI , " time.muc " , val ) ;
2018-04-11 12:57:50 -04:00
g_key_file_set_string ( prefs , PREF_GROUP_UI , " time.config " , val ) ;
2015-09-30 17:34:27 -04:00
g_key_file_set_string ( prefs , PREF_GROUP_UI , " time.private " , val ) ;
g_key_file_set_string ( prefs , PREF_GROUP_UI , " time.xmlconsole " , val ) ;
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " time " , NULL ) ;
2015-07-02 11:31:09 -04:00
}
2015-12-01 19:34:27 -05:00
// move pre 0.5.0 notify settings
2015-11-25 16:24:21 -05:00
if ( g_key_file_has_key ( prefs , PREF_GROUP_NOTIFICATIONS , " room " , NULL ) ) {
2023-04-18 20:44:19 -04:00
auto_gchar gchar * value = g_key_file_get_string ( prefs , PREF_GROUP_NOTIFICATIONS , " room " , NULL ) ;
2015-11-25 16:24:21 -05:00
if ( g_strcmp0 ( value , " on " ) = = 0 ) {
g_key_file_set_boolean ( prefs , PREF_GROUP_NOTIFICATIONS , " room " , TRUE ) ;
} else if ( g_strcmp0 ( value , " off " ) = = 0 ) {
g_key_file_set_boolean ( prefs , PREF_GROUP_NOTIFICATIONS , " room " , FALSE ) ;
} else if ( g_strcmp0 ( value , " mention " ) = = 0 ) {
g_key_file_set_boolean ( prefs , PREF_GROUP_NOTIFICATIONS , " room " , FALSE ) ;
g_key_file_set_boolean ( prefs , PREF_GROUP_NOTIFICATIONS , " room.mention " , TRUE ) ;
}
}
2016-09-22 19:56:53 -04:00
// move pre 0.6.0 titlebar settings to wintitle
2016-09-22 16:42:00 -04:00
if ( g_key_file_has_key ( prefs , PREF_GROUP_UI , " titlebar.show " , NULL ) ) {
gboolean show = g_key_file_get_boolean ( prefs , PREF_GROUP_UI , " titlebar.show " , NULL ) ;
g_key_file_set_boolean ( prefs , PREF_GROUP_UI , " wintitle.show " , show ) ;
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " titlebar.show " , NULL ) ;
}
if ( g_key_file_has_key ( prefs , PREF_GROUP_UI , " titlebar.goodbye " , NULL ) ) {
gboolean goodbye = g_key_file_get_boolean ( prefs , PREF_GROUP_UI , " titlebar.goodbye " , NULL ) ;
g_key_file_set_boolean ( prefs , PREF_GROUP_UI , " wintitle.goodbye " , goodbye ) ;
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " titlebar.goodbye " , NULL ) ;
}
2020-03-24 17:13:14 -04:00
// after 0.8.1: titlebar use jid|name -> titlebar show|hide jid|name
if ( g_key_file_has_key ( prefs , PREF_GROUP_UI , " titlebar.muc.title " , NULL ) ) {
2023-04-18 20:44:19 -04:00
auto_gchar gchar * value = g_key_file_get_string ( prefs , PREF_GROUP_UI , " titlebar.muc.title " , NULL ) ;
2020-03-24 17:13:14 -04:00
if ( g_strcmp0 ( value , " name " ) = = 0 ) {
g_key_file_set_boolean ( prefs , PREF_GROUP_UI , " titlebar.muc.title.name " , TRUE ) ;
} else if ( g_strcmp0 ( value , " jid " ) = = 0 ) {
g_key_file_set_boolean ( prefs , PREF_GROUP_UI , " titlebar.muc.title.jid " , TRUE ) ;
}
}
2020-07-01 09:29:57 -04:00
// 0.9.0 introduced /urlopen. It was saved under "logging" section. Now we have a new "executables" section.
if ( g_key_file_has_key ( prefs , PREF_GROUP_LOGGING , " urlopen.cmd " , NULL ) ) {
2023-04-18 20:44:19 -04:00
auto_gchar gchar * val = g_key_file_get_string ( prefs , PREF_GROUP_LOGGING , " urlopen.cmd " , NULL ) ;
2020-07-02 04:22:18 -04:00
2020-07-07 08:18:57 -04:00
GString * value = g_string_new ( " false; " ) ;
2020-07-02 04:22:18 -04:00
value = g_string_append ( value , val ) ;
value = g_string_append ( value , " %u; " ) ;
2020-12-18 10:05:11 -05:00
g_key_file_set_locale_string ( prefs , PREF_GROUP_EXECUTABLES , " url.open.cmd " , " DEF " , value - > str ) ;
2020-07-01 09:29:57 -04:00
g_key_file_remove_key ( prefs , PREF_GROUP_LOGGING , " urlopen.cmd " , NULL ) ;
2020-07-02 04:22:18 -04:00
g_string_free ( value , TRUE ) ;
2020-07-01 09:29:57 -04:00
}
// 0.9.0 introduced configurable /avatar. It was saved under "logging" section. Now we have a new "executables" section.
if ( g_key_file_has_key ( prefs , PREF_GROUP_LOGGING , " avatar.cmd " , NULL ) ) {
2023-04-18 20:44:19 -04:00
auto_gchar gchar * value = g_key_file_get_string ( prefs , PREF_GROUP_LOGGING , " avatar.cmd " , NULL ) ;
2020-07-01 09:29:57 -04:00
g_key_file_set_string ( prefs , PREF_GROUP_EXECUTABLES , " avatar.cmd " , value ) ;
g_key_file_remove_key ( prefs , PREF_GROUP_LOGGING , " avatar.cmd " , NULL ) ;
}
2020-12-18 10:05:11 -05:00
// 0.10 will have omemo media sharing. So disabling of sendfile introduced in 0.9 is not needed (#1270)
2020-12-09 02:40:55 -05:00
if ( g_key_file_has_key ( prefs , PREF_GROUP_OMEMO , " sendfile " , NULL ) ) {
g_key_file_remove_key ( prefs , PREF_GROUP_OMEMO , " sendfile " , NULL ) ;
}
2020-07-01 09:29:57 -04:00
2020-12-18 10:05:11 -05:00
// 0.10 have changed the behavior of /url open and /url save to not use any
// file type or scheme matching. Move value saved under 'DEF' locale to a
// simple key-value string not under any locale.
{
2023-04-18 20:44:19 -04:00
auto_gcharv gchar * * values = g_key_file_get_locale_string_list ( prefs , PREF_GROUP_EXECUTABLES , " url.open.cmd " , " DEF " , NULL , NULL ) ;
2020-12-18 10:05:11 -05:00
if ( values & & ! g_key_file_has_key ( prefs , PREF_GROUP_EXECUTABLES , " url.open.cmd " , NULL ) ) {
// First value in array is `require_save` option -- we ignore that
// one as there is no such option anymore.
char * executable = values [ 1 ] ;
g_key_file_set_string ( prefs , PREF_GROUP_EXECUTABLES , " url.open.cmd " , executable ) ;
g_key_file_set_comment ( prefs , PREF_GROUP_EXECUTABLES , " url.open.cmd " , " Migrated from url.open.cmd[DEF]. `require_save` option has been removed in v0.10 and was discarded. " , NULL ) ;
g_key_file_remove_key ( prefs , PREF_GROUP_EXECUTABLES , " url.open.cmd[DEF] " , NULL ) ;
}
2023-04-18 20:44:19 -04:00
auto_gchar gchar * value = g_key_file_get_locale_string ( prefs , PREF_GROUP_EXECUTABLES , " url.save.cmd " , " DEF " , NULL ) ;
2020-12-18 10:05:11 -05:00
if ( value & & ! g_key_file_has_key ( prefs , PREF_GROUP_EXECUTABLES , " url.save.cmd " , NULL ) ) {
g_key_file_set_string ( prefs , PREF_GROUP_EXECUTABLES , " url.save.cmd " , value ) ;
g_key_file_set_comment ( prefs , PREF_GROUP_EXECUTABLES , " url.save.cmd " , " Migrated from url.save.cmd[DEF]. " , NULL ) ;
g_key_file_remove_key ( prefs , PREF_GROUP_EXECUTABLES , " url.save.cmd[DEF] " , NULL ) ;
}
}
2021-09-29 11:31:24 -04:00
// 0.12 started to remove `sourcepath`
if ( g_key_file_has_key ( prefs , PREF_GROUP_PLUGINS , " sourcepath " , NULL ) ) {
g_key_file_remove_key ( prefs , PREF_GROUP_PLUGINS , " sourcepath " , NULL ) ;
}
2014-05-11 08:13:25 -04:00
_save_prefs ( ) ;
2013-01-24 20:11:49 -05:00
boolean_choice_ac = autocomplete_new ( ) ;
2013-08-25 20:29:50 -04:00
autocomplete_add ( boolean_choice_ac , " on " ) ;
autocomplete_add ( boolean_choice_ac , " off " ) ;
2015-11-23 20:34:06 -05:00
room_trigger_ac = autocomplete_new ( ) ;
2015-11-28 18:43:02 -05:00
gsize len = 0 ;
2023-07-13 10:31:31 -04:00
auto_gcharv gchar * * triggers = g_key_file_get_string_list ( prefs , PREF_GROUP_NOTIFICATIONS , " room.trigger.list " , & len , NULL ) ;
2015-11-23 20:34:06 -05:00
2020-11-09 05:03:54 -05:00
for ( int i = 0 ; i < len ; i + + ) {
2015-11-23 20:34:06 -05:00
autocomplete_add ( room_trigger_ac , triggers [ i ] ) ;
}
2012-06-18 17:16:57 -04:00
}
2020-02-26 18:35:36 -05:00
/* Clean up after _prefs_load() */
2020-07-07 08:18:57 -04:00
static void
_prefs_close ( void )
2020-02-26 18:35:36 -05:00
{
autocomplete_free ( boolean_choice_ac ) ;
autocomplete_free ( room_trigger_ac ) ;
}
2019-10-04 08:06:25 -04:00
void
prefs_reload ( void )
{
2020-02-26 18:35:36 -05:00
/*
* Current function contains copy - paste , but we wanted to avoid config_file
* manipulation from prefs_load / prefs_close
*/
_prefs_close ( ) ;
2019-10-04 08:06:25 -04:00
g_key_file_free ( prefs ) ;
prefs = NULL ;
prefs = g_key_file_new ( ) ;
g_key_file_load_from_file ( prefs , prefs_loc , G_KEY_FILE_KEEP_COMMENTS , NULL ) ;
_prefs_load ( ) ;
}
void
2020-07-07 08:18:57 -04:00
prefs_load ( char * config_file )
2019-10-04 08:06:25 -04:00
{
if ( config_file = = NULL ) {
prefs_loc = files_get_config_path ( FILE_PROFRC ) ;
} else {
2020-06-12 10:12:21 -04:00
prefs_loc = g_strdup ( config_file ) ;
2019-10-04 08:06:25 -04:00
}
if ( g_file_test ( prefs_loc , G_FILE_TEST_EXISTS ) ) {
g_chmod ( prefs_loc , S_IRUSR | S_IWUSR ) ;
}
prefs = g_key_file_new ( ) ;
2020-06-12 03:07:59 -04:00
g_key_file_load_from_file ( prefs , prefs_loc , G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS , NULL ) ;
2019-10-04 08:06:25 -04:00
_prefs_load ( ) ;
}
2019-08-02 04:23:13 -04:00
void
prefs_save ( void )
{
_save_prefs ( ) ;
}
2012-07-31 18:01:15 -04:00
void
prefs_close ( void )
{
2020-02-26 18:35:36 -05:00
_prefs_close ( ) ;
2019-10-05 14:45:07 -04:00
2012-07-31 18:01:15 -04:00
g_key_file_free ( prefs ) ;
2014-01-20 13:40:48 -05:00
prefs = NULL ;
2019-10-05 14:45:07 -04:00
2020-06-12 10:12:21 -04:00
g_free ( prefs_loc ) ;
2019-10-05 14:45:07 -04:00
prefs_loc = NULL ;
2012-07-31 18:01:15 -04:00
}
2023-07-11 07:23:58 -04:00
gchar *
2020-07-07 08:18:57 -04:00
prefs_autocomplete_boolean_choice ( const char * const prefix , gboolean previous , void * context )
2012-10-22 17:15:06 -04:00
{
2017-03-31 19:27:11 -04:00
return autocomplete_complete ( boolean_choice_ac , prefix , TRUE , previous ) ;
2012-10-22 17:15:06 -04:00
}
void
prefs_reset_boolean_choice ( void )
{
2013-01-24 20:11:49 -05:00
autocomplete_reset ( boolean_choice_ac ) ;
2012-05-09 22:29:48 -04:00
}
2012-05-10 04:55:55 -04:00
2023-07-11 07:23:58 -04:00
gchar *
2020-07-07 08:18:57 -04:00
prefs_autocomplete_room_trigger ( const char * const prefix , gboolean previous , void * context )
2015-11-23 20:34:06 -05:00
{
2017-03-31 19:27:11 -04:00
return autocomplete_complete ( room_trigger_ac , prefix , TRUE , previous ) ;
2015-11-23 20:34:06 -05:00
}
void
prefs_reset_room_trigger_ac ( void )
{
autocomplete_reset ( room_trigger_ac ) ;
}
2015-11-24 18:03:52 -05:00
gboolean
2016-02-03 19:21:38 -05:00
prefs_do_chat_notify ( gboolean current_win )
2015-11-24 18:03:52 -05:00
{
2016-02-03 19:35:10 -05:00
if ( prefs_get_boolean ( PREF_NOTIFY_CHAT ) = = FALSE ) {
2015-11-24 20:42:27 -05:00
return FALSE ;
2016-02-03 19:35:10 -05:00
} else {
if ( ( current_win = = FALSE ) | | ( ( current_win = = TRUE ) & & prefs_get_boolean ( PREF_NOTIFY_CHAT_CURRENT ) ) ) {
return TRUE ;
} else {
return FALSE ;
}
2015-11-24 20:42:27 -05:00
}
2015-11-24 18:03:52 -05:00
}
2016-01-24 18:06:22 -05:00
GList *
2020-07-07 08:18:57 -04:00
prefs_message_get_triggers ( const char * const message )
2016-01-24 12:33:26 -05:00
{
2020-07-07 08:18:57 -04:00
GList * result = NULL ;
2016-01-24 18:06:22 -05:00
2023-04-18 20:44:19 -04:00
auto_gchar gchar * message_lower = g_utf8_strdown ( message , - 1 ) ;
2016-01-24 12:33:26 -05:00
gsize len = 0 ;
2023-07-13 10:31:31 -04:00
auto_gcharv gchar * * triggers = g_key_file_get_string_list ( prefs , PREF_GROUP_NOTIFICATIONS , " room.trigger.list " , & len , NULL ) ;
2020-11-09 05:03:54 -05:00
for ( int i = 0 ; i < len ; i + + ) {
2023-04-18 20:44:19 -04:00
auto_gchar gchar * trigger_lower = g_utf8_strdown ( triggers [ i ] , - 1 ) ;
2016-01-24 12:33:26 -05:00
if ( g_strrstr ( message_lower , trigger_lower ) ) {
2016-01-24 18:06:22 -05:00
result = g_list_append ( result , strdup ( triggers [ i ] ) ) ;
2016-01-24 12:33:26 -05:00
}
}
2020-11-09 05:03:54 -05:00
2016-01-24 18:06:22 -05:00
return result ;
2016-01-24 12:33:26 -05:00
}
2015-11-24 18:03:52 -05:00
gboolean
2020-07-07 08:18:57 -04:00
prefs_do_room_notify ( gboolean current_win , const char * const roomjid , const char * const mynick ,
const char * const theirnick , const char * const message , gboolean mention , gboolean trigger_found )
2015-11-24 18:03:52 -05:00
{
2016-02-03 20:24:37 -05:00
if ( g_strcmp0 ( mynick , theirnick ) = = 0 ) {
return FALSE ;
}
2015-11-25 16:24:21 -05:00
gboolean notify_current = prefs_get_boolean ( PREF_NOTIFY_ROOM_CURRENT ) ;
2015-11-24 18:03:52 -05:00
gboolean notify_window = FALSE ;
2020-07-07 08:18:57 -04:00
if ( ! current_win | | ( current_win & & notify_current ) ) {
2015-11-25 16:24:21 -05:00
notify_window = TRUE ;
}
if ( ! notify_window ) {
return FALSE ;
}
2015-11-24 18:03:52 -05:00
2015-11-27 19:15:53 -05:00
gboolean notify_room = FALSE ;
if ( g_key_file_has_key ( prefs , roomjid , " notify " , NULL ) ) {
notify_room = g_key_file_get_boolean ( prefs , roomjid , " notify " , NULL ) ;
} else {
notify_room = prefs_get_boolean ( PREF_NOTIFY_ROOM ) ;
}
2015-11-25 16:24:21 -05:00
if ( notify_room ) {
return TRUE ;
2015-11-24 18:03:52 -05:00
}
2015-11-25 16:24:21 -05:00
2015-11-27 19:15:53 -05:00
gboolean notify_mention = FALSE ;
if ( g_key_file_has_key ( prefs , roomjid , " notify.mention " , NULL ) ) {
notify_mention = g_key_file_get_boolean ( prefs , roomjid , " notify.mention " , NULL ) ;
} else {
notify_mention = prefs_get_boolean ( PREF_NOTIFY_ROOM_MENTION ) ;
}
2016-01-24 18:06:22 -05:00
if ( notify_mention & & mention ) {
return TRUE ;
2015-11-24 18:03:52 -05:00
}
2015-11-27 19:15:53 -05:00
gboolean notify_trigger = FALSE ;
if ( g_key_file_has_key ( prefs , roomjid , " notify.trigger " , NULL ) ) {
notify_trigger = g_key_file_get_boolean ( prefs , roomjid , " notify.trigger " , NULL ) ;
} else {
notify_trigger = prefs_get_boolean ( PREF_NOTIFY_ROOM_TRIGGER ) ;
2015-11-25 16:24:21 -05:00
}
2016-01-24 18:06:22 -05:00
if ( notify_trigger & & trigger_found ) {
2016-01-24 12:33:26 -05:00
return TRUE ;
2015-11-24 18:03:52 -05:00
}
2015-11-27 19:15:53 -05:00
return FALSE ;
}
2016-02-06 20:15:40 -05:00
gboolean
2020-07-07 08:18:57 -04:00
prefs_do_room_notify_mention ( const char * const roomjid , int unread , gboolean mention , gboolean trigger )
2016-02-06 20:15:40 -05:00
{
gboolean notify_room = FALSE ;
if ( g_key_file_has_key ( prefs , roomjid , " notify " , NULL ) ) {
notify_room = g_key_file_get_boolean ( prefs , roomjid , " notify " , NULL ) ;
} else {
notify_room = prefs_get_boolean ( PREF_NOTIFY_ROOM ) ;
}
if ( notify_room & & unread > 0 ) {
return TRUE ;
}
gboolean notify_mention = FALSE ;
if ( g_key_file_has_key ( prefs , roomjid , " notify.mention " , NULL ) ) {
notify_mention = g_key_file_get_boolean ( prefs , roomjid , " notify.mention " , NULL ) ;
} else {
notify_mention = prefs_get_boolean ( PREF_NOTIFY_ROOM_MENTION ) ;
}
if ( notify_mention & & mention ) {
return TRUE ;
}
gboolean notify_trigger = FALSE ;
if ( g_key_file_has_key ( prefs , roomjid , " notify.trigger " , NULL ) ) {
notify_trigger = g_key_file_get_boolean ( prefs , roomjid , " notify.trigger " , NULL ) ;
} else {
notify_trigger = prefs_get_boolean ( PREF_NOTIFY_ROOM_TRIGGER ) ;
}
if ( notify_trigger & & trigger ) {
return TRUE ;
}
return FALSE ;
}
2015-11-27 19:15:53 -05:00
void
2020-07-07 08:18:57 -04:00
prefs_set_room_notify ( const char * const roomjid , gboolean value )
2015-11-27 19:15:53 -05:00
{
g_key_file_set_boolean ( prefs , roomjid , " notify " , value ) ;
}
void
2020-07-07 08:18:57 -04:00
prefs_set_room_notify_mention ( const char * const roomjid , gboolean value )
2015-11-27 19:15:53 -05:00
{
g_key_file_set_boolean ( prefs , roomjid , " notify.mention " , value ) ;
}
void
2020-07-07 08:18:57 -04:00
prefs_set_room_notify_trigger ( const char * const roomjid , gboolean value )
2015-11-27 19:15:53 -05:00
{
g_key_file_set_boolean ( prefs , roomjid , " notify.trigger " , value ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_has_room_notify ( const char * const roomjid )
2015-11-27 19:15:53 -05:00
{
return g_key_file_has_key ( prefs , roomjid , " notify " , NULL ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_has_room_notify_mention ( const char * const roomjid )
2015-11-27 19:15:53 -05:00
{
return g_key_file_has_key ( prefs , roomjid , " notify.mention " , NULL ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_has_room_notify_trigger ( const char * const roomjid )
2015-11-27 19:15:53 -05:00
{
return g_key_file_has_key ( prefs , roomjid , " notify.trigger " , NULL ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_get_room_notify ( const char * const roomjid )
2015-11-27 19:15:53 -05:00
{
return g_key_file_get_boolean ( prefs , roomjid , " notify " , NULL ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_get_room_notify_mention ( const char * const roomjid )
2015-11-27 19:15:53 -05:00
{
return g_key_file_get_boolean ( prefs , roomjid , " notify.mention " , NULL ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_get_room_notify_trigger ( const char * const roomjid )
2015-11-27 19:15:53 -05:00
{
return g_key_file_get_boolean ( prefs , roomjid , " notify.trigger " , NULL ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_reset_room_notify ( const char * const roomjid )
2015-11-27 19:15:53 -05:00
{
if ( g_key_file_has_group ( prefs , roomjid ) ) {
g_key_file_remove_group ( prefs , roomjid , NULL ) ;
2015-11-25 16:24:21 -05:00
return TRUE ;
}
return FALSE ;
2015-11-24 18:03:52 -05:00
}
2012-07-24 18:19:48 -04:00
gboolean
2013-02-02 21:35:04 -05:00
prefs_get_boolean ( preference_t pref )
2012-05-10 04:55:55 -04:00
{
2020-07-07 08:18:57 -04:00
const char * group = _get_group ( pref ) ;
const char * key = _get_key ( pref ) ;
2013-02-02 21:35:04 -05:00
gboolean def = _get_default_boolean ( pref ) ;
if ( ! g_key_file_has_key ( prefs , group , key , NULL ) ) {
return def ;
}
return g_key_file_get_boolean ( prefs , group , key , NULL ) ;
2012-05-10 04:55:55 -04:00
}
2012-07-24 18:19:48 -04:00
void
2013-02-02 21:51:15 -05:00
prefs_set_boolean ( preference_t pref , gboolean value )
2012-05-10 04:55:55 -04:00
{
2020-07-07 08:18:57 -04:00
const char * group = _get_group ( pref ) ;
const char * key = _get_key ( pref ) ;
2013-02-02 21:51:15 -05:00
g_key_file_set_boolean ( prefs , group , key , value ) ;
2012-05-10 04:55:55 -04:00
}
2023-07-13 10:46:24 -04:00
/**
* @ brief Retrieves a string preference value .
*
* @ param pref The preference identifier .
* @ return The string preference value or ` NULL ` if not found .
*
* @ note Remember to free the returned string using ` auto_gchar ` or ` g_free ( ) ` .
*/
2022-12-05 04:25:57 -05:00
gchar *
2013-02-02 22:24:13 -05:00
prefs_get_string ( preference_t pref )
2012-11-21 16:24:10 -05:00
{
2020-07-07 08:18:57 -04:00
const char * group = _get_group ( pref ) ;
const char * key = _get_key ( pref ) ;
char * def = _get_default_string ( pref ) ;
2013-02-02 22:24:13 -05:00
2023-04-18 20:44:19 -04:00
gchar * result = g_key_file_get_string ( prefs , group , key , NULL ) ;
2013-02-02 22:24:13 -05:00
if ( result = = NULL ) {
2015-05-04 17:33:19 -04:00
if ( def ) {
2015-06-24 08:50:04 -04:00
return g_strdup ( def ) ;
2014-06-17 19:32:36 -04:00
} else {
return NULL ;
}
2013-02-02 22:24:13 -05:00
} else {
return result ;
}
2012-11-21 16:24:10 -05:00
}
2023-07-13 10:46:24 -04:00
/**
* @ brief Retrieves a localized string preference value .
*
* @ param pref The preference to retrieve the value for .
* @ param locale The option to consider .
* @ return Returns the value associated with pref translated in the given locale if available .
*
* @ note Remember to free the returned string using ` auto_gchar ` or ` g_free ( ) ` .
*/
2022-12-05 04:25:57 -05:00
gchar *
2023-07-12 11:43:33 -04:00
prefs_get_string_with_locale ( preference_t pref , gchar * locale )
2020-06-12 03:07:59 -04:00
{
2020-07-07 08:18:57 -04:00
const char * group = _get_group ( pref ) ;
const char * key = _get_key ( pref ) ;
char * def = _get_default_string ( pref ) ;
2020-06-12 03:07:59 -04:00
2023-07-12 11:43:33 -04:00
gchar * result = g_key_file_get_locale_string ( prefs , group , key , locale , NULL ) ;
2020-06-12 03:07:59 -04:00
if ( result = = NULL ) {
2020-07-02 04:59:45 -04:00
// check for user set default
2020-12-08 14:01:17 -05:00
result = g_key_file_get_locale_string ( prefs , group , key , " * " , NULL ) ;
2020-07-02 04:59:45 -04:00
if ( result = = NULL ) {
if ( def ) {
// use hardcoded profanity default
return g_strdup ( def ) ;
} else {
return NULL ;
}
2020-06-12 03:07:59 -04:00
}
}
2020-07-02 04:59:45 -04:00
return result ;
2020-06-12 03:07:59 -04:00
}
2023-07-13 10:46:24 -04:00
/**
* @ brief Sets or deletes a string value for the given preference in the preference file .
*
* @ param pref The preference to set the value for .
* @ param new_value The new string value to set . Pass NULL to remove the key .
*/
2012-11-21 16:24:10 -05:00
void
2023-07-12 11:43:33 -04:00
prefs_set_string ( preference_t pref , gchar * new_value )
2012-11-21 16:24:10 -05:00
{
2020-07-07 08:18:57 -04:00
const char * group = _get_group ( pref ) ;
const char * key = _get_key ( pref ) ;
2023-07-12 11:43:33 -04:00
if ( new_value = = NULL ) {
2013-02-02 22:24:13 -05:00
g_key_file_remove_key ( prefs , group , key , NULL ) ;
} else {
2023-07-12 11:43:33 -04:00
g_key_file_set_string ( prefs , group , key , new_value ) ;
2013-02-02 22:24:13 -05:00
}
2012-11-21 16:24:10 -05:00
}
2020-06-12 03:07:59 -04:00
void
2020-07-07 08:18:57 -04:00
prefs_set_string_with_option ( preference_t pref , char * option , char * value )
2020-06-12 03:07:59 -04:00
{
2020-07-07 08:18:57 -04:00
const char * group = _get_group ( pref ) ;
const char * key = _get_key ( pref ) ;
2020-06-12 03:07:59 -04:00
if ( value = = NULL ) {
g_key_file_remove_key ( prefs , group , key , NULL ) ;
} else {
g_key_file_set_locale_string ( prefs , group , key , option , value ) ;
}
}
void
2020-07-07 08:18:57 -04:00
prefs_set_string_list_with_option ( preference_t pref , char * option , const gchar * const * values )
2020-06-12 03:07:59 -04:00
{
2020-07-07 08:18:57 -04:00
const char * group = _get_group ( pref ) ;
const char * key = _get_key ( pref ) ;
if ( values = = NULL | | * values = = NULL ) {
2020-07-01 17:53:07 -04:00
if ( g_strcmp0 ( option , " * " ) = = 0 ) {
g_key_file_set_string_list ( prefs , group , key , NULL , 0 ) ;
} else {
g_key_file_set_locale_string_list ( prefs , group , key , option , NULL , 0 ) ;
}
2020-06-12 03:07:59 -04:00
} else {
guint num_values = 0 ;
2020-07-07 08:18:57 -04:00
while ( values [ num_values ] ) {
2020-07-01 17:53:07 -04:00
num_values + + ;
}
if ( g_strcmp0 ( option , " * " ) = = 0 ) {
g_key_file_set_string_list ( prefs , group , key , values , num_values ) ;
} else {
g_key_file_set_locale_string_list ( prefs , group , key , option , values , num_values ) ;
2020-06-12 03:07:59 -04:00
}
}
}
2016-10-17 18:48:03 -04:00
char *
prefs_get_tls_certpath ( void )
{
2020-07-07 08:18:57 -04:00
const char * group = _get_group ( PREF_TLS_CERTPATH ) ;
const char * key = _get_key ( PREF_TLS_CERTPATH ) ;
2016-10-17 18:48:03 -04:00
2023-04-18 20:44:19 -04:00
auto_gchar gchar * setting = g_key_file_get_string ( prefs , group , key , NULL ) ;
2016-10-17 18:48:03 -04:00
if ( g_strcmp0 ( setting , " none " ) = = 0 ) {
return NULL ;
}
if ( setting = = NULL ) {
2020-07-07 08:18:57 -04:00
if ( g_file_test ( " /etc/ssl/certs " , G_FILE_TEST_IS_DIR ) ) {
2016-10-17 18:48:03 -04:00
return strdup ( " /etc/ssl/certs " ) ;
}
2020-07-07 08:18:57 -04:00
if ( g_file_test ( " /etc/pki/tls/certs " , G_FILE_TEST_IS_DIR ) ) {
2016-10-17 18:48:03 -04:00
return strdup ( " /etc/pki/tls/certs " ) ;
}
2020-07-07 08:18:57 -04:00
if ( g_file_test ( " /etc/ssl " , G_FILE_TEST_IS_DIR ) ) {
2016-10-17 18:48:03 -04:00
return strdup ( " /etc/ssl " ) ;
}
2020-07-07 08:18:57 -04:00
if ( g_file_test ( " /etc/pki/tls " , G_FILE_TEST_IS_DIR ) ) {
2016-10-17 18:48:03 -04:00
return strdup ( " /etc/pki/tls " ) ;
}
2020-07-07 08:18:57 -04:00
if ( g_file_test ( " /system/etc/security/cacerts " , G_FILE_TEST_IS_DIR ) ) {
2016-10-17 18:48:03 -04:00
return strdup ( " /system/etc/security/cacerts " ) ;
}
return NULL ;
}
2020-07-07 08:18:57 -04:00
char * result = strdup ( setting ) ;
2016-10-17 18:48:03 -04:00
return result ;
}
2012-12-19 18:31:25 -05:00
gint
prefs_get_gone ( void )
{
2013-02-02 21:35:04 -05:00
return g_key_file_get_integer ( prefs , PREF_GROUP_CHATSTATES , " gone " , NULL ) ;
2012-12-19 18:31:25 -05:00
}
void
prefs_set_gone ( gint value )
{
2013-02-02 21:35:04 -05:00
g_key_file_set_integer ( prefs , PREF_GROUP_CHATSTATES , " gone " , value ) ;
2012-12-19 18:31:25 -05:00
}
2012-10-27 17:05:08 -04:00
gint
prefs_get_notify_remind ( void )
{
2013-02-02 21:35:04 -05:00
return g_key_file_get_integer ( prefs , PREF_GROUP_NOTIFICATIONS , " remind " , NULL ) ;
2012-10-27 17:05:08 -04:00
}
void
prefs_set_notify_remind ( gint value )
{
2013-02-02 21:35:04 -05:00
g_key_file_set_integer ( prefs , PREF_GROUP_NOTIFICATIONS , " remind " , value ) ;
2012-08-15 19:50:32 -04:00
}
2012-11-11 16:44:55 -05:00
gint
prefs_get_max_log_size ( void )
{
2012-11-12 04:13:03 -05:00
if ( log_maxsize < PREFS_MIN_LOG_SIZE )
return PREFS_MAX_LOG_SIZE ;
else
return log_maxsize ;
}
void
prefs_set_max_log_size ( gint value )
{
log_maxsize = value ;
2013-02-02 21:35:04 -05:00
g_key_file_set_integer ( prefs , PREF_GROUP_LOGGING , " maxsize " , value ) ;
2012-11-11 16:44:55 -05:00
}
2015-10-25 18:23:38 -04:00
gint
prefs_get_inpblock ( void )
2014-12-21 13:15:29 -05:00
{
int val = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " inpblock " , NULL ) ;
if ( val = = 0 ) {
return INPBLOCK_DEFAULT ;
} else {
return val ;
}
}
2015-10-25 18:23:38 -04:00
void
prefs_set_inpblock ( gint value )
2014-12-21 13:15:29 -05:00
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " inpblock " , value ) ;
}
2012-11-24 21:14:38 -05:00
gint
prefs_get_reconnect ( void )
{
2014-07-29 10:40:51 -04:00
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_CONNECTION , " reconnect " , NULL ) ) {
return 30 ;
} else {
return g_key_file_get_integer ( prefs , PREF_GROUP_CONNECTION , " reconnect " , NULL ) ;
}
2012-11-24 21:14:38 -05:00
}
void
prefs_set_reconnect ( gint value )
{
2013-02-02 21:35:04 -05:00
g_key_file_set_integer ( prefs , PREF_GROUP_CONNECTION , " reconnect " , value ) ;
2012-11-24 21:14:38 -05:00
}
2012-11-26 18:58:24 -05:00
gint
prefs_get_autoping ( void )
{
2015-07-01 19:10:31 -04:00
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_CONNECTION , " autoping " , NULL ) ) {
return 60 ;
} else {
return g_key_file_get_integer ( prefs , PREF_GROUP_CONNECTION , " autoping " , NULL ) ;
}
2012-11-26 18:58:24 -05:00
}
void
prefs_set_autoping ( gint value )
{
2013-02-02 21:35:04 -05:00
g_key_file_set_integer ( prefs , PREF_GROUP_CONNECTION , " autoping " , value ) ;
2012-11-26 18:58:24 -05:00
}
2016-01-01 14:50:13 -05:00
gint
prefs_get_autoping_timeout ( void )
{
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_CONNECTION , " autoping.timeout " , NULL ) ) {
2016-08-22 17:22:43 -04:00
return 20 ;
2016-01-01 14:50:13 -05:00
} else {
return g_key_file_get_integer ( prefs , PREF_GROUP_CONNECTION , " autoping.timeout " , NULL ) ;
}
}
void
prefs_set_autoping_timeout ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_CONNECTION , " autoping.timeout " , value ) ;
}
2012-11-30 18:34:14 -05:00
gint
prefs_get_autoaway_time ( void )
{
2015-09-27 18:08:30 -04:00
gint result = g_key_file_get_integer ( prefs , PREF_GROUP_PRESENCE , " autoaway.awaytime " , NULL ) ;
2012-11-30 18:34:14 -05:00
if ( result = = 0 ) {
return 15 ;
} else {
return result ;
}
}
2015-09-27 18:08:30 -04:00
gint
prefs_get_autoxa_time ( void )
{
return g_key_file_get_integer ( prefs , PREF_GROUP_PRESENCE , " autoaway.xatime " , NULL ) ;
}
2012-11-30 18:34:14 -05:00
void
prefs_set_autoaway_time ( gint value )
{
2015-09-27 18:08:30 -04:00
g_key_file_set_integer ( prefs , PREF_GROUP_PRESENCE , " autoaway.awaytime " , value ) ;
}
void
prefs_set_autoxa_time ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_PRESENCE , " autoaway.xatime " , value ) ;
2012-11-30 18:34:14 -05:00
}
2016-05-14 20:41:34 -04:00
void
prefs_set_tray_timer ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_NOTIFICATIONS , " tray.timer " , value ) ;
}
gint
prefs_get_tray_timer ( void )
{
gint result = g_key_file_get_integer ( prefs , PREF_GROUP_NOTIFICATIONS , " tray.timer " , NULL ) ;
if ( result = = 0 ) {
return 5 ;
} else {
return result ;
}
}
2018-03-08 18:11:49 -05:00
gint
prefs_get_statusbartabs ( void )
{
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_UI , " statusbar.tabs " , NULL ) ) {
return 10 ;
} else {
return g_key_file_get_integer ( prefs , PREF_GROUP_UI , " statusbar.tabs " , NULL ) ;
}
}
void
prefs_set_statusbartabs ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " statusbar.tabs " , value ) ;
}
2018-03-10 20:18:46 -05:00
gint
prefs_get_statusbartablen ( void )
{
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_UI , " statusbar.tablen " , NULL ) ) {
return 0 ;
} else {
return g_key_file_get_integer ( prefs , PREF_GROUP_UI , " statusbar.tablen " , NULL ) ;
}
}
void
prefs_set_statusbartablen ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " statusbar.tablen " , value ) ;
}
2016-02-14 19:09:51 -05:00
gchar * *
2016-02-14 17:28:55 -05:00
prefs_get_plugins ( void )
{
2017-02-05 17:37:48 -05:00
if ( ! g_key_file_has_group ( prefs , PREF_GROUP_PLUGINS ) ) {
2016-02-14 17:28:55 -05:00
return NULL ;
}
2017-02-05 17:37:48 -05:00
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_PLUGINS , " load " , NULL ) ) {
2016-02-14 17:28:55 -05:00
return NULL ;
}
2017-02-05 17:37:48 -05:00
return g_key_file_get_string_list ( prefs , PREF_GROUP_PLUGINS , " load " , NULL , NULL ) ;
2016-02-14 17:28:55 -05:00
}
2016-04-09 20:15:11 -04:00
void
2020-07-07 08:18:57 -04:00
prefs_add_plugin ( const char * const name )
2016-04-09 20:15:11 -04:00
{
2017-02-05 17:37:48 -05:00
conf_string_list_add ( prefs , PREF_GROUP_PLUGINS , " load " , name ) ;
2016-04-09 20:15:11 -04:00
_save_prefs ( ) ;
}
2016-06-30 18:14:05 -04:00
void
2020-07-07 08:18:57 -04:00
prefs_remove_plugin ( const char * const name )
2016-06-30 18:14:05 -04:00
{
2017-02-05 17:37:48 -05:00
conf_string_list_remove ( prefs , PREF_GROUP_PLUGINS , " load " , name ) ;
2016-06-30 18:14:05 -04:00
_save_prefs ( ) ;
}
2014-11-15 18:47:27 -05:00
void
prefs_set_occupants_size ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " occupants.size " , value ) ;
}
gint
prefs_get_occupants_size ( void )
{
gint result = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " occupants.size " , NULL ) ;
if ( result > 99 | | result < 1 ) {
2015-02-24 17:53:57 -05:00
return 15 ;
2014-11-15 18:47:27 -05:00
} else {
return result ;
}
}
2023-07-27 06:38:30 -04:00
gchar *
2019-05-02 11:01:55 -04:00
prefs_get_occupants_char ( void )
{
2023-07-27 06:38:30 -04:00
gchar * result = g_key_file_get_string ( prefs , PREF_GROUP_UI , " occupants.char " , NULL ) ;
2019-05-02 11:01:55 -04:00
return result ;
}
void
2021-10-22 10:47:15 -04:00
prefs_set_occupants_char ( char * ch )
2019-05-02 11:01:55 -04:00
{
2021-10-22 10:47:15 -04:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
g_key_file_set_string ( prefs , PREF_GROUP_UI , " occupants.char " , ch ) ;
} else {
log_error ( " Could not set roster resource char: %s " , ch ) ;
}
2019-05-02 11:01:55 -04:00
}
void
prefs_clear_occupants_char ( void )
{
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " occupants.char " , NULL ) ;
}
2019-04-18 14:53:02 -04:00
gint
prefs_get_occupants_indent ( void )
{
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_UI , " occupants.indent " , NULL ) ) {
return 2 ;
}
gint result = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " occupants.indent " , NULL ) ;
if ( result < 0 ) {
result = 0 ;
}
return result ;
}
void
prefs_set_occupants_indent ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " occupants.indent " , value ) ;
}
2023-07-27 06:38:30 -04:00
gchar *
2019-04-23 07:50:58 -04:00
prefs_get_occupants_header_char ( void )
{
2023-07-27 06:38:30 -04:00
gchar * result = g_key_file_get_string ( prefs , PREF_GROUP_UI , " occupants.header.char " , NULL ) ;
2019-04-23 07:50:58 -04:00
return result ;
}
void
2021-10-22 10:51:15 -04:00
prefs_set_occupants_header_char ( char * ch )
2019-04-23 07:50:58 -04:00
{
2021-10-22 10:51:15 -04:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
g_key_file_set_string ( prefs , PREF_GROUP_UI , " occupants.header.char " , ch ) ;
} else {
log_error ( " Could not set roster resource char: %s " , ch ) ;
}
2019-04-23 07:50:58 -04:00
}
void
prefs_clear_occupants_header_char ( void )
{
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " occupants.header.char " , NULL ) ;
}
2014-11-15 18:47:27 -05:00
void
prefs_set_roster_size ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " roster.size " , value ) ;
}
gint
prefs_get_roster_size ( void )
{
gint result = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " roster.size " , NULL ) ;
if ( result > 99 | | result < 1 ) {
2015-02-24 17:53:57 -05:00
return 25 ;
2014-11-15 18:47:27 -05:00
} else {
return result ;
}
}
2023-07-27 06:38:30 -04:00
static gchar *
2020-07-07 08:18:57 -04:00
_prefs_get_encryption_char ( const char * const ch , const char * const pref_group , const char * const key )
2015-08-25 20:06:10 -04:00
{
2023-07-27 06:38:30 -04:00
gchar * result = NULL ;
2015-08-25 20:06:10 -04:00
2023-07-27 06:38:30 -04:00
gchar * resultstr = g_key_file_get_string ( prefs , pref_group , key , NULL ) ;
2015-08-25 20:06:10 -04:00
if ( ! resultstr ) {
2023-07-27 06:38:30 -04:00
result = g_strdup ( ch ) ;
2015-08-25 20:06:10 -04:00
} else {
2020-02-20 12:11:08 -05:00
result = resultstr ;
2015-08-25 20:06:10 -04:00
}
return result ;
}
2020-02-21 08:51:19 -05:00
static gboolean
2020-07-07 08:18:57 -04:00
_prefs_set_encryption_char ( const char * const ch , const char * const pref_group , const char * const key )
2015-08-25 20:06:10 -04:00
{
2020-02-20 12:11:08 -05:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
2020-02-21 03:51:40 -05:00
g_key_file_set_string ( prefs , pref_group , key , ch ) ;
2020-02-21 08:51:19 -05:00
return TRUE ;
2020-02-20 12:11:08 -05:00
} else {
2020-02-21 03:51:40 -05:00
log_error ( " Could not set %s encryption char to: %s " , key , ch ) ;
2020-02-20 12:11:08 -05:00
}
2020-02-21 08:51:19 -05:00
return FALSE ;
2015-08-25 20:06:10 -04:00
}
2023-07-27 06:38:30 -04:00
gchar *
2020-02-21 03:51:40 -05:00
prefs_get_otr_char ( void )
2015-08-25 20:06:10 -04:00
{
2020-02-21 03:51:40 -05:00
return _prefs_get_encryption_char ( " ~ " , PREF_GROUP_OTR , " otr.char " ) ;
}
2015-08-25 20:06:10 -04:00
2020-02-21 08:51:19 -05:00
gboolean
2020-07-07 08:18:57 -04:00
prefs_set_otr_char ( char * ch )
2020-02-21 03:51:40 -05:00
{
2020-02-21 08:51:19 -05:00
return _prefs_set_encryption_char ( ch , PREF_GROUP_OTR , " otr.char " ) ;
2020-02-21 03:51:40 -05:00
}
2015-08-25 20:06:10 -04:00
2023-07-27 06:38:30 -04:00
gchar *
2020-02-21 03:51:40 -05:00
prefs_get_pgp_char ( void )
{
return _prefs_get_encryption_char ( " ~ " , PREF_GROUP_PGP , " pgp.char " ) ;
2015-08-25 20:06:10 -04:00
}
2020-02-21 08:51:19 -05:00
gboolean
2020-07-07 08:18:57 -04:00
prefs_set_pgp_char ( char * ch )
2015-08-25 20:06:10 -04:00
{
2020-02-21 08:51:19 -05:00
return _prefs_set_encryption_char ( ch , PREF_GROUP_PGP , " pgp.char " ) ;
2015-08-25 20:06:10 -04:00
}
2023-07-27 06:38:30 -04:00
gchar *
2020-06-21 03:43:42 -04:00
prefs_get_ox_char ( void )
{
return _prefs_get_encryption_char ( " % " , PREF_GROUP_OX , " ox.char " ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_set_ox_char ( char * ch )
2020-06-21 03:43:42 -04:00
{
return _prefs_set_encryption_char ( ch , PREF_GROUP_OX , " ox.char " ) ;
}
2023-07-27 06:38:30 -04:00
gchar *
2019-02-26 13:53:06 -05:00
prefs_get_omemo_char ( void )
{
2020-02-21 03:51:40 -05:00
return _prefs_get_encryption_char ( " ~ " , PREF_GROUP_OMEMO , " omemo.char " ) ;
2019-02-26 13:53:06 -05:00
}
2020-02-21 08:51:19 -05:00
gboolean
2020-07-07 08:18:57 -04:00
prefs_set_omemo_char ( char * ch )
2019-02-26 13:53:06 -05:00
{
2020-02-21 08:51:19 -05:00
return _prefs_set_encryption_char ( ch , PREF_GROUP_OMEMO , " omemo.char " ) ;
2019-02-26 13:53:06 -05:00
}
2023-07-27 06:38:30 -04:00
gchar *
2015-11-19 18:21:51 -05:00
prefs_get_roster_header_char ( void )
{
2023-07-27 06:38:30 -04:00
return g_key_file_get_string ( prefs , PREF_GROUP_UI , " roster.header.char " , NULL ) ;
2015-11-19 18:21:51 -05:00
}
void
2021-10-21 09:30:01 -04:00
prefs_set_roster_header_char ( char * ch )
2015-11-19 18:21:51 -05:00
{
2021-10-21 09:30:01 -04:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
g_key_file_set_string ( prefs , PREF_GROUP_UI , " roster.header.char " , ch ) ;
} else {
log_error ( " Could not set roster header char: %s " , ch ) ;
}
2015-11-19 18:21:51 -05:00
}
void
prefs_clear_roster_header_char ( void )
{
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " roster.header.char " , NULL ) ;
}
2023-07-27 06:38:30 -04:00
gchar *
2015-11-19 19:06:46 -05:00
prefs_get_roster_contact_char ( void )
{
2023-07-27 06:38:30 -04:00
return g_key_file_get_string ( prefs , PREF_GROUP_UI , " roster.contact.char " , NULL ) ;
2015-11-19 19:06:46 -05:00
}
void
2021-10-22 10:23:18 -04:00
prefs_set_roster_contact_char ( char * ch )
2015-11-19 19:06:46 -05:00
{
2021-10-22 10:23:18 -04:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
g_key_file_set_string ( prefs , PREF_GROUP_UI , " roster.contact.char " , ch ) ;
} else {
log_error ( " Could not set roster contact char: %s " , ch ) ;
}
2015-11-19 19:06:46 -05:00
}
void
prefs_clear_roster_contact_char ( void )
{
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " roster.contact.char " , NULL ) ;
}
2023-07-27 06:38:30 -04:00
gchar *
2015-11-21 21:04:59 -05:00
prefs_get_roster_resource_char ( void )
{
2023-07-27 06:38:30 -04:00
return g_key_file_get_string ( prefs , PREF_GROUP_UI , " roster.resource.char " , NULL ) ;
2015-11-21 21:04:59 -05:00
}
void
2021-10-22 10:29:08 -04:00
prefs_set_roster_resource_char ( char * ch )
2015-11-21 21:04:59 -05:00
{
2021-10-22 10:29:08 -04:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
g_key_file_set_string ( prefs , PREF_GROUP_UI , " roster.resource.char " , ch ) ;
} else {
log_error ( " Could not set roster resource char: %s " , ch ) ;
}
2015-11-21 21:04:59 -05:00
}
void
prefs_clear_roster_resource_char ( void )
{
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " roster.resource.char " , NULL ) ;
}
2023-07-27 06:38:30 -04:00
gchar *
2016-01-23 21:28:22 -05:00
prefs_get_roster_private_char ( void )
{
2023-07-27 06:38:30 -04:00
return g_key_file_get_string ( prefs , PREF_GROUP_UI , " roster.private.char " , NULL ) ;
2016-01-23 21:28:22 -05:00
}
void
2021-10-22 10:33:10 -04:00
prefs_set_roster_private_char ( char * ch )
2016-01-23 21:28:22 -05:00
{
2021-10-22 10:33:10 -04:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
g_key_file_set_string ( prefs , PREF_GROUP_UI , " roster.private.char " , ch ) ;
} else {
log_error ( " Could not set roster resource char: %s " , ch ) ;
}
2016-01-23 21:28:22 -05:00
}
void
prefs_clear_roster_private_char ( void )
{
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " roster.private.char " , NULL ) ;
}
2023-07-27 06:38:30 -04:00
gchar *
2016-01-23 21:28:22 -05:00
prefs_get_roster_room_char ( void )
{
2023-07-27 06:38:30 -04:00
return g_key_file_get_string ( prefs , PREF_GROUP_UI , " roster.rooms.char " , NULL ) ;
2016-01-23 21:28:22 -05:00
}
void
2021-10-22 10:39:54 -04:00
prefs_set_roster_room_char ( char * ch )
2016-01-23 21:28:22 -05:00
{
2021-10-22 10:39:54 -04:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
g_key_file_set_string ( prefs , PREF_GROUP_UI , " roster.rooms.char " , ch ) ;
} else {
log_error ( " Could not set roster resource char: %s " , ch ) ;
}
2016-01-23 21:28:22 -05:00
}
void
prefs_clear_roster_room_char ( void )
{
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " roster.rooms.char " , NULL ) ;
}
2023-07-27 06:38:30 -04:00
gchar *
2016-01-31 15:17:20 -05:00
prefs_get_roster_room_private_char ( void )
{
2023-07-27 06:38:30 -04:00
return g_key_file_get_string ( prefs , PREF_GROUP_UI , " roster.rooms.private.char " , NULL ) ;
2016-01-31 15:17:20 -05:00
}
2016-01-23 21:28:22 -05:00
2016-01-31 15:17:20 -05:00
void
2021-10-22 10:42:57 -04:00
prefs_set_roster_room_private_char ( char * ch )
2016-01-31 15:17:20 -05:00
{
2021-10-22 10:42:57 -04:00
if ( g_utf8_strlen ( ch , 4 ) = = 1 ) {
g_key_file_set_string ( prefs , PREF_GROUP_UI , " roster.rooms.private.char " , ch ) ;
} else {
log_error ( " Could not set roster resource char: %s " , ch ) ;
}
2016-01-31 15:17:20 -05:00
}
2016-01-23 21:28:22 -05:00
2016-01-31 15:17:20 -05:00
void
prefs_clear_roster_room_private_char ( void )
{
g_key_file_remove_key ( prefs , PREF_GROUP_UI , " roster.rooms.pruvate.char " , NULL ) ;
}
2016-01-23 21:28:22 -05:00
2015-11-21 16:03:53 -05:00
gint
prefs_get_roster_contact_indent ( void )
{
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_UI , " roster.contact.indent " , NULL ) ) {
return 2 ;
}
gint result = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " roster.contact.indent " , NULL ) ;
if ( result < 0 ) {
result = 0 ;
}
return result ;
}
void
prefs_set_roster_contact_indent ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " roster.contact.indent " , value ) ;
}
2015-11-21 16:49:12 -05:00
gint
prefs_get_roster_resource_indent ( void )
{
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_UI , " roster.resource.indent " , NULL ) ) {
return 2 ;
}
gint result = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " roster.resource.indent " , NULL ) ;
if ( result < 0 ) {
result = 0 ;
}
return result ;
}
void
prefs_set_roster_resource_indent ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " roster.resource.indent " , value ) ;
}
2015-11-21 17:03:43 -05:00
gint
prefs_get_roster_presence_indent ( void )
{
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_UI , " roster.presence.indent " , NULL ) ) {
return 2 ;
}
gint result = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " roster.presence.indent " , NULL ) ;
2015-11-21 19:30:42 -05:00
if ( result < - 1 ) {
2015-11-21 17:03:43 -05:00
result = 0 ;
}
return result ;
}
void
prefs_set_roster_presence_indent ( gint value )
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " roster.presence.indent " , value ) ;
}
2023-07-27 06:38:30 -04:00
gchar *
2020-02-10 07:48:31 -05:00
prefs_get_correction_char ( void )
{
2023-07-27 06:38:30 -04:00
gchar * resultstr = g_key_file_get_string ( prefs , PREF_GROUP_UI , " correction.char " , NULL ) ;
2020-02-10 07:48:31 -05:00
2023-07-27 06:38:30 -04:00
return resultstr ? resultstr : g_strdup ( " + " ) ;
2020-02-10 07:48:31 -05:00
}
void
prefs_set_correction_char ( char ch )
{
char str [ 2 ] ;
str [ 0 ] = ch ;
str [ 1 ] = ' \0 ' ;
g_key_file_set_string ( prefs , PREF_GROUP_UI , " correction.char " , str ) ;
}
2015-11-23 19:38:33 -05:00
gboolean
2020-07-07 08:18:57 -04:00
prefs_add_room_notify_trigger ( const char * const text )
2015-11-23 19:38:33 -05:00
{
gboolean res = conf_string_list_add ( prefs , PREF_GROUP_NOTIFICATIONS , " room.trigger.list " , text ) ;
2015-11-23 20:34:06 -05:00
if ( res ) {
autocomplete_add ( room_trigger_ac , text ) ;
}
2015-11-23 19:38:33 -05:00
return res ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_remove_room_notify_trigger ( const char * const text )
2015-11-23 19:38:33 -05:00
{
gboolean res = conf_string_list_remove ( prefs , PREF_GROUP_NOTIFICATIONS , " room.trigger.list " , text ) ;
_save_prefs ( ) ;
2015-11-23 20:34:06 -05:00
if ( res ) {
autocomplete_remove ( room_trigger_ac , text ) ;
}
2015-11-23 19:38:33 -05:00
return res ;
}
GList *
prefs_get_room_notify_triggers ( void )
{
2020-07-07 08:18:57 -04:00
GList * result = NULL ;
2015-11-23 19:38:33 -05:00
gsize len = 0 ;
2023-07-13 10:31:31 -04:00
auto_gcharv gchar * * triggers = g_key_file_get_string_list ( prefs , PREF_GROUP_NOTIFICATIONS , " room.trigger.list " , & len , NULL ) ;
2015-11-23 19:38:33 -05:00
2020-11-09 05:03:54 -05:00
for ( int i = 0 ; i < len ; i + + ) {
2015-11-23 19:38:33 -05:00
result = g_list_append ( result , strdup ( triggers [ i ] ) ) ;
}
return result ;
}
2016-09-22 19:56:53 -04:00
ProfWinPlacement *
prefs_create_profwin_placement ( int titlebar , int mainwin , int statusbar , int inputwin )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = malloc ( sizeof ( ProfWinPlacement ) ) ;
2016-09-22 19:56:53 -04:00
placement - > titlebar_pos = titlebar ;
placement - > mainwin_pos = mainwin ;
placement - > statusbar_pos = statusbar ;
placement - > inputwin_pos = inputwin ;
return placement ;
}
void
2020-07-07 08:18:57 -04:00
prefs_free_win_placement ( ProfWinPlacement * placement )
2016-09-22 19:56:53 -04:00
{
free ( placement ) ;
}
ProfWinPlacement *
prefs_get_win_placement ( void )
{
// read from settings file
int titlebar_pos = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " titlebar.position " , NULL ) ;
int mainwin_pos = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " mainwin.position " , NULL ) ;
int statusbar_pos = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " statusbar.position " , NULL ) ;
int inputwin_pos = g_key_file_get_integer ( prefs , PREF_GROUP_UI , " inputwin.position " , NULL ) ;
// default if setting invalid, or not present
if ( titlebar_pos < 1 | | titlebar_pos > 4 ) {
titlebar_pos = 1 ;
}
if ( mainwin_pos < 1 | | mainwin_pos > 4 ) {
mainwin_pos = 2 ;
}
if ( statusbar_pos < 1 | | statusbar_pos > 4 ) {
statusbar_pos = 3 ;
}
if ( inputwin_pos < 1 | | inputwin_pos > 4 ) {
inputwin_pos = 4 ;
}
// return default if duplicates found
if ( titlebar_pos = = mainwin_pos ) {
2016-09-25 15:49:54 -04:00
return prefs_create_profwin_placement ( 1 , 2 , 3 , 4 ) ;
2016-09-22 19:56:53 -04:00
}
if ( titlebar_pos = = statusbar_pos ) {
2016-09-25 15:49:54 -04:00
return prefs_create_profwin_placement ( 1 , 2 , 3 , 4 ) ;
2016-09-22 19:56:53 -04:00
}
if ( titlebar_pos = = inputwin_pos ) {
2016-09-25 15:49:54 -04:00
return prefs_create_profwin_placement ( 1 , 2 , 3 , 4 ) ;
2016-09-22 19:56:53 -04:00
}
if ( mainwin_pos = = statusbar_pos ) {
2016-09-25 15:49:54 -04:00
return prefs_create_profwin_placement ( 1 , 2 , 3 , 4 ) ;
2016-09-22 19:56:53 -04:00
}
if ( mainwin_pos = = inputwin_pos ) {
2016-09-25 15:49:54 -04:00
return prefs_create_profwin_placement ( 1 , 2 , 3 , 4 ) ;
2016-09-22 19:56:53 -04:00
}
if ( statusbar_pos = = inputwin_pos ) {
2016-09-25 15:49:54 -04:00
return prefs_create_profwin_placement ( 1 , 2 , 3 , 4 ) ;
2016-09-22 19:56:53 -04:00
}
// return settings
return prefs_create_profwin_placement ( titlebar_pos , mainwin_pos , statusbar_pos , inputwin_pos ) ;
}
void
2020-07-07 08:18:57 -04:00
prefs_save_win_placement ( ProfWinPlacement * placement )
2016-09-22 19:56:53 -04:00
{
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " titlebar.position " , placement - > titlebar_pos ) ;
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " mainwin.position " , placement - > mainwin_pos ) ;
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " statusbar.position " , placement - > statusbar_pos ) ;
g_key_file_set_integer ( prefs , PREF_GROUP_UI , " inputwin.position " , placement - > inputwin_pos ) ;
_save_prefs ( ) ;
}
gboolean
prefs_titlebar_pos_up ( void )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = prefs_get_win_placement ( ) ;
2016-09-22 19:56:53 -04:00
2020-11-09 05:03:54 -05:00
for ( int pos = 2 ; pos < 5 ; pos + + ) {
2016-09-25 16:24:29 -04:00
if ( placement - > titlebar_pos = = pos ) {
2020-07-07 08:18:57 -04:00
placement - > titlebar_pos = pos - 1 ;
2016-09-25 16:24:29 -04:00
2020-07-07 08:18:57 -04:00
if ( placement - > mainwin_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > mainwin_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > statusbar_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > statusbar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > inputwin_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > inputwin_pos = pos ;
}
prefs_save_win_placement ( placement ) ;
prefs_free_win_placement ( placement ) ;
return TRUE ;
2016-09-22 19:56:53 -04:00
}
}
prefs_free_win_placement ( placement ) ;
return FALSE ;
}
gboolean
prefs_mainwin_pos_up ( void )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = prefs_get_win_placement ( ) ;
2016-09-22 20:04:41 -04:00
2020-11-09 05:03:54 -05:00
for ( int pos = 2 ; pos < 5 ; pos + + ) {
2016-09-25 16:24:29 -04:00
if ( placement - > mainwin_pos = = pos ) {
2020-07-07 08:18:57 -04:00
placement - > mainwin_pos = pos - 1 ;
2016-09-25 16:24:29 -04:00
2020-07-07 08:18:57 -04:00
if ( placement - > titlebar_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > titlebar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > statusbar_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > statusbar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > inputwin_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > inputwin_pos = pos ;
}
prefs_save_win_placement ( placement ) ;
prefs_free_win_placement ( placement ) ;
return TRUE ;
2016-09-22 19:56:53 -04:00
}
}
prefs_free_win_placement ( placement ) ;
return FALSE ;
}
gboolean
prefs_statusbar_pos_up ( void )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = prefs_get_win_placement ( ) ;
2016-09-22 20:04:41 -04:00
2020-11-09 05:03:54 -05:00
for ( int pos = 2 ; pos < 5 ; pos + + ) {
2016-09-25 16:24:29 -04:00
if ( placement - > statusbar_pos = = pos ) {
2020-07-07 08:18:57 -04:00
placement - > statusbar_pos = pos - 1 ;
2016-09-25 16:24:29 -04:00
2020-07-07 08:18:57 -04:00
if ( placement - > titlebar_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > titlebar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > mainwin_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > mainwin_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > inputwin_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > inputwin_pos = pos ;
}
prefs_save_win_placement ( placement ) ;
prefs_free_win_placement ( placement ) ;
return TRUE ;
2016-09-22 19:56:53 -04:00
}
}
prefs_free_win_placement ( placement ) ;
return FALSE ;
}
gboolean
prefs_inputwin_pos_up ( void )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = prefs_get_win_placement ( ) ;
2016-09-22 20:04:41 -04:00
2020-11-09 05:03:54 -05:00
for ( int pos = 2 ; pos < 5 ; pos + + ) {
2016-09-25 16:24:29 -04:00
if ( placement - > inputwin_pos = = pos ) {
2020-07-07 08:18:57 -04:00
placement - > inputwin_pos = pos - 1 ;
2016-09-25 16:24:29 -04:00
2020-07-07 08:18:57 -04:00
if ( placement - > titlebar_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > titlebar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > mainwin_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > mainwin_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > statusbar_pos = = pos - 1 ) {
2016-09-25 16:24:29 -04:00
placement - > statusbar_pos = pos ;
}
prefs_save_win_placement ( placement ) ;
prefs_free_win_placement ( placement ) ;
return TRUE ;
2016-09-22 19:56:53 -04:00
}
}
prefs_free_win_placement ( placement ) ;
return FALSE ;
}
gboolean
prefs_titlebar_pos_down ( void )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = prefs_get_win_placement ( ) ;
2016-09-22 20:04:41 -04:00
2020-11-09 05:03:54 -05:00
for ( int pos = 1 ; pos < 4 ; pos + + ) {
2016-09-25 16:24:29 -04:00
if ( placement - > titlebar_pos = = pos ) {
2020-07-07 08:18:57 -04:00
placement - > titlebar_pos = pos + 1 ;
2016-09-25 16:24:29 -04:00
2020-07-07 08:18:57 -04:00
if ( placement - > mainwin_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > mainwin_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > statusbar_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > statusbar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > inputwin_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > inputwin_pos = pos ;
}
prefs_save_win_placement ( placement ) ;
prefs_free_win_placement ( placement ) ;
return TRUE ;
2016-09-22 19:56:53 -04:00
}
}
prefs_free_win_placement ( placement ) ;
return FALSE ;
}
gboolean
prefs_mainwin_pos_down ( void )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = prefs_get_win_placement ( ) ;
2016-09-22 20:04:41 -04:00
2020-11-09 05:03:54 -05:00
for ( int pos = 1 ; pos < 4 ; pos + + ) {
2016-09-25 16:24:29 -04:00
if ( placement - > mainwin_pos = = pos ) {
2020-07-07 08:18:57 -04:00
placement - > mainwin_pos = pos + 1 ;
2016-09-25 16:24:29 -04:00
2020-07-07 08:18:57 -04:00
if ( placement - > titlebar_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > titlebar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > statusbar_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > statusbar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > inputwin_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > inputwin_pos = pos ;
}
prefs_save_win_placement ( placement ) ;
prefs_free_win_placement ( placement ) ;
return TRUE ;
2016-09-22 19:56:53 -04:00
}
}
prefs_free_win_placement ( placement ) ;
return FALSE ;
}
gboolean
prefs_statusbar_pos_down ( void )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = prefs_get_win_placement ( ) ;
2016-09-22 20:04:41 -04:00
2020-11-09 05:03:54 -05:00
for ( int pos = 1 ; pos < 4 ; pos + + ) {
2016-09-25 16:24:29 -04:00
if ( placement - > statusbar_pos = = pos ) {
2020-07-07 08:18:57 -04:00
placement - > statusbar_pos = pos + 1 ;
2016-09-25 16:24:29 -04:00
2020-07-07 08:18:57 -04:00
if ( placement - > titlebar_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > titlebar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > mainwin_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > mainwin_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > inputwin_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > inputwin_pos = pos ;
}
prefs_save_win_placement ( placement ) ;
prefs_free_win_placement ( placement ) ;
return TRUE ;
2016-09-22 19:56:53 -04:00
}
}
prefs_free_win_placement ( placement ) ;
return FALSE ;
}
gboolean
prefs_inputwin_pos_down ( void )
{
2020-07-07 08:18:57 -04:00
ProfWinPlacement * placement = prefs_get_win_placement ( ) ;
2016-09-22 20:04:41 -04:00
2020-11-09 05:03:54 -05:00
for ( int pos = 1 ; pos < 4 ; pos + + ) {
2016-09-25 16:24:29 -04:00
if ( placement - > inputwin_pos = = pos ) {
2020-07-07 08:18:57 -04:00
placement - > inputwin_pos = pos + 1 ;
2016-09-25 16:24:29 -04:00
2020-07-07 08:18:57 -04:00
if ( placement - > titlebar_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > titlebar_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > mainwin_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > mainwin_pos = pos ;
2020-07-07 08:18:57 -04:00
} else if ( placement - > statusbar_pos = = pos + 1 ) {
2016-09-25 16:24:29 -04:00
placement - > statusbar_pos = pos ;
}
prefs_save_win_placement ( placement ) ;
prefs_free_win_placement ( placement ) ;
return TRUE ;
2016-09-22 19:56:53 -04:00
}
}
prefs_free_win_placement ( placement ) ;
return FALSE ;
}
2014-01-23 17:38:12 -05:00
gboolean
2020-07-07 08:18:57 -04:00
prefs_add_alias ( const char * const name , const char * const value )
2014-01-23 17:29:53 -05:00
{
2014-01-23 17:38:12 -05:00
if ( g_key_file_has_key ( prefs , PREF_GROUP_ALIAS , name , NULL ) ) {
return FALSE ;
} else {
g_key_file_set_string ( prefs , PREF_GROUP_ALIAS , name , value ) ;
return TRUE ;
}
2014-01-23 17:29:53 -05:00
}
2023-07-11 07:23:58 -04:00
gchar *
2020-07-07 08:18:57 -04:00
prefs_get_alias ( const char * const name )
2014-01-23 17:29:53 -05:00
{
return g_key_file_get_string ( prefs , PREF_GROUP_ALIAS , name , NULL ) ;
}
gboolean
2020-07-07 08:18:57 -04:00
prefs_remove_alias ( const char * const name )
2014-01-23 17:29:53 -05:00
{
if ( ! g_key_file_has_key ( prefs , PREF_GROUP_ALIAS , name , NULL ) ) {
return FALSE ;
} else {
g_key_file_remove_key ( prefs , PREF_GROUP_ALIAS , name , NULL ) ;
return TRUE ;
}
}
static gint
2020-07-07 08:18:57 -04:00
_alias_cmp ( gconstpointer * p1 , gconstpointer * p2 )
2014-01-23 17:29:53 -05:00
{
2020-07-07 08:18:57 -04:00
ProfAlias * alias1 = ( ProfAlias * ) p1 ;
ProfAlias * alias2 = ( ProfAlias * ) p2 ;
2014-01-23 17:29:53 -05:00
return strcmp ( alias1 - > name , alias2 - > name ) ;
}
2015-10-25 18:23:38 -04:00
GList *
2014-01-23 17:29:53 -05:00
prefs_get_aliases ( void )
{
if ( ! g_key_file_has_group ( prefs , PREF_GROUP_ALIAS ) ) {
return NULL ;
} else {
2020-07-07 08:18:57 -04:00
GList * result = NULL ;
2014-01-23 17:29:53 -05:00
gsize len ;
2023-07-13 10:31:31 -04:00
auto_gcharv gchar * * keys = g_key_file_get_keys ( prefs , PREF_GROUP_ALIAS , & len , NULL ) ;
2020-11-09 05:03:54 -05:00
for ( int i = 0 ; i < len ; i + + ) {
2020-07-07 08:18:57 -04:00
char * name = keys [ i ] ;
2023-04-18 20:44:19 -04:00
auto_gchar gchar * value = g_key_file_get_string ( prefs , PREF_GROUP_ALIAS , name , NULL ) ;
2014-01-23 17:29:53 -05:00
2015-05-04 17:33:19 -04:00
if ( value ) {
2020-07-07 08:18:57 -04:00
ProfAlias * alias = malloc ( sizeof ( struct prof_alias_t ) ) ;
2014-06-18 16:36:09 -04:00
alias - > name = strdup ( name ) ;
alias - > value = strdup ( value ) ;
2014-01-23 17:29:53 -05:00
2014-06-18 16:36:09 -04:00
result = g_list_insert_sorted ( result , alias , ( GCompareFunc ) _alias_cmp ) ;
}
2014-01-23 17:29:53 -05:00
}
return result ;
}
}
void
2020-07-07 08:18:57 -04:00
_free_alias ( ProfAlias * alias )
2014-01-23 17:29:53 -05:00
{
FREE_SET_NULL ( alias - > name ) ;
FREE_SET_NULL ( alias - > value ) ;
FREE_SET_NULL ( alias ) ;
}
void
2020-07-07 08:18:57 -04:00
prefs_free_aliases ( GList * aliases )
2014-01-23 17:29:53 -05:00
{
g_list_free_full ( aliases , ( GDestroyNotify ) _free_alias ) ;
}
2012-07-24 18:19:48 -04:00
static void
_save_prefs ( void )
2012-05-10 05:02:03 -04:00
{
gsize g_data_size ;
2023-07-11 07:23:58 -04:00
auto_gchar gchar * g_prefs_data = g_key_file_to_data ( prefs , & g_data_size , NULL ) ;
auto_gchar gchar * base = g_path_get_dirname ( prefs_loc ) ;
auto_gchar gchar * true_loc = get_file_or_linked ( prefs_loc , base ) ;
2016-07-24 16:35:12 -04:00
2014-10-26 16:43:05 -04:00
g_file_set_contents ( true_loc , g_prefs_data , g_data_size , NULL ) ;
2014-10-18 16:26:38 -04:00
g_chmod ( prefs_loc , S_IRUSR | S_IWUSR ) ;
2013-02-02 17:18:08 -05:00
}
2013-02-02 21:51:15 -05:00
2015-01-10 14:22:38 -05:00
// get the preference group for a specific preference
// for example the PREF_BEEP setting ("beep" in .profrc, see _get_key) belongs
// to the [ui] section.
2015-10-25 18:23:38 -04:00
static const char *
2013-02-02 21:51:15 -05:00
_get_group ( preference_t pref )
{
2020-07-20 07:01:05 -04:00
switch ( pref ) {
case PREF_CLEAR_PERSIST_HISTORY :
case PREF_SPLASH :
case PREF_BEEP :
case PREF_THEME :
case PREF_VERCHECK :
case PREF_WINTITLE_SHOW :
case PREF_WINTITLE_GOODBYE :
case PREF_FLASH :
case PREF_INTYPE :
2021-05-08 13:33:58 -04:00
case PREF_INTYPE_CONSOLE :
2020-07-20 07:01:05 -04:00
case PREF_HISTORY :
case PREF_OCCUPANTS :
case PREF_OCCUPANTS_JID :
2021-03-05 07:29:36 -05:00
case PREF_OCCUPANTS_OFFLINE :
2020-07-20 07:01:05 -04:00
case PREF_OCCUPANTS_WRAP :
case PREF_STATUSES :
case PREF_STATUSES_CONSOLE :
case PREF_STATUSES_CHAT :
case PREF_STATUSES_MUC :
case PREF_MUC_PRIVILEGES :
case PREF_PRESENCE :
case PREF_WRAP :
case PREF_TIME_CONSOLE :
case PREF_TIME_CHAT :
case PREF_TIME_MUC :
case PREF_TIME_CONFIG :
case PREF_TIME_PRIVATE :
case PREF_TIME_XMLCONSOLE :
case PREF_TIME_STATUSBAR :
case PREF_TIME_LASTACTIVITY :
Add vCard support
Only nicknames, photos, birthdays, addresses, telephone numbers, emails,
JIDs, titles, roles, notes, and URLs are supported
Due to the synopsis array not having enough space, `/vcard photo
open-self` and `/vcard photo save-self` are not documented properly in
the synopsis section of the `/vcard` command, but they are documented in
the arguments section
Fixed memory leak in vcard autocomplete (thanks to debXwoody)
2022-09-06 12:29:07 -04:00
case PREF_TIME_VCARD :
2020-07-20 07:01:05 -04:00
case PREF_ROSTER :
case PREF_ROSTER_OFFLINE :
case PREF_ROSTER_RESOURCE :
case PREF_ROSTER_PRESENCE :
case PREF_ROSTER_STATUS :
case PREF_ROSTER_EMPTY :
case PREF_ROSTER_BY :
case PREF_ROSTER_ORDER :
case PREF_ROSTER_UNREAD :
case PREF_ROSTER_COUNT :
case PREF_ROSTER_COUNT_ZERO :
case PREF_ROSTER_PRIORITY :
case PREF_ROSTER_WRAP :
case PREF_ROSTER_RESOURCE_JOIN :
case PREF_ROSTER_CONTACTS :
case PREF_ROSTER_UNSUBSCRIBED :
case PREF_ROSTER_ROOMS :
case PREF_ROSTER_ROOMS_POS :
case PREF_ROSTER_ROOMS_BY :
case PREF_ROSTER_ROOMS_ORDER :
case PREF_ROSTER_ROOMS_UNREAD :
case PREF_ROSTER_ROOMS_SERVER :
case PREF_ROSTER_ROOMS_USE_AS_NAME :
case PREF_ROSTER_PRIVATE :
case PREF_RESOURCE_TITLE :
case PREF_RESOURCE_MESSAGE :
case PREF_ENC_WARN :
case PREF_INPBLOCK_DYNAMIC :
case PREF_TLS_SHOW :
case PREF_CONSOLE_MUC :
case PREF_CONSOLE_PRIVATE :
case PREF_CONSOLE_CHAT :
case PREF_COLOR_NICK :
case PREF_COLOR_NICK_OWN :
case PREF_ROSTER_COLOR_NICK :
case PREF_OCCUPANTS_COLOR_NICK :
case PREF_STATUSBAR_SHOW_NAME :
case PREF_STATUSBAR_SHOW_NUMBER :
case PREF_STATUSBAR_SHOW_READ :
case PREF_STATUSBAR_SELF :
case PREF_STATUSBAR_CHAT :
case PREF_STATUSBAR_ROOM :
2023-04-03 12:37:23 -04:00
case PREF_STATUSBAR_TABMODE :
2020-07-20 07:01:05 -04:00
case PREF_TITLEBAR_MUC_TITLE_JID :
case PREF_TITLEBAR_MUC_TITLE_NAME :
case PREF_SLASH_GUARD :
2021-04-11 10:21:00 -04:00
case PREF_COMPOSE_EDITOR :
2022-04-28 13:29:27 -04:00
case PREF_OUTGOING_STAMP :
case PREF_INCOMING_STAMP :
2022-06-22 05:40:20 -04:00
case PREF_MOOD :
2020-07-20 07:01:05 -04:00
return PREF_GROUP_UI ;
case PREF_STATES :
case PREF_OUTTYPE :
return PREF_GROUP_CHATSTATES ;
case PREF_NOTIFY_TYPING :
case PREF_NOTIFY_TYPING_CURRENT :
case PREF_NOTIFY_CHAT :
case PREF_NOTIFY_CHAT_CURRENT :
case PREF_NOTIFY_CHAT_TEXT :
case PREF_NOTIFY_ROOM :
case PREF_NOTIFY_ROOM_MENTION :
2022-04-13 22:25:30 -04:00
case PREF_NOTIFY_ROOM_OFFLINE :
2020-07-20 07:01:05 -04:00
case PREF_NOTIFY_ROOM_TRIGGER :
case PREF_NOTIFY_ROOM_CURRENT :
case PREF_NOTIFY_ROOM_TEXT :
case PREF_NOTIFY_INVITE :
case PREF_NOTIFY_SUB :
case PREF_NOTIFY_MENTION_CASE_SENSITIVE :
case PREF_NOTIFY_MENTION_WHOLE_WORD :
case PREF_TRAY :
case PREF_TRAY_READ :
case PREF_ADV_NOTIFY_DISCO_OR_VERSION :
return PREF_GROUP_NOTIFICATIONS ;
2023-07-03 10:06:24 -04:00
case PREF_DBLOG :
2020-07-20 07:01:05 -04:00
case PREF_CHLOG :
case PREF_GRLOG :
case PREF_LOG_ROTATE :
case PREF_LOG_SHARED :
return PREF_GROUP_LOGGING ;
case PREF_AVATAR_CMD :
case PREF_URL_OPEN_CMD :
case PREF_URL_SAVE_CMD :
Add vCard support
Only nicknames, photos, birthdays, addresses, telephone numbers, emails,
JIDs, titles, roles, notes, and URLs are supported
Due to the synopsis array not having enough space, `/vcard photo
open-self` and `/vcard photo save-self` are not documented properly in
the synopsis section of the `/vcard` command, but they are documented in
the arguments section
Fixed memory leak in vcard autocomplete (thanks to debXwoody)
2022-09-06 12:29:07 -04:00
case PREF_VCARD_PHOTO_CMD :
2020-07-20 07:01:05 -04:00
return PREF_GROUP_EXECUTABLES ;
case PREF_AUTOAWAY_CHECK :
case PREF_AUTOAWAY_MODE :
case PREF_AUTOAWAY_MESSAGE :
case PREF_AUTOXA_MESSAGE :
case PREF_LASTACTIVITY :
return PREF_GROUP_PRESENCE ;
case PREF_CONNECT_ACCOUNT :
case PREF_DEFAULT_ACCOUNT :
case PREF_CARBONS :
case PREF_RECEIPTS_SEND :
case PREF_RECEIPTS_REQUEST :
case PREF_REVEAL_OS :
case PREF_TLS_CERTPATH :
case PREF_CORRECTION_ALLOW :
case PREF_MAM :
2021-07-01 12:02:03 -04:00
case PREF_SILENCE_NON_ROSTER :
2022-12-05 04:25:57 -05:00
case PREF_STROPHE_VERBOSITY :
case PREF_STROPHE_SM_ENABLED :
case PREF_STROPHE_SM_RESEND :
2020-07-20 07:01:05 -04:00
return PREF_GROUP_CONNECTION ;
case PREF_OTR_LOG :
case PREF_OTR_POLICY :
case PREF_OTR_SENDFILE :
return PREF_GROUP_OTR ;
case PREF_PGP_LOG :
case PREF_PGP_SENDFILE :
2023-06-30 08:33:17 -04:00
case PREF_PGP_PUBKEY_AUTOIMPORT :
2020-07-20 07:01:05 -04:00
return PREF_GROUP_PGP ;
case PREF_BOOKMARK_INVITE :
case PREF_ROOM_LIST_CACHE :
return PREF_GROUP_MUC ;
case PREF_OMEMO_LOG :
case PREF_OMEMO_POLICY :
2021-04-17 07:28:54 -04:00
case PREF_OMEMO_TRUST_MODE :
2020-07-20 07:01:05 -04:00
return PREF_GROUP_OMEMO ;
2022-05-05 17:41:45 -04:00
case PREF_OX_LOG :
return PREF_GROUP_OX ;
2020-07-20 07:01:05 -04:00
default :
return NULL ;
2013-02-02 21:51:15 -05:00
}
}
2015-01-10 14:22:38 -05:00
// get the key used in .profrc for the preference
// for example the PREF_AUTOAWAY_MODE maps to "autoaway.mode" in .profrc
2015-10-25 18:23:38 -04:00
static const char *
2013-02-02 21:51:15 -05:00
_get_key ( preference_t pref )
{
2020-07-20 07:01:05 -04:00
switch ( pref ) {
case PREF_CLEAR_PERSIST_HISTORY :
return " clear.persist_history " ;
case PREF_SPLASH :
return " splash " ;
case PREF_BEEP :
return " beep " ;
case PREF_THEME :
return " theme " ;
case PREF_VERCHECK :
return " vercheck " ;
case PREF_WINTITLE_SHOW :
return " wintitle.show " ;
case PREF_WINTITLE_GOODBYE :
return " wintitle.goodbye " ;
case PREF_FLASH :
return " flash " ;
case PREF_TRAY :
return " tray " ;
case PREF_TRAY_READ :
return " tray.read " ;
case PREF_ADV_NOTIFY_DISCO_OR_VERSION :
return " adv.notify.discoversion " ;
case PREF_INTYPE :
return " intype " ;
2021-05-08 13:33:58 -04:00
case PREF_INTYPE_CONSOLE :
return " intype.console " ;
2020-07-20 07:01:05 -04:00
case PREF_HISTORY :
return " history " ;
case PREF_CARBONS :
return " carbons " ;
case PREF_RECEIPTS_SEND :
return " receipts.send " ;
case PREF_RECEIPTS_REQUEST :
return " receipts.request " ;
case PREF_REVEAL_OS :
return " reveal.os " ;
case PREF_OCCUPANTS :
return " occupants " ;
case PREF_OCCUPANTS_JID :
return " occupants.jid " ;
2021-03-05 07:29:36 -05:00
case PREF_OCCUPANTS_OFFLINE :
return " occupants.offline " ;
2020-07-20 07:01:05 -04:00
case PREF_OCCUPANTS_WRAP :
return " occupants.wrap " ;
case PREF_MUC_PRIVILEGES :
return " privileges " ;
case PREF_STATUSES :
return " statuses " ;
case PREF_STATUSES_CONSOLE :
return " statuses.console " ;
case PREF_STATUSES_CHAT :
return " statuses.chat " ;
case PREF_STATUSES_MUC :
return " statuses.muc " ;
case PREF_STATES :
return " enabled " ;
case PREF_OUTTYPE :
return " outtype " ;
case PREF_NOTIFY_TYPING :
return " typing " ;
case PREF_NOTIFY_TYPING_CURRENT :
return " typing.current " ;
case PREF_NOTIFY_CHAT :
return " message " ;
case PREF_NOTIFY_CHAT_CURRENT :
return " message.current " ;
case PREF_NOTIFY_CHAT_TEXT :
return " message.text " ;
case PREF_NOTIFY_ROOM :
return " room " ;
case PREF_NOTIFY_ROOM_TRIGGER :
return " room.trigger " ;
case PREF_NOTIFY_ROOM_MENTION :
return " room.mention " ;
2022-04-13 22:25:30 -04:00
case PREF_NOTIFY_ROOM_OFFLINE :
return " room.offline " ;
2020-07-20 07:01:05 -04:00
case PREF_NOTIFY_ROOM_CURRENT :
return " room.current " ;
case PREF_NOTIFY_ROOM_TEXT :
return " room.text " ;
case PREF_NOTIFY_INVITE :
return " invite " ;
case PREF_NOTIFY_SUB :
return " sub " ;
case PREF_NOTIFY_MENTION_CASE_SENSITIVE :
return " room.mention.casesensitive " ;
case PREF_NOTIFY_MENTION_WHOLE_WORD :
return " room.mention.wholeword " ;
case PREF_CHLOG :
return " chlog " ;
2023-07-03 10:06:24 -04:00
case PREF_DBLOG :
return " dblog " ;
2020-07-20 07:01:05 -04:00
case PREF_GRLOG :
return " grlog " ;
case PREF_AUTOAWAY_CHECK :
return " autoaway.check " ;
case PREF_AUTOAWAY_MODE :
return " autoaway.mode " ;
case PREF_AUTOAWAY_MESSAGE :
return " autoaway.awaymessage " ;
case PREF_AUTOXA_MESSAGE :
return " autoaway.xamessage " ;
case PREF_CONNECT_ACCOUNT :
return " account " ;
case PREF_DEFAULT_ACCOUNT :
return " defaccount " ;
case PREF_OTR_LOG :
return " log " ;
case PREF_OTR_POLICY :
return " policy " ;
case PREF_OTR_SENDFILE :
return " sendfile " ;
case PREF_LOG_ROTATE :
return " rotate " ;
case PREF_LOG_SHARED :
return " shared " ;
case PREF_PRESENCE :
return " presence " ;
case PREF_WRAP :
return " wrap " ;
case PREF_TIME_CONSOLE :
return " time.console " ;
case PREF_TIME_CHAT :
return " time.chat " ;
case PREF_TIME_MUC :
return " time.muc " ;
case PREF_TIME_CONFIG :
return " time.config " ;
case PREF_TIME_PRIVATE :
return " time.private " ;
case PREF_TIME_XMLCONSOLE :
return " time.xmlconsole " ;
case PREF_TIME_STATUSBAR :
return " time.statusbar " ;
case PREF_TIME_LASTACTIVITY :
return " time.lastactivity " ;
Add vCard support
Only nicknames, photos, birthdays, addresses, telephone numbers, emails,
JIDs, titles, roles, notes, and URLs are supported
Due to the synopsis array not having enough space, `/vcard photo
open-self` and `/vcard photo save-self` are not documented properly in
the synopsis section of the `/vcard` command, but they are documented in
the arguments section
Fixed memory leak in vcard autocomplete (thanks to debXwoody)
2022-09-06 12:29:07 -04:00
case PREF_TIME_VCARD :
return " time.vcard " ;
2020-07-20 07:01:05 -04:00
case PREF_ROSTER :
return " roster " ;
case PREF_ROSTER_OFFLINE :
return " roster.offline " ;
case PREF_ROSTER_RESOURCE :
return " roster.resource " ;
case PREF_ROSTER_PRESENCE :
return " roster.presence " ;
case PREF_ROSTER_STATUS :
return " roster.status " ;
case PREF_ROSTER_EMPTY :
return " roster.empty " ;
case PREF_ROSTER_BY :
return " roster.by " ;
case PREF_ROSTER_ORDER :
return " roster.order " ;
case PREF_ROSTER_UNREAD :
return " roster.unread " ;
case PREF_ROSTER_COUNT :
return " roster.count " ;
case PREF_ROSTER_COUNT_ZERO :
return " roster.count.zero " ;
case PREF_ROSTER_PRIORITY :
return " roster.priority " ;
case PREF_ROSTER_WRAP :
return " roster.wrap " ;
case PREF_ROSTER_RESOURCE_JOIN :
return " roster.resource.join " ;
case PREF_ROSTER_CONTACTS :
return " roster.contacts " ;
case PREF_ROSTER_UNSUBSCRIBED :
return " roster.unsubscribed " ;
case PREF_ROSTER_ROOMS :
return " roster.rooms " ;
case PREF_ROSTER_ROOMS_POS :
return " roster.rooms.pos " ;
case PREF_ROSTER_ROOMS_BY :
return " roster.rooms.by " ;
case PREF_ROSTER_ROOMS_ORDER :
return " roster.rooms.order " ;
case PREF_ROSTER_ROOMS_UNREAD :
return " roster.rooms.unread " ;
case PREF_ROSTER_ROOMS_SERVER :
return " roster.rooms.server " ;
case PREF_ROSTER_ROOMS_USE_AS_NAME :
return " roster.rooms.use.name " ;
case PREF_ROSTER_PRIVATE :
return " roster.private " ;
case PREF_RESOURCE_TITLE :
return " resource.title " ;
case PREF_RESOURCE_MESSAGE :
return " resource.message " ;
case PREF_INPBLOCK_DYNAMIC :
return " inpblock.dynamic " ;
case PREF_ENC_WARN :
return " enc.warn " ;
case PREF_TITLEBAR_MUC_TITLE_JID :
return " titlebar.muc.title.jid " ;
case PREF_TITLEBAR_MUC_TITLE_NAME :
return " titlebar.muc.title.name " ;
case PREF_PGP_LOG :
return " log " ;
case PREF_PGP_SENDFILE :
return " sendfile " ;
2023-06-30 08:33:17 -04:00
case PREF_PGP_PUBKEY_AUTOIMPORT :
return " pgp.pubkey.autoimport " ;
2020-07-20 07:01:05 -04:00
case PREF_TLS_CERTPATH :
return " tls.certpath " ;
case PREF_TLS_SHOW :
return " tls.show " ;
case PREF_LASTACTIVITY :
return " lastactivity " ;
case PREF_CONSOLE_MUC :
return " console.muc " ;
case PREF_CONSOLE_PRIVATE :
return " console.private " ;
case PREF_CONSOLE_CHAT :
return " console.chat " ;
case PREF_COLOR_NICK :
return " color.nick " ;
case PREF_COLOR_NICK_OWN :
return " color.nick.own " ;
case PREF_ROSTER_COLOR_NICK :
return " color.roster.nick " ;
case PREF_OCCUPANTS_COLOR_NICK :
return " color.occupants.nick " ;
case PREF_BOOKMARK_INVITE :
return " bookmark.invite " ;
case PREF_ROOM_LIST_CACHE :
return " rooms.cache " ;
case PREF_STATUSBAR_SHOW_NAME :
return " statusbar.show.name " ;
case PREF_STATUSBAR_SHOW_NUMBER :
return " statusbar.show.number " ;
case PREF_STATUSBAR_SHOW_READ :
return " statusbar.show.read " ;
case PREF_STATUSBAR_SELF :
return " statusbar.self " ;
case PREF_STATUSBAR_CHAT :
return " statusbar.chat " ;
case PREF_STATUSBAR_ROOM :
return " statusbar.room " ;
2023-04-03 12:37:23 -04:00
case PREF_STATUSBAR_TABMODE :
return " statusbar.tabmode " ;
2020-07-20 07:01:05 -04:00
case PREF_OMEMO_LOG :
return " log " ;
case PREF_OMEMO_POLICY :
return " policy " ;
2021-04-17 07:28:54 -04:00
case PREF_OMEMO_TRUST_MODE :
return " trustmode " ;
2020-07-20 07:01:05 -04:00
case PREF_CORRECTION_ALLOW :
return " correction.allow " ;
case PREF_AVATAR_CMD :
return " avatar.cmd " ;
case PREF_SLASH_GUARD :
return " slashguard " ;
case PREF_MAM :
return " mam " ;
case PREF_URL_OPEN_CMD :
return " url.open.cmd " ;
case PREF_URL_SAVE_CMD :
return " url.save.cmd " ;
2021-04-11 10:21:00 -04:00
case PREF_COMPOSE_EDITOR :
return " compose.editor " ;
2021-07-01 12:02:03 -04:00
case PREF_SILENCE_NON_ROSTER :
return " silence.incoming.nonroster " ;
2022-04-28 13:29:27 -04:00
case PREF_OUTGOING_STAMP :
2022-03-29 13:34:34 -04:00
return " stamp.outgoing " ;
2022-04-28 13:29:27 -04:00
case PREF_INCOMING_STAMP :
2022-03-29 13:34:34 -04:00
return " stamp.incoming " ;
2022-05-05 17:41:45 -04:00
case PREF_OX_LOG :
return " log " ;
2022-06-22 04:02:42 -04:00
case PREF_MOOD :
return " mood " ;
Add vCard support
Only nicknames, photos, birthdays, addresses, telephone numbers, emails,
JIDs, titles, roles, notes, and URLs are supported
Due to the synopsis array not having enough space, `/vcard photo
open-self` and `/vcard photo save-self` are not documented properly in
the synopsis section of the `/vcard` command, but they are documented in
the arguments section
Fixed memory leak in vcard autocomplete (thanks to debXwoody)
2022-09-06 12:29:07 -04:00
case PREF_VCARD_PHOTO_CMD :
return " vcard.photo.cmd " ;
2022-12-05 04:25:57 -05:00
case PREF_STROPHE_VERBOSITY :
return " strophe.verbosity " ;
case PREF_STROPHE_SM_ENABLED :
return " strophe.sm.enabled " ;
case PREF_STROPHE_SM_RESEND :
return " strophe.sm.resend " ;
2020-07-20 07:01:05 -04:00
default :
return NULL ;
2013-02-02 21:51:15 -05:00
}
}
2015-01-10 14:22:38 -05:00
// the default setting for a boolean type preference
// if it is not specified in .profrc
2013-02-02 21:51:15 -05:00
static gboolean
_get_default_boolean ( preference_t pref )
{
2020-07-07 08:18:57 -04:00
switch ( pref ) {
case PREF_ENC_WARN :
case PREF_AUTOAWAY_CHECK :
case PREF_LOG_ROTATE :
case PREF_LOG_SHARED :
case PREF_SPLASH :
case PREF_OCCUPANTS :
case PREF_MUC_PRIVILEGES :
case PREF_PRESENCE :
case PREF_WRAP :
case PREF_INPBLOCK_DYNAMIC :
case PREF_RESOURCE_TITLE :
case PREF_RESOURCE_MESSAGE :
case PREF_ROSTER :
case PREF_ROSTER_OFFLINE :
case PREF_ROSTER_EMPTY :
case PREF_ROSTER_COUNT_ZERO :
case PREF_ROSTER_PRIORITY :
case PREF_ROSTER_RESOURCE_JOIN :
case PREF_ROSTER_CONTACTS :
case PREF_ROSTER_UNSUBSCRIBED :
case PREF_ROSTER_ROOMS :
case PREF_ROSTER_ROOMS_SERVER :
case PREF_TLS_SHOW :
case PREF_LASTACTIVITY :
case PREF_TRAY_READ :
case PREF_BOOKMARK_INVITE :
case PREF_ROOM_LIST_CACHE :
case PREF_STATUSBAR_SHOW_NUMBER :
case PREF_STATUSBAR_SHOW_READ :
case PREF_REVEAL_OS :
case PREF_CORRECTION_ALLOW :
case PREF_RECEIPTS_SEND :
case PREF_CARBONS :
case PREF_STATES :
case PREF_OUTTYPE :
case PREF_TITLEBAR_MUC_TITLE_NAME :
case PREF_COLOR_NICK_OWN :
2021-05-08 13:41:38 -04:00
case PREF_INTYPE :
case PREF_INTYPE_CONSOLE :
2021-09-08 06:04:34 -04:00
case PREF_NOTIFY_MENTION_WHOLE_WORD :
2022-06-22 04:02:42 -04:00
case PREF_MOOD :
2022-12-05 04:25:57 -05:00
case PREF_STROPHE_SM_ENABLED :
case PREF_STROPHE_SM_RESEND :
2020-07-07 08:18:57 -04:00
return TRUE ;
2023-06-30 08:33:17 -04:00
case PREF_PGP_PUBKEY_AUTOIMPORT :
2020-07-07 08:18:57 -04:00
default :
return FALSE ;
2013-02-02 21:51:15 -05:00
}
}
2015-01-10 14:22:38 -05:00
// the default setting for a string type preference
// if it is not specified in .profrc
2015-10-25 18:23:38 -04:00
static char *
2013-02-02 22:24:13 -05:00
_get_default_string ( preference_t pref )
{
2020-07-07 08:18:57 -04:00
switch ( pref ) {
case PREF_AUTOAWAY_MODE :
return " off " ;
case PREF_OTR_LOG :
2022-05-09 08:16:28 -04:00
return " on " ;
2020-07-07 08:18:57 -04:00
case PREF_OTR_POLICY :
return " manual " ;
case PREF_STATUSES_CONSOLE :
return " all " ;
case PREF_ROSTER_BY :
return " presence " ;
case PREF_ROSTER_COUNT :
return " unread " ;
case PREF_ROSTER_ORDER :
return " presence " ;
case PREF_ROSTER_UNREAD :
return " after " ;
case PREF_ROSTER_ROOMS_POS :
return " last " ;
case PREF_ROSTER_ROOMS_BY :
2022-04-07 11:32:37 -04:00
case PREF_STATUSES_CHAT :
case PREF_STATUSES_MUC :
2020-07-07 08:18:57 -04:00
return " none " ;
case PREF_ROSTER_ROOMS_USE_AS_NAME :
return " name " ;
case PREF_ROSTER_ROOMS_ORDER :
return " name " ;
case PREF_ROSTER_ROOMS_UNREAD :
return " after " ;
case PREF_ROSTER_PRIVATE :
return " room " ;
case PREF_TIME_CONSOLE :
return " %H:%M:%S " ;
case PREF_TIME_CHAT :
return " %H:%M:%S " ;
case PREF_TIME_MUC :
return " %H:%M:%S " ;
case PREF_TIME_CONFIG :
return " %H:%M:%S " ;
case PREF_TIME_PRIVATE :
return " %H:%M:%S " ;
case PREF_TIME_XMLCONSOLE :
return " %H:%M:%S " ;
case PREF_TIME_STATUSBAR :
return " %H:%M " ;
case PREF_TIME_LASTACTIVITY :
return " %d/%m/%y %H:%M:%S " ;
Add vCard support
Only nicknames, photos, birthdays, addresses, telephone numbers, emails,
JIDs, titles, roles, notes, and URLs are supported
Due to the synopsis array not having enough space, `/vcard photo
open-self` and `/vcard photo save-self` are not documented properly in
the synopsis section of the `/vcard` command, but they are documented in
the arguments section
Fixed memory leak in vcard autocomplete (thanks to debXwoody)
2022-09-06 12:29:07 -04:00
case PREF_TIME_VCARD :
return " %d/%m/%y " ;
2020-07-07 08:18:57 -04:00
case PREF_PGP_LOG :
2022-05-09 08:16:28 -04:00
return " on " ;
2020-07-07 08:18:57 -04:00
case PREF_CONSOLE_MUC :
case PREF_CONSOLE_PRIVATE :
case PREF_CONSOLE_CHAT :
return " all " ;
case PREF_STATUSBAR_SELF :
return " fulljid " ;
case PREF_STATUSBAR_CHAT :
return " user " ;
case PREF_STATUSBAR_ROOM :
return " room " ;
2023-04-03 12:37:23 -04:00
case PREF_STATUSBAR_TABMODE :
return " default " ;
2020-07-07 08:18:57 -04:00
case PREF_OMEMO_LOG :
2022-05-09 08:16:28 -04:00
return " on " ;
2020-07-07 08:18:57 -04:00
case PREF_OMEMO_POLICY :
return " automatic " ;
2021-04-17 07:28:54 -04:00
case PREF_OMEMO_TRUST_MODE :
return " manual " ;
2020-07-07 08:18:57 -04:00
case PREF_COLOR_NICK :
return " false " ;
case PREF_AVATAR_CMD :
2023-05-09 13:58:21 -04:00
return " xdg-open %p " ;
2020-07-07 08:18:57 -04:00
case PREF_URL_OPEN_CMD :
2020-12-03 10:43:07 -05:00
return " xdg-open %u " ;
Add vCard support
Only nicknames, photos, birthdays, addresses, telephone numbers, emails,
JIDs, titles, roles, notes, and URLs are supported
Due to the synopsis array not having enough space, `/vcard photo
open-self` and `/vcard photo save-self` are not documented properly in
the synopsis section of the `/vcard` command, but they are documented in
the arguments section
Fixed memory leak in vcard autocomplete (thanks to debXwoody)
2022-09-06 12:29:07 -04:00
case PREF_VCARD_PHOTO_CMD :
return " xdg-open %p " ;
2022-03-27 14:44:32 -04:00
case PREF_COMPOSE_EDITOR :
{
gchar * editor = getenv ( " EDITOR " ) ;
return editor ? editor : " vim " ;
}
2022-04-28 13:29:27 -04:00
case PREF_OUTGOING_STAMP :
2022-05-03 06:17:29 -04:00
return " me " ;
2022-04-28 13:29:27 -04:00
case PREF_INCOMING_STAMP :
2022-03-29 13:34:34 -04:00
return NULL ;
2020-12-03 10:43:07 -05:00
case PREF_URL_SAVE_CMD :
return NULL ; // Default to built-in method.
2022-05-05 17:41:45 -04:00
case PREF_OX_LOG :
2022-05-09 08:16:28 -04:00
return " on " ;
2022-12-05 04:25:57 -05:00
case PREF_STROPHE_VERBOSITY :
return " 0 " ;
2023-07-03 10:06:24 -04:00
case PREF_DBLOG :
return " on " ;
2020-07-07 08:18:57 -04:00
default :
return NULL ;
2013-02-02 22:24:13 -05:00
}
2015-05-17 17:05:43 -04:00
}