#!/usr/bin/env python # -*- coding: utf-8 -*- import logging import os import sys from gooey import Gooey, GooeyParser from .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 import run, add_cli_only_args from .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())