@@ -7,6 +7,7 @@ __version__ = '$Change$'
default_audio_lang = 'en'
import itertools
import os
import sets
@@ -38,7 +39,7 @@ def gennameindexes(pref, item):
return ret, d
class DVDChap terTransfer(pb.Viewable):
class I terTransfer(pb.Viewable):
def __init__(self, iterable, request):
self.iter = iter(iterable)
self.request = request
@@ -81,28 +82,24 @@ class DVDChapterTransfer(pb.Viewable):
synchronized = ['resumeProducing', 'stopProducing']
threadable.synchronize(DVDChap terTransfer)
threadable.synchronize(I terTransfer)
class DVDChapter Resource(resource.Resource):
class IterGen Resource(resource.Resource):
isLeaf = True
def __init__(self, chapter ):
def __init__(self, itergen ):
resource.Resource.__init__(self)
self.chapter = chapter
def getFileSize(self):
return self.chapter.size
self.itergen = itergen
def render(self, request):
request.setHeader('content-type', 'video/mpeg')
#request.setHeader('content-length', str(self.getFileSize()))
if request.method == 'HEAD':
return ''
# return data
DVDChapterTransfer(self.chapter , request)
IterTransfer(self.itergen() , request)
# and make sure the connection doesn't get closed
return server.NOT_DONE_YET
@@ -113,8 +110,8 @@ class DVDChapter(VideoItem):
del kwargs['dvdtitle'], kwargs['chapter']
audio = self.dvdtitle.selectaudio(default_audio_lang)
kwargs['content'] = DVDChapterResource(
audiofilter(self.chapter, 0x80 + audio.pos ))
kwargs['content'] = IterGenResource(lambda i = self.chapter,
p = audio.pos: audiofilter(i, 0x80 + p ))
VideoItem.__init__(self, *args, **kwargs)
self.url = '%s/%s' % (self.cd.urlbase, self.id)
@@ -130,8 +127,14 @@ class DVDTitle(StorageFolder):
self.dvddisc = kwargs['dvddisc']
del kwargs['dvdtitle'], kwargs['dvddisc']
audio = self.dvdtitle.selectaudio(default_audio_lang)
kwargs['content'] = IterGenResource(lambda dt = self.dvdtitle,
p = audio.pos: audiofilter(itertools.chain(*dt), 0x80 + p))
StorageFolder.__init__(self, *args, **kwargs)
self.url = '%s/%s' % (self.cd.urlbase, self.id)
self.res = Resource(self.url, 'http-get:*:video/mpeg:*')
# mapping from path to objectID
self.pathObjmap = {}