+ self.filesize = 0
+ self.estimatedDiskspace = 0
+ self.inputfile = ""
+ self.cutlist = [ ]
+ self.chaptermarks = [ ]
+ self.timeCreate = None
+ self.VideoType = -1
+
+ def addService(self, service):
+ from os import path
+ from enigma import eServiceCenter, iServiceInformation
+ from ServiceReference import ServiceReference
+ from time import localtime, time
+ self.source = service
+ serviceHandler = eServiceCenter.getInstance()
+ info = serviceHandler.info(service)
+ sDescr = info and " " + info.getInfoString(service, iServiceInformation.sDescription) or ""
+ self.DVBdescr = sDescr
+ sTimeCreate = info.getInfo(service, iServiceInformation.sTimeCreate)
+ if sTimeCreate > 1:
+ self.timeCreate = localtime(sTimeCreate)
+ serviceref = ServiceReference(info.getInfoString(service, iServiceInformation.sServiceref))
+ name = info and info.getName(service) or "Title" + sDescr
+ self.DVBname = name
+ self.DVBchannel = serviceref.getServiceName()
+ self.inputfile = service.getPath()
+ self.filesize = path.getsize(self.inputfile)
+ self.estimatedDiskspace = self.filesize
+ self.length = info.getLength(service)
+
+ def initDVDmenuText(self, project, track):
+ s = project.menutemplate.settings
+ self.properties.menutitle.setValue(self.formatDVDmenuText(s.titleformat.getValue(), track))
+ self.properties.menusubtitle.setValue(self.formatDVDmenuText(s.subtitleformat.getValue(), track))
+
+ def formatDVDmenuText(self, template, track):
+ template = template.replace("$i", str(track))
+ template = template.replace("$t", self.DVBname)
+ template = template.replace("$d", self.DVBdescr)
+ template = template.replace("$c", str(len(self.chaptermarks)+1))
+ template = template.replace("$f", self.inputfile)
+ template = template.replace("$C", self.DVBchannel)
+
+ #if template.find("$A") >= 0:
+ from TitleProperties import languageChoices
+ audiolist = [ ]
+ for audiotrack in self.properties.audiotracks:
+ active = audiotrack.active.getValue()
+ if active:
+ trackstring = audiotrack.format.getValue()
+ language = audiotrack.language.getValue()
+ if languageChoices.langdict.has_key(language):
+ trackstring += ' (' + languageChoices.langdict[language] + ')'
+ audiolist.append(trackstring)
+ audiostring = ', '.join(audiolist)
+ template = template.replace("$A", audiostring)
+
+ if template.find("$l") >= 0:
+ l = self.length
+ lengthstring = "%d:%02d:%02d" % (l/3600, l%3600/60, l%60)
+ template = template.replace("$l", lengthstring)
+ if self.timeCreate:
+ template = template.replace("$Y", str(self.timeCreate[0]))
+ template = template.replace("$M", str(self.timeCreate[1]))
+ template = template.replace("$D", str(self.timeCreate[2]))
+ timestring = "%d:%02d" % (self.timeCreate[3], self.timeCreate[4])
+ template = template.replace("$T", timestring)
+ else:
+ template = template.replace("$Y", "").replace("$M", "").replace("$D", "").replace("$T", "")
+ return template
+
+ def produceFinalCuesheet(self):
+ CUT_TYPE_IN = 0
+ CUT_TYPE_OUT = 1
+ CUT_TYPE_MARK = 2
+ CUT_TYPE_LAST = 3
+
+ accumulated_in = 0
+ accumulated_at = 0
+ last_in = 0
+
+ self.cutlist = [ ]
+ self.chaptermarks = [ ]
+
+ # our demuxer expects *strictly* IN,OUT lists.
+ currently_in = not any(type == CUT_TYPE_IN for pts, type in self.cuesheet)
+ if currently_in:
+ self.cutlist.append(0) # emulate "in" at first
+
+ for (pts, type) in self.cuesheet:
+ #print "pts=", pts, "type=", type, "accumulated_in=", accumulated_in, "accumulated_at=", accumulated_at, "last_in=", last_in
+ if type == CUT_TYPE_IN and not currently_in:
+ self.cutlist.append(pts)
+ last_in = pts
+ currently_in = True
+
+ if type == CUT_TYPE_OUT and currently_in:
+ self.cutlist.append(pts)
+
+ # accumulate the segment
+ accumulated_in += pts - last_in
+ accumulated_at = pts
+ currently_in = False
+
+ if type == CUT_TYPE_MARK and currently_in:
+ # relocate chaptermark against "in" time. This is not 100% accurate,
+ # as the in/out points are not.
+ reloc_pts = pts - last_in + accumulated_in
+ self.chaptermarks.append(reloc_pts)
+
+ if len(self.cutlist) > 1:
+ part = accumulated_in / (self.length*90000.0)
+ usedsize = int ( part * self.filesize )
+ self.estimatedDiskspace = usedsize
+ self.length = accumulated_in / 90000