#!/usr/bin/env python # -*- coding: utf-8 -*- import logging import os import sys from gooey import Gooey, GooeyParser from ffsubsync.constants import ( RELEASE_URL, WEBSITE, DEV_WEBSITE, DESCRIPTION, LONG_DESCRIPTION, PROJECT_NAME, PROJECT_LICENSE, COPYRIGHT_YEAR, SUBSYNC_RESOURCES_ENV_MAGIC, ) # set the env magic so that we look for resources in the right place if SUBSYNC_RESOURCES_ENV_MAGIC not in os.environ: os.environ[SUBSYNC_RESOURCES_ENV_MAGIC] = getattr(sys, "_MEIPASS", "") from ffsubsync.ffsubsync import run, add_cli_only_args from ffsubsync.version import get_version, update_available logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) _menu = [ { "name": "File", "items": [ { "type": "AboutDialog", "menuTitle": "About", "name": PROJECT_NAME, "description": LONG_DESCRIPTION, "version": get_version(), "copyright": COPYRIGHT_YEAR, "website": WEBSITE, "developer": DEV_WEBSITE, "license": PROJECT_LICENSE, }, { "type": "Link", "menuTitle": "Download latest release", "url": RELEASE_URL, }, ], } ] @Gooey( program_name=PROJECT_NAME, image_dir=os.path.join(os.environ[SUBSYNC_RESOURCES_ENV_MAGIC], "img"), menu=_menu, tabbed_groups=True, progress_regex=r"(\d+)%", hide_progress_msg=True, ) def make_parser(): description = DESCRIPTION if update_available(): description += ( "\nUpdate available! Please go to " '"File" -> "Download latest release"' " to update FFsubsync." ) parser = GooeyParser(description=description) main_group = parser.add_argument_group("Basic") main_group.add_argument( "reference", help="Reference (video or subtitles file) to which to synchronize input subtitles.", widget="FileChooser", ) main_group.add_argument("srtin", help="Input subtitles file", widget="FileChooser") main_group.add_argument( "-o", "--srtout", help="Output subtitles file (default=${srtin}.synced.srt).", widget="FileSaver", ) advanced_group = parser.add_argument_group("Advanced") # TODO: these are shared between gui and cli; don't duplicate this code advanced_group.add_argument( "--merge-with-reference", "--merge", action="store_true", help="Merge reference subtitles with synced output subtitles.", ) advanced_group.add_argument( "--make-test-case", "--create-test-case", action="store_true", help="If specified, create a test archive a few KiB in size " "to send to the developer as a debugging aid.", ) advanced_group.add_argument( "--reference-stream", "--refstream", "--reference-track", "--reftrack", default=None, help="Which stream/track in the video file to use as reference, " "formatted according to ffmpeg conventions. For example, s:0 " "uses the first subtitle track; a:3 would use the fourth audio track.", ) return parser def main(): parser = make_parser() _ = parser.parse_args() # Fool Gooey into presenting the simpler menu add_cli_only_args(parser) args = parser.parse_args() args.gui_mode = True return run(args) if __name__ == "__main__": sys.exit(main())