def _load_settings(self):
        """
        """
        from sgtk.platform.qt import QtCore
        if not hasattr(QtCore, "QSettings"):
            return {}

        q_settings = QtCore.QSettings(UserSettings.ORGANIZATION,
                                      UserSettings.APPLICATION)

        settings = {}
        array_sz = q_settings.beginReadArray(self._prefix)

        for ai in range(0, array_sz):
            q_settings.setArrayIndex(ai)

            project_id = q_settings.value("project_id")
            client = q_settings.value("client")

            # convert from QVariant object if itemData is returned as such
            if hasattr(QtCore, "QVariant"):
                if isinstance(project_id, QtCore.QVariant):
                    project_id = project_id.toPyObject()
                if isinstance(client, QtCore.QVariant):
                    client = client.toPyObject()

            project_id = int(project_id)
            client = str(client)

            settings[project_id] = {"client": client}

        q_settings.endArray()

        return settings
Exemplo n.º 2
0
    def __init__(self, bundle):
        """
        Constructor
        
        :param bundle: app, engine or framework object to associate the settings with.
        """

        self.__fw = sgtk.platform.current_bundle()

        self.__settings = QtCore.QSettings("Shotgun Software", bundle.name)
        self.__fw.log_debug("Initialized settings manager for '%s'" %
                            bundle.name)

        # now organize various keys

        # studio level settings - base it on the server host name
        _, sg_hostname, _, _, _ = urlparse.urlsplit(self.__fw.sgtk.shotgun_url)
        self.__site_key = sg_hostname

        # project level settings
        pc = self.__fw.sgtk.pipeline_configuration
        self.__project_key = "%s:%s" % (self.__site_key,
                                        pc.get_project_disk_name())

        # config level settings
        self.__pipeline_config_key = "%s:%s" % (self.__project_key,
                                                pc.get_name())

        # instance level settings
        if isinstance(bundle, sgtk.platform.Application):
            # based on the environment name, engine instance name and app instance name
            self.__instance_key = "%s:%s:%s:%s" % (
                self.__pipeline_config_key, bundle.engine.environment["name"],
                bundle.engine.instance_name, bundle.instance_name)
            self.__engine_key = bundle.engine.name

        elif isinstance(bundle, sgtk.platform.Engine):
            # based on the environment name & engine instance name
            self.__instance_key = "%s:%s:%s" % (self.__pipeline_config_key,
                                                bundle.environment["name"],
                                                bundle.instance_name)
            self.__engine_key = bundle.name

        elif isinstance(bundle, sgtk.platform.Framework):
            # based on the environment name & framework name
            self.__instance_key = "%s:%s:%s" % (
                self.__pipeline_config_key, bundle.engine.environment["name"],
                bundle.name)
            self.__engine_key = bundle.engine.name

        else:
            raise TankError("Not sure how to handle bundle type %s. "
                            "Please pass an App, Engine or Framework object." %
                            bundle)
    def _save_settings(self, settings):
        """
        """
        from sgtk.platform.qt import QtCore
        if not hasattr(QtCore, "QSettings"):
            return

        q_settings = QtCore.QSettings(UserSettings.ORGANIZATION,
                                      UserSettings.APPLICATION)

        q_settings.beginWriteArray(self._prefix)

        for ai, (project_id, details) in enumerate(settings.iteritems()):
            q_settings.setArrayIndex(ai)
            q_settings.setValue("project_id", project_id)
            q_settings.setValue("client", details.get("client", ""))

        q_settings.endArray()