Esempio n. 1
0
    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'))

        # Check/install Wine runner at version specified in the script
        # TODO : move this, the runner should be installed before the install
        # starts
        wine_version = None
        if runner_name == 'wine':
            wine_version = self._get_runner_version()

        if wine_version and task_name == 'wineexec':
            data['wine_path'] = wine.get_wine_version_exe(wine_version)

        for key in data:
            data[key] = self._substitute(data[key])

        if runner_name in ['wine', 'winesteam'] and 'prefix' not in data:
            data['prefix'] = self.target_path

        task = import_task(runner_name, task_name)
        thread = task(**data)
        GLib.idle_add(self.parent.cancel_button.set_sensitive, True)
        if isinstance(thread, LutrisThread):
            # Monitor thread and continue when task has executed
            self.heartbeat = GLib.timeout_add(1000, self._monitor_task, thread)
            return 'STOP'
Esempio n. 2
0
    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")
        self.parent.cancel_button.set_sensitive(False)
        task_name = data.pop("name")
        if "." in task_name:
            # Run a task from a different runner
            # than the one for this installer
            runner_name, task_name = task_name.split(".")
        else:
            runner_name = self.script["runner"]
        try:
            runner_class = import_runner(runner_name)
        except InvalidRunner:
            self.parent.cancel_button.set_sensitive(True)
            raise ScriptingError("Invalid runner provided %s", runner_name)

        runner = runner_class()

        # Check/install Wine runner at version specified in the script
        wine_version = None
        if runner_name == "wine" and self.script.get("wine"):
            wine_version = self.script.get("wine").get("version")

            # Old lutris versions used a version + arch tuple, we now include
            # everything in the version.
            # Before that change every wine runner was for i386
            if "-" not in wine_version:
                wine_version += "-i386"

        if wine_version and task_name == "wineexec":
            if not wine.is_version_installed(wine_version):
                Gdk.threads_init()
                Gdk.threads_enter()
                runner.install(wine_version)
                Gdk.threads_leave()
            data["wine_path"] = wine.get_wine_version_exe(wine_version)
        # Check/install other runner
        elif not runner.is_installed():
            Gdk.threads_init()
            Gdk.threads_enter()
            runner.install()
            Gdk.threads_leave()

        for key in data:
            data[key] = self._substitute(data[key])
        task = import_task(runner_name, task_name)
        task(**data)
        self.parent.cancel_button.set_sensitive(True)
Esempio n. 3
0
    def task(self, data):
        """ This action triggers a task within 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')
        task_name = data.pop('name')
        if '.' in task_name:
            # Run a task from a different runner than the one for this installer
            runner_name, task_name = task_name.split('.')
        else:
            runner_name = self.script["runner"]
        try:
            runner_class = import_runner(runner_name)
        except InvalidRunner:
            raise ScriptingError('Invalid runner provided %s', runner_name)

        runner = runner_class()

        # Check/install Wine runner at version specified in the script
        wine_version = None
        if runner_name == 'wine' and self.script.get('wine'):
            wine_version = self.script.get('wine').get('version')

            # Old lutris versions used a version + arch tuple, we now include
            # everything in the version.
            # Before that change every wine runner was for i386
            if '-' not in wine_version:
                wine_version += '-i386'

        if wine_version and task_name == 'wineexec':
            if not wine.is_version_installed(wine_version):
                Gdk.threads_init()
                Gdk.threads_enter()
                runner.install(wine_version)
                Gdk.threads_leave()
            data['wine_path'] = wine.get_wine_version_exe(wine_version)
        # Check/install other runner
        elif not runner.is_installed():
            Gdk.threads_init()
            Gdk.threads_enter()
            runner.install()
            Gdk.threads_leave()

        for key in data:
            data[key] = self._substitute(data[key])
        task = import_task(runner_name, task_name)
        task(**data)
Esempio n. 4
0
    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 == 'wine':
            wine_version = self._get_runner_version()

        if runner_name.startswith('wine'):
            if wine_version:
                data['wine_path'] = wine.get_wine_version_exe(wine_version)

        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

        if runner_name in ['wine', 'winesteam'] and 'prefix' not in data:
            data['prefix'] = self.target_path

        task = import_task(runner_name, task_name)
        thread = task(**data)
        GLib.idle_add(self.parent.cancel_button.set_sensitive, True)
        if isinstance(thread, LutrisThread):
            # 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
Esempio n. 5
0
    def task(self, data):
        """ This action triggers a task within 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')
        task_name = data.pop('name')
        if '.' in task_name:
            # Run a task from a different runner than the one for this installer
            runner_name, task_name = task_name.split('.')
        else:
            runner_name = self.script["runner"]
        try:
            runner_class = import_runner(runner_name)
        except InvalidRunner:
            raise ScriptingError('Invalid runner provided %s', runner_name)

        runner = runner_class()

        # Check/install Wine runner at version specified in the script
        wine_version = None
        wine_arch = None
        if runner_name == 'wine' and self.script.get('wine'):
            wine_version = self.script.get('wine').get('version')
            wine_arch = self.script.get('wine').get('arch')
        if wine_version and task_name == 'wineexec':
            if not wine.is_version_installed(wine_version, wine_arch):
                Gdk.threads_init()
                Gdk.threads_enter()
                runner.install(wine_version, wine_arch)
                Gdk.threads_leave()
            data['wine_path'] = wine.get_wine_version_exe(wine_version,
                                                          wine_arch)
        # Check/install other runner
        elif not runner.is_installed():
            Gdk.threads_init()
            Gdk.threads_enter()
            runner.install()
            Gdk.threads_leave()

        for key in data:
            data[key] = self._substitute(data[key])
        task = import_task(runner_name, task_name)
        task(**data)
Esempio n. 6
0
    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 == 'wine':
            wine_version = self._get_runner_version()

        if runner_name.startswith('wine'):
            if wine_version:
                data['wine_path'] = wine.get_wine_version_exe(wine_version)

        for key in data:
            value = data[key]
            if type(value) is dict:
                for inner_key in value:
                    value[inner_key] = self._substitute(value[inner_key])
            elif type(value) is list:
                for index, elem in enumerate(value):
                    value[index] = self._substitute(elem)
            else:
                value = self._substitute(data[key])
            data[key] = value

        if runner_name in ['wine', 'winesteam'] and 'prefix' not in data:
            data['prefix'] = self.target_path

        task = import_task(runner_name, task_name)
        thread = task(**data)
        GLib.idle_add(self.parent.cancel_button.set_sensitive, True)
        if isinstance(thread, LutrisThread):
            # 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'
Esempio n. 7
0
 def eject_wine_disc(self):
     prefix = self.target_path
     wine_path = wine.get_wine_version_exe(self._get_runner_version())
     wine.eject_disc(wine_path, prefix)
Esempio n. 8
0
 def eject_wine_disc(self):
     prefix = self.target_path
     wine_path = wine.get_wine_version_exe(self._get_runner_version())
     wine.eject_disc(wine_path, prefix)