def task(self, data): """Directive triggering another function specific to a runner. The 'name' parameter is mandatory. If 'args' is provided it will be passed to the runner task. """ self._check_required_params("name", data, "task") if self.parent: GLib.idle_add(self.parent.cancel_button.set_sensitive, False) runner_name, task_name = self._get_task_runner_and_name( data.pop("name")) wine_version = None if runner_name.startswith("wine"): wine_version = self._get_runner_version() if wine_version: data["wine_path"] = get_wine_version_exe(wine_version) data["prefix"] = data.get("prefix") \ or self.installer.script.get("game", {}).get("prefix") \ or "$GAMEDIR" data["arch"] = data.get("arch") \ or self.installer.script.get("game", {}).get("arch") \ or WINE_DEFAULT_ARCH if task_name == "wineexec" and self.script_env: data["env"] = self.script_env else: data["env"] = {} data["env"]["WINEDLLOVERRIDES"] = ( "winemenubuilder=d;" + data["env"].get("WINEDLLOVERRIDES", "")).strip(";") for key in data: value = data[key] if isinstance(value, dict): for inner_key in value: value[inner_key] = self._substitute(value[inner_key]) elif isinstance(value, list): for index, elem in enumerate(value): value[index] = self._substitute(elem) else: value = self._substitute(data[key]) data[key] = value task = import_task(runner_name, task_name) command = task(**data) GLib.idle_add(self.parent.cancel_button.set_sensitive, True) if isinstance(command, MonitoredCommand): # Monitor thread and continue when task has executed GLib.idle_add(self.parent.attach_logger, command) self.heartbeat = GLib.timeout_add(1000, self._monitor_task, command) return "STOP" return None
def task(self, data): """Directive triggering another function specific to a runner. The 'name' parameter is mandatory. If 'args' is provided it will be passed to the runner task. """ self._check_required_params("name", data, "task") if self.parent: GLib.idle_add(self.parent.cancel_button.set_sensitive, False) runner_name, task_name = self._get_task_runner_and_name(data.pop("name")) wine_version = None if runner_name.startswith("wine"): wine_version = self._get_runner_version() if wine_version: data["wine_path"] = get_wine_version_exe(wine_version) data["prefix"] = data.get("prefix") \ or self.script.get("game", {}).get("prefix") \ or "$GAMEDIR" data["arch"] = data.get("arch") \ or self.script.get("game", {}).get("arch") \ or WINE_DEFAULT_ARCH if task_name == "wineexec" and self.script_env: data["env"] = self.script_env for key in data: value = data[key] if isinstance(value, dict): for inner_key in value: value[inner_key] = self._substitute(value[inner_key]) elif isinstance(value, list): for index, elem in enumerate(value): value[index] = self._substitute(elem) else: value = self._substitute(data[key]) data[key] = value task = import_task(runner_name, task_name) thread = task(**data) GLib.idle_add(self.parent.cancel_button.set_sensitive, True) if isinstance(thread, MonitoredCommand): # Monitor thread and continue when task has executed GLib.idle_add(self.parent.attach_logger, thread) self.heartbeat = GLib.timeout_add(1000, self._monitor_task, thread) return "STOP" return None
def eject_wine_disc(self): """Use Wine to eject a CD, otherwise Wine can have problems detecting disc changes""" wine_path = get_wine_version_exe(self._get_runner_version()) wine.eject_disc(wine_path, self.target_path)
def get_wine_path(self): """Return absolute path of wine version used during the install""" wine_version = self._get_runner_version() return get_wine_version_exe(wine_version)