From: Ian Jackson Date: Sat, 16 May 2009 17:33:39 +0000 (+0100) Subject: Move some code into ChatLogTracker X-Git-Tag: 1.0~59 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.web-live.git;a=commitdiff_plain;h=bd97786b00269408267fe97ccd3703fe28454dbe;ds=sidebyside Move some code into ChatLogTracker --- diff --git a/yoweb-scrape b/yoweb-scrape index f66dda1..2790ac7 100755 --- a/yoweb-scrape +++ b/yoweb-scrape @@ -402,7 +402,7 @@ class PirateAboard: 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'] @@ -411,6 +411,9 @@ class ChatLogTracker: 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 @@ -602,25 +605,42 @@ class ChatLogTracker: 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 @@ -635,6 +655,7 @@ actions: 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