comparison mcabber/src/screen.c @ 184:b5aa2b9c425a

[/trunk] Changeset 196 by mikael * Don't use a char* as prefix, but split it to timestamp + flags. * Don't use a boolean for timestamp, use a time_t (actually we always use a timestamp so the bool made no sense...).
author mikael
date Thu, 05 May 2005 19:38:44 +0000
parents 4a0bde661562
children e8e447a07641
comparison
equal deleted inserted replaced
183:c658c131ea10 184:b5aa2b9c425a
248 // (Re-)Display the given chat window. 248 // (Re-)Display the given chat window.
249 void scr_UpdateWindow(window_entry_t *win_entry) 249 void scr_UpdateWindow(window_entry_t *win_entry)
250 { 250 {
251 int n; 251 int n;
252 int width; 252 int width;
253 char **lines; 253 hbb_line **lines, *line;
254 GList *hbuf_head; 254 GList *hbuf_head;
255 char date[32];
255 256
256 width = scr_WindowWidth(win_entry->win); 257 width = scr_WindowWidth(win_entry->win);
257 258
258 // Should the window be empty? 259 // Should the window be empty?
259 if (win_entry->cleared) { 260 if (win_entry->cleared) {
284 lines = hbuf_get_lines(hbuf_head, CHAT_WIN_HEIGHT); 285 lines = hbuf_get_lines(hbuf_head, CHAT_WIN_HEIGHT);
285 286
286 // Display these lines 287 // Display these lines
287 for (n = 0; n < CHAT_WIN_HEIGHT; n++) { 288 for (n = 0; n < CHAT_WIN_HEIGHT; n++) {
288 wmove(win_entry->win, n, 0); 289 wmove(win_entry->win, n, 0);
289 if (*(lines+2*n)) { 290 line = *(lines+n);
290 if (**(lines+2*n)) 291 if (line) {
291 wprintw(win_entry->win, "%s", *(lines+2*n)); // prefix 292 if (line->timestamp) {
293 strftime(date, 35, "%H:%M", localtime(&line->timestamp));
294 } else
295 strcpy(date, " ");
296 if (line->flags & HBB_PREFIX_IN)
297 wprintw(win_entry->win, "[%.5s] <== ", date);
298 else if (line->flags & HBB_PREFIX_OUT)
299 wprintw(win_entry->win, "[%.5s] --> ", date);
292 else { 300 else {
293 wprintw(win_entry->win, " "); 301 wprintw(win_entry->win, " ");
294 } 302 }
295 wprintw(win_entry->win, "%s", *(lines+2*n+1)); // line 303 wprintw(win_entry->win, "%s", line->text); // line
296 wclrtoeol(win_entry->win); 304 wclrtoeol(win_entry->win);
305 g_free(line->text);
297 } else { 306 } else {
298 wclrtobot(win_entry->win); 307 wclrtobot(win_entry->win);
299 break; 308 break;
300 } 309 }
301 } 310 }
351 360
352 // scr_WriteInWindow() 361 // scr_WriteInWindow()
353 // Write some text in the winId window (this usually is a jid). 362 // Write some text in the winId window (this usually is a jid).
354 // Lines are splitted when they are too long to fit in the chat window. 363 // Lines are splitted when they are too long to fit in the chat window.
355 // If this window doesn't exist, it is created. 364 // If this window doesn't exist, it is created.
356 void scr_WriteInWindow(const char *winId, const char *text, int TimeStamp, 365 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
357 const char *prefix, int force_show) 366 unsigned int prefix_flags, int force_show)
358 { 367 {
359 char *fullprefix = NULL;
360 window_entry_t *win_entry; 368 window_entry_t *win_entry;
361 int dont_show = FALSE; 369 int dont_show = FALSE;
362
363 // Prepare the prefix
364 if (prefix || TimeStamp) {
365 if (!prefix) prefix = "";
366 fullprefix = calloc(1, strlen(prefix)+16);
367 if (TimeStamp) {
368 time_t now = time(NULL);
369 strftime(fullprefix, 12, "[%H:%M] ", localtime(&now));
370 } else {
371 strcpy(fullprefix, " ");
372 }
373 strcat(fullprefix, prefix);
374 }
375 370
376 // Look for the window entry. 371 // Look for the window entry.
377 win_entry = scr_SearchWindow(winId); 372 win_entry = scr_SearchWindow(winId);
378 373
379 // Do we have to really show the window? 374 // Do we have to really show the window?
385 // If the window entry doesn't exist yet, let's create it. 380 // If the window entry doesn't exist yet, let's create it.
386 if (win_entry == NULL) { 381 if (win_entry == NULL) {
387 win_entry = scr_CreateBuddyPanel(winId, dont_show); 382 win_entry = scr_CreateBuddyPanel(winId, dont_show);
388 } 383 }
389 384
390 hbuf_add_line(&win_entry->hbuf, text, fullprefix, 385 hbuf_add_line(&win_entry->hbuf, text, timestamp, prefix_flags,
391 maxX - scr_WindowWidth(rosterWnd) - 14); 386 maxX - scr_WindowWidth(rosterWnd) - 14);
392 free(fullprefix);
393 387
394 if (win_entry->cleared) { 388 if (win_entry->cleared) {
395 win_entry->cleared = 0; // The message must be displayed 389 win_entry->cleared = 0; // The message must be displayed
396 win_entry->top = g_list_last(win_entry->hbuf); 390 win_entry->top = g_list_last(win_entry->hbuf);
397 } 391 }
659 top_panel(inputPanel); 653 top_panel(inputPanel);
660 update_panels(); 654 update_panels();
661 doupdate(); 655 doupdate();
662 } 656 }
663 657
664 void scr_WriteMessage(const char *jid, const char *text, char *prefix) 658 void scr_WriteMessage(const char *jid, const char *text, time_t timestamp,
665 { 659 guint prefix_flags)
666 scr_WriteInWindow(jid, text, TRUE, prefix, FALSE); 660 {
667 } 661 if (!timestamp) timestamp = time(NULL);
668 662
669 void scr_WriteIncomingMessage(const char *jidfrom, const char *text) 663 scr_WriteInWindow(jid, text, timestamp, prefix_flags, FALSE);
664 }
665
666 void scr_WriteIncomingMessage(const char *jidfrom, const char *text,
667 time_t timestamp)
670 { 668 {
671 // FIXME expand tabs / filter out special chars... 669 // FIXME expand tabs / filter out special chars...
672 scr_WriteMessage(jidfrom, text, "<== "); 670 scr_WriteMessage(jidfrom, text, timestamp, HBB_PREFIX_IN);
673 update_panels(); 671 update_panels();
674 doupdate(); 672 doupdate();
675 } 673 }
676 674
677 void scr_WriteOutgoingMessage(const char *jidto, const char *text) 675 void scr_WriteOutgoingMessage(const char *jidto, const char *text)
678 { 676 {
679 scr_WriteMessage(jidto, text, "--> "); 677 scr_WriteMessage(jidto, text, 0, HBB_PREFIX_OUT);
680 scr_ShowWindow(jidto); 678 scr_ShowWindow(jidto);
681 } 679 }
682 680
683 int scr_Getch(void) 681 int scr_Getch(void)
684 { 682 {