Author: dmeyer
Date: Sun Mar 12 19:18:22 2006
New Revision: 1282

Modified:
   trunk/WIP/vfs/src/client.py
   trunk/WIP/vfs/src/directory.py
   trunk/WIP/vfs/src/file.py
   trunk/WIP/vfs/src/item.py
   trunk/WIP/vfs/src/query.py
   trunk/WIP/vfs/test/client.py

Log:
make it possible to update item from client side

Modified: trunk/WIP/vfs/src/client.py
==============================================================================
--- trunk/WIP/vfs/src/client.py (original)
+++ trunk/WIP/vfs/src/client.py Sun Mar 12 19:18:22 2006
@@ -158,27 +158,28 @@
                 self._queries.remove(query)
 
 
-#     def update(self, item=None):
-#         """
-#         Update item in next main loop interation.
-#         """
-#         if not item:
-#             # do the update now
-#             items = []
-#             for i in self._changed:
-#                 changes = {}
-#                 for var in i.changes:
-#                     changes[var] = i[var]
-#                 i.changes = []
-#                 items.append((i.dbid, changes))
-#             self._changed = []
-#             self._server.update(items, __ipc_oneway=True, 
__ipc_noproxy_args=True)
-#             return
-
-#         if not self._changed:
-#             # register timer to do the changes
-#             OneShotTimer(self.update).start(0.1)
-#         self._changed.append(item)
+    def update(self, item=None):
+        """
+        Update item in next main loop interation.
+        """
+        if not item:
+            # do the update now
+            items = []
+            for i in self._changed:
+                id = i._vfs_id
+                if not id:
+                    # TODO: how to update an item not in the db
+                    continue
+                items.append((id, i._vfs_changes))
+                i._vfs_changes = {}
+            self._changed = []
+            self._server.update(items, __ipc_oneway=True, 
__ipc_noproxy_args=True)
+            return
+
+        if not self._changed:
+            # register timer to do the changes
+            OneShotTimer(self.update).start(0.1)
+        self._changed.append(item)
 
         
     def __repr__(self):

Modified: trunk/WIP/vfs/src/directory.py
==============================================================================
--- trunk/WIP/vfs/src/directory.py      (original)
+++ trunk/WIP/vfs/src/directory.py      Sun Mar 12 19:18:22 2006
@@ -76,10 +76,14 @@
         self._vfs_isdir = True
 
 
+    def _vfs_request(self):
+        
self._vfs_database_update(self._vfs_db()._vfs_request(self.filename[:-1]))
+
+
     def listdir(self):
         if not self._vfs_id:
             # item is not in db, request information now
-            
self._vfs_database_update(self._vfs_db()._vfs_request(self.filename[:-1]))
+            self._vfs_request()
         return self._vfs_db().query(parent=self)
         
 

Modified: trunk/WIP/vfs/src/file.py
==============================================================================
--- trunk/WIP/vfs/src/file.py   (original)
+++ trunk/WIP/vfs/src/file.py   Sun Mar 12 19:18:22 2006
@@ -38,6 +38,7 @@
 
 # kaa.vfs imports
 from item import Item
+from directory import Directory
 
 UNKNOWN = -1
 
@@ -83,6 +84,10 @@
         return mtime
 
 
+    def _vfs_request(self):
+        
self._vfs_database_update(self._vfs_db()._vfs_request(self.filename[:-1]))
+
+
     def __repr__(self):
         """
         Convert object to string (usefull for debugging)

Modified: trunk/WIP/vfs/src/item.py
==============================================================================
--- trunk/WIP/vfs/src/item.py   (original)
+++ trunk/WIP/vfs/src/item.py   Sun Mar 12 19:18:22 2006
@@ -54,10 +54,11 @@
         # internal data
         self._vfs_id = _vfs_id
         self._vfs_data = data
+        self._vfs_tmpdata = {}
         self._vfs_parent = parent
         self._vfs_media = media
         self._vfs_isdir = False
-        self._vfs_changes = []
+        self._vfs_changes = {}
         self._vfs_name = data['name']
 
 
@@ -72,7 +73,9 @@
         # callback from db
         self._vfs_data = data
         self._vfs_id = (data['type'], data['id'])
-
+        for key, value in self._vfs_changes.items():
+            self._vfs_data[key] = value
+            
         
     def _vfs_db(self):
         # get db
@@ -86,11 +89,17 @@
         return self._vfs_mtime() != self._vfs_data['mtime']
 
 
+    def _vfs_request(self):
+        pass
+    
     def _vfs_tree(self):
         return ParentIterator(self)
 
     
     def getattr(self, key):
+        if key.startswith('tmp:'):
+            return self._vfs_tmpdata[key[4:]]
+
         if key == 'thumbnail' and hasattr(self, 'filename'):
             return Thumbnail(self.filename, url=self.url)
 
@@ -114,19 +123,24 @@
                 t = t[:t.rfind('.')]
             return str_to_unicode(t)
         
-        # FIXME: make sure we have db data
+        if not self._vfs_id:
+            # item is not in db, request information now
+            self._vfs_request()
+
         if self._vfs_data.has_key(key):
             return self._vfs_data[key]
         return None
 
 
     def setattr(self, key, value):
+        if key.startswith('tmp:'):
+            self._vfs_tmpdata[key[4:]] = value
+            return
         self._vfs_data[key] = value
         if not self._vfs_changes and self._vfs_id:
             # FIXME: how to update an item not in the db yet?
-            self.db.update(self)
-        if not key in self._vfs_changes:
-            self._vfs_changes.append(key)
+            self._vfs_db().update(self)
+        self._vfs_changes[key] = value
         
             
     def keys(self):

Modified: trunk/WIP/vfs/src/query.py
==============================================================================
--- trunk/WIP/vfs/src/query.py  (original)
+++ trunk/WIP/vfs/src/query.py  Sun Mar 12 19:18:22 2006
@@ -125,3 +125,7 @@
 
     def __iter__(self):
         return self.result.__iter__()
+
+    def __getitem__(self, key):
+        return self.result[key]
+    

Modified: trunk/WIP/vfs/test/client.py
==============================================================================
--- trunk/WIP/vfs/test/client.py        (original)
+++ trunk/WIP/vfs/test/client.py        Sun Mar 12 19:18:22 2006
@@ -1,12 +1,13 @@
 import kaa.vfs
 import sys
+import os
 import kaa
 import time
 
 def msg(*args):
     print '>>>>>>>>>', args
     
-kaa.vfs.connect('vfsdb')
+kaa.vfs.connect(os.path.expanduser("~/.vfs"))
 
 a = u'Inkubus Sukkubus'
 #a = u'Bif Naked'
@@ -17,14 +18,17 @@
 # result = kaa.vfs.query(attr='album', type='audio')
 t2 = time.time()
 
-# x.signals['changed'].connect(msg, 'changed')
-# x.signals['progress'].connect(msg, 'progress')
-# x.signals['up-to-date'].connect(msg, 'up-to-date')
+result.signals['changed'].connect(msg, 'changed')
+result.signals['progress'].connect(msg, 'progress')
+result.signals['up-to-date'].connect(msg, 'up-to-date')
 
-# x.monitor()
+result.monitor()
 
 print 'query took', (t2 - t1)
 
+print result[0].getattr('foo')
+result[0].setattr('foo', 'barw')
+
 if 1:
     for r in result:
         print r


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to