def update(self): amiga = Amiga.get_model_config(self.model) for sha1 in amiga["kickstarts"]: if fsgs.file.find_by_sha1(sha1): self.icon.set_image(self.ok_image) return self.icon.set_image(self.na_image)
def update_kickstart_in_config_dict(cls, config_dict): print("update_kickstart_in_config") model = config_dict.setdefault( "amiga_model", cls.default_config["amiga_model"]) kickstart_file = config_dict.setdefault("kickstart_file", "") if kickstart_file: config_dict["x_kickstart_file"] = config_dict["kickstart_file"] if kickstart_file == "internal": config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 else: # FIXME: set checksum pass else: checksums = Amiga.get_model_config(model)["kickstarts"] for checksum in checksums: path = fsgs.file.find_by_sha1(checksum) if path: config_dict["x_kickstart_file"] = path config_dict["x_kickstart_file_sha1"] = checksum break else: print("WARNING: no suitable kickstart file found") config_dict["x_kickstart_file"] = "" config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 if config_dict.setdefault("kickstart_ext_file", ""): config_dict["x_kickstart_ext_file"] = \ config_dict["kickstart_ext_file"] # FIXME: set checksum else: checksums = Amiga.get_model_config(model)["ext_roms"] if len(checksums) == 0: config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = "" else: for checksum in checksums: path = fsgs.file.find_by_sha1(checksum) if path: config_dict["x_kickstart_ext_file"] = path config_dict["x_kickstart_ext_file_sha1"] = checksum break else: # print("WARNING: no suitable kickstart ext file found") config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = ""
def update_kickstart_in_config_dict(cls, config_dict): print("update_kickstart_in_config") model = config_dict.setdefault("amiga_model", cls.default_config["amiga_model"]) kickstart_file = config_dict.setdefault("kickstart_file", "") if kickstart_file: config_dict["x_kickstart_file"] = config_dict["kickstart_file"] if kickstart_file == "internal": config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 else: # FIXME: set checksum pass else: checksums = Amiga.get_model_config(model)["kickstarts"] for checksum in checksums: path = fsgs.file.find_by_sha1(checksum) if path: config_dict["x_kickstart_file"] = path config_dict["x_kickstart_file_sha1"] = checksum break else: print("WARNING: no suitable kickstart file found") config_dict["x_kickstart_file"] = "" config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 if config_dict.setdefault("kickstart_ext_file", ""): config_dict["x_kickstart_ext_file"] = \ config_dict["kickstart_ext_file"] # FIXME: set checksum else: checksums = Amiga.get_model_config(model)["ext_roms"] if len(checksums) == 0: config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = "" else: for checksum in checksums: path = fsgs.file.find_by_sha1(checksum) if path: config_dict["x_kickstart_ext_file"] = path config_dict["x_kickstart_ext_file_sha1"] = checksum break else: # print("WARNING: no suitable kickstart ext file found") config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = ""
def kickstart_startup_scan(cls): if cls._kickstart_scanned: return cls._kickstart_scanned = True print("kickstart_startup_scan") kickstarts_dir = FSGSDirectories.get_kickstarts_dir() if LauncherSettings.get("kickstarts_dir_mtime") == \ cls.get_dir_mtime_str(kickstarts_dir): print("... mtime not changed") else: file_database = FileDatabase.get_instance() print("... database.find_local_roms") local_roms = file_database.find_local_roms() print("... walk kickstarts_dir") for dir_path, dir_names, file_names in os.walk(kickstarts_dir): for file_name in file_names: if not file_name.lower().endswith(".rom") and not \ file_name.lower().endswith(".bin"): continue path = Paths.join(dir_path, file_name) if path in local_roms: local_roms[path] = None # already exists in database continue print("[startup] adding kickstart", path) ROMManager.add_rom_to_database(path, file_database) print(local_roms) for path, id in local_roms.items(): if id is not None: print("[startup] removing kickstart", path) file_database.delete_file(id=id) print("... commit") file_database.commit() LauncherSettings.set( "kickstarts_dir_mtime", cls.get_dir_mtime_str(kickstarts_dir)) amiga = Amiga.get_model_config("A500") for sha1 in amiga["kickstarts"]: if fsgs.file.find_by_sha1(sha1=sha1): break else: file_database = FileDatabase.get_instance() cls.amiga_forever_kickstart_scan() file_database.commit()
def kickstart_startup_scan(cls): if cls._kickstart_scanned: return cls._kickstart_scanned = True print("kickstart_startup_scan") kickstarts_dir = FSGSDirectories.get_kickstarts_dir() if LauncherSettings.get("kickstarts_dir_mtime") == \ cls.get_dir_mtime_str(kickstarts_dir): print("... mtime not changed") else: file_database = FileDatabase.get_instance() print("... database.find_local_roms") local_roms = file_database.find_local_roms() print("... walk kickstarts_dir") for dir_path, dir_names, file_names in os.walk(kickstarts_dir): for file_name in file_names: if not file_name.lower().endswith(".rom") and not \ file_name.lower().endswith(".bin"): continue path = Paths.join(dir_path, file_name) if path in local_roms: local_roms[path] = None # already exists in database continue print("[startup] adding kickstart", path) ROMManager.add_rom_to_database(path, file_database) print(local_roms) for path, file_id in local_roms.items(): if file_id is not None: print("[startup] removing kickstart", path) file_database.delete_file(id=file_id) print("... commit") file_database.commit() LauncherSettings.set("kickstarts_dir_mtime", cls.get_dir_mtime_str(kickstarts_dir)) amiga = Amiga.get_model_config("A500") for sha1 in amiga["kickstarts"]: if fsgs.file.find_by_sha1(sha1=sha1): break else: file_database = FileDatabase.get_instance() cls.amiga_forever_kickstart_scan() file_database.commit()
def on_sub_model_changed(self): print("ModelGroup.on_sub_model_change\n") if self.sub_model_updating: print("sub model list is currently updating") return index = self.sub_model_choice.get_index() # if index == 0: # # The default model (A500) can be specified with the empty string # model = "" # else: model = self.model_ids[self.model_choice.get_index()] sub_model = self.sub_model_ids[index] if sub_model: LauncherConfig.set("amiga_model", model + "/" + sub_model) else: LauncherConfig.set("amiga_model", model) if Amiga.is_cd_based(LauncherConfig): FloppyManager.clear_all() else: CDManager.clear_all()
def update_media_type(self): self.set_cd_mode(Amiga.is_cd_based(LauncherConfig))
def prepare_roms(self): print("LaunchHandler.prepare_roms") current_task.set_progress(gettext("Preparing kickstart ROMs...")) amiga_model = self.config.get("amiga_model", "A500") model_config = Amiga.get_model_config(amiga_model) roms = [("kickstart_file", model_config["kickstarts"])] if self.config["kickstart_ext_file"] or model_config["ext_roms"]: # not all Amigas have extended ROMs roms.append(("kickstart_ext_file", model_config["ext_roms"])) if amiga_model.lower() == "cd32/fmv": roms.append(("fvm_rom", [CD32_FMV_ROM])) if self.config["graphics_card"].lower().startswith("picasso-iv"): roms.append(("graphics_card_rom", [PICASSO_IV_74_ROM])) if self.config["accelerator"].lower() == "cyberstorm-ppc": roms.append(("accelerator_rom", ["cyberstormppc.rom"])) if self.config["freezer_cartridge"] == "action-replay-2": # Ideally, we would want to recognize ROMs based on zeroing the # first four bytes, but right now we simply recognize a common # additional version. freezer_cartridge_rom isn't a real option, # we just want to copy the rom file and let FS-UAE find it roms.append(("[freezer_cartridge]", [ACTION_REPLAY_MK_II_2_14_ROM.sha1, ACTION_REPLAY_MK_II_2_14_MOD_ROM.sha1])) elif self.config["freezer_cartridge"] == "action-replay-3": roms.append(("[freezer_cartridge]", [ACTION_REPLAY_MK_III_3_17_ROM.sha1, ACTION_REPLAY_MK_III_3_17_MOD_ROM.sha1])) for config_key, default_roms in roms: print("ROM:", config_key, default_roms) src = self.config[config_key] if not src: for sha1 in default_roms: if is_sha1(sha1): rom_src = self.fsgs.file.find_by_sha1(sha1) if rom_src: src = rom_src break else: # roms_dir = FSGSDirectories.get_kickstarts_dir() # src = os.path.join(roms_dir, sha1) # if os.path.exists(src): # break # loop up file in roms dir instead src = sha1 elif src == "internal": continue elif src: src = Paths.expand_path(src) if not src: raise TaskFailure( gettext("Did not find required Kickstart or " "ROM for {}. Wanted one of these files: {}".format( config_key, repr(default_roms)))) use_temp_kickstarts_dir = False dest = os.path.join(self.temp_dir, os.path.basename(src)) archive = Archive(src) stream = None if not archive.exists(src): dirs = [self.fsgs.amiga.get_kickstarts_dir()] for dir in dirs: path = os.path.join(dir, src) print("checking", repr(path)) archive = Archive(path) if archive.exists(path): src = path break else: try: stream = self.fsgs.file.open(src) if stream is None: raise FileNotFoundError(src) except FileNotFoundError: raise TaskFailure(gettext( "Cannot find required ROM " "file: {name}".format(name=repr(src)))) with open(dest, "wb") as f: if stream: f.write(stream.read()) else: ROMManager.decrypt_archive_rom(archive, src, file=f) if use_temp_kickstarts_dir: self.config[config_key] = os.path.basename(src) else: self.config[config_key] = dest if use_temp_kickstarts_dir: self.config["kickstarts_dir"] = self.temp_dir
def prepare_config(cls, original_config): config = defaultdict(str) for key, value in LauncherSettings.items(): # We now show warnings on status bar instead # if key in LauncherConfig.config_keys: # print("... ignoring config key from settings:", key) # continue config[key] = value config["base_dir"] = FSGSDirectories.get_base_dir() for key, value in original_config.items(): if value: config[key] = value if not config["joystick_port_0_mode"]: config["joystick_port_0_mode"] = "mouse" if not config["joystick_port_1_mode"]: if config["amiga_model"].startswith("CD32"): config["joystick_port_1_mode"] = "cd32 gamepad" else: config["joystick_port_1_mode"] = "joystick" if not config["joystick_port_2_mode"]: config["joystick_port_2_mode"] = "none" if not config["joystick_port_3_mode"]: config["joystick_port_3_mode"] = "none" from .device_manager import DeviceManager devices = DeviceManager.get_devices_for_ports(config) for port in range(4): key = "joystick_port_{0}".format(port) if not config.get(key): # key not set, use calculated default value config[key] = devices[port].id for remove_key in ["database_username", "database_password", "database_username", "database_email", "database_auth", "device_id"]: if remove_key in config: del config[remove_key] # overwrite netplay config if config.get("__netplay_host", ""): config["netplay_server"] = config["__netplay_host"] if config.get("__netplay_password", ""): config["netplay_password"] = config["__netplay_password"] if config.get("__netplay_port", ""): config["netplay_port"] = config["__netplay_port"] # copy actual kickstart options from x_ options config["kickstart_file"] = config["x_kickstart_file"] config["kickstart_ext_file"] = config["x_kickstart_ext_file"] if not config["kickstart_file"]: # Warning will have been shown on the status bar config["kickstart_file"] = "internal" # Copy default configuration values from model defaults. The main # purpose of this is to let the launch code know about implied defaults # so it can for example configure correct ROM files for expansions. model_config = Amiga.get_current_config(config) for key, value in model_config["defaults"].items(): if not config.get(key): config[key] = value # make sure FS-UAE does not load other config files (Host.fs-uae) config["end_config"] = "1" # Make FS-UAE check that version matches (except for development) if VERSION != "9.8.7dummy": config[Option.EXPECT_VERSION] = VERSION if config.get("__netplay_game", ""): print("\nfixing config for netplay game") for key in [x for x in config.keys() if x.startswith("uae_")]: print("* removing option", key) del config[key] return config
def start_local_game_amiga(cls): # make sure x_kickstart_file is initialized LauncherConfig.set_kickstart_from_model() # if not Config.get("x_kickstart_file"): # or not \ # # os.path.exists(Config.get("kickstart_file")): # fsui.show_error( # gettext("No kickstart found for this model. Use the 'Import " # "Kickstarts' function from the menu.")) # return cs = Amiga.get_model_config( LauncherConfig.get("amiga_model"))["ext_roms"] if len(cs) > 0: # extended kickstart ROM is needed if not LauncherConfig.get("x_kickstart_ext_file"): fsui.show_error( gettext("No extended kickstart found for this model. " "Try 'scan' function.")) return config = LauncherConfig.copy() prepared_config = cls.prepare_config(config) model = LauncherConfig.get("amiga_model") if model.startswith("CD32"): platform = "CD32" elif model == "CDTV": platform = "CDTV" else: platform = "Amiga" name = LauncherSettings.get("config_name") uuid = LauncherConfig.get("x_game_uuid") from fsgs.SaveStateHandler import SaveStateHandler save_state_handler = SaveStateHandler(fsgs, name, platform, uuid) from fsgs.amiga.LaunchHandler import LaunchHandler launch_handler = LaunchHandler(fsgs, name, prepared_config, save_state_handler) from .ui.launcher_window import LauncherWindow task = AmigaLaunchTask(launch_handler) # dialog = LaunchDialog(MainWindow.instance, launch_handler) dialog = LaunchDialog( LauncherWindow.current(), gettext("Launching FS-UAE"), task) dialog.show() def on_show_license_information(license_text): unused(license_text) # FIXME: don't depend on wx here # noinspection PyUnresolvedReferences # import wx # license_dialog = wx.MessageDialog( # dialog, license_text, _("Terms of Use"), # wx.OK | wx.CANCEL | wx.CENTRE) # license_dialog.CenterOnParent() # result = license_dialog.ShowModal() # return result == wx.ID_OK # FIXME return True fsgs.file.on_show_license_information = on_show_license_information LauncherConfig.set("__running", "1") task.start()
def prepare_config(cls, original_config): config = defaultdict(str) for key, value in LauncherSettings.items(): # We now show warnings on status bar instead # if key in LauncherConfig.config_keys: # print("... ignoring config key from settings:", key) # continue config[key] = value config["base_dir"] = FSGSDirectories.get_base_dir() for key, value in original_config.items(): if value: config[key] = value if not config["joystick_port_0_mode"]: config["joystick_port_0_mode"] = "mouse" if not config["joystick_port_1_mode"]: if config["amiga_model"].startswith("CD32"): config["joystick_port_1_mode"] = "cd32 gamepad" else: config["joystick_port_1_mode"] = "joystick" if not config["joystick_port_2_mode"]: config["joystick_port_2_mode"] = "none" if not config["joystick_port_3_mode"]: config["joystick_port_3_mode"] = "none" from .device_manager import DeviceManager devices = DeviceManager.get_devices_for_ports(config) for port in range(4): key = "joystick_port_{0}".format(port) if not config.get(key): # key not set, use calculated default value config[key] = devices[port].id for remove_key in [ "database_username", "database_password", "database_username", "database_email", "database_auth", "device_id" ]: if remove_key in config: del config[remove_key] # overwrite netplay config if config.get("__netplay_host", ""): config["netplay_server"] = config["__netplay_host"] if config.get("__netplay_password", ""): config["netplay_password"] = config["__netplay_password"] if config.get("__netplay_port", ""): config["netplay_port"] = config["__netplay_port"] # copy actual kickstart options from x_ options config["kickstart_file"] = config["x_kickstart_file"] config["kickstart_ext_file"] = config["x_kickstart_ext_file"] if not config["kickstart_file"]: # Warning will have been shown on the status bar config["kickstart_file"] = "internal" # Copy default configuration values from model defaults. The main # purpose of this is to let the launch code know about implied defaults # so it can for example configure correct ROM files for expansions. model_config = Amiga.get_current_config(config) for key, value in model_config["defaults"].items(): if not config.get(key): config[key] = value # make sure FS-UAE does not load other config files (Host.fs-uae) config["end_config"] = "1" if config.get("__netplay_game", ""): print("\nfixing config for netplay game") for key in [x for x in config.keys() if x.startswith("uae_")]: print("* removing option", key) del config[key] return config
def start_local_game_amiga(cls): # make sure x_kickstart_file is initialized LauncherConfig.set_kickstart_from_model() # if not Config.get("x_kickstart_file"): # or not \ # # os.path.exists(Config.get("kickstart_file")): # fsui.show_error( # gettext("No kickstart found for this model. Use the 'Import " # "Kickstarts' function from the menu.")) # return cs = Amiga.get_model_config( LauncherConfig.get("amiga_model"))["ext_roms"] if len(cs) > 0: # extended kickstart ROM is needed if not LauncherConfig.get("x_kickstart_ext_file"): fsui.show_error( gettext("No extended kickstart found for this model. " "Try 'scan' function.")) return config = LauncherConfig.copy() prepared_config = cls.prepare_config(config) model = LauncherConfig.get("amiga_model") if model.startswith("CD32"): platform = "CD32" elif model == "CDTV": platform = "CDTV" else: platform = "Amiga" name = LauncherSettings.get("config_name") uuid = LauncherConfig.get("x_game_uuid") from fsgs.SaveStateHandler import SaveStateHandler save_state_handler = SaveStateHandler(fsgs, name, platform, uuid) from fsgs.amiga.LaunchHandler import LaunchHandler launch_handler = LaunchHandler(fsgs, name, prepared_config, save_state_handler) from .ui.LaunchDialog import LaunchDialog from .ui.launcher_window import LauncherWindow task = AmigaLaunchTask(launch_handler) # dialog = LaunchDialog(MainWindow.instance, launch_handler) dialog = LaunchDialog(LauncherWindow.current(), gettext("Launching FS-UAE"), task) dialog.show() def on_show_license_information(license_text): unused(license_text) # FIXME: don't depend on wx here # noinspection PyUnresolvedReferences # import wx # license_dialog = wx.MessageDialog( # dialog, license_text, _("Terms of Use"), # wx.OK | wx.CANCEL | wx.CENTRE) # license_dialog.CenterOnParent() # result = license_dialog.ShowModal() # return result == wx.ID_OK # FIXME return True fsgs.file.on_show_license_information = on_show_license_information LauncherConfig.set("__running", "1") task.start()