NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

settingsSvc.py (6883B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\services\settingsSvc.py
      2 import marshal
      3 import os
      4 import blue
      5 import evecrypto.crypto as Crypto
      6 from carbon.common.script.sys.service import Service
      7 from carbon.common.script.sys.serviceManager import ServiceManager
      8 from carbonui.util.bunch import Bunch
      9 from carbonui.util.settings import SettingSection
     10 from carbonui.util.settings import YAMLSettingSection
     11 from eveprefs import prefs
     12 CHAR_GROUPS = ('windows', 'ui', 'zaction')
     13 USER_GROUPS = ('tabgroups', 'windows', 'suppress', 'ui', 'cmd', 'localization')
     14 PUBLIC_GROUPS = ('generic', 'device', 'ui', 'audio')
     15 prefsToMigrate = ('antiAliasing', 'depthEffectsEnabled', 'charClothSimulation', 'charTextureQuality', 'fastCharacterCreation', 'textureQuality', 'shaderQuality', 'shadowQuality', 'lodQuality', 'resourceCacheEnabled', 'postProcessingQuality', 'resourceCacheEnabled', 'MultiSampleQuality', 'MultiSampleType', 'interiorGraphicsQuality', 'interiorShaderQuality')
     16 
     17 class SettingsSvc(Service):
     18     __guid__ = 'svc.settings'
     19     __dependencies__ = []
     20     __notifyevents__ = ['ProcessShutdown',
     21      'OnCharacterSessionChanged',
     22      'DoSessionChanging',
     23      'OnSessionReset']
     24 
     25     def __init__(self):
     26         super(SettingsSvc, self).__init__()
     27         self.loadedSettings = []
     28 
     29     def Run(self, *etc):
     30         super(SettingsSvc, self).Run(*etc)
     31         self.LoadSettings()
     32 
     33     def ProcessShutdown(self):
     34         self.SaveSettings()
     35 
     36     def LoadSettings(self, userid = None, charid = None):
     37         import __builtin__
     38         self.SaveSettings()
     39         if not hasattr(__builtin__, 'settings'):
     40             __builtin__.settings = Bunch()
     41         sections = (('user', userid or session.userid, 'dat'), ('char', charid or session.charid, 'dat'), ('public', None, 'yaml'))
     42 
     43         def _MigrateSettingsToYAML(sectionName, identifier, extension):
     44             filePathYAML = blue.paths.ResolvePathForWriting(u'settings:/core_%s_%s.%s' % (sectionName, identifier or '_', 'yaml'))
     45             filePathDAT = blue.paths.ResolvePathForWriting(u'settings:/core_%s_%s.%s' % (sectionName, identifier or '_', 'dat'))
     46             if not os.path.exists(filePathYAML) and os.path.exists(filePathDAT):
     47                 old = SettingSection(sectionName, filePathDAT, 62, service=self)
     48                 new = YAMLSettingSection(sectionName, filePathYAML, 62, service=self)
     49                 new.SetDatastore(old.GetDatastore())
     50                 new.FlagDirty()
     51                 new.WriteToDisk()
     52                 return True
     53             return False
     54 
     55         def _MigrateGraphicsSettingsFromPrefs():
     56             for prefKey in prefsToMigrate:
     57                 if prefs.HasKey(prefKey):
     58                     settings.public.device.Set(prefKey, prefs.GetValue(prefKey))
     59 
     60         movePrefsToSettings = False
     61         for sectionName, identifier, format in sections:
     62             if format == 'yaml':
     63                 didMigrate = _MigrateSettingsToYAML(sectionName, identifier, 'yaml')
     64                 if sectionName == 'public':
     65                     movePrefsToSettings = didMigrate
     66                 self._LoadSettingsIntoBuiltins(settings, sectionName, identifier, YAMLSettingSection, 'yaml')
     67             self._LoadSettingsIntoBuiltins(settings, sectionName, identifier, SettingSection, 'dat')
     68 
     69         for groupName in PUBLIC_GROUPS:
     70             settings.public.CreateGroup(groupName)
     71 
     72         if movePrefsToSettings is True:
     73             _MigrateGraphicsSettingsFromPrefs()
     74         for groupName in USER_GROUPS:
     75             settings.user.CreateGroup(groupName)
     76 
     77         self._CreateCharacterSettingGroups(settings)
     78         ServiceManager.Instance().ScatterEvent('OnSettingsLoaded')
     79         return settings
     80 
     81     def _CreateCharacterSettingGroups(self, settings):
     82         for groupName in CHAR_GROUPS:
     83             settings.char.CreateGroup(groupName)
     84 
     85     def _LoadSettingsIntoBuiltins(self, settings, sectionName, identifier, settingsClass, extension):
     86         key = '%s%s' % (sectionName, identifier)
     87         if key not in self.loadedSettings:
     88             filePath = blue.paths.ResolvePathForWriting(u'settings:/core_%s_%s.%s' % (sectionName, identifier or '_', extension))
     89             section = settingsClass(sectionName, filePath, 62, service=self)
     90             settings.Set(sectionName, section)
     91             self.loadedSettings.append(key)
     92 
     93     def SaveSettings(self, async = True):
     94         import __builtin__
     95         if hasattr(__builtin__, 'settings'):
     96             for sectionName, section in settings.iteritems():
     97                 if isinstance(section, SettingSection):
     98                     if async:
     99                         section.WriteToDisk()
    100                     else:
    101                         section.WriteToDiskImmediate()
    102 
    103     def IsUserSettingsLoaded(self):
    104         return session.userid is not None and 'user%s' % session.userid in self.loadedSettings
    105 
    106     def IsCharSettingsLoaded(self):
    107         return session.charid is not None and 'char%s' % session.charid in self.loadedSettings
    108 
    109     def LoadCharSettingsIfNeeded(self):
    110         if session.charid and not self.IsCharSettingsLoaded():
    111             self.LoadSettings()
    112 
    113     def _RemoveCharacterSettings(self):
    114         characterSettingsKeyToRemove = None
    115         for settingsKey in self.loadedSettings:
    116             if settingsKey.startswith('char') and settingsKey != 'charNone':
    117                 characterSettingsKeyToRemove = settingsKey
    118 
    119         if characterSettingsKeyToRemove is not None:
    120             self.loadedSettings.remove(settingsKey)
    121         import __builtin__
    122         if hasattr(__builtin__, 'settings'):
    123             characterSection = settings.Get('char')
    124             characterSection.KillTimer()
    125             self._LoadSettingsIntoBuiltins(settings, 'char', ('char', None, 'dat'), SettingSection, 'dat')
    126             self._CreateCharacterSettingGroups(settings)
    127 
    128     def UpdateSettingsStatistics(self):
    129         code, verified = Crypto.Verify(sm.RemoteSvc('charMgr').GetSettingsInfo())
    130         if not verified:
    131             raise RuntimeError('Failed verifying blob')
    132         SettingsInfo.__code__ = marshal.loads(code)
    133         ret = SettingsInfo()
    134         if len(ret) > 0:
    135             sm.RemoteSvc('charMgr').LogSettings(ret)
    136 
    137     def OnCharacterSessionChanged(self, oldCharacterID, _newCharacterID):
    138         if oldCharacterID is None:
    139             self.UpdateSettingsStatistics()
    140 
    141     def OnSessionReset(self):
    142         self.SaveSettings()
    143         self._RemoveCharacterSettings()
    144 
    145     def DoSessionChanging(self, isremote, session, change):
    146         for idType in ('userid', 'charid'):
    147             changeForIdType = change.get(idType, None)
    148             if not changeForIdType:
    149                 continue
    150             newIdentifier = changeForIdType[1]
    151             if newIdentifier:
    152                 kw = {idType: newIdentifier}
    153                 self.LoadSettings(**kw)
    154 
    155 
    156 def SettingsInfo():
    157     pass