X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=blobdiff_plain;f=yoweb-scrape;h=2a3559009ef23e941e17bed9fc35298634251c4d;hp=1450d2029d861a31e48c8050ad0974b2a79baf3c;hb=6024b8b7e54143104a1f29d3976c5194c889f5ba;hpb=17901a7fd29680cdcaa62551b8ac93c53680e20a diff --git a/yoweb-scrape b/yoweb-scrape index 1450d20..2a35590 100755 --- a/yoweb-scrape +++ b/yoweb-scrape @@ -684,9 +684,12 @@ def do_standings_crew_of(args, bu): print tab.results() class ProgressPrintPercentage: - def __init__(self, f=sys.stdout): self._f = f - def progress(self,done,total): - self._f.write("scan chat logs %3d%%\r" % ((done*100) / total)) + def __init__(self, f=sys.stdout): + self._f = f + def progress_string(self,done,total): + return "scan chat logs %3d%%\r" % ((done*100) / total) + def progress(self,*a): + self._f.write(self.progress_string(*a)) self._f.flush() def caughtup(self): self._f.write(' \r') @@ -721,13 +724,22 @@ def do_track_chat_log(args, bu): print track time.sleep(1) +#----- ship management aid ----- + +class Display_dumb(ProgressPrintPercentage): + def __init__(self): + ProgressPrintPercentage.__init__(self) + def show(self, s): + print '\n\n', s; + def do_ship_aid(args, bu): if opts.ship_duty is None: opts.ship_duty = True - (myself, track) = prep_chat_log(args, bu) - + displayer = globals()['Display_'+opts.display]() rotate_nya = '/-\\' + (myself, track) = prep_chat_log(args, bu, progress=displayer) + def timeevent(t,e): if t is None: return ' ' * 22 return " %-4s %-16s" % (format_time_interval(now - t),e) @@ -739,10 +751,11 @@ def do_ship_aid(args, bu): s = "%s" % track.myname() vn = track.vessel() - if vn is None: print s + " ...?"; return - - s += " on board the %s at %s\n" % ( - vn, time.strftime("%Y-%m-%d %H:%M:%S")) + if vn is None: + s += " not on a vessel?!" + else: + s += " on board the %s at %s\n" % ( + vn, time.strftime("%Y-%m-%d %H:%M:%S")) tbl = StandingsTable() tbl.headings() @@ -763,8 +776,7 @@ def do_ship_aid(args, bu): s += tbl.results() - print '\n\n', s; - + displayer.show(s) time.sleep(1) rotate_nya = rotate_nya[1:2] + rotate_nya[0] @@ -780,7 +792,11 @@ actions: 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 + yoweb-scrape [options] ship-aid CHAT-LOG (must be .../PIRATE_OCEAN_chat-log*) + +display modes (for --display) apply to ship-aid: + --display=dumb just print new information, scrolling the screen + --display=overwrite use cursor motion, selective clear, etc. to redraw at top ''') ao = pa.add_option ao('-O','--ocean',dest='ocean', metavar='OCEAN', default=None, @@ -790,8 +806,13 @@ actions: help='cache yoweb pages in DIR') ao('-D','--debug', action='count', dest='debug', default=0, help='enable debugging output') + ao('--debug-fd', action='count', dest='debug_fd', + help='write any debugging output to specified fd') ao('-q','--quiet', action='store_true', dest='quiet', help='suppress warning output') + ao('--display', action='store', dest='display', + type='choice', choices=['dumb','overwrite'], + help='how to display ship aid') ao('--ship-duty', action='store_true', dest='ship_duty', help='show ship duty station puzzles') @@ -804,6 +825,9 @@ actions: if len(args) < 1: pa.error('need a mode argument') + if opts.debug_fd is not None: + opts.debug_file = fdopen(opts.debug_fd, 'w') + mode = args[0] mode_fn_name = 'do_' + mode.replace('_','#').replace('-','_') try: mode_fn = globals()[mode_fn_name] @@ -817,6 +841,13 @@ actions: if opts.cache_dir.startswith('~/'): opts.cache_dir = os.getenv('HOME') + opts.cache_dir[1:] + if opts.display is None: + if ((opts.debug > 0 and opts.debug_fd is None) + or not os.isatty(sys.stdout.fileno())): + opts.display = 'dumb' + else: + opts.display = 'overwrite' + fetcher = Fetcher(opts.ocean, opts.cache_dir) mode_fn(args[1:], pa.error)