def make_widgets(self): self.label = Label( self, text="TTS-Prefetch", font=Font(size=14, weight="bold") ) self.label.pack() leftpane = Frame(self) leftpane.configure(bg="black") homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ( "infile", FileEntry, dict( label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action="open", default=self.args.infile, ), ), ( "gamedata", DirEntry, dict( label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True, ), ), ("dry_run", ToggleEntry, dict(label="Dry run")), ("refetch", ToggleEntry, dict(label="Refetch")), ("relax", ToggleEntry, dict(label="Relax")), ("user_agent", TextEntry, dict(label="User-agent")), text="Settings", width=60, ) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, "Run", "Stop", "Quit") self.buttons.pack() self.buttons.on("Run", self.run) self.buttons.on("Stop", self.stop) self.buttons.on("Quit", self.quit) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH)
def make_widgets(self): self.label = Label(self, text="TTS-Backup", font=Font(size=14, weight='bold')) self.label.pack() leftpane = Frame(self) homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ('infile', FileEntry, dict(label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action='open')), ('gamedata', DirEntry, dict(label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True)), ('outfile', FileEntry, dict(label="Output archive", initialdir=homedir, defaultextension=".zip", action='save')), ('comment', TextEntry, dict(label="Archive comment")), ('dry_run', ToggleEntry, dict(label="Dry run")), ('ignore_missing', ToggleEntry, dict(label="Ignore missing")), text="Settings", width=60) self.settings.infile.trace('w', self.on_infile_change) self.settings.infile.set(self.args.infile) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, 'Run', 'Quit') self.buttons.pack() self.buttons.on('Quit', self.quit) self.buttons.on('Run', self.run) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH)
def make_widgets(self): self.label = Label(self, text="TTS-Prefetch", font=Font(size=14, weight='bold')) self.label.pack() leftpane = Frame(self) leftpane.configure(bg='black') homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ('infile', FileEntry, dict(label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action='open', default=self.args.infile)), ('gamedata', DirEntry, dict(label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True)), ('dry_run', ToggleEntry, dict(label="Dry run")), ('refetch', ToggleEntry, dict(label="Refetch")), ('relax', ToggleEntry, dict(label="Relax")), text="Settings", width=60) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, 'Run', 'Stop', 'Quit') self.buttons.pack() self.buttons.on('Run', self.run) self.buttons.on('Stop', self.stop) self.buttons.on('Quit', self.quit) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH)
def make_widgets(self): self.label = Label(self, text="TTS-Backup", font=Font(size=14, weight='bold')) self.label.pack() leftpane = Frame(self) homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ('infile', FileEntry, dict(label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action='open')), ('gamedata', DirEntry, dict(label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True)), ('outfile', FileEntry, dict(label="Output archive", initialdir=homedir, defaultextension=".zip", action='save')), ('comment', TextEntry, dict(label="Archive comment")), ('dry_run', ToggleEntry, dict(label="Dry run")), ('ignore_missing', ToggleEntry, dict(label="Ignore missing")), text="Settings", width=60 ) self.settings.infile.trace('w', self.on_infile_change) self.settings.infile.set(self.args.infile) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, 'Run', 'Quit') self.buttons.pack() self.buttons.on('Quit', self.quit) self.buttons.on('Run', self.run) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH)
def make_widgets(self): self.label = Label(self, text="TTS-Prefetch", font=Font(size=14, weight='bold')) self.label.pack() leftpane = Frame(self) leftpane.configure(bg='black') homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ('infile', FileEntry, dict(label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action='open', default=self.args.infile)), ('gamedata', DirEntry, dict(label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True)), ('dry_run', ToggleEntry, dict(label="Dry run")), ('refetch', ToggleEntry, dict(label="Refetch")), ('relax', ToggleEntry, dict(label="Relax")), text="Settings", width=60 ) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, 'Run', 'Stop', 'Quit') self.buttons.pack() self.buttons.on('Run', self.run) self.buttons.on('Stop', self.stop) self.buttons.on('Quit', self.quit) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH)
class GUI(Frame): argparser = argparse.ArgumentParser( description="Back-up locally cached content " "from a TTS .json file." ) argparser.add_argument( "infile", metavar="FILENAME", default="", nargs="?", help="The save file or mod in JSON format.", ) def __init__(self, master): super().__init__(master) self.running = None self.semaphore = None self.args = self.argparser.parse_args() self.make_widgets() def quit(self): if self.running and self.running.is_alive(): self.stop() self.after(300, self.quit) else: super().quit() def make_widgets(self): self.label = Label( self, text="TTS-Prefetch", font=Font(size=14, weight="bold") ) self.label.pack() leftpane = Frame(self) leftpane.configure(bg="black") homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ( "infile", FileEntry, dict( label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action="open", default=self.args.infile, ), ), ( "gamedata", DirEntry, dict( label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True, ), ), ("dry_run", ToggleEntry, dict(label="Dry run")), ("refetch", ToggleEntry, dict(label="Refetch")), ("relax", ToggleEntry, dict(label="Relax")), ("user_agent", TextEntry, dict(label="User-agent")), text="Settings", width=60, ) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, "Run", "Stop", "Quit") self.buttons.pack() self.buttons.on("Run", self.run) self.buttons.on("Stop", self.stop) self.buttons.on("Quit", self.quit) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH) def run(self): if self.running and self.running.is_alive(): return args = self.parse_args() if not args: return self.output.clear() self.semaphore = threading.Semaphore(0) def callback(): with ExitStack() as stack: stack.enter_context(self.output) stack.enter_context(suppress(SystemExit)) prefetch_files(args, self.semaphore) thread = threading.Thread(target=callback) thread.start() self.running = thread def stop(self): def callback(): if self.running and self.running.is_alive(): self.semaphore.release() self.running.join() thread = threading.Thread(target=callback) thread.start() def parse_args(self): commands = [] infile = self.settings.infile.get() if infile: commands.append(infile) else: return gamedata = self.settings.gamedata.get() if gamedata: commands.extend(["--gamedata", gamedata]) if self.settings.dry_run.get(): commands.append("--dry-run") if self.settings.relax.get(): commands.append("--relax") if self.settings.refetch.get(): commands.append("--refetch") user_agent = self.settings.user_agent.get() if user_agent: commands.extend(["--user-agent", user_agent]) return cli.parser.parse_args(args=commands)
class GUI(Frame): argparser = argparse.ArgumentParser( description="Back-up locally cached content " "from a TTS .json file.") argparser.add_argument( "infile", metavar="FILENAME", default="", nargs="?", help="The save file or mod in JSON format.", ) def __init__(self, master): super().__init__(master) self.running = None self.args = self.argparser.parse_args() self.make_widgets() def make_widgets(self): self.label = Label(self, text="TTS-Backup", font=Font(size=14, weight="bold")) self.label.pack() leftpane = Frame(self) homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ( "infile", FileEntry, dict( label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action="open", ), ), ( "gamedata", DirEntry, dict( label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True, ), ), ( "outfile", FileEntry, dict( label="Output archive", initialdir=homedir, defaultextension=".zip", action="save", ), ), ("comment", TextEntry, dict(label="Archive comment")), ("dry_run", ToggleEntry, dict(label="Dry run")), ("ignore_missing", ToggleEntry, dict(label="Ignore missing")), text="Settings", width=60, ) self.settings.infile.trace("w", self.on_infile_change) self.settings.infile.set(self.args.infile) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, "Run", "Quit") self.buttons.pack() self.buttons.on("Quit", self.quit) self.buttons.on("Run", self.run) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH) def run(self): if self.running and self.running.is_alive(): return args = self.parse_args() if not args: return self.output.clear() def callback(): with ExitStack() as stack: stack.enter_context(self.output) stack.enter_context(suppress(SystemExit)) backup_json(args) thread = threading.Thread(target=callback) thread.start() self.running = thread def parse_args(self): commands = [] infile = self.settings.infile.get() if infile: commands.append(infile) else: return gamedata = self.settings.gamedata.get() if gamedata: commands.extend(["--gamedata", gamedata]) outfile = self.settings.outfile.get() if outfile: commands.extend(["--outname", outfile]) if self.settings.dry_run.get(): commands.append("--dry-run") if self.settings.ignore_missing.get(): commands.append("--ignore-missing") comment = self.settings.comment.get() if comment: commands.extend(["--comment", comment]) return cli.parser.parse_args(args=commands) def on_infile_change(self, *args): filename = self.settings.infile.get() filename = os.path.basename(filename) filename = re.sub(r"\.json$", "", filename) if filename: filename += ".zip" filename = os.path.join(os.path.expanduser("~"), filename) self.settings.outfile.set(filename)
class GUI (Frame): argparser = argparse.ArgumentParser( description="Back-up locally cached content " "from a TTS .json file." ) argparser.add_argument('infile', metavar='FILENAME', default='', nargs='?', help="The save file or mod in JSON format.") def __init__(self, master): super().__init__(master) self.running = None self.args = self.argparser.parse_args() self.make_widgets() def make_widgets(self): self.label = Label(self, text="TTS-Backup", font=Font(size=14, weight='bold')) self.label.pack() leftpane = Frame(self) homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ('infile', FileEntry, dict(label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action='open')), ('gamedata', DirEntry, dict(label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True)), ('outfile', FileEntry, dict(label="Output archive", initialdir=homedir, defaultextension=".zip", action='save')), ('comment', TextEntry, dict(label="Archive comment")), ('dry_run', ToggleEntry, dict(label="Dry run")), ('ignore_missing', ToggleEntry, dict(label="Ignore missing")), text="Settings", width=60 ) self.settings.infile.trace('w', self.on_infile_change) self.settings.infile.set(self.args.infile) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, 'Run', 'Quit') self.buttons.pack() self.buttons.on('Quit', self.quit) self.buttons.on('Run', self.run) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH) def run(self): if self.running and self.running.is_alive(): return args = self.parse_args() if not args: return self.output.clear() def callback(): with ExitStack() as stack: stack.enter_context(self.output) stack.enter_context(suppress(SystemExit)) backup_json(args) thread = threading.Thread(target=callback) thread.start() self.running = thread def parse_args(self): commands = [] infile = self.settings.infile.get() if infile: commands.append(infile) else: return gamedata = self.settings.gamedata.get() if gamedata: commands.extend(["--gamedata", gamedata]) outfile = self.settings.outfile.get() if outfile: commands.extend(["--outname", outfile]) if self.settings.dry_run.get(): commands.append("--dry-run") if self.settings.ignore_missing.get(): commands.append("--ignore-missing") comment = self.settings.comment.get() if comment: commands.extend(["--comment", comment]) return cli.parser.parse_args(args=commands) def on_infile_change(self, *args): filename = self.settings.infile.get() filename = os.path.basename(filename) filename = re.sub(r"\.json$", "", filename) if filename: filename += ".zip" filename = os.path.join(os.path.expanduser("~"), filename) self.settings.outfile.set(filename)
class GUI (Frame): argparser = argparse.ArgumentParser( description="Back-up locally cached content " "from a TTS .json file." ) argparser.add_argument('infile', metavar='FILENAME', default='', nargs='?', help="The save file or mod in JSON format.") def __init__(self, master): super().__init__(master) self.running = None self.semaphore = None self.args = self.argparser.parse_args() self.make_widgets() def quit(self): if self.running and self.running.is_alive(): self.stop() self.after(300, self.quit) else: super().quit() def make_widgets(self): self.label = Label(self, text="TTS-Prefetch", font=Font(size=14, weight='bold')) self.label.pack() leftpane = Frame(self) leftpane.configure(bg='black') homedir = os.path.expanduser("~") self.settings = EntryFrame( leftpane, ('infile', FileEntry, dict(label="Input file", initialdir=libtts.GAMEDATA_DEFAULT, filetypes=[("JSON-file", "*.json")], action='open', default=self.args.infile)), ('gamedata', DirEntry, dict(label="Gamedata path", default=libtts.GAMEDATA_DEFAULT, initialdir=homedir, mustexist=True)), ('dry_run', ToggleEntry, dict(label="Dry run")), ('refetch', ToggleEntry, dict(label="Refetch")), ('relax', ToggleEntry, dict(label="Relax")), text="Settings", width=60 ) self.settings.pack(fill=X) control = LabelFrame(leftpane, text="Control") self.buttons = ButtonFrame(control, 'Run', 'Stop', 'Quit') self.buttons.pack() self.buttons.on('Run', self.run) self.buttons.on('Stop', self.stop) self.buttons.on('Quit', self.quit) control.pack(fill=X) leftpane.pack(side=LEFT, anchor=N) self.output = OutputFrame(self, text="Output") self.output.pack(expand=True, fill=BOTH) def run(self): if self.running and self.running.is_alive(): return args = self.parse_args() if not args: return self.output.clear() self.semaphore = threading.Semaphore(0) def callback(): with ExitStack() as stack: stack.enter_context(self.output) stack.enter_context(suppress(SystemExit)) prefetch_files(args, self.semaphore) thread = threading.Thread(target=callback) thread.start() self.running = thread def stop(self): def callback(): if self.running and self.running.is_alive(): self.semaphore.release() self.running.join() thread = threading.Thread(target=callback) thread.start() def parse_args(self): commands = [] infile = self.settings.infile.get() if infile: commands.append(infile) else: return gamedata = self.settings.gamedata.get() if gamedata: commands.extend(["--gamedata", gamedata]) if self.settings.dry_run.get(): commands.append("--dry-run") if self.settings.relax.get(): commands.append("--relax") if self.settings.refetch.get(): commands.append("--refetch") return cli.parser.parse_args(args=commands)