def browse(self, dir_mode): default_dir = FSGSDirectories.get_hard_drives_dir() dialog = LauncherFilePicker( self.get_window(), gettext("Choose Hard Drive"), "hd", LauncherConfig.get(self.config_key), dir_mode=dir_mode, ) if not dialog.show_modal(): dialog.destroy() return path = dialog.get_path() dialog.destroy() checksum_tool = ChecksumTool(self.get_window()) sha1 = "" if dir_mode: print("not calculating HD checksums for directories") else: size = os.path.getsize(path) if size < 64 * 1024 * 1024: sha1 = checksum_tool.checksum(path) else: print("not calculating HD checksums HD files > 64MB") full_path = path # FIXME: use contract function dir_path, file = os.path.split(path) self.text_field.set_text(file) if os.path.normcase(os.path.normpath(dir_path)) == os.path.normcase( os.path.normpath(default_dir) ): path = file self.text_field.set_text(path) values = [(self.config_key, path), (self.config_key_sha1, sha1)] if self.index == 0: # whdload_args = "" # dummy, ext = os.path.splitext(path) # if not dir_mode and ext.lower() in Archive.extensions: # try: # whdload_args = self.calculate_whdload_args(full_path) # except Exception: # traceback.print_exc() # values.append(("x_whdload_args", whdload_args)) values.extend( whdload.generate_config_for_archive( full_path, model_config=False ).items() ) LauncherConfig.set_multiple(values)
def browse(self, dir_mode): default_dir = FSGSDirectories.get_hard_drives_dir() dialog = LauncherFilePicker( self.get_window(), gettext("Choose Hard Drive"), "hd", LauncherConfig.get(self.config_key), dir_mode=dir_mode, ) if not dialog.show_modal(): dialog.destroy() return path = dialog.get_path() dialog.destroy() checksum_tool = ChecksumTool(self.get_window()) sha1 = "" if dir_mode: print("not calculating HD checksums for directories") else: size = os.path.getsize(path) if size < 64 * 1024 * 1024: sha1 = checksum_tool.checksum(path) else: print("not calculating HD checksums HD files > 64MB") full_path = path # FIXME: use contract function dir_path, file = os.path.split(path) self.text_field.set_text(file) if os.path.normcase(os.path.normpath(dir_path)) == os.path.normcase( os.path.normpath(default_dir)): path = file self.text_field.set_text(path) values = [(self.config_key, path), (self.config_key_sha1, sha1)] if self.index == 0: # whdload_args = "" # dummy, ext = os.path.splitext(path) # if not dir_mode and ext.lower() in Archive.extensions: # try: # whdload_args = self.calculate_whdload_args(full_path) # except Exception: # traceback.print_exc() # values.append(("x_whdload_args", whdload_args)) values.extend( whdload.generate_config_for_archive( full_path, model_config=False).items()) LauncherConfig.set_multiple(values)
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()