1
0
mirror of https://github.com/profanity-im/profanity.git synced 2025-01-03 14:57:42 -05:00

Implemented /time preference

This commit is contained in:
James Booth 2014-11-16 01:11:00 +00:00
parent 40dc8e2c49
commit 8c027a56f9
3 changed files with 51 additions and 24 deletions

View File

@ -80,14 +80,14 @@ buffer_free(ProfBuff buffer)
}
void
buffer_push(ProfBuff buffer, const char show_char, const char * const date_fmt,
buffer_push(ProfBuff buffer, const char show_char, GDateTime *time,
int flags, int attrs, const char * const from, const char * const message)
{
ProfBuffEntry *e = malloc(sizeof(struct prof_buff_entry_t));
e->show_char = show_char;
e->flags = flags;
e->attrs = attrs;
e->date_fmt = strdup(date_fmt);
e->time = time;
e->from = strdup(from);
e->message = strdup(message);
@ -111,7 +111,6 @@ _free_entry(ProfBuffEntry *entry)
{
free(entry->message);
free(entry->from);
free(entry->date_fmt);
g_date_time_unref(entry->time);
free(entry);
}
}

View File

@ -37,9 +37,11 @@
#include "config.h"
#include <glib.h>
typedef struct prof_buff_entry_t {
char show_char;
char *date_fmt;
GDateTime *time;
int flags;
int attrs;
char *from;
@ -50,7 +52,7 @@ typedef struct prof_buff_t *ProfBuff;
ProfBuff buffer_create();
void buffer_free(ProfBuff buffer);
void buffer_push(ProfBuff buffer, const char show_char, const char * const date_fmt, int flags, int attrs, const char * const from, const char * const message);
void buffer_push(ProfBuff buffer, const char show_char, GDateTime *time, int flags, int attrs, const char * const from, const char * const message);
int buffer_size(ProfBuff buffer);
ProfBuffEntry* buffer_yield_entry(ProfBuff buffer, int entry);
#endif

View File

@ -53,7 +53,7 @@
#define CEILING(X) (X-(int)(X) > 0 ? (int)(X+1) : (int)(X))
static void _win_print(ProfWin *window, const char show_char, const char * const date_fmt,
static void _win_print(ProfWin *window, const char show_char, GDateTime *time,
int flags, int attrs, const char * const from, const char * const message);
static void _win_print_wrapped(WINDOW *win, const char * const message);
@ -542,21 +542,16 @@ void
win_save_print(ProfWin *window, const char show_char, GTimeVal *tstamp,
int flags, int attrs, const char * const from, const char * const message)
{
gchar *date_fmt;
GDateTime *time;
if (tstamp == NULL) {
time = g_date_time_new_now_local();
date_fmt = g_date_time_format(time, "%H:%M:%S");
} else {
time = g_date_time_new_from_timeval_utc(tstamp);
date_fmt = g_date_time_format(time, "%H:%M:%S");
}
g_date_time_unref(time);
buffer_push(window->buffer, show_char, date_fmt, flags, attrs, from, message);
_win_print(window, show_char, date_fmt, flags, attrs, from, message);
g_free(date_fmt);
buffer_push(window->buffer, show_char, time, flags, attrs, from, message);
_win_print(window, show_char, time, flags, attrs, from, message);
}
void
@ -572,18 +567,28 @@ win_save_newline(ProfWin *window)
}
static void
_win_print(ProfWin *window, const char show_char, const char * const date_fmt,
_win_print(ProfWin *window, const char show_char, GDateTime *time,
int flags, int attrs, const char * const from, const char * const message)
{
// flags : 1st bit = 0/1 - me/not me
// 2nd bit = 0/1 - date/no date
// 3rd bit = 0/1 - eol/no eol
// 4th bit = 0/1 - color from/no color from
// 5th bit = 0/1 - color date/no date
int unattr_me = 0;
int offset = 0;
int colour = COLOUR_ME;
if ((flags & NO_DATE) == 0) {
gchar *date_fmt;
char *time_pref = prefs_get_string(PREF_TIME);
if (g_strcmp0(time_pref, "minutes") == 0) {
date_fmt = g_date_time_format(time, "%H:%M");
} else {
date_fmt = g_date_time_format(time, "%H:%M:%S");
}
free(time_pref);
if ((flags & NO_COLOUR_DATE) == 0) {
wattron(window->win, COLOUR_TIME);
}
@ -591,6 +596,7 @@ _win_print(ProfWin *window, const char show_char, const char * const date_fmt,
if ((flags & NO_COLOUR_DATE) == 0) {
wattroff(window->win, COLOUR_TIME);
}
g_free(date_fmt);
}
if (strlen(from) > 0) {
@ -635,16 +641,29 @@ _win_print(ProfWin *window, const char show_char, const char * const date_fmt,
static void
_win_print_wrapped(WINDOW *win, const char * const message)
{
int i = 0;
int linei = 0;
int wordi = 0;
char *word = malloc(strlen(message) + 1);
char *time_pref = prefs_get_string(PREF_TIME);
int wrap_space = 0;
if (g_strcmp0(time_pref, "minutes") == 0) {
wrap_space = 8;
} else {
wrap_space = 11;
}
free(time_pref);
while (message[linei] != '\0') {
if (message[linei] == ' ') {
wprintw(win, " ");
linei++;
} else if (message[linei] == '\n') {
wprintw(win, "\n ");
waddch(win, '\n');
for (i = 0; i < wrap_space; i++) {
waddch(win, ' ');
}
linei++;
} else {
wordi = 0;
@ -657,21 +676,28 @@ _win_print_wrapped(WINDOW *win, const char * const message)
int maxx = getmaxx(win);
// word larger than line
if (strlen(word) > (maxx - 11)) {
if (strlen(word) > (maxx - wrap_space)) {
int i;
for (i = 0; i < wordi; i++) {
curx = getcurx(win);
if (curx < 11) {
wprintw(win, " ");
if (curx < wrap_space) {
for (i = 0; i < wrap_space; i++) {
waddch(win, ' ');
}
}
waddch(win, word[i]);
}
} else {
if (curx + strlen(word) > maxx) {
wprintw(win, "\n ");
waddch(win, '\n');
for (i = 0; i < wrap_space; i++) {
waddch(win, ' ');
}
}
if (curx < 11) {
wprintw(win, " ");
if (curx < wrap_space) {
for (i = 0; i < wrap_space; i++) {
waddch(win, ' ');
}
}
wprintw(win, "%s", word);
}
@ -690,7 +716,7 @@ win_redraw(ProfWin *window)
for (i = 0; i < size; i++) {
ProfBuffEntry *e = buffer_yield_entry(window->buffer, i);
_win_print(window, e->show_char, e->date_fmt, e->flags, e->attrs, e->from, e->message);
_win_print(window, e->show_char, e->time, e->flags, e->attrs, e->from, e->message);
}
}