chiark / gitweb /
Revamp machinery for lookup up ships in chat log tracker
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 17 May 2009 09:41:43 +0000 (10:41 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 17 May 2009 09:41:43 +0000 (10:41 +0100)
yoweb-scrape

index 577b3b8..720e886 100755 (executable)
@@ -423,7 +423,7 @@ class ChatLogTracker:
        def __init__(self, myself_pi, logfn):
                self._pl = {}   # self._pl['Pirate'] =
                self._vl = {}   #   self._vl['Vessel']['Pirate'] = PirateAboard
-                               # self._vl['Vessel']['#lastaboard']
+                               # self._vl['Vessel']['#lastinfo']
                self._v = None          # self._v =
                self._vessel = None     #       self._vl[self._vessel]
                self._date = None
@@ -447,7 +447,7 @@ class ChatLogTracker:
                        pa = PirateAboard(pirate, self._v, timestamp, event)
                        self._pl[pirate] = pa
                        self._v[pirate] = pa
-               self._v['#lastaboard'] = timestamp
+               self._v['#lastinfo'] = timestamp
                self.force_redisplay()
                return pa
 
@@ -459,18 +459,29 @@ class ChatLogTracker:
 
        def expire_garbage(self, timestamp):
                for (vn,v) in list(self._vl.iteritems()):
-                       la = v['#lastaboard']
+                       la = v['#lastinfo']
                        if timestamp - la > opts.ship_reboard_clearout:
                                self._debug_line_disposition(timestamp,'',
                                        'stale reset '+vn)
                                self._trash_vessel(v)
                                del self._vl[vn]
 
-       def clear_vessel(self, timestamp):
-               if self._v is not None:
-                       self._trash_vessel(self._v)
-               self._v = {'#lastaboard': timestamp}
-               self._vl[self._vessel] = self._v
+       def _create_vessel(self, vn, timestamp):
+               self._vl[vn] = v = { '#lastinfo': timestamp }
+               return v
+
+       def _update_vessel_lookup(self, vn, timestamp, dml):
+               v = self._vl.get(vn, None)
+               if v is None:
+                       dml.append('new')
+                       v = self._create_vessel(vn, timestamp)
+               elif timestamp - v['#lastinfo'] > opts.ship_reboard_clearout:
+                       dml.append('stale')
+                       self._trash_vessel(v)
+                       v = self._create_vessel(vn, timestamp)
+               else:
+                       dml.append('current')
+               return v
 
        def _debug_line_disposition(self,timestamp,l,m):
                debug('CLT %13s %-30s %s' % (timestamp,m,l))
@@ -519,23 +530,14 @@ class ChatLogTracker:
 
                m = rm('Going aboard the (\\S.*\\S)\\.\\.\\.$')
                if m:
+                       dm = ['boarding']
                        pn = self._myself.name
-                       self._vessel = m.group(1)
-                       dm = 'boarding'
-
-                       try:             self._v = self._vl[self._vessel]
-                       except KeyError: self._v = None; dm += ' new'
-                       
-                       if self._v is not None:  la = self._v['#lastaboard']
-                       else:                    la = 0; dm += ' ?la'
-
-                       if timestamp - la > opts.ship_reboard_clearout:
-                               self.clear_vessel(timestamp)
-                               dm += ' stale'
+                       self._vessel = vn = m.group(1)
+                       self._v = self._update_vessel_lookup(vn, timestamp, dm)
 
                        ob_x(pn, 'we boarded')
                        self.expire_garbage(timestamp)
-                       return d(dm)
+                       return d(' '.join(dm))
 
                if self._v is None:
                        return d('no vessel')
@@ -632,8 +634,8 @@ class ChatLogTracker:
        def _str_vessel(self, vn, v):
                s = ' vessel %s\n' % vn
                s += ' '*20 + "%-*s   %13s\n" % (
-                               max_pirate_namelen, '#lastaboard',
-                               v['#lastaboard'])
+                               max_pirate_namelen, '#lastinfo',
+                               v['#lastinfo'])
                for pn in sorted(v.keys()):
                        if pn.startswith('#'): continue
                        pa = v[pn]