示例#1
0
文件: gui.py 项目: hopi/tts-backup
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
文件: gui.py 项目: Treader/tts-backup
    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)
示例#5
0
文件: gui.py 项目: Treader/tts-backup
    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)
示例#6
0
文件: gui.py 项目: hopi/tts-backup
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)
示例#7
0
文件: gui.py 项目: hopi/tts-backup
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)
示例#8
0
文件: gui.py 项目: Treader/tts-backup
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)
示例#9
0
文件: gui.py 项目: Treader/tts-backup
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)