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