diff options
author | erikb <erikb@574bc980-5f2d-0410-acbc-c8f9f0eb14e0> | 2007-10-31 20:16:42 (GMT) |
---|---|---|
committer | erikb <erikb@574bc980-5f2d-0410-acbc-c8f9f0eb14e0> | 2007-10-31 20:16:42 (GMT) |
commit | d04a59cf1402e245a651c617ff740f57827aabae (patch) | |
tree | 4493c0db131414c7811a618ed5084dd852831394 /serialize.py | |
parent | 18f5cc956b31e94dc29c526c5ab2d8946a481102 (diff) |
untested final refactoring
git-svn-id: http://mediamods.com/public-svn/camera-activity/Record.activity@790 574bc980-5f2d-0410-acbc-c8f9f0eb14e0
Diffstat (limited to 'serialize.py')
-rw-r--r-- | serialize.py | 115 |
1 files changed, 109 insertions, 6 deletions
diff --git a/serialize.py b/serialize.py index 5cf59de..4e87222 100644 --- a/serialize.py +++ b/serialize.py @@ -5,8 +5,7 @@ from xml.dom.minidom import parse from constants import Constants - -def fillMediaHash( index, m ): +def fillMediaHash( index, mediaTypes, mediaHashs ): doc = None if (os.path.exists(index)): try: @@ -16,13 +15,13 @@ def fillMediaHash( index, m ): if (doc == None): return - for key,value in m.mediaTypes.items(): + for key,value in mediaTypes.items(): recdElements = doc.documentElement.getElementsByTagName(value[Constants.keyName]) for el in recdElements: - loadMediaIntoHash( el, m.mediaHashs[key] ) + loadMediaIntoHash( el, mediaHashs[key] ) -def loadMediaIntoHash( el, hash ): +def _loadMediaIntoHash( el, hash ): addToHash = True recd = Recorded( self.ca ) recd = serialize.fillRecdFromNode( recd, el ) @@ -223,4 +222,108 @@ def addRecdXmlAttrs( self, el, recd, forMeshTransmit ): el.setAttribute(self.recdMediaMd5, str(recd.mediaMd5)) el.setAttribute(self.recdThumbMd5, str(recd.thumbMd5)) el.setAttribute(self.recdMediaBytes, str(recd.mediaBytes)) - el.setAttribute(self.recdThumbBytes, str(recd.thumbBytes))
\ No newline at end of file + el.setAttribute(self.recdThumbBytes, str(recd.thumbBytes)) + + + def saveMediaHash( mediaTypes, mediaHash ): + impl = getDOMImplementation() + album = impl.createDocument(None, Constants.recdAlbum, None) + root = album.documentElement + + #flag everything for saving... + atLeastOne = False + for type,value in mediaTypes.items(): + typeName = value[Constants.keyName] + hash = mediaHashs[type] + for i in range (0, len(hash)): + recd = hash[i] + recd.savedXml = False + recd.savedMedia = False + atLeastOne = True + + #and if there is anything to save, save it + if (atLeastOne): + for type,value in m.mediaTypes.items(): + typeName = value[Constants.keyName] + hash = m.mediaHashs[type] + + for i in range (0, len(hash)): + recd = hash[i] + mediaEl = album.createElement( typeName ) + root.appendChild( mediaEl ) + self._saveMedia( mediaEl, recd ) + + return album + + + def _saveMedia( el, recd ): + if ( (recd.buddy == True) and (recd.datastoreId == None) and (not recd.downloadedFromBuddy) ): + pixbuf = recd.getThumbPixbuf( ) + buddyThumb = str( utils.getStringFromPixbuf(pixbuf) ) + el.setAttribute(self.recdBuddyThumb, buddyThumb ) + recd.savedMedia = True + self._saveXml( el, recd ) + else: + recd.savedMedia = False + self._saveMediaToDatastore( el, recd ) + + + def _saveXml( el, recd ): + addRecdXmlAttrs( el, recd, False ) + recd.savedXml = True + + + def _saveMediaToDatastore( el, recd ): + #note that we update the recds that go through here to how they would + #look on a fresh load from file since this won't just happen on close() + + if (recd.datastoreId != None): + #already saved to the datastore, don't need to re-rewrite the file since the mediums are immutable + #However, they might have changed the name of the file + if (recd.titleChange): + recd.datastoreOb = getMediaFromDatastore( recd ) + if (recd.datastoreOb.metadata['title'] != recd.title): + recd.datastoreOb.metadata['title'] = recd.title + datastore.write(recd.datastoreOb) + + #reset for the next title change if not closing... + recd.titleChange = False + #save the title to the xml + recd.savedMedia = True + + self._saveXml( xmlFile, el, recd ) + else: + recd.savedMedia = True + self._saveXml( xmlFile, el, recd ) + + else: + #this will remove the media from being accessed on the local disk since it puts it away into cold storage + #therefore this is only called when write_file is called by the activity superclass + mediaObject = datastore.create() + mediaObject.metadata['title'] = recd.title + + pixbuf = recd.getThumbPixbuf() + thumbData = utils.getStringFromPixbuf(pixbuf) + mediaObject.metadata['preview'] = thumbData + + colors = str(recd.colorStroke.hex) + "," + str(recd.colorFill.hex) + mediaObject.metadata['icon-color'] = colors + + mtype = self.m.mediaTypes[recd.type] + mmime = mtype[self.keyMime] + mediaObject.metadata['mime_type'] = mmime + + mediaObject.metadata['activity'] = Constants.activityId + + mediaFile = recd.getMediaFilepath(False) + mediaObject.file_path = mediaFile + mediaObject.transfer_ownership = True + + datastore.write( mediaObject ) + + recd.datastoreId = mediaObject.object_id + recd.mediaFilename = None + recd.thumbFilename = None + recd.savedMedia = True + + self._saveXml( xmlFile, el, recd )
\ No newline at end of file |