@@ -13,7 +13,7 @@ import os
import sets
import sets
import stat
import stat
from DIDLLite import StorageFolder, Item, VideoItem, AudioItem, TextItem, ImageItem, Resource
from DIDLLite import Container, StorageFolder, Item, VideoItem, AudioItem, TextItem, ImageItem, Resource
from twisted.web import resource, server, static
from twisted.web import resource, server, static
from twisted.python import log
from twisted.python import log
from twisted.internet import abstract, interfaces, process, protocol, reactor
from twisted.internet import abstract, interfaces, process, protocol, reactor
@@ -200,8 +200,10 @@ class FSItem(FSObject, Item):
Item.__init__(self, *args, **kwargs)
Item.__init__(self, *args, **kwargs)
self.url = '%s/%s' % (self.cd.urlbase, self.id)
self.url = '%s/%s' % (self.cd.urlbase, self.id)
self.mimetype = mimetype
self.mimetype = mimetype
self.checkUpdate()
def doUpdate(self):
def doUpdate(self):
#print 'FSItem doUpdate:', `self`
self.res = Resource(self.url, 'http-get:*:%s:*' % self.mimetype)
self.res = Resource(self.url, 'http-get:*:%s:*' % self.mimetype)
self.res.size = os.path.getsize(self.FSpath)
self.res.size = os.path.getsize(self.FSpath)
self.res = [ self.res ]
self.res = [ self.res ]
@@ -268,10 +270,16 @@ class FSDirectory(FSObject, StorageFolder):
# mapping from path to objectID
# mapping from path to objectID
self.pathObjmap = {}
self.pathObjmap = {}
self.indoUpdate = False
def doUpdate(self):
def doUpdate(self):
# We need to rescan this dir, and see if our children has
# We need to rescan this dir, and see if our children has
# changed any.
# changed any.
if self.indoUpdate:
return
#import traceback
#traceback.print_stack()
self.indoUpdate = True
doupdate = False
doupdate = False
children = sets.Set(os.listdir(self.FSpath))
children = sets.Set(os.listdir(self.FSpath))
for i in self.pathObjmap.keys():
for i in self.pathObjmap.keys():
@@ -297,7 +305,11 @@ class FSDirectory(FSObject, StorageFolder):
# Pass up to handle UpdateID
# Pass up to handle UpdateID
if doupdate:
if doupdate:
StorageFolder.doUpdate(self)
# Calling StorageFolder.doUpdate results in calling
# ourselves.
Container.doUpdate(self)
self.indoUpdate = False
def __repr__(self):
def __repr__(self):
return ('<%s.%s: path: %s, id: %s, parent: %s, title: %s, ' + \
return ('<%s.%s: path: %s, id: %s, parent: %s, title: %s, ' + \