Skip to content

Commit

Permalink
Allow utf8 symbols as omemo/pgp/otr indicator char
Browse files Browse the repository at this point in the history
Fix #1264
  • Loading branch information
jubalh committed Feb 20, 2020
1 parent 280b718 commit 1f8b1eb
Show file tree
Hide file tree
Showing 21 changed files with 643 additions and 622 deletions.
365 changes: 183 additions & 182 deletions src/command/cmd_funcs.c

Large diffs are not rendered by default.

72 changes: 34 additions & 38 deletions src/config/preferences.c
Original file line number Diff line number Diff line change
Expand Up @@ -868,82 +868,79 @@ prefs_get_roster_size(void)
}
}

char
char*
prefs_get_otr_char(void)
{
char result = '~';
char *result = "~";

char *resultstr = g_key_file_get_string(prefs, PREF_GROUP_OTR, "otr.char", NULL);
if (!resultstr) {
result = '~';
result = strdup("~");
} else {
result = resultstr[0];
result = resultstr;
}
free(resultstr);

return result;
}

void
prefs_set_otr_char(char ch)
prefs_set_otr_char(char *ch)
{
char str[2];
str[0] = ch;
str[1] = '\0';

g_key_file_set_string(prefs, PREF_GROUP_OTR, "otr.char", str);
if (g_utf8_strlen(ch, 4) == 1) {
g_key_file_set_string(prefs, PREF_GROUP_OTR, "otr.char", ch);
} else {
log_error("Could not set otr char: %s", ch);
}
}

char
char*
prefs_get_pgp_char(void)
{
char result = '~';
char *result = "~";

char *resultstr = g_key_file_get_string(prefs, PREF_GROUP_PGP, "pgp.char", NULL);
if (!resultstr) {
result = '~';
result = strdup("~");
} else {
result = resultstr[0];
result = resultstr;
}
free(resultstr);

return result;
}

void
prefs_set_pgp_char(char ch)
prefs_set_pgp_char(char *ch)
{
char str[2];
str[0] = ch;
str[1] = '\0';

g_key_file_set_string(prefs, PREF_GROUP_PGP, "pgp.char", str);
if (g_utf8_strlen(ch, 4) == 1) {
g_key_file_set_string(prefs, PREF_GROUP_PGP, "pgp.char", ch);
} else {
log_error("Could not set pgp char: %s", ch);
}
}

char
char*
prefs_get_omemo_char(void)
{
char result = '~';
char *result = "~";

char *resultstr = g_key_file_get_string(prefs, PREF_GROUP_OMEMO, "omemo.char", NULL);
if (!resultstr) {
result = '~';
result = strdup("~");
} else {
result = resultstr[0];
result = resultstr;
}
free(resultstr);

return result;
}

void
prefs_set_omemo_char(char ch)
prefs_set_omemo_char(char *ch)
{
char str[2];
str[0] = ch;
str[1] = '\0';

g_key_file_set_string(prefs, PREF_GROUP_OMEMO, "omemo.char", str);
if (g_utf8_strlen(ch, 4) == 1) {
g_key_file_set_string(prefs, PREF_GROUP_OMEMO, "omemo.char", ch);
} else {
log_error("Could not set omemo char: %s", ch);
}
}

char
Expand Down Expand Up @@ -1201,18 +1198,17 @@ prefs_set_roster_presence_indent(gint value)
g_key_file_set_integer(prefs, PREF_GROUP_UI, "roster.presence.indent", value);
}

char
char*
prefs_get_correction_char(void)
{
char result = '+';
char *result = "+";

char *resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "correction.char", NULL);
if (!resultstr) {
result = '+';
result = strdup("+");
} else {
result = resultstr[0];
result = resultstr;
}
free(resultstr);

return result;
}
Expand Down
14 changes: 7 additions & 7 deletions src/config/preferences.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,12 +232,12 @@ void prefs_free_plugins(gchar **plugins);
void prefs_add_plugin(const char *const name);
void prefs_remove_plugin(const char *const name);

char prefs_get_otr_char(void);
void prefs_set_otr_char(char ch);
char prefs_get_pgp_char(void);
void prefs_set_pgp_char(char ch);
char prefs_get_omemo_char(void);
void prefs_set_omemo_char(char ch);
char* prefs_get_otr_char(void);
void prefs_set_otr_char(char *ch);
char* prefs_get_pgp_char(void);
void prefs_set_pgp_char(char *ch);
char* prefs_get_omemo_char(void);
void prefs_set_omemo_char(char *ch);

