pa.gunner = False
class ChatLogTracker:
- def __init__(self, myself_pi):
+ def __init__(self, myself_pi, logfn):
self._pl = {} # self._pl['Pirate'] =
self._vl = {} # self._vl['Vessel']['Pirate'] = PirateAboard
# self._vl['Vessel']['#lastaboard']
self._date = None
self._myself = myself_pi
self.need_redisplay = False
+ self._f = file(logfn)
+ self._lbuf = ''
+ self._progress = [0, os.fstat(self._f.fileno()).st_size]
def _refresh(self):
self.need_redisplay = True
s += '>\n'
return s
-def do_ship_aid(args, bu):
+ def catchup(self, progress=None):
+ while True:
+ more = self._f.readline()
+ if not more: return
+
+ self._progress[0] += len(more)
+ if progress is not None:
+ progress(*self._progress)
+
+ self._lbuf += more
+ if self._lbuf.endswith('\n'):
+ self.chatline(self._lbuf.rstrip())
+ self._lbuf = ''
+
+def do_track_chat_log(args, bu):
if len(args) != 1: bu('ship-aid takes only chat log filename')
logfn = args[0]
logfn_re = '(?:.*/)?([A-Z][a-z]+)_([a-z]+)_chat-log-\\w+$'
match = regexp.match(logfn_re, logfn)
if not match: bu('ship-aid chat log filename is not in default format')
(pirate, fetcher.ocean) = match.groups()
+
+ track = ChatLogTracker(pirate, logfn)
myself_pi = PirateInfo(pirate,3600)
- track = ChatLogTracker(myself_pi)
- f = file(logfn)
- l = ''
+ track = ChatLogTracker(myself_pi, logfn)
+
+ def pprogress(done,total):
+ sys.stdout.write("scan chat logs %3d%%\r" %
+ ((done*100) / total))
+ sys.stdout.flush()
+
+ track.catchup(pprogress)
+ sys.stdout.write(' \r')
+
while True:
- l += f.readline()
- if l.endswith('\n'):
- track.chatline(l.rstrip())
- l = ''
- continue
- if l:
- continue
+ track.catchup()
if track.need_redisplay:
print track
track.need_redisplay = False
yoweb-scrape [--ocean OCEAN ...] pirate PIRATE
yoweb-scrape [--ocean OCEAN ...] crew-of PIRATE
yoweb-scrape [--ocean OCEAN ...] standings-crew-of PIRATE
+ yoweb-scrape [--ocean OCEAN ...] track-chat-log CHAT-LOG
yoweb-scrape [--ocean OCEAN ...] ship-aid CHAT-LOG
''')
ao = pa.add_option