bazarr/libs/ffsubsync/ffsubsync_gui.py

126 lines
3.5 KiB
Python

#!/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())