From a11d16a2255f1dcd3675db435f936521fe2c504e Mon Sep 17 00:00:00 2001 From: John-Mark Gurney Date: Tue, 18 Jul 2006 22:56:28 -0800 Subject: [PATCH] rename a few of the classes to better match what they are... support doing the entire title as a resource on the container now that didllite stuff supports the pass through... just chain the chapter iters together for this.. [git-p4: depot-paths = "//depot/": change = 872] --- dvd.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/dvd.py b/dvd.py index 7375e43..3855252 100644 --- a/dvd.py +++ b/dvd.py @@ -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 DVDChapterTransfer(pb.Viewable): +class IterTransfer(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(DVDChapterTransfer) +threadable.synchronize(IterTransfer) -class DVDChapterResource(resource.Resource): +class IterGenResource(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 = {}