--- OSA_system2/OSAS_browser.py 2005/02/12 11:41:56 1.14 +++ OSA_system2/OSAS_browser.py 2005/03/03 20:41:00 1.15 @@ -9,6 +9,7 @@ from OFS.Folder import Folder from OFS.SimpleItem import SimpleItem from Globals import InitializeClass,package_home import zLOG +import base64 import bz2 import os import os.path @@ -18,6 +19,9 @@ from types import * import xmlrpclib from OSAS_helpers import * +def decodeRPC(string): + return bz2.decompress(base64.decodestring(string)) + class OSAS_storeOnline(SimpleItem): """Webfrontend für das Storagesystem @@ -29,6 +33,16 @@ class OSAS_storeOnline(SimpleItem): _v_fileSystem={} #chache fuer filesystem _v_metaFiles={} #chache fuer indexMeta + + def getParentType(self,path): + """getFileType des parentordners""" + + realPath=os.path.split(path)[0] + + objects=self.readObjectsFromPath(realPath) + + return objects[os.path.join(realPath,".")][0] + def getMetaFile(self,path): """get index.meta and translate it to HTML""" """Lies Metafile ein @@ -102,7 +116,9 @@ class OSAS_storeOnline(SimpleItem): @param path: Pfad auf das Object relativ zum rootFolderName @return: metadata als html """ + print "search for ",path xmlInfos=self.findEntryInIndexMeta(path) + print "RRRRRRRRRRRR",xmlInfos if xmlInfos: return OSAS_helpers.getMetaInfoFromXML(path,xmlInfos) else: @@ -116,7 +132,7 @@ class OSAS_storeOnline(SimpleItem): server=xmlrpclib.Server(self.serverUrl) indexMeta=server.findIndexMeta(path) # suche index.meta - + print "found indexMeta",indexMeta if not indexMeta: return None @@ -128,44 +144,30 @@ class OSAS_storeOnline(SimpleItem): dom=xml.dom.minidom.parseString(server.getFile(indexMeta)) except: zLOG.LOG("OSAS_browser (findEntryInIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta) - #ist path ein directory? - dirs=dom.getElementsByTagName('dir') - for dir in dirs: - pathes=dir.getElementsByTagName('path') - if pathes: - pathX=OSAS_helpers.getText(pathes[0].childNodes) - else: - pathX="" - names=dir.getElementsByTagName('name') - if names: - name=OSAS_helpers.getText(names[0].childNodes) + return None + + path=path.replace(realPath,'') + (searchPath,name)=os.path.split(path) + if (len(searchPath)>0) and (searchPath[0]=="/"): + if len(searchPath)<=1: + searchPath="" else: - name="" + searchPath=searchPath[1:] + #ist path ein directory? + xpath="/resource/dir[name='%s' and path='%s']"%(name,searchPath) - checkpath=os.path.normpath(os.path.join(realPath,pathX,name)) - if checkpath==path: - - return dir.toxml() + dirs=xml.xpath.Evaluate(xpath,dom) - #ist path ein file? - files=dom.getElementsByTagName('file') - for dir in dirs: - pathes=dir.getElementsByTagName('path') - if pathes: - pathX=OSAS_helpers.getText(pathes[0].childNodes) - else: - pathX="" - names=dir.getElementsByTagName('name') - if names: - name=OSAS_helpers.getText(names[0].childNodes) - else: - name="" + if len(dirs)>0: + return dirs[0].toxml - checkpath=os.path.normpath(os.path.join(realPath,pathX,name)) - if checkpath==path: - - return dir.toxml() + #ist path ein file? + xpath="/resource/file[name='%s' and path='%s']"%(name,searchPath) + + dirs=xml.xpath.Evaluate(xpath,dom) + if len(dirs)>0: + return dirs[0].toxml() return None @@ -180,7 +182,7 @@ class OSAS_storeOnline(SimpleItem): ret={} server=xmlrpclib.Server(self.serverUrl) indexMeta,stats=server.findIndexMetaWithStats(path)#findex index.meta zu path. - + print "checking",path,indexMeta if not indexMeta: return ret @@ -262,9 +264,6 @@ class OSAS_storeOnline(SimpleItem): - - - def readObjectsFromPath(self,path="",metaDataId=None): """Liest files aus dem path und speichert im cache _v_filesystem. @@ -301,28 +300,44 @@ class OSAS_storeOnline(SimpleItem): return None #teste ob schon im cache - if self._v_fileSystem.has_key(realPath) and (self._v_fileSystem[realPath][0]==stats[stat.ST_MTIME]): - - return self._v_fileSystem[realPath][1] - - indexMetas=bz2.decompress(server.getAllIndexMetasOfSubDirs(realPath)) + #if self._v_fileSystem.has_key(realPath) and (self._v_fileSystem[realPath][0]==stats[stat.ST_MTIME]): + # + # return self._v_fileSystem[realPath][1] + + indexMetas=server.getAllIndexMetasOfSubDirs(realPath) dir=indexMetas.keys() ret={} for filename in dir: + print "doing",filename,indexMetas object=os.path.join(realPath,filename) fileType=indexMetas[filename][0] - + if fileType: - if (fileType=='OSAS_dir') and indexMetas.has_key("."): - if(OSAS_helpers.isImageFolder(object,indexMetas["."][1])): + if (fileType=='OSAS_dir') and indexMetas.has_key(".") and indexMetas["."][1]: + print "TEEEEEEEEEE" + if(OSAS_helpers.isImageFolder(object,decodeRPC(indexMetas["."][1]))): fileType='OSAS_imageFolder' - - if metaData: - - ret[object]=(fileType,metaData.getDisplayFieldsAsStr(indexMetas[filename][1])) + elif(OSAS_helpers.isVideoFolder(object,decodeRPC(indexMetas["."][1]))): + fileType='OSAS_videoFolder' + if metaData and indexMetas[filename][1]: + print "do",filename + ret[object]=(fileType,metaData.getDisplayFieldsAsStr(decodeRPC(indexMetas[filename][1]))) else: - ret[object]=(fileType,'') + metaDataStr=self.findEntryInIndexMeta(object) + print "MMMMMDDDDD",metaDataStr + if metaDataStr: + display=metaData.getDisplayFieldsAsStr(metaDataStr) + dom=xml.dom.minidom.parseString(metaDataStr) + + if len(xml.xpath.Evaluate("/file/meta/video-file",dom))>0: + fileType='OSAS_videoFile' + + else: + display="" + print object,fileType,display + + ret[object]=(fileType,display) self._v_fileSystem[realPath]=(stats[stat.ST_MTIME],ret) # speicher im chache @@ -337,6 +352,7 @@ class OSAS_storeOnline(SimpleItem): ret=[] for handler in self.ZopeFind(self.aq_parent,obj_metatypes=['OSAS_HandlerObject__neu'],search_sub=1): + if type in handler[1].objectTypes: try: path=path.replace(getattr(handler[1],'ignorePath',''),'') @@ -379,7 +395,9 @@ class OSAS_storeOnline(SimpleItem): objectSorted=objects.keys() objectSorted.sort(sortLow) for object in objectSorted: + handler=self.giveHandlers(object,objects[object][0]) + print "format",objects[object][0] if objects[object][0]=="OSAS_dir": string="""%s"""%(object,os.path.split(object)[1])