def _setup_session(self): if not self.session_key: Log.debug('Session key not set') self.session_key = str(hash(self.state)) sdata = { 'cache-time': self.settings['cache_time'], 'cache': self.settings['cache_files'] and self.cache, 'cache-path': self.cachepath, 'key': self.session_key } self.session = Session(sdata) self.session_key = self.session.session_key cache = self.settings['cache_files'] and self.cache self.api = nrk.Api(self.settings['connection_speed'], cache) self.imga = ImageArchiver(cache)
def _setup_session(self): if not self.session_key: Log.debug('Session key not set') self.session_key = str( hash( self.state ) ) sdata = { 'cache-time': self.settings['cache_time'], 'cache': self.settings['cache_files'] and self.cache, 'cache-path': self.cachepath, 'key': self.session_key } self.session = Session(sdata) self.session_key = self.session.session_key cache = self.settings['cache_files'] and self.cache self.api = nrk.Api(self.settings['connection_speed'], cache) self.imga = ImageArchiver(cache)
class Main(WebTV): def __init__(self): Plugin.__init__(self) if self.state.refresh == True: self.state.refresh = False key = Key.build_url('program', words=self.state.__dict__) xbmc.executebuiltin("ReplaceWindow(Programs,%s)" % key) return self.stack = [] self.__set_settings() self.__map_functions() self.open() self.close() Session().close() # - EOM - def open(self): if not self.state.transparent: self._setup_session() #used for the watched/unwatched info if not self.session.data_objects.has_key('watched'): self.session.manage(watched={}) self.mode = self.mapping[self.state.type]() if self.mode == ITERABLE: if self._pre_iter(): self.create_directory() elif self.mode == PLAYABLE: self.play() return # - EOM - def _setup_session(self): if not self.session_key: Log.debug('Session key not set') self.session_key = str( hash( self.state ) ) sdata = { 'cache-time': self.settings['cache_time'], 'cache': self.settings['cache_files'] and self.cache, 'cache-path': self.cachepath, 'key': self.session_key } self.session = Session(sdata) self.session_key = self.session.session_key cache = self.settings['cache_files'] and self.cache self.api = nrk.Api(self.settings['connection_speed'], cache) self.imga = ImageArchiver(cache) # - EOM - def play(self): item = self.item li = ListItem(item.title, thumbnailImage=item.thumbnail, path=item.url) Log.notice('PLUGIN::SPAM -> play url %s' % item.url) self.player = utils.PluginPlayer() if self.state.playable: self.dir.resolve_url(li, True) else: self.player.play(item.url, li) if not self.session.data_objects['watched'].has_key(item.id): Log.notice('PLUGIN::SPAM -> mark video as watched') self.session.update_object('watched')[item.id] = 1 def create_directory(self): if self.state.type == nrk.PLAYLIST: self.player = utils.PluginPlayer() Log.notice('PLUGIN::SPAM -> Set plugin dir content "%s"' % self.content) self.dir.set_content(self.content) if self.settings['fetch_path']: if (self.state.type == nrk.SHOW or self.state.type == nrk.SHOW_FOLDER): self.category = self.api.get_path(self.state.id, self.state.type) self.set_category() else: self.set_category() for i in self: li = ListItem(i.title, thumbnailImage=i.thumbnail) overlay = ( xbmcgui.ICON_OVERLAY_UNWATCHED, xbmcgui.ICON_OVERLAY_WATCHED,)[ self.session.data_objects['watched'].has_key(i.key.id)] if i.isPlayable is True: li.setProperty('IsPlayable', 'true') li.setInfo( 'video', { 'plot': i.plot, 'title': i.title, 'overlay': overlay } ) try: li.setLabel2(self.type_dict[i.key.type]) except: pass if self.state.type == nrk.PLAYLIST and self.state.view: self.player.queue(i.url, li) commands = [] commands.append(( lang(30300), 'XBMC.RunPlugin(%s)' % ( Key.build_url( 'program', words = self.state.__dict__, refresh = True )), )) if i.key.type == nrk.SHOW: commands.append(( lang(30301), 'XBMC.RunPlugin(%s)' % ( Key.build_url( 'favorites', action = 'add', name = i.title, thumb = i.thumbnail, id = i.key.id )), )) elif i.defntion == 'video/mp4': commands.append(( lang(30302), 'XBMC.RunPlugin(%s)' % ( Key.build_url( 'nogui', action = 'download', name = i.title, thumb = i.thumbnail, url = i.url )), )) li.addContextMenuItems( commands ) if i.key.type != nrk.VIGNETE: ok = self.dir.add(i.url, li, i.isFolder, int(sys.argv[1])) if ok == False: break if self.state.type == nrk.PLAYLIST and self.state.view: if self.settings.autoplay_playlist == True: self.player.playQueue() def __set_settings(self): self.settings = utils.PluginSettings() self.settings.add('fetch_subtitles') self.settings.add('transparency') self.settings.add('transparent_media') self.settings.add('fetch_chapters') self.settings.add('test_images') self.settings.add('cache_files') self.settings.add('fetch_path') self.settings.add('autoplay_playlist') #Connection speed options = ( 600, 1000, 1800, ); index = 11 self.settings.add('connection_speed', 'values', options, index) #Cache time options = ( 999, 1, 2, 12, 24, ); index = 21 self.settings.add('cache_time', 'values', options, index) # - EOM - def __map_functions(self): #Use a dict to map types against methods to #avoid some messy nested loops self.mapping = { nrk.PLAYLIST_ALT_CLIP: self._handle_playlist_clip, nrk.SHOW_CLIP_INDEX: self._handle_show_clip_index, nrk.PLAYLIST_CLIP: self._handle_playlist_clip, nrk.SHOW_FOLDER: self._handle_show, nrk.SHOW_CLIP: self._handle_show_clip, nrk.PLAYLIST: self._handle_playlist, nrk.PROGRAM: self._handle_program_list, nrk.SEARCH: self._handle_search, nrk.SHOW: self._handle_show, nrk.LIVE: self._handle_live_show } # - EOM - #Used for iteration def __iter__(self): return self.next() # - EOM - def next(self): Log.notice('PLUGIN -> Stack contains %d elements' % len(self.stack)) for item in self.stack: return_object = self._iter_handler(item) if return_object is not None: yield return_object #item.update(return_object) self._post_iter() # - EOM - def _pre_iter(self): """ Actions done before iterating through the stack """ if len(self.stack) == 1 and self.settings['transparency']: # Got only one item, so if transparent folder is enabled in # settings, do transparent.. if ( (self.stack[0].key.type == nrk.SHOW_CLIP) and self.settings('transparent_media') == False ): return True Log.debug('PLUGIN::SPAM -> Create transparent transparency') item = self.stack.pop(0) item.key.transparent = True return_object = self._iter_handler(item) self.state = item.key self.session.swap_session(self.state.parent_session) self.dir.is_open = True self.open() return return True # - EOM - def _test_image(self, item): """ Takes care of xbmc's lack of support for thumbnails without file extension. Done by getting mime type from header """ ext = self.imga.archive_image(self.state, item.thumbnail, item.key.id) if ext: match = re.search(nrk.regex.image_identity, item.thumbnail) if match: item.thumbnail = nrk.uri.content_image(match.group('id'), ext) Log.debug('PLUGIN::THUMBNAIL -> new url: "%s"' % item.thumbnail) return item # - EOM - def _iter_handler(self, item): if self.settings['test_images'] is True: item = self._test_image(item) if item.key.type == nrk.SHOW: item.key.image = item.thumbnail elif item.key.type == nrk.SHOW_CLIP: if self.state.image is not None: item.thumbnail = item.key.image = self.state.image item = self.__set_playable(item) elif item.key.type == nrk.SHOW_FOLDER: if self.state.image is not None: item.key.image = self.state.image elif item.key.type == nrk.PLAYLIST_CLIP: item = self.__set_playable(item) elif item.key.type == nrk.SHOW_CLIP_INDEX: item = self.__set_playable(item) item.key.parent_session = self.session_key if not item.url: item.url = item.key.geturl(nrk.PROGRAM) return item # - EOM - def _post_iter(self): self.imga.save_image_archive() # - EOM - def __set_playable(self, item): item.isFolder = False if not item.key.transparent: item.isPlayable = True item.key.playable = True item.key.sessionkey = self.session.session_key return item # - EOM - def search(self, search_string=None): if search_string is None: return self.key.arg = search_string return self.open(self.key)
class Main(WebTV): def __init__(self): Plugin.__init__(self) if self.state.refresh == True: self.state.refresh = False key = Key.build_url('program', words=self.state.__dict__) xbmc.executebuiltin("ReplaceWindow(Programs,%s)" % key) return self.stack = [] self.__set_settings() self.__map_functions() self.open() self.close() Session().close() # - EOM - def open(self): if not self.state.transparent: self._setup_session() #used for the watched/unwatched info if not self.session.data_objects.has_key('watched'): self.session.manage(watched={}) self.mode = self.mapping[self.state.type]() if self.mode == ITERABLE: if self._pre_iter(): self.create_directory() elif self.mode == PLAYABLE: self.play() return # - EOM - def _setup_session(self): if not self.session_key: Log.debug('Session key not set') self.session_key = str(hash(self.state)) sdata = { 'cache-time': self.settings['cache_time'], 'cache': self.settings['cache_files'] and self.cache, 'cache-path': self.cachepath, 'key': self.session_key } self.session = Session(sdata) self.session_key = self.session.session_key cache = self.settings['cache_files'] and self.cache self.api = nrk.Api(self.settings['connection_speed'], cache) self.imga = ImageArchiver(cache) # - EOM - def play(self): item = self.item li = ListItem(item.title, thumbnailImage=item.thumbnail, path=item.url) Log.notice('PLUGIN::SPAM -> play url %s' % item.url) self.player = utils.PluginPlayer() if self.state.playable: self.dir.resolve_url(li, True) else: self.player.play(item.url, li) if not self.session.data_objects['watched'].has_key(item.id): Log.notice('PLUGIN::SPAM -> mark video as watched') self.session.update_object('watched')[item.id] = 1 def create_directory(self): if self.state.type == nrk.PLAYLIST: self.player = utils.PluginPlayer() Log.notice('PLUGIN::SPAM -> Set plugin dir content "%s"' % self.content) self.dir.set_content(self.content) if self.settings['fetch_path']: if (self.state.type == nrk.SHOW or self.state.type == nrk.SHOW_FOLDER): self.category = self.api.get_path(self.state.id, self.state.type) self.set_category() else: self.set_category() for i in self: li = ListItem(i.title, thumbnailImage=i.thumbnail) overlay = ( xbmcgui.ICON_OVERLAY_UNWATCHED, xbmcgui.ICON_OVERLAY_WATCHED, )[self.session.data_objects['watched'].has_key(i.key.id)] if i.isPlayable is True: li.setProperty('IsPlayable', 'true') li.setInfo('video', { 'plot': i.plot, 'title': i.title, 'overlay': overlay }) try: li.setLabel2(self.type_dict[i.key.type]) except: pass if self.state.type == nrk.PLAYLIST and self.state.view: self.player.queue(i.url, li) commands = [] commands.append(( lang(30300), 'XBMC.RunPlugin(%s)' % (Key.build_url( 'program', words=self.state.__dict__, refresh=True)), )) if i.key.type == nrk.SHOW: commands.append(( lang(30301), 'XBMC.RunPlugin(%s)' % (Key.build_url('favorites', action='add', name=i.title, thumb=i.thumbnail, id=i.key.id)), )) elif i.defntion == 'video/mp4': commands.append(( lang(30302), 'XBMC.RunPlugin(%s)' % (Key.build_url('nogui', action='download', name=i.title, thumb=i.thumbnail, url=i.url)), )) li.addContextMenuItems(commands) if i.key.type != nrk.VIGNETE: ok = self.dir.add(i.url, li, i.isFolder, int(sys.argv[1])) if ok == False: break if self.state.type == nrk.PLAYLIST and self.state.view: if self.settings.autoplay_playlist == True: self.player.playQueue() def __set_settings(self): self.settings = utils.PluginSettings() self.settings.add('fetch_subtitles') self.settings.add('transparency') self.settings.add('transparent_media') self.settings.add('fetch_chapters') self.settings.add('test_images') self.settings.add('cache_files') self.settings.add('fetch_path') self.settings.add('autoplay_playlist') #Connection speed options = ( 600, 1000, 1800, ) index = 11 self.settings.add('connection_speed', 'values', options, index) #Cache time options = ( 999, 1, 2, 12, 24, ) index = 21 self.settings.add('cache_time', 'values', options, index) # - EOM - def __map_functions(self): #Use a dict to map types against methods to #avoid some messy nested loops self.mapping = { nrk.PLAYLIST_ALT_CLIP: self._handle_playlist_clip, nrk.SHOW_CLIP_INDEX: self._handle_show_clip_index, nrk.PLAYLIST_CLIP: self._handle_playlist_clip, nrk.SHOW_FOLDER: self._handle_show, nrk.SHOW_CLIP: self._handle_show_clip, nrk.PLAYLIST: self._handle_playlist, nrk.PROGRAM: self._handle_program_list, nrk.SEARCH: self._handle_search, nrk.SHOW: self._handle_show, nrk.LIVE: self._handle_live_show } # - EOM - #Used for iteration def __iter__(self): return self.next() # - EOM - def next(self): Log.notice('PLUGIN -> Stack contains %d elements' % len(self.stack)) for item in self.stack: return_object = self._iter_handler(item) if return_object is not None: yield return_object #item.update(return_object) self._post_iter() # - EOM - def _pre_iter(self): """ Actions done before iterating through the stack """ if len(self.stack) == 1 and self.settings['transparency']: # Got only one item, so if transparent folder is enabled in # settings, do transparent.. if ((self.stack[0].key.type == nrk.SHOW_CLIP) and self.settings('transparent_media') == False): return True Log.debug('PLUGIN::SPAM -> Create transparent transparency') item = self.stack.pop(0) item.key.transparent = True return_object = self._iter_handler(item) self.state = item.key self.session.swap_session(self.state.parent_session) self.dir.is_open = True self.open() return return True # - EOM - def _test_image(self, item): """ Takes care of xbmc's lack of support for thumbnails without file extension. Done by getting mime type from header """ ext = self.imga.archive_image(self.state, item.thumbnail, item.key.id) if ext: match = re.search(nrk.regex.image_identity, item.thumbnail) if match: item.thumbnail = nrk.uri.content_image(match.group('id'), ext) Log.debug('PLUGIN::THUMBNAIL -> new url: "%s"' % item.thumbnail) return item # - EOM - def _iter_handler(self, item): if self.settings['test_images'] is True: item = self._test_image(item) if item.key.type == nrk.SHOW: item.key.image = item.thumbnail elif item.key.type == nrk.SHOW_CLIP: if self.state.image is not None: item.thumbnail = item.key.image = self.state.image item = self.__set_playable(item) elif item.key.type == nrk.SHOW_FOLDER: if self.state.image is not None: item.key.image = self.state.image elif item.key.type == nrk.PLAYLIST_CLIP: item = self.__set_playable(item) elif item.key.type == nrk.SHOW_CLIP_INDEX: item = self.__set_playable(item) item.key.parent_session = self.session_key if not item.url: item.url = item.key.geturl(nrk.PROGRAM) return item # - EOM - def _post_iter(self): self.imga.save_image_archive() # - EOM - def __set_playable(self, item): item.isFolder = False if not item.key.transparent: item.isPlayable = True item.key.playable = True item.key.sessionkey = self.session.session_key return item # - EOM - def search(self, search_string=None): if search_string is None: return self.key.arg = search_string return self.open(self.key)