1
0
mirror of https://github.com/Tha14/toxic.git synced 2024-06-26 20:47:45 +02:00

Add support for custom timestamps in chat and logs.

Internal representations of the time_format setting are replaced by timestamp format strings.
time_format is only used in the setup.

Signed-off-by: Loui Chang <louipc.ist@gmail.com>
This commit is contained in:
Loui Chang 2015-02-19 18:20:38 -05:00
parent d6c57c7aa3
commit 53e4b2c971
10 changed files with 77 additions and 30 deletions

View File

@ -2,12 +2,12 @@
.\" Title: toxic.conf .\" Title: toxic.conf
.\" Author: [see the "AUTHORS" section] .\" Author: [see the "AUTHORS" section]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/> .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 2015-02-08 .\" Date: 2015-02-19
.\" Manual: Toxic Manual .\" Manual: Toxic Manual
.\" Source: toxic __VERSION__ .\" Source: toxic __VERSION__
.\" Language: English .\" Language: English
.\" .\"
.TH "TOXIC\&.CONF" "5" "2015\-02\-08" "toxic __VERSION__" "Toxic Manual" .TH "TOXIC\&.CONF" "5" "2015\-02\-19" "toxic __VERSION__" "Toxic Manual"
.\" ----------------------------------------------------------------- .\" -----------------------------------------------------------------
.\" * Define some portability stuff .\" * Define some portability stuff
.\" ----------------------------------------------------------------- .\" -----------------------------------------------------------------
@ -66,6 +66,23 @@ Configuration related to interface elements\&.
Enable or disable timestamps\&. true or false Enable or disable timestamps\&. true or false
.RE .RE
.PP .PP
\fBtime_format\fR
.RS 4
Select between 24 and 12 hour time\&. Specify 24 or 12\&. Setting timestamp_format and log_timestamp_format will override this setting\&.
.RE
.PP
\fBtimestamp_format\fR
.RS 4
Time format string for the interface enclosed by double quotes\&. See
\fBdate\fR(1)
.RE
.PP
\fBlog_timestamp_format\fR
.RS 4
Time format string for logging enclosed by double quotes\&. See
\fBdate\fR(1)
.RE
.PP
\fBalerts\fR \fBalerts\fR
.RS 4 .RS 4
Enable or disable terminal alerts on events\&. true or false Enable or disable terminal alerts on events\&. true or false
@ -81,11 +98,6 @@ Select between native terminal colors and toxic color theme\&. true or false
Enable or disable autologging\&. true or false Enable or disable autologging\&. true or false
.RE .RE
.PP .PP
\fBtime_format\fR
.RS 4
Select between 24 and 12 hour time\&. Specify 24 or 12
.RE
.PP
\fBshow_typing_other\fR \fBshow_typing_other\fR
.RS 4 .RS 4
Show when others are typing in a 1\-on\-1 chat\&. true or false Show when others are typing in a 1\-on\-1 chat\&. true or false

View File

@ -42,6 +42,18 @@ OPTIONS
*timestamps*;; *timestamps*;;
Enable or disable timestamps. true or false Enable or disable timestamps. true or false
*time_format*;;
Select between 24 and 12 hour time. Specify 24 or 12. Setting
timestamp_format and log_timestamp_format will override this setting.
*timestamp_format*;;
Time format string for the interface enclosed by double quotes.
See *date*(1)
*log_timestamp_format*;;
Time format string for logging enclosed by double quotes.
See *date*(1)
*alerts*;; *alerts*;;
Enable or disable terminal alerts on events. true or false Enable or disable terminal alerts on events. true or false
@ -51,9 +63,6 @@ OPTIONS
*autolog*;; *autolog*;;
Enable or disable autologging. true or false Enable or disable autologging. true or false
*time_format*;;
Select between 24 and 12 hour time. Specify 24 or 12
*show_typing_other*;; *show_typing_other*;;
Show when others are typing in a 1-on-1 chat. true or false Show when others are typing in a 1-on-1 chat. true or false

View File

