Author: dmeyer
Date: Sat Jan 28 18:36:24 2006
New Revision: 1136

Modified:
   trunk/vfs/src/client.py
   trunk/vfs/src/item.py
   trunk/vfs/src/query.py
   trunk/vfs/src/server.py

Log:
make it possible to store attributes at client side

Modified: trunk/vfs/src/client.py
==============================================================================
--- trunk/vfs/src/client.py     (original)
+++ trunk/vfs/src/client.py     Sat Jan 28 18:36:24 2006
@@ -66,7 +66,9 @@
         self._server.connect(self)
         # internal list of active queries
         self._queries = []
-
+        # internal list of items to update
+        self._changed = []
+        
 
     def add_mountpoint(self, device, directory):
         """
@@ -121,6 +123,29 @@
                 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 __str__(self):
         """
         Convert object to string (usefull for debugging)

Modified: trunk/vfs/src/item.py
==============================================================================
--- trunk/vfs/src/item.py       (original)
+++ trunk/vfs/src/item.py       Sat Jan 28 18:36:24 2006
@@ -46,7 +46,7 @@
         self.parent = parent
         self.db = None
         self.media = media
-
+        self.changes = []
 
     def __str__(self):
         """
@@ -62,7 +62,7 @@
         # TODO: do we need to set more attributes?
         self.data = data
         self.dbid = data['type'], data['id']
-
+            
 
     def __getitem__(self, key):
         if self.data.has_key(key):
@@ -76,6 +76,19 @@
         return None
 
 
+    def __setitem__(self, key, value):
+        self.data[key] = value
+        if not self.changes and self.dbid:
+            # FIXME: how to update an item not in the db yet?
+            self.db.update(self)
+        if not key in self.changes:
+            self.changes.append(key)
+        
+            
+    def keys(self):
+        return self.data.keys()
+
+    
 class Directory(Item):
     """
     A directory based item.

Modified: trunk/vfs/src/query.py
==============================================================================
--- trunk/vfs/src/query.py      (original)
+++ trunk/vfs/src/query.py      Sat Jan 28 18:36:24 2006
@@ -57,7 +57,10 @@
         self._query = query
         self._monitor = None
         self._client = client
-        self._result = self._client.database.query(**query)
+        self._result = []
+        for r in self._client.database.query(**query):
+            r.db = self._client
+            self._result.append(r)
 
 
     def get(self):
@@ -95,6 +98,7 @@
         
         if self._query.has_key('device'):
             self._result = result
+            self._result.db = self._client
             self.signals['changed'].emit()
             return
         

Modified: trunk/vfs/src/server.py
==============================================================================
--- trunk/vfs/src/server.py     (original)
+++ trunk/vfs/src/server.py     Sat Jan 28 18:36:24 2006
@@ -171,6 +171,16 @@
             client.database.set_mountpoint(directory, name)
 
 
+    def update(self, items):
+        """
+        Update items from the client.
+        """
+        for dbid, attributes in items:
+            self._db.update_object(dbid, **attributes)
+        # TODO: they are changed now, send update to every other client
+        self._db.commit()
+
+        
     def __del__(self):
         """
         Debug in __del__.


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to