Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/command/cmd_defs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1190,7 +1190,8 @@ static const struct cmd_t command_defs[] = {
"Time formats are strings supported by g_date_time_format. "
"See https://developer.gnome.org/glib/stable/glib-GDateTime.html#g-date-time-format for more details. "
"Setting the format to an unsupported string, will display the string. "
"If the format contains spaces, it must be surrounded with double quotes.")
"If the format contains spaces, it must be surrounded with double quotes. "
"It is possible to pass format as 'iso8601' in order to set the time format according to ISO-8601 (only local time, without Time zone designator).")
CMD_ARGS(
{ "console set <format>", "Set time format for console window." },
{ "console off", "Do not show time in console window." },
Expand All @@ -1216,7 +1217,8 @@ static const struct cmd_t command_defs[] = {
"/time xml off",
"/time statusbar set %H:%M",
"/time lastactivity set \"%d-%m-%y %H:%M:%S\"",
"/time all set \"%d-%m-%y %H:%M:%S\"")
"/time all set \"%d-%m-%y %H:%M:%S\"",
"/time all set iso8601")
},

{ CMD_PREAMBLE("/inpblock",
Expand Down
256 changes: 53 additions & 203 deletions src/command/cmd_funcs.c
Original file line number Diff line number Diff line change
Expand Up @@ -5297,217 +5297,67 @@ cmd_wrap(ProfWin* window, const char* const command, gchar** args)
gboolean
cmd_time(ProfWin* window, const char* const command, gchar** args)
{
if (g_strcmp0(args[0], "lastactivity") == 0) {
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_LASTACTIVITY);
cons_show("Last activity time format: '%s'.", format);
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_LASTACTIVITY, args[2]);
cons_show("Last activity time format set to '%s'.", args[2]);
ui_redraw();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
cons_show("Last activity time cannot be disabled.");
ui_redraw();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "statusbar") == 0) {
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_STATUSBAR);
cons_show("Status bar time format: '%s'.", format);
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_STATUSBAR, args[2]);
cons_show("Status bar time format set to '%s'.", args[2]);
ui_redraw();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
prefs_set_string(PREF_TIME_STATUSBAR, "off");
cons_show("Status bar time display disabled.");
ui_redraw();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "console") == 0) {
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_CONSOLE);
cons_show("Console time format: '%s'.", format);
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_CONSOLE, args[2]);
cons_show("Console time format set to '%s'.", args[2]);
wins_resize_all();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
prefs_set_string(PREF_TIME_CONSOLE, "off");
cons_show("Console time display disabled.");
wins_resize_all();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "chat") == 0) {
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_CHAT);
cons_show("Chat time format: '%s'.", format);
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_CHAT, args[2]);
cons_show("Chat time format set to '%s'.", args[2]);
wins_resize_all();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
prefs_set_string(PREF_TIME_CHAT, "off");
cons_show("Chat time display disabled.");
wins_resize_all();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "muc") == 0) {
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_MUC);
cons_show("MUC time format: '%s'.", format);
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_MUC, args[2]);
cons_show("MUC time format set to '%s'.", args[2]);
wins_resize_all();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
prefs_set_string(PREF_TIME_MUC, "off");
cons_show("MUC time display disabled.");
wins_resize_all();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "config") == 0) {
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_CONFIG);
cons_show("config time format: '%s'.", format);
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_CONFIG, args[2]);
cons_show("config time format set to '%s'.", args[2]);
wins_resize_all();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
prefs_set_string(PREF_TIME_CONFIG, "off");
cons_show("config time display disabled.");
wins_resize_all();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "private") == 0) {
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_PRIVATE);
cons_show("Private chat time format: '%s'.", format);
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_PRIVATE, args[2]);
cons_show("Private chat time format set to '%s'.", args[2]);
wins_resize_all();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
prefs_set_string(PREF_TIME_PRIVATE, "off");
cons_show("Private chat time display disabled.");
wins_resize_all();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "xml") == 0) {
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_XMLCONSOLE);
cons_show("XML Console time format: '%s'.", format);
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_XMLCONSOLE, args[2]);
cons_show("XML Console time format set to '%s'.", args[2]);
wins_resize_all();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
prefs_set_string(PREF_TIME_XMLCONSOLE, "off");
cons_show("XML Console time display disabled.");
wins_resize_all();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "all") == 0) {
if (args[1] == NULL) {
cons_time_setting();
return TRUE;
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_CONSOLE, args[2]);
cons_show("Console time format set to '%s'.", args[2]);
prefs_set_string(PREF_TIME_CHAT, args[2]);
cons_show("Chat time format set to '%s'.", args[2]);
prefs_set_string(PREF_TIME_MUC, args[2]);
cons_show("MUC time format set to '%s'.", args[2]);
prefs_set_string(PREF_TIME_CONFIG, args[2]);
cons_show("config time format set to '%s'.", args[2]);
prefs_set_string(PREF_TIME_PRIVATE, args[2]);
cons_show("Private chat time format set to '%s'.", args[2]);
prefs_set_string(PREF_TIME_XMLCONSOLE, args[2]);
cons_show("XML Console time format set to '%s'.", args[2]);
wins_resize_all();
return TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
prefs_set_string(PREF_TIME_CONSOLE, "off");
cons_show("Console time display disabled.");
prefs_set_string(PREF_TIME_CHAT, "off");
cons_show("Chat time display disabled.");
prefs_set_string(PREF_TIME_MUC, "off");
cons_show("MUC time display disabled.");
prefs_set_string(PREF_TIME_CONFIG, "off");
cons_show("config time display disabled.");
prefs_set_string(PREF_TIME_PRIVATE, "off");
cons_show("config time display disabled.");
prefs_set_string(PREF_TIME_XMLCONSOLE, "off");
cons_show("XML Console time display disabled.");
ui_redraw();
return TRUE;
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else if (g_strcmp0(args[0], "vcard") == 0) {
const struct time_preferences
{
preference_t pref;
const char *name, *description;
} time_prefs[] = {
{ .pref = PREF_TIME_LASTACTIVITY, .name = "lastactivity", .description = "Last activity" },
{ .pref = PREF_TIME_CONSOLE, .name = "console", .description = "Console" },
{ .pref = PREF_TIME_STATUSBAR, .name = "statusbar", .description = "Status bar" },
{ .pref = PREF_TIME_CHAT, .name = "chat", .description = "Chat" },
{ .pref = PREF_TIME_MUC, .name = "muc", .description = "MUC" },
{ .pref = PREF_TIME_CONFIG, .name = "config", .description = "Config" },
{ .pref = PREF_TIME_PRIVATE, .name = "private", .description = "Private chat" },
{ .pref = PREF_TIME_XMLCONSOLE, .name = "xml", .description = "XML Console" },
{ .pref = PREF_TIME_VCARD, .name = "vcard", .description = "vCard" },
};
gboolean redraw = FALSE;
gboolean set_all = g_strcmp0(args[0], "all") == 0;
for (size_t n = 0; n < ARRAY_SIZE(time_prefs); ++n) {
if (!set_all && g_strcmp0(args[0], time_prefs[n].name) != 0)
continue;
const struct time_preferences* tp = &time_prefs[n];
if (args[1] == NULL) {
auto_gchar gchar* format = prefs_get_string(PREF_TIME_VCARD);
cons_show("vCard time format: %s", format);
return TRUE;
if (set_all) {
cons_time_setting();
return TRUE;
}
auto_gchar gchar* format = prefs_get_string(tp->pref);
cons_show("%s time format: '%s'.", tp->description, format);
} else if (g_strcmp0(args[1], "set") == 0 && args[2] != NULL) {
prefs_set_string(PREF_TIME_VCARD, args[2]);
cons_show("vCard time format set to '%s'.", args[2]);
ui_redraw();
return TRUE;
const struct format_strings
{
const char *name, *format;
} format_strings[] = {
{ .name = "iso8601", .format = "%Y-%m-%dT%H:%M:%S" },
};
const gchar* set_arg = args[2];
for (size_t m = 0; m < ARRAY_SIZE(format_strings); ++m) {
if (g_strcmp0(args[2], format_strings[m].name) == 0) {
set_arg = format_strings[m].format;
break;
}
}
prefs_set_string(tp->pref, set_arg);
cons_show("%s time format set to '%s'.", tp->description, args[2]);
redraw = TRUE;
} else if (g_strcmp0(args[1], "off") == 0) {
cons_show("vCard time cannot be disabled.");
ui_redraw();
return TRUE;
if (tp->pref == PREF_TIME_LASTACTIVITY) {
cons_show("%s time display cannot be disabled.", tp->description);
} else {
prefs_set_string(tp->pref, "off");
cons_show("%s time display disabled.", tp->description);
redraw = TRUE;
}
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
} else {
cons_bad_cmd_usage(command);
return TRUE;
}
if (redraw)
ui_redraw();
return TRUE;
}

gboolean
Expand Down
2 changes: 1 addition & 1 deletion src/config/preferences.c
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,7 @@ prefs_get_string_with_locale(preference_t pref, gchar* locale)
* @param new_value The new string value to set. Pass NULL to remove the key.
*/
void
prefs_set_string(preference_t pref, gchar* new_value)
prefs_set_string(preference_t pref, const gchar* new_value)
{
const char* group = _get_group(pref);
const char* key = _get_key(pref);
Expand Down
2 changes: 1 addition & 1 deletion src/config/preferences.h
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ gboolean prefs_get_boolean(preference_t pref);
void prefs_set_boolean(preference_t pref, gboolean value);
gchar* prefs_get_string(preference_t pref);
gchar* prefs_get_string_with_locale(preference_t pref, gchar* locale);
void prefs_set_string(preference_t pref, gchar* new_value);
void prefs_set_string(preference_t pref, const gchar* new_value);
void prefs_set_string_with_option(preference_t pref, char* option, char* value);
void prefs_set_string_list_with_option(preference_t pref, char* option, const gchar* const* values);

Expand Down
5 changes: 3 additions & 2 deletions src/ui/window.c
Original file line number Diff line number Diff line change
Expand Up @@ -701,12 +701,13 @@ win_page_down(ProfWin* window, int scroll_size)
auto_gchar gchar* start = g_date_time_format_iso8601(last_entry->time);
GDateTime* now = g_date_time_new_now_local();
gchar* end_date = g_date_time_format_iso8601(now);
g_date_time_unref(now);
if (*scroll_state != WIN_SCROLL_REACHED_BOTTOM && !chatwin_db_history((ProfChatWin*)window, start, end_date, FALSE)) {
*scroll_state = WIN_SCROLL_REACHED_BOTTOM;
} else if (*scroll_state == WIN_SCROLL_REACHED_BOTTOM) {
g_free(end_date);
}

g_date_time_unref(now);

int offset = last_entry->y_end_pos - 1;
*page_start = offset - page_space + scroll_size;
}
Expand Down
Loading