@ -17,6 +17,9 @@ ui = {
// 24 or 12 hour time // 24 or 12 hour time
time_format=24; time_format=24;
// timestamp format string according to date/strftime format. Overrides time_format setting
timestamp_format="%H:%M:%S";
// true to show you when others are typing a message in 1-on-1 chats // true to show you when others are typing a message in 1-on-1 chats
show_typing_other=true; show_typing_other=true;

View File

@ -299,7 +299,7 @@ static void update_friend_last_online(int32_t num, uint64_t timestamp)
Friends.list[num].last_online.tm = *localtime((const time_t*)&timestamp); Friends.list[num].last_online.tm = *localtime((const time_t*)&timestamp);
/* if the format changes make sure TIME_STR_SIZE is the correct size */ /* if the format changes make sure TIME_STR_SIZE is the correct size */
const char *t = user_settings->time == TIME_12 ? "%I:%M %p" : "%H:%M"; const char *t = user_settings->timestamp_format;
strftime(Friends.list[num].last_online.hour_min_str, TIME_STR_SIZE, t, strftime(Friends.list[num].last_online.hour_min_str, TIME_STR_SIZE, t,
&Friends.list[num].last_online.tm); &Friends.list[num].last_online.tm);
} }

View File

@ -202,7 +202,7 @@ void line_info_add(ToxWindow *self, const char *timestr, const char *name1, cons
if (timestr) { if (timestr) {
snprintf(new_line->timestr, sizeof(new_line->timestr), "%s", timestr); snprintf(new_line->timestr, sizeof(new_line->timestr), "%s", timestr);
len += strlen(new_line->timestr); len += strlen(new_line->timestr) + 1;
} }
if (name1) { if (name1) {
@ -302,7 +302,7 @@ void line_info_print(ToxWindow *self)
case OUT_MSG_READ: case OUT_MSG_READ:
case IN_MSG: case IN_MSG:
wattron(win, COLOR_PAIR(BLUE)); wattron(win, COLOR_PAIR(BLUE));
wprintw(win, "%s", line->timestr); wprintw(win, "%s ", line->timestr);
wattroff(win, COLOR_PAIR(BLUE)); wattroff(win, COLOR_PAIR(BLUE));
int nameclr = GREEN; int nameclr = GREEN;
@ -342,7 +342,7 @@ void line_info_print(ToxWindow *self)
case OUT_ACTION: case OUT_ACTION:
case IN_ACTION: case IN_ACTION:
wattron(win, COLOR_PAIR(BLUE)); wattron(win, COLOR_PAIR(BLUE));
wprintw(win, "%s", line->timestr); wprintw(win, "%s ", line->timestr);
wattroff(win, COLOR_PAIR(BLUE)); wattroff(win, COLOR_PAIR(BLUE));
wattron(win, COLOR_PAIR(YELLOW)); wattron(win, COLOR_PAIR(YELLOW));
@ -366,7 +366,7 @@ void line_info_print(ToxWindow *self)
case SYS_MSG: case SYS_MSG:
if (line->timestr[0]) { if (line->timestr[0]) {
wattron(win, COLOR_PAIR(BLUE)); wattron(win, COLOR_PAIR(BLUE));
wprintw(win, "%s", line->timestr); wprintw(win, "%s ", line->timestr);
wattroff(win, COLOR_PAIR(BLUE)); wattroff(win, COLOR_PAIR(BLUE));
} }
@ -399,7 +399,7 @@ void line_info_print(ToxWindow *self)
case CONNECTION: case CONNECTION:
wattron(win, COLOR_PAIR(BLUE)); wattron(win, COLOR_PAIR(BLUE));
wprintw(win, "%s", line->timestr); wprintw(win, "%s ", line->timestr);
wattroff(win, COLOR_PAIR(BLUE)); wattroff(win, COLOR_PAIR(BLUE));
wattron(win, COLOR_PAIR(line->colour)); wattron(win, COLOR_PAIR(line->colour));
@ -416,7 +416,7 @@ void line_info_print(ToxWindow *self)
case DISCONNECTION: case DISCONNECTION:
wattron(win, COLOR_PAIR(BLUE)); wattron(win, COLOR_PAIR(BLUE));
wprintw(win, "%s", line->timestr); wprintw(win, "%s ", line->timestr);
wattroff(win, COLOR_PAIR(BLUE)); wattroff(win, COLOR_PAIR(BLUE));
wattron(win, COLOR_PAIR(line->colour)); wattron(win, COLOR_PAIR(line->colour));
@ -433,7 +433,7 @@ void line_info_print(ToxWindow *self)
case NAME_CHANGE: case NAME_CHANGE:
wattron(win, COLOR_PAIR(BLUE)); wattron(win, COLOR_PAIR(BLUE));
wprintw(win, "%s", line->timestr); wprintw(win, "%s ", line->timestr);
wattroff(win, COLOR_PAIR(BLUE)); wattroff(win, COLOR_PAIR(BLUE));
wattron(win, COLOR_PAIR(MAGENTA)); wattron(win, COLOR_PAIR(MAGENTA));

View File

@ -134,7 +134,7 @@ void write_to_log(const char *msg, const char *name, struct chatlog *log, bool e
else else
snprintf(name_frmt, sizeof(name_frmt), "%s:", name); snprintf(name_frmt, sizeof(name_frmt), "%s:", name);
const char *t = user_settings->time == TIME_12 ? "%Y/%m/%d [%I:%M:%S %p]" : "%Y/%m/%d [%H:%M:%S]"; const char *t = user_settings->log_timestamp_format;
char s[MAX_STR_SIZE]; char s[MAX_STR_SIZE];
strftime(s, MAX_STR_SIZE, t, get_time()); strftime(s, MAX_STR_SIZE, t, get_time());
fprintf(log->file, "%s %s %s\n", s, name_frmt, msg); fprintf(log->file, "%s %s %s\n", s, name_frmt, msg);

View File

@ -87,7 +87,7 @@ void get_time_str(char *buf, int bufsize)
return; return;
} }
const char *t = user_settings->time == TIME_12 ? "%I:%M:%S " : "%H:%M:%S "; const char *t = user_settings->timestamp_format;
strftime(buf, bufsize, t, get_time()); strftime(buf, bufsize, t, get_time());
} }

