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