def generateResourceInfoCode(self, script, settings, libraries, format=False): def addResourceInfoToPackages(script): for package in script.packages: package_resources = [] # TODO: the next is a hack, since package.classes are still id's package_classes = [x for x in script.classesObj if x.id in package.classes] for clazz in package_classes: package_resources.extend(clazz.resources) package.data.resources = ResourceHandler.createResourceStruct(package_resources, formatAsTree=resources_tree, updateOnlyExistingSprites=True) return # -- main -------------------------------------------------------------- compConf = self._job.get ("compile-options") compConf = ExtMap (compConf) resources_tree = compConf.get ("code/resources-tree", False) classes = ResourceHandler.mapResourcesToClasses (libraries, script.classesObj, self._job.get("asset-let", {})) filteredResources = [] for clazz in classes: filteredResources.extend(clazz.resources) resdata = ResourceHandler.createResourceStruct (filteredResources, formatAsTree=resources_tree, updateOnlyExistingSprites=True) # add resource info to packages addResourceInfoToPackages(script) return resdata # end: generateResourceInfoCode()
def _handleResources(script, generator, filtered=True): def createResourceInfo(res, resval): resinfo = [ { "target": "resource", "data": { res : resval }} ] #filetool.save(approot+"/data/resource/" + res + ".json", json.dumpsCode(resinfo)) return resinfo def copyResource(res, library): sourcepath = os.path.join(library._resourcePath, res) targetpath = approot + "/resource/" + res filetool.directory(os.path.dirname(targetpath)) shutil.copy(sourcepath, targetpath) return # ---------------------------------------------------------------------- context.console.info("Processing resources: ", False) approot = context.jobconf.get("provider/app-root", "./provider") filetool.directory(approot+"/data") filetool.directory(approot+"/resource") # quick copy of runLogResources, for fast results packages = script.packagesSorted() parts = script.parts variants = script.variants allresources = {} if filtered: # -- the next call is fake, just to populate package.data.resources! _ = generator._codeGenerator.generateResourceInfoCode(script, generator._settings, context.jobconf.get("library",[])) for packageId, package in enumerate(packages): allresources.update(package.data.resources) else: # get the main library mainlib = [x for x in script.libraries if x.namespace == script.namespace][0] reslist = mainlib.getResources() allresources = ResourceHandler.createResourceStruct(reslist, updateOnlyExistingSprites = False) # get resource info resinfos = {} numResources = len(allresources) for num,res in enumerate(allresources): context.console.progress(num+1, numResources) # fake a classId-like resourceId ("a.b.c"), for filter matching resId = os.path.splitext(res)[0] resId = resId.replace("/", ".") if filtered and not passesOutputfilter(resId): continue resinfos[res] = createResourceInfo(res, allresources[res]) # extract library name space if isinstance(allresources[res], types.ListType): # it's an image = [14, 14, u'png', u'qx' [, u'qx/decoration/Modern/checkradio-combined.png', 0, 0]] library_ns = allresources[res][3] else: # html page etc. = "qx" library_ns = allresources[res] if library_ns: # library_ns == '' means embedded image -> no copying library = libraries[library_ns] copyResource(res, library) filetool.save(approot+"/data/resource/resources.json", json.dumpsCode(resinfos)) return
def addResourceInfoToPackages(script): for package in script.packages: package_resources = [] # TODO: the next is a hack, since package.classes are still id's package_classes = [x for x in script.classesObj if x.id in package.classes] for clazz in package_classes: package_resources.extend(clazz.resources) package.data.resources = ResourceHandler.createResourceStruct(package_resources, formatAsTree=resources_tree, updateOnlyExistingSprites=True) return