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