diff 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
line wrap: on
line diff
--- a/mcabber/src/screen.c	Thu May 05 15:01:48 2005 +0000
+++ b/mcabber/src/screen.c	Thu May 05 19:38:44 2005 +0000
@@ -250,8 +250,9 @@
 {
   int n;
   int width;
-  char **lines;
+  hbb_line **lines, *line;
   GList *hbuf_head;
+  char date[32];
 
   width = scr_WindowWidth(win_entry->win);
 
@@ -286,14 +287,22 @@
   // Display these lines
   for (n = 0; n < CHAT_WIN_HEIGHT; n++) {
     wmove(win_entry->win, n, 0);
-    if (*(lines+2*n)) {
-      if (**(lines+2*n))
-        wprintw(win_entry->win, "%s", *(lines+2*n));      // prefix
+    line = *(lines+n);
+    if (line) {
+      if (line->timestamp) {
+        strftime(date, 35, "%H:%M", localtime(&line->timestamp));
+      } else
+        strcpy(date, "     ");
+      if (line->flags & HBB_PREFIX_IN)
+        wprintw(win_entry->win, "[%.5s] <== ", date);
+      else if (line->flags & HBB_PREFIX_OUT)
+        wprintw(win_entry->win, "[%.5s] --> ", date);
       else {
         wprintw(win_entry->win, "            ");
       }
-      wprintw(win_entry->win, "%s", *(lines+2*n+1));      // line
+      wprintw(win_entry->win, "%s", line->text);      // line
       wclrtoeol(win_entry->win);
+      g_free(line->text);
     } else {
       wclrtobot(win_entry->win);
       break;
@@ -353,26 +362,12 @@
 // Write some text in the winId window (this usually is a jid).
 // Lines are splitted when they are too long to fit in the chat window.
 // If this window doesn't exist, it is created.
-void scr_WriteInWindow(const char *winId, const char *text, int TimeStamp,
-        const char *prefix, int force_show)
+void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
+        unsigned int prefix_flags, int force_show)
 {
-  char *fullprefix = NULL;
   window_entry_t *win_entry;
   int dont_show = FALSE;
 
-  // Prepare the prefix
-  if (prefix || TimeStamp) {
-    if (!prefix)  prefix = "";
-    fullprefix = calloc(1, strlen(prefix)+16);
-    if (TimeStamp) {
-      time_t now = time(NULL);
-      strftime(fullprefix, 12, "[%H:%M] ", localtime(&now));
-    } else {
-      strcpy(fullprefix, "            ");
-    }
-    strcat(fullprefix, prefix);
-  }
-
   // Look for the window entry.
   win_entry = scr_SearchWindow(winId);
 
@@ -387,9 +382,8 @@
     win_entry = scr_CreateBuddyPanel(winId, dont_show);
   }
 
-  hbuf_add_line(&win_entry->hbuf, text, fullprefix,
+  hbuf_add_line(&win_entry->hbuf, text, timestamp, prefix_flags,
                 maxX - scr_WindowWidth(rosterWnd) - 14);
-  free(fullprefix);
 
   if (win_entry->cleared) {
     win_entry->cleared = 0; // The message must be displayed
@@ -661,22 +655,26 @@
   doupdate();
 }
 
-void scr_WriteMessage(const char *jid, const char *text, char *prefix)
+void scr_WriteMessage(const char *jid, const char *text, time_t timestamp,
+        guint prefix_flags)
 {
-  scr_WriteInWindow(jid, text, TRUE, prefix, FALSE);
+  if (!timestamp) timestamp = time(NULL);
+
+  scr_WriteInWindow(jid, text, timestamp, prefix_flags, FALSE);
 }
 
-void scr_WriteIncomingMessage(const char *jidfrom, const char *text)
+void scr_WriteIncomingMessage(const char *jidfrom, const char *text,
+        time_t timestamp)
 {
   // FIXME expand tabs / filter out special chars...
-  scr_WriteMessage(jidfrom, text, "<== ");
+  scr_WriteMessage(jidfrom, text, timestamp, HBB_PREFIX_IN);
   update_panels();
   doupdate();
 }
 
 void scr_WriteOutgoingMessage(const char *jidto, const char *text)
 {
-  scr_WriteMessage(jidto, text, "--> ");
+  scr_WriteMessage(jidto, text, 0, HBB_PREFIX_OUT);
   scr_ShowWindow(jidto);
 }