char prefs_get_roster_header_char(void);
void prefs_set_roster_header_char(char ch);
Expand Down Expand Up @@ -273,7 +273,7 @@ void prefs_set_roster_presence_indent(gint value);
gint prefs_get_occupants_indent(void);
void prefs_set_occupants_indent(gint value);

char prefs_get_correction_char(void);
char* prefs_get_correction_char(void);
void prefs_set_correction_char(char ch);

void prefs_add_login(const char *jid);
Expand Down
12 changes: 6 additions & 6 deletions src/config/theme.c
Original file line number Diff line number Diff line change
Expand Up @@ -461,24 +461,24 @@ _load_preferences(void)

if (g_key_file_has_key(theme, "ui", "otr.char", NULL)) {
gchar *ch = g_key_file_get_string(theme, "ui", "otr.char", NULL);
if (ch && strlen(ch) > 0) {
prefs_set_otr_char(ch[0]);
if (ch && g_utf8_strlen(ch, 4) == 1) {
prefs_set_otr_char(ch);
g_free(ch);
}
}

if (g_key_file_has_key(theme, "ui", "pgp.char", NULL)) {
gchar *ch = g_key_file_get_string(theme, "ui", "pgp.char", NULL);
if (ch && strlen(ch) > 0) {
prefs_set_pgp_char(ch[0]);
if (ch && g_utf8_strlen(ch, 4) == 1) {
prefs_set_pgp_char(ch);
g_free(ch);
}
}

if (g_key_file_has_key(theme, "ui", "omemo.char", NULL)) {
gchar *ch = g_key_file_get_string(theme, "ui", "omemo.char", NULL);
if (ch && strlen(ch) > 0) {
prefs_set_omemo_char(ch[0]);
if (ch && g_utf8_strlen(ch, 4) == 1) {
prefs_set_omemo_char(ch);
g_free(ch);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/event/server_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,7 @@ sv_ev_incoming_message(ProfMessage *message)
#ifdef HAVE_OMEMO
if (message->encrypted) {
if (chatwin->is_otr) {
win_println((ProfWin*)chatwin, THEME_DEFAULT, '-', "PGP encrypted message received whilst in OTR session.");
win_println((ProfWin*)chatwin, THEME_DEFAULT, "-", "PGP encrypted message received whilst in OTR session.");
} else {
_sv_ev_incoming_pgp(chatwin, new_win, message, TRUE);
}
Expand Down
4 changes: 2 additions & 2 deletions src/otr/otr.c
Original file line number Diff line number Diff line change
Expand Up @@ -353,14 +353,14 @@ otr_on_message_send(ProfChatWin *chatwin, const char *const message, gboolean re
free(id);
return TRUE;
} else {
win_println((ProfWin*)chatwin, THEME_ERROR, '-', "%s", "Failed to encrypt and send message.");
win_println((ProfWin*)chatwin, THEME_ERROR, "-", "%s", "Failed to encrypt and send message.");
return TRUE;
}
}

// show error if not secure and policy always
if (policy == PROF_OTRPOLICY_ALWAYS) {
win_println((ProfWin*)chatwin, THEME_ERROR, '-', "%s", "Failed to send message. OTR policy set to: always");
win_println((ProfWin*)chatwin, THEME_ERROR, "-", "%s", "Failed to send message. OTR policy set to: always");
return TRUE;
}

Expand Down
24 changes: 12 additions & 12 deletions src/plugins/api.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ api_cons_show_themed(const char *const group, const char *const key, const char
char *parsed = str_replace(message, "\r\n", "\n");
theme_item_t themeitem = plugin_themes_get(group, key, def);
ProfWin *console = wins_get_console();
win_println(console, themeitem, '-', "%s", parsed);
win_println(console, themeitem, "-", "%s", parsed);

free(parsed);

Expand Down Expand Up @@ -375,7 +375,7 @@ api_win_show(const char *tag, const char *line)
}

ProfWin *window = (ProfWin*)pluginwin;
win_println(window, THEME_DEFAULT, '!', "%s", line);
win_println(window, THEME_DEFAULT, "!", "%s", line);

return 1;
}
Expand All @@ -400,7 +400,7 @@ api_win_show_themed(const char *tag, const char *const group, const char *const

theme_item_t themeitem = plugin_themes_get(group, key, def);
ProfWin *window = (ProfWin*)pluginwin;
win_println(window, themeitem, '!', "%s", line);
win_println(window, themeitem, "!", "%s", line);

return 1;
}
Expand Down Expand Up @@ -522,7 +522,7 @@ api_encryption_reset(const char *const barejid)
#ifdef HAVE_LIBGPGME
if (chatwin->pgp_send) {
chatwin->pgp_send = FALSE;
win_println((ProfWin*)chatwin, THEME_DEFAULT, '!', "PGP encryption disabled.");
win_println((ProfWin*)chatwin, THEME_DEFAULT, "!", "PGP encryption disabled.");
}
#endif

Expand Down Expand Up @@ -784,7 +784,7 @@ api_chat_show(const char *const barejid, const char *message)
}

char *parsed = str_replace(message, "\r\n", "\n");
win_println((ProfWin*)chatwin, THEME_TEXT, '-', "%s", parsed);
win_println((ProfWin*)chatwin, THEME_TEXT, "-", "%s", parsed);
free(parsed);

return 1;
Expand All @@ -804,13 +804,13 @@ api_chat_show_themed(const char *const barejid, const char *const group, const c
return 0;
}

char show_ch = '-';
char *show_ch = "-";
if (ch) {
if (strlen(ch) != 1) {
if (g_utf8_strlen(ch, 4) != 1) {
log_warning("%s", "api_chat_show_themed failed, ch must be a string of length 1");
return 0;
} else {
show_ch = ch[0];
show_ch = (char*)ch;
}
}

Expand Down Expand Up @@ -849,7 +849,7 @@ api_room_show(const char *const roomjid, const char *message)
}

char *parsed = str_replace(message, "\r\n", "\n");
win_println((ProfWin*)mucwin, THEME_TEXT, '-', "%s", parsed);
win_println((ProfWin*)mucwin, THEME_TEXT, "-", "%s", parsed);
free(parsed);

return 1;
Expand All @@ -869,13 +869,13 @@ api_room_show_themed(const char *const roomjid, const char *const group, const c
return 0;
}

char show_ch = '-';
char *show_ch = "-";
if (ch) {
if (strlen(ch) != 1) {
if (g_utf8_strlen(ch, 4) != 1) {
log_warning("%s", "api_room_show_themed failed, ch must be a string of length 1");
return 0;
} else {
show_ch = ch[0];
show_ch = (char*)ch;
}
}

Expand Down
5 changes: 3 additions & 2 deletions src/ui/buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,11 @@ buffer_free(ProfBuff buffer)
}

void
buffer_append(ProfBuff buffer, const char show_char, int pad_indent, GDateTime *time,
buffer_append(ProfBuff buffer, const char *show_char, int pad_indent, GDateTime *time,
int flags, theme_item_t theme_item, const char *const display_from, const char *const message, DeliveryReceipt *receipt, const char *const id)
{
ProfBuffEntry *e = malloc(sizeof(struct prof_buff_entry_t));
e->show_char = show_char;
e->show_char = strdup(show_char);
e->pad_indent = pad_indent;
e->flags = flags;
e->theme_item = theme_item;
Expand Down Expand Up @@ -163,6 +163,7 @@ buffer_get_entry_by_id(ProfBuff buffer, const char *const id)
static void
_free_entry(ProfBuffEntry *entry)
{
free(entry->show_char);
free(entry->message);
free(entry->display_from);
free(entry->id);
Expand Down
5 changes: 3 additions & 2 deletions src/ui/buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ typedef struct delivery_receipt_t {
} DeliveryReceipt;

typedef struct prof_buff_entry_t {
char show_char;
// pointer because it could be a unicode symbol as well
char *show_char;
int pad_indent;
GDateTime *time;
int flags;
Expand All @@ -65,7 +66,7 @@ typedef struct prof_buff_t *ProfBuff;

ProfBuff buffer_create();
void buffer_free(ProfBuff buffer);
void buffer_append(ProfBuff buffer, const char show_char, int pad_indent, GDateTime *time,
void buffer_append(ProfBuff buffer, const char *show_char, int pad_indent, GDateTime *time,
int flags, theme_item_t theme_item, const char *const display_from, const char *const message, DeliveryReceipt *receipt, const char *const id);
void buffer_remove_entry_by_id(ProfBuff buffer, const char *const id);
int buffer_size(ProfBuff buffer);
Expand Down
Loading

0 comments on commit 1f8b1eb

Please sign in to comment.