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