📄 chn_class.py
字号:
_folders = common.DoRegexFindAll(self.folderItemRegex, _data)
for _folder in _folders:
_folderItems.append(self.CreateFolderItem(_folder))
# sort by name
_folderItems.sort(lambda x, y: cmp(x.name.lower(), y.name.lower()))
# now process video items
if not self.videoItemRegex =='':
_videos = common.DoRegexFindAll(self.videoItemRegex, _data)
for _video in _videos:
_videoItems.append(self.CreateVideoItem(_video))
# sort by name (don't do it, because of date. Could be re-written
# to do so
# _videoItems.sort(lambda x, y: cmp(x.name,y.name))
return _preItems + _folderItems + _videoItems
#==============================================================================
def CreateFolderItem(self, resultSet):
"""
Accepts an arraylist of results. It returns an item.
"""
logFile.debug('starting CreateFolderItem for %s', self.channelName)
item = common.clistItem("No CreateFolderItem Implented!", "")
item.complete = True
return item
#=============================================================================
def CreateVideoItem(self, resultSet):
"""
Accepts an arraylist of results. It returns an item.
"""
logFile.debug('starting CreateVideoItem for %s', self.channelName)
item = common.clistItem("No CreateVideoItem Implented!", "")
item.complete = True
return item
#=============================================================================
def UpdateVideoItem(self, item):
"""
Accepts an item. It returns an updated item. Usually retrieves the MediaURL
and the Thumb! It should return a completed item.
"""
logFile.info('starting UpdateVideoItem for %s (%s)', item.name, self.channelName)
_data = uriHandler.Open(item.url, pb=False)
item.mediaurl = common.DoRegexFindAll(self.mediaUrlRegex, _data)[-1]
logFile.info('finishing UpdateVideoItem. Media url = %s', item.mediaurl)
item.thumb = self.noImage
if item.mediaurl == "":
item.complete = False
else:
item.complete = True
return item
#==============================================================================
def DownloadVideoItem(self, item):
"""
Accepts an item and starts the download process
"""
if item.mediaurl == '':
logFile.error("Cannot download item without mediaurl")
return
if item.type != 'video':
logFile.error("Cannot download a folder item.")
return
downloadUrl = item.mediaurl
if downloadUrl.find(".divx"):
saveFileName = "%s.divx" % (item.name)
if downloadUrl.find(".flv"):
saveFileName = "%s.flv" % (item.name)
if downloadUrl.find(".avi"):
saveFileName = "%s.avi" % (item.name)
#saveFileName = uriHandler.CorrectFileName(saveFileName)
uriHandler.Download(item.mediaurl, saveFileName)
#==============================================================================
def DisplayFolderList(self, items, position):
""" NOT USER EDITABLE
Accepts an list of items and fills the windowlist. Clearing windows,
Restore previous states and filling.
"""
logFile.debug("DisplayFolderList needs to display %s items. \nFocussed is on item %s", len(items), position)
self.clearList()
if len(items)==0:
logFile.debug("Adding Dummy Item")
tmp = common.clistItem("No Files", "")
tmp.complete = True
tmp.thumb = self.noImage
tmp.icon = self.icon
items.append(tmp)
# check if a progressbar is needed:
pbEnabled = len(items) > self.progressBarItemLimit
if pbEnabled:
logFile.info("Using Progressbar to display %s items", len(items))
percentagePerItem = 100.0/len(items)
itemNr = 0
progDialog = xbmcgui.DialogProgress()
progDialog.create("Please Wait...", "Adding Items to list")
for _item in items:
tmp = xbmcgui.ListItem(_item.name, _item.date, _item.icon, _item.icon)
self.addItem(tmp)
if pbEnabled:
itemNr = itemNr + 1
progDialog.update(int(percentagePerItem * itemNr), "Adding Items to list", "Adding item %s of %s" % (itemNr, len(items)))
if progDialog.iscanceled() == True:
break
if pbEnabled:
progDialog.close()
self.setFocus(self.getControl(controls.EP_LIST))
self.setCurrentListPosition(position)
if not self.listItems[position].complete:
_item = self.UpdateVideoItem(self.listItems[position])
# if the mediaUrl is not filled: item is not complete (DOES NOT WORK WELL)
if _item.mediaurl == "":
_item.complete = False
# check if the list has not changed during upate:
if self.listItems[position].Equals(_item):
logFile.info("Updating item (GUIDs match)")
self.listItems[position] = _item
else:
logFile.error("Aborting Update because of GUID mismatch")
# if somehow the list focus was already changed, don't update
if self.getCurrentListPosition() == position:
logFile.info("All items where shown. Now fetching focussed item info for item number %s", position)
self.ShowData(self.listItems[position])
#==============================================================================
def ShowData(self, item):
""" NOT USER EDITABLE
Accepts an item with URL set and get additional details for the folder item
"""
logFile.debug("Fetching info for '%s'. Setting:\nDescription: %s\nImage: %s", item.name, item.description.lstrip('\n'), item.thumb)
text = item.description.lstrip('\n')
self.getControl(controls.EP_DESCRIPTION).reset()
self.getControl(controls.EP_DESCRIPTION).setText(text)
self.getControl(controls.EP_THUMB).setImage(item.thumb)
if item.complete and item.type=="video":
self.getControl(controls.EP_COMPLETE).setVisible(True)
else:
self.getControl(controls.EP_COMPLETE).setVisible(False)
#==============================================================================
def LogOn(self, *args):
"""
Logs on to a website, using an url. Returns True on success
"""
if not self.requiresLogon:
logFile.info("No login required of %s", self.channelName)
return True
if self.loggedOn:
logFile.info("Already logged in")
return True
_rtrn = False
_passWord = args["userName"]
_userName = args["passWord"]
return _rtrn
#==============================================================================
def ParseAsxAsf(self, url):
"""
Parses an ASX/ASF and returns the real media url.
"""
try:
logFile.debug('Starting ASF/ASX Parsing for %s', url)
_data = uriHandler.Open(url, pb=True)
logFile.debug("Opened the ASF/ASX: \n%s", _data)
_mediaUrl = common.DoRegexFindAll(self.asxAsfRegex, _data)
logFile.debug("%s", _mediaUrl)
_mediaUrl = _mediaUrl[0]
logFile.info("Discovered ASX/ASF URL: %s", _mediaUrl)
except:
logFile.warning("Error Parsing the ASX/ASF", _mediaUrl, exc_info=True)
# but give it a try anyway
_mediaUrl = url
return _mediaUrl
#==============================================================================
def PlayVideoItem(self, item, player="defaultplayer"):
""" NOT USER EDITABLE
Accepts an item with or without MediaUrl and playback the item. If no
MediaUrl is present, one will be retrieved.
"""
logFile.info("Starting Video Playback using the %s", player)
try:
logFile.info('opening '+ item.mediaurl)
if player=="dvdplayer":
logFile.info("Playing using DVDPlayer")
xbmc.Player(xbmc.PLAYER_CORE_DVDPLAYER).play(item.mediaurl)
elif player=="mplayer":
logFile.info("Playing using Mplayer")
xbmc.Player(xbmc.PLAYER_CORE_MPLAYER).play(item.mediaurl)
else:
logFile.info("Playing using default player")
xbmc.Player(xbmc.PLAYER_CORE_AUTO).play(item.mediaurl)
except:
dialog = xbmcgui.Dialog()
dialog.ok(config.appName, "Kan dit programma niet afspelen.")
logFile.critical("Could not playback the url", exc_info=True)
#==============================================================================
def GetImageLocation(self, image):
# check if image is present in skin-folder. If so, use that one, of not,
# us the local one
if image == "":
return ""
if not os.path.exists(os.path.join(config.rootDir, "skins", config.skinFolder, "media", image)):
image = os.path.join(config.rootDir, "channels", self.__module__.replace("chn_", ""), image)
return image
#===============================================================================
def CacheThumb(self, remoteImage):
"""
Caches an image. Before calling, set the thumb to noImage in the channel
"""
# check if already local:
if remoteImage.find(":") < 2:
return remoteImage
logFile.debug("Caching url=%s", remoteImage)
thumb = ""
# get image
localImageName = common.DoRegexFindAll('/([^/]*)$', remoteImage)[-1]
# correct for fatx
localImageName = uriHandler.CorrectFileName(localImageName)
localCompletePath = os.path.join(config.cacheDir, localImageName)
try:
if os.path.exists(localCompletePath): #check cache
thumb = localCompletePath
else: # save them in cache folder
logFile.debug("Downloading thumb. Filename=%s", localImageName)
thumb = uriHandler.Download(remoteImage, localImageName, folder=config.cacheDir, pb=False)
except:
logFile.error("Error opening thumbfile!", exc_info=True)
return thumb
#===============================================================================
# properties
#===============================================================================
def IsOutOfDate(self):
""" NOT USER EDITABLE
Compare the maxVersion of the channel (so the maximum version of XOT
for which the channel was tested) against the current version of XOT.
If the currentversion is higher, don't load the channel.
"""
maxVersionSplit = common.DoRegexFindAll('^(\d{1,3})\.(\d{1,3})\.(\d{1,3})(([abAB])(\d{0,2}))*$', self.maxXotVersion)[0];
xotVersionSplit = common.DoRegexFindAll('^(\d{1,3})\.(\d{1,3})\.(\d{1,3})(([abAB])(\d{0,2}))*$', config.version)[0];
versions = (maxVersionSplit, xotVersionSplit)
intVersions = []
for version in versions:
tmpVersion = "%s%s%s" % (version[0].rjust(3, '0'), version[1].rjust(3, '0'), version[2].rjust(3, '0'))
# now the last part will be for the beta/alpha counting. Therefore we assume that if no beta/alpa is present
# the last 3 digits are 999. If they are presents the digits are between 0-998
if version[4]!="":
if version[4]=='a':
tmpVersion = "%s%s" % (tmpVersion, "1")
elif version[4]=='b':
tmpVersion = "%s%s" % (tmpVersion, "2")
tmpVersion = "%s%s" % (tmpVersion, version[5].rjust(3, '0'))
else:
tmpVersion = "%s99" % (tmpVersion)
intVersions.append(tmpVersion)
if intVersions[0] < intVersions[1]:
logFile.warning("%s has maxVersion %s and is to old for XOT version %s. (maxXot=%s, currentXot=%s)", self.channelName, self.maxXotVersion, config.version, intVersions[0], intVersions[1])
return True
else:
return False
# register the property
OutOfDate = property(IsOutOfDate, doc='Check if channel is out of date')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -