chiark / gitweb /
Treat backwards-going timestamp as a day change. Not perfect if the clocks change...
[ypp-sc-tools.db-test.git] / yoweb-scrape
index 517d5e1912a06d3dfb368ec217924b9337673b9e..cc98ea3b21b869154ed0a46ca5aec941d7f71a71 100755 (executable)
@@ -433,7 +433,7 @@ class ChatLogTracker:
                self._lbuf = ''
                self._progress = [0, os.fstat(self._f.fileno()).st_size]
 
-       def _refresh(self):
+       def force_redisplay(self):
                self._need_redisplay = True
 
        def _onboard_event(self,timestamp,pirate,event):
@@ -448,14 +448,14 @@ class ChatLogTracker:
                        self._pl[pirate] = pa
                        self._v[pirate] = pa
                self._v['#lastaboard'] = timestamp
-               self._refresh()
+               self.force_redisplay()
                return pa
 
        def _trash_vessel(self, v):
                for pn in v:
                        if pn.startswith('#'): continue
                        del self._pl[pn]
-               self._refresh()
+               self.force_redisplay()
 
        def expire_garbage(self, timestamp):
                for (vn,v) in list(self._vl.iteritems()):
@@ -482,7 +482,8 @@ class ChatLogTracker:
 
                m = rm('=+ (\\d+)/(\\d+)/(\\d+) =+$')
                if m:
-                       self._date = m.groups()
+                       self._date = [int(x) for x in m.groups()]
+                       self._previous_timestamp = None
                        return d('date '+`self._date`)
 
                if self._date is None:
@@ -492,9 +493,18 @@ class ChatLogTracker:
                if not m:
                        return d('no timestamp')
 
-               time_tuple = [int(x) for x in self._date + m.groups()]
-               time_tuple += (-1,-1,-1)
-               timestamp = time.mktime(time_tuple)
+               while True:
+                       time_tuple = (self._date +
+                                     [int(x) for x in m.groups()] +
+                                     [-1,-1,-1])
+                       timestamp = time.mktime(time_tuple)
+                       if timestamp >= self._previous_timestamp: break
+                       self._date[2] += 1
+                       self._debug_line_disposition(timestamp,'',
+                               'new date '+`self._date`)
+
+               self._previous_timestamp = timestamp
+
                l = l[l.find(' ')+1:]
 
                def ob_x(who,event):
@@ -546,7 +556,7 @@ class ChatLogTracker:
                        if pa.v is self._v:
                                pa.last_chat_time = timestamp
                                pa.last_chat_chan = what
-                               self._refresh()
+                               self.force_redisplay()
                                return d(what+' chat')
 
                m = rm('(\\w+) (?:issued an order|ordered everyone) "')
@@ -721,6 +731,8 @@ def prep_chat_log(args, bu,
        track.catchup(progress)
        opts.debug += 1
 
+       track.force_redisplay()
+
        return (myself, track)
 
 def do_track_chat_log(args, bu):