def run_config_or_game(cls): config_path = None archive_path = None floppy_image_paths = [] cdrom_image_paths = [] config_uuid = None floppy_exts = (".adf", ".ipf", ".dms", ".adz") cdrom_exts = (".cue", ".iso") archive_exts = (".zip", ".lha") # FIXME: replace argument "parsing" with use of argparse module # at some point last_arg = sys.argv[-1] file_ext = os.path.splitext(last_arg)[-1].lower() if file_ext == ".fs-uae": config_path = last_arg elif file_ext in archive_exts: archive_path = last_arg # elif file_ext in floppy_exts: # floppy_image_paths = [last_arg] elif is_uuid(last_arg): config_uuid = last_arg.lower() for arg in sys.argv[1:]: if not arg.startswith("--"): _, ext = os.path.splitext(arg) if ext in floppy_exts: floppy_image_paths.append(arg) elif ext in cdrom_exts: cdrom_image_paths.append(arg) if config_path: print("config path given:", config_path) if not os.path.exists(config_path): print("config path does not exist", file=sys.stderr) return True LauncherConfig.load_file(config_path) fsgs.config.add_from_argv() return cls.run_config_directly() if archive_path: print("archive path given:", archive_path) if not os.path.exists(archive_path): print("archive path does not exist", file=sys.stderr) return True archive = Archive(os.path.realpath(archive_path)) # We want to exclude pure directory entries when checking for # archives with only floppies. arc_files = [x for x in archive.list_files() if not x.endswith("/")] if all(map(lambda f: f.lower().endswith(floppy_exts), arc_files)): print("archive contains floppy disk images only") floppy_image_paths = arc_files else: values = HardDriveGroup.generate_config_for_archive( archive_path) values["hard_drive_0"] = archive_path values.update(fsgs.config.config_from_argv()) return cls.run_config_directly_with_values(values) if floppy_image_paths: enum_paths = tuple(enumerate(floppy_image_paths)) values = {} values.update(fsgs.config.config_from_argv()) max_drives = int(values.get("floppy_drive_count", "4")) values.update({"floppy_drive_{0}".format(k): v for k, v in enum_paths[:max_drives]}) values.update({"floppy_image_{0}".format(k): v for k, v in enum_paths[:20]}) return cls.run_config_directly_with_values(values) if cdrom_image_paths: enum_paths = tuple(enumerate(cdrom_image_paths)) values = {"amiga_model": "CD32"} values.update(fsgs.config.config_from_argv()) max_drives = int(values.get("cdrom_drive_count", "1")) values.update({"cdrom_drive_{0}".format(k): v for k, v in enum_paths[:max_drives]}) values.update({"cdrom_image_{0}".format(k): v for k, v in enum_paths[:20]}) return cls.run_config_directly_with_values(values) if config_uuid: print("config uuid given:", config_uuid) variant_uuid = config_uuid # values = fsgs.game.set_from_variant_uuid(variant_uuid) if fsgs.load_game_variant(variant_uuid): print("loaded variant") else: print("could not load variant, try to load game") game_uuid = config_uuid variant_uuid = fsgs.find_preferred_game_variant(game_uuid) print("preferred variant:", variant_uuid) fsgs.load_game_variant(variant_uuid) fsgs.config.add_from_argv() LauncherConfig.post_load_values(fsgs.config) return cls.run_config_directly()
def find_preferred_variant(game_uuid): return fsgs.find_preferred_game_variant(game_uuid)
def run_config_or_game(cls): config_path = None archive_path = None floppy_image_path = None config_uuid = None # FIXME: replace argument "parsing" with use of argparse module # at some point if sys.argv[-1].endswith(".fs-uae"): config_path = sys.argv[-1] elif sys.argv[-1].endswith(".zip"): archive_path = sys.argv[-1] elif sys.argv[-1].endswith(".lha"): archive_path = sys.argv[-1] elif sys.argv[-1].endswith(".adf"): # FIXME: support / check for other disk images as well floppy_image_path = sys.argv[-1] elif is_uuid(sys.argv[-1]): config_uuid = sys.argv[-1].lower() if config_path: print("config path given:", config_path) if not os.path.exists(config_path): print("config path does not exist", file=sys.stderr) return True LauncherConfig.load_file(config_path) fsgs.config.add_from_argv() LauncherSettings.set("parent_uuid", "") cls.start_game() return True elif archive_path: print("archive path given:", archive_path) if not os.path.exists(archive_path): print("archive path does not exist", file=sys.stderr) return True # FIXME: if archive is determined to contain (only) floppy disk # images, load those into floppy drives instead values = HardDriveGroup.generate_config_for_archive(archive_path) values["hard_drive_0"] = archive_path LauncherConfig.load(values) fsgs.config.add_from_argv() LauncherSettings.set("parent_uuid", "") cls.start_game() return True elif floppy_image_path: values = { "floppy_drive_0": floppy_image_path, } LauncherConfig.load(values) fsgs.config.add_from_argv() LauncherSettings.set("parent_uuid", "") cls.start_game() return True elif config_uuid: print("config uuid given:", config_uuid) variant_uuid = config_uuid # values = fsgs.game.set_from_variant_uuid(variant_uuid) if fsgs.load_game_variant(variant_uuid): print("loaded variant") else: print("could not load variant, try to load game") game_uuid = config_uuid variant_uuid = fsgs.find_preferred_game_variant(game_uuid) print("preferred variant:", variant_uuid) fsgs.load_game_variant(variant_uuid) fsgs.config.add_from_argv() cls.start_game() return True
def run_config_or_game(cls): config_path = None archive_path = None floppy_image_paths = [] cdrom_image_paths = [] config_uuid = None floppy_extensions = (".adf", ".ipf", ".dms", ".adz") cdrom_extensions = (".cue", ".iso") archive_extensions = (".zip", ".lha") # FIXME: replace argument "parsing" with use of argparse module # at some point last_arg = sys.argv[-1] file_ext = os.path.splitext(last_arg)[-1].lower() if file_ext == ".fs-uae": config_path = last_arg elif file_ext in archive_extensions: archive_path = last_arg # elif file_ext in floppy_extensions: # floppy_image_paths = [last_arg] elif is_uuid(last_arg): config_uuid = last_arg.lower() for arg in sys.argv[1:]: if not arg.startswith("--"): _, ext = os.path.splitext(arg) if ext in floppy_extensions: floppy_image_paths.append(arg) elif ext in cdrom_extensions: cdrom_image_paths.append(arg) if config_path: print("[STARTUP] Config path given:", config_path) if not os.path.exists(config_path): print("[STARTUP] Config path does not exist", file=sys.stderr) return True LauncherConfig.load_file(config_path) fsgs.config.add_from_argv() return cls.run_config_directly() if archive_path: print("[STARTUP] Archive path given:", archive_path) if not os.path.exists(archive_path): print("[STARTUP] Archive path does not exist", file=sys.stderr) return True archive = Archive(os.path.realpath(archive_path)) archive_name = os.path.basename(archive_path) # We want to exclude pure directory entries when checking for # archives with only floppies. arc_files = [ x for x in archive.list_files() if not x.endswith("/") ] if all( map(lambda f: f.lower().endswith(floppy_extensions), arc_files)): print("[STARTUP] Archive contains floppy disk images only") floppy_image_paths = arc_files else: if cls.auto_detect_game: # FIXME: Could also do this for floppy file archives. archive_util = ArchiveUtil(archive_path) archive_uuid = archive_util.create_variant_uuid() print("[STARTUP] Try auto-detecting variant, uuid =", archive_uuid) if fsgs.load_game_variant(archive_uuid): print("[STARTUP] Auto-detected variant", archive_uuid) print("[STARTUP] Adding archive files to file index") for archive_file in archive.list_files(): stream = archive.open(archive_file) data = stream.read() size = len(data) sha1 = hashlib.sha1(data).hexdigest() FileDatabase.add_static_file(archive_file, size=size, sha1=sha1) fsgs.config.add_from_argv() fsgs.config.set("__config_name", archive_name) LauncherConfig.post_load_values(fsgs.config) return cls.run_config_directly() values = whdload.generate_config_for_archive(archive_path) values["hard_drive_0"] = archive_path values.update(fsgs.config.config_from_argv()) # archive_name, archive_ext = os.path.splitext(archive_name) values["__config_name"] = archive_name return cls.run_config_directly_with_values(values) if floppy_image_paths: enum_paths = tuple(enumerate(floppy_image_paths)) values = {} values.update(fsgs.config.config_from_argv()) max_drives = int(values.get("floppy_drive_count", "4")) values.update({ "floppy_drive_{0}".format(k): v for k, v in enum_paths[:max_drives] }) values.update( {"floppy_image_{0}".format(k): v for k, v in enum_paths[:20]}) # FIXME: Generate a better config name for save dir? values["__config_name"] = "Default" return cls.run_config_directly_with_values(values) if cdrom_image_paths: enum_paths = tuple(enumerate(cdrom_image_paths)) values = {"amiga_model": "CD32"} values.update(fsgs.config.config_from_argv()) max_drives = int(values.get("cdrom_drive_count", "1")) values.update({ "cdrom_drive_{0}".format(k): v for k, v in enum_paths[:max_drives] }) values.update( {"cdrom_image_{0}".format(k): v for k, v in enum_paths[:20]}) # FIXME: Generate a better config name for save dir? values["__config_name"] = "Default" return cls.run_config_directly_with_values(values) if config_uuid: print("[STARTUP] Config uuid given:", config_uuid) variant_uuid = config_uuid # values = fsgs.game.set_from_variant_uuid(variant_uuid) if fsgs.load_game_variant(variant_uuid): print("[STARTUP] Loaded variant") else: print("[STARTUP] Could not load variant, try to load game") game_uuid = config_uuid variant_uuid = fsgs.find_preferred_game_variant(game_uuid) print("[STARTUP] Preferred variant:", variant_uuid) fsgs.load_game_variant(variant_uuid) fsgs.config.add_from_argv() LauncherConfig.post_load_values(fsgs.config) return cls.run_config_directly()
def run_config_or_game(cls): config_path = None archive_path = None floppy_image_paths = [] cdrom_image_paths = [] config_uuid = None floppy_extensions = (".adf", ".ipf", ".dms", ".adz") cdrom_extensions = (".cue", ".iso") archive_extensions = (".zip", ".lha") # FIXME: replace argument "parsing" with use of argparse module # at some point last_arg = sys.argv[-1] file_ext = os.path.splitext(last_arg)[-1].lower() if file_ext == ".fs-uae": config_path = last_arg elif file_ext in archive_extensions: archive_path = last_arg # elif file_ext in floppy_extensions: # floppy_image_paths = [last_arg] elif is_uuid(last_arg): config_uuid = last_arg.lower() for arg in sys.argv[1:]: if not arg.startswith("--"): _, ext = os.path.splitext(arg) if ext in floppy_extensions: floppy_image_paths.append(arg) elif ext in cdrom_extensions: cdrom_image_paths.append(arg) if config_path: print("[STARTUP] Config path given:", config_path) if not os.path.exists(config_path): print("[STARTUP] Config path does not exist", file=sys.stderr) return True LauncherConfig.load_file(config_path) fsgs.config.add_from_argv() return cls.run_config_directly() if archive_path: print("[STARTUP] Archive path given:", archive_path) if not os.path.exists(archive_path): print("[STARTUP] Archive path does not exist", file=sys.stderr) return True archive = Archive(os.path.realpath(archive_path)) archive_name = os.path.basename(archive_path) # We want to exclude pure directory entries when checking for # archives with only floppies. arc_files = [ x for x in archive.list_files() if not x.endswith("/") ] if all( map(lambda f: f.lower().endswith(floppy_extensions), arc_files) ): print("[STARTUP] Archive contains floppy disk images only") floppy_image_paths = arc_files else: if cls.auto_detect_game: # FIXME: Could also do this for floppy file archives. archive_util = ArchiveUtil(archive_path) archive_uuid = archive_util.create_variant_uuid() print( "[STARTUP] Try auto-detecting variant, uuid =", archive_uuid, ) if fsgs.load_game_variant(archive_uuid): print("[STARTUP] Auto-detected variant", archive_uuid) print("[STARTUP] Adding archive files to file index") for archive_file in archive.list_files(): stream = archive.open(archive_file) data = stream.read() size = len(data) sha1 = hashlib.sha1(data).hexdigest() FileDatabase.add_static_file( archive_file, size=size, sha1=sha1 ) fsgs.config.add_from_argv() fsgs.config.set("__config_name", archive_name) LauncherConfig.post_load_values(fsgs.config) return cls.run_config_directly() values = whdload.generate_config_for_archive(archive_path) values["hard_drive_0"] = archive_path values.update(fsgs.config.config_from_argv()) # archive_name, archive_ext = os.path.splitext(archive_name) values["__config_name"] = archive_name return cls.run_config_directly_with_values(values) if floppy_image_paths: enum_paths = tuple(enumerate(floppy_image_paths)) values = {} values.update(fsgs.config.config_from_argv()) max_drives = int(values.get("floppy_drive_count", "4")) values.update( { "floppy_drive_{0}".format(k): v for k, v in enum_paths[:max_drives] } ) values.update( {"floppy_image_{0}".format(k): v for k, v in enum_paths[:20]} ) # FIXME: Generate a better config name for save dir? values["__config_name"] = "Default" return cls.run_config_directly_with_values(values) if cdrom_image_paths: enum_paths = tuple(enumerate(cdrom_image_paths)) values = {"amiga_model": "CD32"} values.update(fsgs.config.config_from_argv()) max_drives = int(values.get("cdrom_drive_count", "1")) values.update( { "cdrom_drive_{0}".format(k): v for k, v in enum_paths[:max_drives] } ) values.update( {"cdrom_image_{0}".format(k): v for k, v in enum_paths[:20]} ) # FIXME: Generate a better config name for save dir? values["__config_name"] = "Default" return cls.run_config_directly_with_values(values) if config_uuid: print("[STARTUP] Config uuid given:", config_uuid) variant_uuid = config_uuid # values = fsgs.game.set_from_variant_uuid(variant_uuid) if fsgs.load_game_variant(variant_uuid): print("[STARTUP] Loaded variant") else: print("[STARTUP] Could not load variant, try to load game") game_uuid = config_uuid variant_uuid = fsgs.find_preferred_game_variant(game_uuid) print("[STARTUP] Preferred variant:", variant_uuid) fsgs.load_game_variant(variant_uuid) fsgs.config.add_from_argv() LauncherConfig.post_load_values(fsgs.config) return cls.run_config_directly()