View File

@ -47,10 +47,12 @@
static struct ui_strings { static struct ui_strings {
const char* self; const char* self;
const char* timestamps; const char* timestamps;
const char* time_format;
const char* timestamp_format;
const char* log_timestamp_format;
const char* alerts; const char* alerts;
const char* native_colors; const char* native_colors;
const char* autolog; const char* autolog;
const char* time_format;
const char* history_size; const char* history_size;
const char* show_typing_self; const char* show_typing_self;
const char* show_typing_other; const char* show_typing_other;
@ -63,10 +65,12 @@ static struct ui_strings {
} ui_strings = { } ui_strings = {
"ui", "ui",
"timestamps", "timestamps",
"time_format",
"timestamp_format",
"log_timestamp_format",
"alerts", "alerts",
"native_colors", "native_colors",
"autolog", "autolog",
"time_format",
"history_size", "history_size",
"show_typing_self", "show_typing_self",
"show_typing_other", "show_typing_other",
@ -80,7 +84,9 @@ static struct ui_strings {
static void ui_defaults(struct user_settings* settings) static void ui_defaults(struct user_settings* settings)
{ {
settings->timestamps = TIMESTAMPS_ON; settings->timestamps = TIMESTAMPS_ON;
settings->time = TIME_24; snprintf(settings->timestamp_format, sizeof(settings->timestamp_format), "%s", TIMESTAMP_DEFAULT);
snprintf(settings->log_timestamp_format, sizeof(settings->log_timestamp_format), "%s", LOG_TIMESTAMP_DEFAULT);
settings->autolog = AUTOLOG_OFF; settings->autolog = AUTOLOG_OFF;
settings->alerts = ALERTS_ENABLED; settings->alerts = ALERTS_ENABLED;
settings->colour_theme = DFLT_COLS; settings->colour_theme = DFLT_COLS;
@ -267,6 +273,23 @@ int settings_load(struct user_settings *s, const char *patharg)
/* ui */ /* ui */
if ((setting = config_lookup(cfg, ui_strings.self)) != NULL) { if ((setting = config_lookup(cfg, ui_strings.self)) != NULL) {
config_setting_lookup_bool(setting, ui_strings.timestamps, &s->timestamps); config_setting_lookup_bool(setting, ui_strings.timestamps, &s->timestamps);
int time = 24;
if ( config_setting_lookup_int(setting, ui_strings.time_format, &time) ) {
if (time == 12) {
snprintf(s->timestamp_format, sizeof(s->timestamp_format), "%s", "%I:%M:%S %p");
snprintf(s->log_timestamp_format, sizeof(s->log_timestamp_format), "%s", "%Y/%m/%d [%I:%M:%S %p]");
}
}
if ( config_setting_lookup_string(setting, ui_strings.timestamp_format, &str) ) {
snprintf(s->timestamp_format, sizeof(s->timestamp_format), "%s", str);
}
if ( config_setting_lookup_string(setting, ui_strings.log_timestamp_format, &str) ) {
snprintf(s->log_timestamp_format, sizeof(s->log_timestamp_format), "%s", str);
}
config_setting_lookup_bool(setting, ui_strings.alerts, &s->alerts); config_setting_lookup_bool(setting, ui_strings.alerts, &s->alerts);
config_setting_lookup_bool(setting, ui_strings.autolog, &s->autolog); config_setting_lookup_bool(setting, ui_strings.autolog, &s->autolog);
config_setting_lookup_bool(setting, ui_strings.native_colors, &s->colour_theme); config_setting_lookup_bool(setting, ui_strings.native_colors, &s->colour_theme);
@ -274,8 +297,6 @@ int settings_load(struct user_settings *s, const char *patharg)
config_setting_lookup_bool(setting, ui_strings.show_typing_self, &s->show_typing_self); config_setting_lookup_bool(setting, ui_strings.show_typing_self, &s->show_typing_self);
config_setting_lookup_bool(setting, ui_strings.show_typing_other, &s->show_typing_other); config_setting_lookup_bool(setting, ui_strings.show_typing_other, &s->show_typing_other);
config_setting_lookup_bool(setting, ui_strings.show_welcome_msg, &s->show_welcome_msg); config_setting_lookup_bool(setting, ui_strings.show_welcome_msg, &s->show_welcome_msg);
config_setting_lookup_int(setting, ui_strings.time_format, &s->time);
s->time = s->time == TIME_24 || s->time == TIME_12 ? s->time : TIME_24; /* Check defaults */
if ( config_setting_lookup_string(setting, ui_strings.line_join, &str) ) { if ( config_setting_lookup_string(setting, ui_strings.line_join, &str) ) {
snprintf(s->line_join, sizeof(s->line_join), "%s", str); snprintf(s->line_join, sizeof(s->line_join), "%s", str);

View File

@ -32,8 +32,11 @@
struct user_settings { struct user_settings {
int autolog; /* boolean */ int autolog; /* boolean */
int alerts; /* boolean */ int alerts; /* boolean */
int time; /* 12 or 24 */
int timestamps; /* boolean */ int timestamps; /* boolean */
char timestamp_format[TIME_STR_SIZE];
char log_timestamp_format[TIME_STR_SIZE];
int colour_theme; /* boolean (0 for default toxic colours) */ int colour_theme; /* boolean (0 for default toxic colours) */
int history_size; /* int between MIN_HISTORY and MAX_HISTORY */ int history_size; /* int between MIN_HISTORY and MAX_HISTORY */
int show_typing_self; /* boolean */ int show_typing_self; /* boolean */
@ -71,9 +74,6 @@ enum {
AUTOLOG_OFF = 0, AUTOLOG_OFF = 0,
AUTOLOG_ON = 1, AUTOLOG_ON = 1,
TIME_24 = 24,
TIME_12 = 12,
TIMESTAMPS_OFF = 0, TIMESTAMPS_OFF = 0,
TIMESTAMPS_ON = 1, TIMESTAMPS_ON = 1,
@ -96,6 +96,8 @@ enum {
#define LINE_QUIT "<--" #define LINE_QUIT "<--"
#define LINE_ALERT "-!-" #define LINE_ALERT "-!-"
#define LINE_NORMAL "---" #define LINE_NORMAL "---"
#define TIMESTAMP_DEFAULT "%H:%M:%S"
#define LOG_TIMESTAMP_DEFAULT "%Y/%m/%d [%H:%M:%S]"
int settings_load(struct user_settings *s, const char *patharg); int settings_load(struct user_settings *s, const char *patharg);
#endif /* #define SETTINGS_H */ #endif /* #define SETTINGS_H */

View File

@ -47,7 +47,7 @@
#define MAX_CMDNAME_SIZE 64 #define MAX_CMDNAME_SIZE 64
#define TOXIC_MAX_NAME_LENGTH 32 /* Must be <= TOX_MAX_NAME_LENGTH */ #define TOXIC_MAX_NAME_LENGTH 32 /* Must be <= TOX_MAX_NAME_LENGTH */
#define KEY_IDENT_DIGITS 3 /* number of hex digits to display for the pub-key based identifier */ #define KEY_IDENT_DIGITS 3 /* number of hex digits to display for the pub-key based identifier */
#define TIME_STR_SIZE 16 #define TIME_STR_SIZE 32
/* ASCII key codes */ /* ASCII key codes */
#define T_KEY_ESC 0x1B /* ESC key */ #define T_KEY_ESC 0x1B /* ESC key */