mcabber/src/histolog.c
changeset 249 c3e6e78d1ab4
parent 248 701651393076
child 250 84de80cbbd2c
equal deleted inserted replaced
248:701651393076 249:c3e6e78d1ab4
   119   FILE *fp;
   119   FILE *fp;
   120   struct stat bufstat;
   120   struct stat bufstat;
   121   guint err = 0;
   121   guint err = 0;
   122   guint oldformat;
   122   guint oldformat;
   123   guint ln = 0; // line number
   123   guint ln = 0; // line number
       
   124   guint pleaseconvert = 0;
   124 
   125 
   125   if (!FileLoadLogs) return;
   126   if (!FileLoadLogs) return;
   126 
   127 
   127   data = g_new(char, HBB_BLOCKSIZE+32);
   128   data = g_new(char, HBB_BLOCKSIZE+32);
   128   if (!data) {
   129   if (!data) {
   143       scr_LogPrint("Reading <%s> history file...", jid);
   144       scr_LogPrint("Reading <%s> history file...", jid);
   144   }
   145   }
   145 
   146 
   146   /* See write_histo_line() for line format... */
   147   /* See write_histo_line() for line format... */
   147   while (!feof(fp)) {
   148   while (!feof(fp)) {
   148     int format_off =0;
   149     int format_off = 0;
   149     if (fgets(data, HBB_BLOCKSIZE+24, fp) == NULL) break;
   150     if (fgets(data, HBB_BLOCKSIZE+19+format_off, fp) == NULL) break;
   150     ln++;
   151     ln++;
   151 
   152 
   152     for (tail = data; *tail; tail++) ;
   153     for (tail = data; *tail; tail++) ;
   153 
   154 
   154     type = data[0];
   155     type = data[0];
   189     }
   190     }
   190 
   191 
   191     // XXX This will fail when a message is too big
   192     // XXX This will fail when a message is too big
   192     while (len--) {
   193     while (len--) {
   193       ln++;
   194       ln++;
   194       if (fgets(tail, HBB_BLOCKSIZE+24 - (tail-data), fp) == NULL) break;
   195       if (fgets(tail, HBB_BLOCKSIZE+19+format_off - (tail-data), fp) == NULL)
       
   196         break;
   195 
   197 
   196       while (*tail) tail++;
   198       while (*tail) tail++;
   197     }
   199     }
   198     // Small check for too long messages
   200     // Small check for too long messages
   199     if (tail+1 >= HBB_BLOCKSIZE+24 + data) {
   201     if (tail >= HBB_BLOCKSIZE+18+format_off + data) {
   200       scr_LogPrint("Message is too big in history file!");
   202       scr_LogPrint("A message could be too big in history file...");
       
   203       scr_LogPrint("S=%d, fmt=%d  (->%d)", tail-data, format_off,
       
   204                    tail-data-format_off-18);
       
   205       // Maybe we will have a parse error on next, because this
       
   206       // message is big (maybe too big).
   201     }
   207     }
   202     // Remove last CR
   208     // Remove last CR
   203     if ((tail > data+18+format_off) && (*(tail-1) == '\n'))
   209     if ((tail > data+18+format_off) && (*(tail-1) == '\n'))
   204       *(tail-1) = 0;
   210       *(tail-1) = 0;
       
   211 
       
   212     if (oldformat)
       
   213       pleaseconvert = 1;
   205 
   214 
   206     if (type == 'M') {
   215     if (type == 'M') {
   207       if (info == 'S')
   216       if (info == 'S')
   208         prefix_flags = HBB_PREFIX_OUT;
   217         prefix_flags = HBB_PREFIX_OUT;
   209       else
   218       else
   210         prefix_flags = HBB_PREFIX_IN;
   219         prefix_flags = HBB_PREFIX_IN;
   211       hbuf_add_line(p_buddyhbuf, &data[18+format_off], timestamp, prefix_flags, width);
   220       hbuf_add_line(p_buddyhbuf, &data[18+format_off], timestamp,
       
   221                     prefix_flags, width);
   212       err = 0;
   222       err = 0;
   213     }
   223     }
   214   }
   224   }
   215   fclose(fp);
   225   fclose(fp);
   216   g_free(data);
   226   g_free(data);
       
   227   if (pleaseconvert)
       
   228     scr_LogPrint("Please convert your history files to the new format!");
   217 }
   229 }
   218 
   230 
   219 //  hlog_enable()
   231 //  hlog_enable()
   220 // Enable logging to files.  If root_dir is NULL, then $HOME/.mcabber is used.
   232 // Enable logging to files.  If root_dir is NULL, then $HOME/.mcabber is used.
   221 // If loadfiles is TRUE, we will try to load buddies history logs from file.
   233 // If loadfiles is TRUE, we will try to load buddies history logs from file.