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

__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()