__init__.py (4614B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\remotefilecache\__init__.py 2 from __future__ import absolute_import 3 import sys 4 __author__ = 'snorri.sturluson' 5 import platform 6 import logging 7 import os 8 import blue 9 import uthread2 10 import walk 11 from .backgrounddownloadmanager import BackgroundDownloadManager 12 log = logging.getLogger('remotefilecache') 13 14 def ccp_platform_id(): 15 if platform.system() == 'Darwin': 16 platform_id = 'macOS' 17 elif platform.system() == 'Windows': 18 platform_id = 'Windows' 19 else: 20 RuntimeError('Platform %s not supported!' % platform.system()) 21 return platform_id 22 23 24 def get_default_resource_index_file_list(): 25 resfileIndices = ['resfileindex.txt'] 26 suffix = ccp_platform_id() 27 resfileIndices.append('resfileindex_%s.txt' % suffix) 28 return resfileIndices 29 30 31 def get_default_cache_folder(): 32 if sys.platform == 'darwin': 33 program_data_folder = blue.sysinfo.GetUserApplicationDataDirectory() 34 return os.path.join(program_data_folder, 'EVE Online', 'SharedCache', 'ResFiles') 35 else: 36 program_data_folder = blue.sysinfo.GetSharedApplicationDataDirectory() 37 if not program_data_folder: 38 program_data_folder = 'C:\\' 39 folder = os.path.join(program_data_folder, 'CCP', 'EVE', 'SharedCache', 'ResFiles') 40 return folder 41 42 43 def prepare_for_package_tests(): 44 blue.paths.RegisterFileSystemAfterLocal('Remote') 45 set_cache_folder(get_default_cache_folder()) 46 resfileIndices = get_default_resource_index_file_list() 47 resfileIndices = [ os.path.join(os.path.dirname(__file__), '..', '..', 'eve', 'client', indexfile) for indexfile in resfileIndices ] 48 prepare(resfileIndices) 49 50 51 def set_cache_folder(location): 52 blue.remoteFileCache.cacheFolder = location 53 for i in xrange(256): 54 folder_name = os.path.join(location, '%2.2x' % i) 55 if not os.path.isdir(folder_name): 56 os.makedirs(folder_name) 57 58 59 def prepare(index_list, server = 'http://res.eveprobe.ccpgames.com/', prefix = ''): 60 blue.remoteFileCache.server = server 61 blue.remoteFileCache.prefix = prefix 62 blue.remoteFileCache.backupServer = 'https://clientresources.eveonline.com/' 63 for index in index_list: 64 log.debug('Loading index from %s' % index) 65 stream = blue.paths.open(index, 'r') 66 blue.remoteFileCache.AddFileIndex(stream.Read()) 67 68 69 def gather_files_to_prefetch(folder, file_set): 70 if not blue.paths.IsFileSystemRegistered('Remote'): 71 return 72 for path, dirs, files in walk.walk(folder): 73 for f in files: 74 filename = path + '/' + f 75 if not blue.paths.FileExistsLocally(filename): 76 file_set.add(filename) 77 78 79 def add_file_if_needs_download(file_set, filename): 80 if blue.remoteFileCache.FileExists(filename) and not blue.paths.FileExistsLocally(filename): 81 file_set.add(filename) 82 83 84 def gather_files_conditionally_to_prefetch(folder, condition, file_set, dependency_map): 85 for path, dirs, files in walk.walk(folder): 86 for f in files: 87 blue.pyos.BeNice() 88 basename, extension = os.path.splitext(f) 89 if extension == '.red': 90 f = basename + '.black' 91 if not condition(f): 92 continue 93 filename = path + '/' + f 94 add_file_if_needs_download(file_set, filename) 95 dependencies = dependency_map.get(filename, []) 96 for each in dependencies: 97 blue.pyos.BeNice() 98 add_file_if_needs_download(filename, each) 99 100 101 def prefetch_single_file(filename, verify = False): 102 basename, extension = os.path.splitext(filename) 103 if extension == '.red': 104 filename = basename + '.black' 105 if blue.paths.IsFileSystemRegistered('Remote'): 106 if blue.remoteFileCache.FileExists(filename): 107 if not blue.paths.FileExistsLocally(filename) or verify: 108 blue.paths.GetFileContentsWithYield(filename) 109 return blue.paths.ResolvePath(filename) 110 111 112 def prefetch_files(file_set): 113 uthread2.map(prefetch_single_file, file_set) 114 115 116 def prefetch_folder(folder): 117 file_set = set() 118 gather_files_to_prefetch(folder, file_set) 119 prefetch_files(file_set) 120 121 122 _bgdm = BackgroundDownloadManager() 123 124 def schedule(key, file_set): 125 _bgdm.schedule(key, file_set) 126 127 128 def cancel(key): 129 _bgdm.cancel(key) 130 131 132 def pull_to_front(key): 133 _bgdm.pull_to_front(key) 134 135 136 def push_to_back(key): 137 _bgdm.push_to_back(key) 138 139 140 def get_queue(): 141 return _bgdm.sets 142 143 144 def pause(): 145 _bgdm.stop() 146 147 148 def resume(): 149 _bgdm.start()