Browse Source

fix tabs...

add support for updating the system id..

[git-p4: depot-paths = "//depot/": change = 760]
replace/4e84fdb41ea781c7a8f872baa423e8b3be4045a7
John-Mark Gurney 19 years ago
parent
commit
2dff300426
1 changed files with 43 additions and 35 deletions
  1. +43
    -35
      ContentDirectory.py

+ 43
- 35
ContentDirectory.py View File

@@ -33,37 +33,44 @@ class ContentDirectoryControl(UPnPPublisher, dict):
"""This class implements the CDS actions over SOAP."""

def getnextID(self):
ret = str(self.nextID)
self.nextID += 1
return ret
ret = str(self.nextID)
self.nextID += 1
return ret

def addContainer(self, parent, title, klass = Container, **kwargs):
ret = self.addItem(parent, klass, title, **kwargs)
self.children[ret] = []
return ret
ret = self.addItem(parent, klass, title, **kwargs)
self.children[ret] = []
return ret

def addItem(self, parent, klass, *args, **kwargs):
assert isinstance(self[parent], Container)
nid = self.getnextID()
i = klass(nid, parent, *args, **kwargs)
self.children[parent].append(i)
self[i.id] = i
return i.id
assert isinstance(self[parent], Container)
nid = self.getnextID()
i = klass(nid, parent, *args, **kwargs)
self.children[parent].append(i)
self[i.id] = i
return i.id

def getchildren(self, item):
assert isinstance(self[item], Container)
return self.children[item][:]
assert isinstance(self[item], Container)
return self.children[item][:]

def __init__(self, title, *args):
super(ContentDirectoryControl, self).__init__(*args)
fakeparent = '-1'
self.nextID = 0
self.children = { fakeparent: []}
self[fakeparent] = Container(None, '-1', 'fake')
root = self.addContainer(fakeparent, title)
assert root == '0'
del self[fakeparent]
del self.children[fakeparent]
super(ContentDirectoryControl, self).__init__(*args)
fakeparent = '-1'
self.nextID = 0
self.children = { fakeparent: []}
self.needupdate = False
self.updateId = 0
self[fakeparent] = Container(None, '-1', 'fake')
root = self.addContainer(fakeparent, title)
assert root == '0'
del self[fakeparent]
del self.children[fakeparent]

def doupdate(self):
if self.needupdate:
self.needupdate += 1
self.needupdate = False

# Required actions

@@ -71,20 +78,21 @@ class ContentDirectoryControl(UPnPPublisher, dict):
"""Required: Return the searching capabilities supported by the device."""

log.msg('GetSearchCapabilities()')
return { 'SearchCapabilitiesResponse': { 'SearchCaps': '' }}
return { 'SearchCapabilitiesResponse': { 'SearchCaps': '' }}

def soap_GetSortCapabilities(self, *args, **kwargs):
"""Required: Return the CSV list of meta-data tags that can be used in
sortCriteria."""

log.msg('GetSortCapabilities()')
return { 'SortCapabilitiesResponse': { 'SortCaps': '' }}
return { 'SortCapabilitiesResponse': { 'SortCaps': '' }}
def soap_GetSystemUpdateID(self, *args, **kwargs):
"""Required: Return the current value of state variable SystemUpdateID."""

log.msg('GetSystemUpdateID()')
return { 'SystemUpdateIdResponse': { 'Id': 5 }}
self.needupdate = True
return { 'SystemUpdateIdResponse': { 'Id': self.updateId }}

BrowseFlags = ('BrowseMetaData', 'BrowseDirectChildren')

@@ -94,8 +102,8 @@ class ContentDirectoryControl(UPnPPublisher, dict):

(ObjectID, BrowseFlag, Filter, StartingIndex, RequestedCount,
SortCriteria) = args
StartingIndex = int(StartingIndex)
RequestedCount = int(RequestedCount)
StartingIndex = int(StartingIndex)
RequestedCount = int(RequestedCount)

log.msg('Browse(ObjectID=%s, BrowseFlags=%s, Filter=%s, '
'StartingIndex=%s RequestedCount=%s SortCriteria=%s)' %
@@ -103,14 +111,14 @@ class ContentDirectoryControl(UPnPPublisher, dict):
`RequestedCount`, `SortCriteria`))

didl = DIDLElement()
result = {}
result = {}

try:
if BrowseFlag == 'BrowseDirectChildren':
ch = self.getchildren(ObjectID)[StartingIndex: StartingIndex + RequestedCount]
filter(lambda x, s = self, d = didl: d.addItem(s[x.id]) and None, ch)
else:
didl.addItem(self[ObjectID])
if BrowseFlag == 'BrowseDirectChildren':
ch = self.getchildren(ObjectID)[StartingIndex: StartingIndex + RequestedCount]
filter(lambda x, s = self, d = didl: d.addItem(s[x.id]) and None, ch)
else:
didl.addItem(self[ObjectID])

result = {'BrowseResponse': {'Result': didl.toString() ,
'NumberReturned': didl.numItems(),
@@ -217,5 +225,5 @@ class ContentDirectoryServer(resource.Resource):
def __init__(self, title):
resource.Resource.__init__(self)
self.putChild('scpd.xml', static.File('content-directory-scpd.xml'))
self.control = ContentDirectoryControl(title)
self.control = ContentDirectoryControl(title)
self.putChild('control', self.control)

Loading…
Cancel
Save