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

webtools.py (7594B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\util\webtools.py
      2 from __future__ import print_function
      3 import os
      4 import sys
      5 from time import strftime, gmtime
      6 import blue
      7 import bluepy
      8 import localization
      9 import log
     10 import uthread
     11 import utillib
     12 from carbon.common.lib.serverInfo import GetServerIP
     13 from carbon.common.script.sys.service import Service
     14 from carbon.common.script.util.format import PasswordString
     15 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     16 DEBUGMODE = False
     17 MAX_ICON_RANGE = 200
     18 
     19 def Msg(msg):
     20     prompt_player_fsd_dialog('CustomNotify', {'notify': msg})
     21     log.general.Log(msg, log.LGNOTICE)
     22     print(msg)
     23 
     24 
     25 class WebTools(Service):
     26     __guid__ = 'svc.webtools'
     27     __exportedcalls__ = {'SetVars': [],
     28      'GetVars': [],
     29      'GoSlimLogin': []}
     30     __dependencies__ = ['settings']
     31 
     32     def __init__(self):
     33         Service.__init__(self)
     34         self.Reset()
     35 
     36     def Run(self, memStream = None):
     37         Service.Run(self, memStream)
     38 
     39     def Stop(self, stream):
     40         Service.Stop(self)
     41 
     42     def Reset(self):
     43         self.renderVars = []
     44         self.events = set()
     45 
     46     def WaitForViewStateIn(self, *views):
     47         found = False
     48         while not found:
     49             blue.pyos.synchro.Yield()
     50             found = sm.GetService('viewState').IsViewActive(*views)
     51 
     52         sm.GetService('loading').GoBlack()
     53         s = sm.GetService('sceneManager').GetActiveScene()
     54         if s is not None:
     55             s.display = 0
     56 
     57     def SetVars(self, renderVars):
     58         rv = utillib.KeyVal(username='', password='')
     59         rv.username = renderVars[0]
     60         rv.password = renderVars[1]
     61         rv.routine = 'Apparel'
     62         self.renderVars = rv
     63 
     64     def GetVars(self):
     65         return self.renderVars
     66 
     67     def GoSlimLogin(self):
     68         if blue.pyos.packaged:
     69             raise RuntimeError('You can not build the IEC package on a packaged client you have to use a perforce client.')
     70         rv = self.renderVars
     71         if rv:
     72             func = getattr(self, '%sRender' % rv.routine.capitalize(), None)
     73             if func:
     74                 self.GoLogin(rv.username, rv.password)
     75                 self.WaitForViewStateIn('charsel')
     76                 self.GoCharsel()
     77                 self.WaitForViewStateIn('station', 'hangar', 'inflight')
     78                 self.GoRoutine(rv.routine, func)
     79 
     80     def GoLogin(self, username, password):
     81         sm.GetService('overviewPresetSvc')
     82         sm.GetService('viewState').ActivateView('login')
     83         user = username
     84         pwd = PasswordString(password)
     85         sm.GetService('loading').ProgressWnd(localization.GetByLabel('UI/Login/LoggingIn'), localization.GetByLabel('UI/Login/ConnectingToCluster'), 1, 100)
     86         blue.pyos.synchro.Yield()
     87         prompt_player_fsd_dialog('OnConnecting')
     88         blue.pyos.synchro.Yield()
     89         prompt_player_fsd_dialog('OnConnecting2')
     90         blue.pyos.synchro.Yield()
     91         serverName = utillib.GetServerName()
     92         eve.serverName = serverName
     93         server = GetServerIP(serverName)
     94         loginparam = [user,
     95          pwd,
     96          server,
     97          26000,
     98          0]
     99         try:
    100             sm.GetService('connection').Login(loginparam)
    101         except:
    102             raise
    103 
    104         sm.GetService('device').PrepareMain()
    105         blue.pyos.synchro.Yield()
    106         blue.pyos.synchro.Yield()
    107         blue.pyos.synchro.Yield()
    108         blue.pyos.synchro.Yield()
    109         sm.GetService('viewState').ActivateView('charsel')
    110 
    111     def GoCharsel(self):
    112         chars = sm.GetService('cc').GetCharactersToSelect()
    113         characterid = None
    114         for char in chars:
    115             characterid = char.characterID
    116             break
    117 
    118         if characterid:
    119             sm.GetService('sessionMgr').PerformSessionChange('charsel', sm.RemoteSvc('charUnboundMgr').SelectCharacterID, characterid)
    120 
    121     def GoRoutine(self, routine, func):
    122         uthread.pool('Webtools :: GoRoutine :: %sRender' % routine.capitalize(), func)
    123 
    124     def GenericQuit(self):
    125         self.settings.SaveSettings()
    126         bluepy.Terminate(0, 'User requesting close')
    127 
    128     def GenerateReport(self):
    129         rootPath = blue.sysinfo.GetUserDocumentsDirectory() + '/EVE/capture/Screenshots/'
    130         lines = []
    131         for rootDir, dirs, files in os.walk(rootPath):
    132             if files:
    133                 numBytes = 0
    134                 for fileName in files:
    135                     pathName = '%s/%s' % (rootDir, fileName)
    136                     numBytes += os.path.getsize(pathName)
    137 
    138                 lines.append('%s\n\n\t%.3f MB in %d files\n\n' % (rootDir, numBytes / 1024.0 / 1024.0, len(files)))
    139 
    140         fileName = rootPath + 'IEC_report.txt'
    141         output = open(fileName, 'w')
    142         output.write(''.join(lines))
    143         output.close()
    144         return fileName
    145 
    146 
    147 class LoggingRoutines:
    148     __exportedcalls__ = {'CreateLogFile': [],
    149      'WriteToLogfile': []}
    150 
    151     def __init__(self):
    152         self.logfile = None
    153 
    154     def CreateLogFile(self, ex = ''):
    155         logfilepath = blue.sysinfo.GetUserDocumentsDirectory() + '/EVE/logs/RenderLogs/'
    156         logfilename = '%s_%s_renderlog.txt' % (strftime('%Y.%m.%d-%H.%M', gmtime()), ex)
    157         dr = DirectoryRoutines()
    158         dr.GenericCheckCreateDirectory(logfilepath)
    159         filename = logfilepath + logfilename
    160         self.logfile = blue.classes.CreateInstance('blue.ResFile')
    161         if not self.logfile.Open(filename, 0):
    162             self.logfile.Create(filename)
    163         self.WriteLogFile('#')
    164         self.WriteLogFile('# Started at ' + strftime('%Y.%m.%d-%H.%M', gmtime()))
    165         self.WriteLogFile('#')
    166 
    167     def WriteLogFile(self, line):
    168         if self.logfile:
    169             self.logfile.Write(line.encode('utf8') + '\n')
    170 
    171     def CloseLogFile(self):
    172         if self.logfile:
    173             self.WriteLogFile('#')
    174             self.WriteLogFile('# Ended at ' + strftime('%Y.%m.%d-%H.%M', gmtime()))
    175             self.WriteLogFile('#')
    176             self.logfile.Close()
    177 
    178 
    179 class DirectoryRoutines:
    180 
    181     def __init__(self):
    182         self.createdDirectories = {}
    183 
    184     def DeleteCachedFile(self, itemID, folder = 'Portraits', flush = 0):
    185         resPath = blue.paths.ResolvePath(u'cache:/Pictures/%s/' % folder)
    186         for rRoot, dirs, files in os.walk(resPath):
    187             for rFile in files:
    188                 rFile = str(rFile)
    189                 if flush or rFile.startswith(str(itemID)):
    190                     try:
    191                         os.remove(str(rRoot) + str(rFile))
    192                     except:
    193                         sys.exc_clear()
    194 
    195     def GenericCheckCreateDirectory(self, name, dry_run = 0):
    196         if DEBUGMODE:
    197             self.createdDirectories = {}
    198         name = os.path.normpath(name)
    199         created_dirs = []
    200         if os.path.isdir(name) or name == '':
    201             return created_dirs
    202         if self.createdDirectories.get(os.path.abspath(name)):
    203             return created_dirs
    204         head, tail = os.path.split(name)
    205         tails = [tail]
    206         while head and tail and not os.path.isdir(head):
    207             head, tail = os.path.split(head)
    208             tails.insert(0, tail)
    209 
    210         for d in tails:
    211             head = os.path.join(head, d)
    212             abs_head = os.path.abspath(head)
    213             if self.createdDirectories.get(abs_head):
    214                 continue
    215             if not dry_run:
    216                 try:
    217                     os.mkdir(head)
    218                     created_dirs.append(head)
    219                 except OSError as exc:
    220                     raise "could not create '%s': %s" % (head, exc[-1])
    221 
    222             self.createdDirectories[abs_head] = 1
    223 
    224         return created_dirs