Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/serialize.py
diff options
context:
space:
mode:
authorerikb <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)
commitd04a59cf1402e245a651c617ff740f57827aabae (patch)
tree4493c0db131414c7811a618ed5084dd852831394 /serialize.py
parent18f5cc956b31e94dc29c526c5ab2d8946a481102 (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.py115
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