示例#1
0
def torrent_status_browser(files):
    from datetime import timedelta
    from resources.lib.modules import fen_cache
    for count, item in enumerate(files, 1):
        try:
            display = '%02d | %s | [COLOR=grey][I]%s | %sGB | %s %% | SPEED: %s kB/s | (S:%s P:%s)[/I][/COLOR]' % (
                count, item['name'].replace(
                    'magnet:', '').upper(), item['dl_status'].upper(),
                str(round(float(item['size']) / 1048576000, 1)), item['have'],
                str(round(float(item['speed']) / 1024,
                          1)), item['seeders'], item['peers'])
            url_params = {
                'mode': 'furk.remove_from_downloads',
                'name': item['name'],
                'id': item['id']
            }
            url = build_url(url_params)
            listitem = xbmcgui.ListItem(display)
            xbmcplugin.addDirectoryItem(__handle__,
                                        url,
                                        listitem,
                                        isFolder=True)
        except:
            pass
    fen_cache.FenCache().set('furk_active_downloads',
                             [i['info_hash'] for i in files],
                             expiration=timedelta(hours=1))
    xbmcplugin.setContent(__handle__, 'files')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.furk_files')
示例#2
0
def furk_tfile_audio():
    window.clearProperty('furk_t_files_json')
    params = dict(parse_qsl(sys.argv[2].replace('?', '')))
    excludes = ['', 'cover', 'covers', 'scan', 'scans', 'playlists']
    t_files = Furk.t_files(params.get('id'))
    item_path_list = sorted(
        list(
            set([
                clean_file_name(i['path']) for i in t_files
                if clean_file_name(i['path']).lower() not in excludes
            ])))
    if not item_path_list:
        if dialog.yesno("Fen Music Player", 'Browse Songs or Play Full Album?',
                        '', '', 'Play Now', 'Browse'):
            return browse_audio_album(t_files, params.get('name'))
        from resources.lib.modules.player import FenPlayer
        FenPlayer().playAudioAlbum(t_files, params.get('name'))
        return browse_audio_album(t_files, params.get('name'))
    for x in item_path_list:
        url_params = {'mode': 'furk.browse_audio_album', 'item_path': x}
        url = build_url(url_params)
        listitem = xbmcgui.ListItem(x.upper())
        listitem.setThumbnailImage(default_furk_icon)
        listitem.setArt({'fanart': fanart})
        xbmcplugin.addDirectoryItem(__handle__, url, listitem, isFolder=True)
    t_files_json = json.dumps(t_files)
    window.setProperty('furk_t_files_json', str(t_files_json))
    xbmcplugin.setContent(__handle__, 'files')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.furk_files')
示例#3
0
def build_in_progress_episode():
    from resources.lib.indexers.tvshows import make_fresh_tvshow_meta
    from resources.lib.modules.workers import Thread

    def process_eps(item):
        listitem = build_episode({
            "season":
            int(item[1]),
            "episode":
            int(item[2]),
            "meta":
            make_fresh_tvshow_meta('tmdb_id', item[0])
        })['listitem']
        xbmcplugin.addDirectoryItem(__handle__,
                                    listitem[0],
                                    listitem[1],
                                    isFolder=listitem[2])

    settings.check_database(WATCHED_DB)
    threads = []
    dbcon = database.connect(WATCHED_DB)
    dbcur = dbcon.cursor()
    dbcur.execute(
        '''SELECT media_id, season, episode FROM progress WHERE db_type=?''',
        ('episode', ))
    rows = dbcur.fetchall()
    for item in rows:
        threads.append(Thread(process_eps, item))
    [i.start() for i in threads]
    [i.join() for i in threads]
    xbmcplugin.setContent(__handle__, 'episodes')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.progress_next_episode')
示例#4
0
 def playAudioAlbum(self, t_files=None, name=None, from_seperate=False):
     import os
     import xbmcaddon
     from resources.lib.modules.utils import clean_file_name, batch_replace, to_utf8
     from resources.lib.modules.nav_utils import setView
     __addon_id__ = 'plugin.video.fen'
     __addon__ = xbmcaddon.Addon(id=__addon_id__)
     __handle__ = int(sys.argv[1])
     addon_dir = xbmc.translatePath(__addon__.getAddonInfo('path'))
     icon_directory = settings.get_theme()
     default_furk_icon = os.path.join(icon_directory, 'furk.png')
     formats = ('.3gp', ''), ('.aac', ''), ('.flac', ''), ('.m4a', ''), ('.mp3', ''), \
     ('.ogg', ''), ('.raw', ''), ('.wav', ''), ('.wma', ''), ('.webm', ''), ('.ra', ''), ('.rm', '')
     params = dict(parse_qsl(sys.argv[2].replace('?', '')))
     furk_files_list = []
     playlist = xbmc.PlayList(xbmc.PLAYLIST_MUSIC)
     playlist.clear()
     if from_seperate:
         t_files = [
             i for i in t_files
             if clean_file_name(i['path']) == params.get('item_path')
         ]
     for item in t_files:
         try:
             name = item['path'] if not name else name
             if not 'audio' in item['ct']: continue
             url = item['url_dl']
             track_name = clean_file_name(
                 batch_replace(to_utf8(item['name']), formats))
             listitem = xbmcgui.ListItem(track_name)
             listitem.setThumbnailImage(default_furk_icon)
             listitem.setInfo(type='music',
                              infoLabels={
                                  'title':
                                  track_name,
                                  'size':
                                  int(item['size']),
                                  'album':
                                  clean_file_name(
                                      batch_replace(to_utf8(name),
                                                    formats)),
                                  'duration':
                                  item['length']
                              })
             listitem.setProperty('mimetype', 'audio/mpeg')
             playlist.add(url, listitem)
             if from_seperate:
                 furk_files_list.append((url, listitem, False))
         except:
             pass
     self.play(playlist)
     if from_seperate:
         xbmcplugin.addDirectoryItems(__handle__, furk_files_list,
                                      len(furk_files_list))
         setView('view.furk_files')
         xbmcplugin.endOfDirectory(__handle__)
示例#5
0
def my_furk_audio_favourites():
    from resources.lib.modules.favourites import retrieve_favourites
    results = retrieve_favourites('audio', '', '')
    for item in results:
        try:
            cm = []
            name = item.split('<>')[0]
            item_id = item.split('<>')[1]
            url_dl = item.split('<>')[2]
            size = item.split('<>')[3]
            display_size = str(round(float(size) / 1048576000, 1))
            display = '[B]%sGB[/B] | [I]%s[/I]' % (display_size, name)
            url_params = {
                'mode': 'furk.furk_tfile_audio',
                'name': name,
                'id': item_id
            }
            url = build_url(url_params)
            con_remove_favs = {
                'mode': 'remove_from_favourites',
                'db_type': 'audio',
                'tmdb_id': item
            }
            con_download_archive = {
                'mode': 'download_file',
                'name': name,
                'url': url_dl,
                'image': default_furk_icon,
                'db_type': 'archive'
            }
            cm.append(("[B]Remove from Fen Favourites[/B]",
                       'XBMC.RunPlugin(%s)' % build_url(con_remove_favs)))
            cm.append(("[B]Download Archive[/B]",
                       'XBMC.RunPlugin(%s)' % build_url(con_download_archive)))
            listitem = xbmcgui.ListItem(display)
            listitem.addContextMenuItems(cm)
            listitem.setThumbnailImage(default_furk_icon)
            listitem.setArt({'fanart': fanart})
            listitem.setInfo(type='video',
                             infoLabels={
                                 'title': display,
                                 'size': int(size)
                             })
            xbmcplugin.addDirectoryItem(__handle__,
                                        url,
                                        listitem,
                                        isFolder=True)
        except:
            pass
    xbmcplugin.setContent(__handle__, 'files')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.furk_files')
示例#6
0
def my_furk_files():
    try:
        params = dict(parse_qsl(sys.argv[2].replace('?', '')))
        files = eval('Furk.%s()' % params.get('list_type'))
        if params.get('list_type') in ('file_get_active', 'file_get_failed'):
            torrent_status_browser(files)
        else:
            furk_file_browser(files, params, display_mode='file_browse')
    except:
        pass
    xbmcplugin.setContent(__handle__, 'files')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.furk_files')
示例#7
0
def furk_tfile_video():
    params = dict(parse_qsl(sys.argv[2].replace('?', '')))
    t_files = [
        i for i in Furk.t_files(params.get('id'))
        if 'video' in i['ct'] and 'bitrate' in i
    ]
    for count, item in enumerate(t_files, 1):
        try:
            cm = []
            url_params = {
                'mode': 'media_play',
                'url': item['url_dl'],
                'rootname': 'nill'
            }
            url = build_url(url_params)
            name = clean_file_name(item['name']).upper()
            if 1200 < int(item['height']) > 2100: display_res = '2160p'
            elif 1000 < int(item['height']) < 1200: display_res = '1080p'
            elif 680 < int(item['height']) < 1000: display_res = 'HD'
            else: display_res = 'SD'
            display_name = '%02d | [B]%s[/B] | [B]%.2f GB[/B] | %smbps | [I]%s[/I]' % \
            (count, display_res, float(item['size'])/1073741824, str(round(float(item['bitrate'])/1000, 2)), name)
            listitem = xbmcgui.ListItem(display_name)
            down_file_params = {
                'mode': 'download_file',
                'name': item['name'],
                'url': item['url_dl'],
                'db_type': 'furk_file',
                'image': default_furk_icon
            }
            cm.append(("[B]Download File[/B]",
                       'XBMC.RunPlugin(%s)' % build_url(down_file_params)))
            listitem.addContextMenuItems(cm)
            listitem.setThumbnailImage(default_furk_icon)
            listitem.setArt({'fanart': fanart})
            listitem.setInfo(
                'video', {
                    'title': display_name,
                    'size': int(item['size']),
                    'duration': item['length']
                })
            listitem.setProperty("IsPlayable", "true")
            xbmcplugin.addDirectoryItem(__handle__,
                                        url,
                                        listitem,
                                        isFolder=True)
        except:
            pass
    xbmcplugin.setContent(__handle__, 'files')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.furk_files')
示例#8
0
def search_history():
    import xbmc, xbmcgui, xbmcplugin
    import sys, os
    from urlparse import parse_qsl
    import urllib
    from resources.lib.modules.nav_utils import build_url, setView
    from resources.lib.modules.settings import get_theme
    try:
        params = dict(parse_qsl(sys.argv[2].replace('?', '')))
        (search_setting, display_title) = ('movie_queries', 'MOVIE') if params['action'] == 'movie' else ('tvshow_queries', 'TVSHOW') if params['action'] == 'tvshow' \
            else ('furk_video_queries', 'FURK VIDEO') if params['action'] == 'furk_video' else ('furk_audio_queries', 'FURK AUDIO') if params['action'] == 'furk_audio' \
            else ('easynews_video_queries', 'EASYNEWS VIDEO') if params['action'] == 'easynews_video' else ''
        history = _cache.get(search_setting)
        if not history: return
    except:
        return
    for h in history:
        try:
            cm = []
            name = urllib.unquote(h)
            url_params = {'mode': 'build_movie_list', 'action': 'tmdb_movies_search', 'query': name} if params['action'] == 'movie' \
                else {'mode': 'build_tvshow_list', 'action': 'tmdb_tv_search', 'query': name} if params['action'] == 'tvshow' \
                else {'mode': 'furk.search_furk', 'db_type': 'video', 'query': name} if params['action'] == 'furk_video' \
                else {'mode': 'furk.search_furk', 'db_type': 'audio', 'music': True, 'query': name} if params['action'] == 'furk_audio' \
                else {'mode': 'easynews.search_easynews', 'query': name} if params['action'] == 'easynews_video' \
                else ''
            display = '[B]%s SEARCH : [/B]' % display_title + name
            url = build_url(url_params)
            cm.append(("[B]Remove from history[/B]",'XBMC.RunPlugin(%s?mode=%s&setting_id=%s&name=%s)' \
                % (sys.argv[0], 'remove_from_history', search_setting, name)))
            listitem = xbmcgui.ListItem(display,
                                        iconImage=os.path.join(
                                            get_theme(), 'search.png'))
            listitem.setArt({
                'fanart':
                os.path.join(
                    xbmc.translatePath(__addon__.getAddonInfo('path')),
                    'fanart.png')
            })
            listitem.setInfo(type='video', infoLabels={'Title': name})
            listitem.addContextMenuItems(cm)
            xbmcplugin.addDirectoryItem(int(sys.argv[1]),
                                        url,
                                        listitem,
                                        isFolder=True)
        except:
            pass
    xbmcplugin.setContent(int(sys.argv[1]), 'files')
    xbmcplugin.endOfDirectory(int(sys.argv[1]))
    setView('view.main')
示例#9
0
 def display_results(self):
     def _build_directory(item, item_no):
         try:
             uncached = item.get('uncached', False)
             external = item.get('external', False)
             mode = 'furk.add_uncached_file' if uncached else 'play_file'
             url = build_url({'mode': mode, 'title': item.get('title'), 'source': json.dumps([item])})
             cm = []
             if external: display_name = item.get("label")
             else: display_name = item.get("display_name")
             display = '%02d | %s' % (item_no+1, display_name)
             listitem = xbmcgui.ListItem(display)
             listitem.setArt({'poster': meta['poster'], 'fanart': meta['fanart'], 'thumb': meta['poster']})
             playback_params = {'mode': 'playback_menu', 'from_results': True}
             cm.append(("[B]Options[/B]",'XBMC.RunPlugin(%s)' % build_url(playback_params)))
             if not uncached:
                 if item['scrape_provider'] == 'furk':
                     add_files_params = {'mode': 'furk.add_to_files', 'name': item.get("name"), 'item_id': item.get("id")}
                     cm.append(("[B]Add to My Files[/B]",'XBMC.RunPlugin(%s)'  % build_url(add_files_params)))
                 if 'PACK' in display:
                     down_archive_params = {'mode': 'download_file', 'name': item.get("name"), 'url': item.get("url_dl"), 'db_type': 'archive', 'image': default_furk_icon}
                     cm.append(("[B]Download Archive[/B]",'XBMC.RunPlugin(%s)' % build_url(down_archive_params)))
                 if item['scrape_provider'] not in ('local', 'downloads'):
                     down_file_params = {'mode': 'download_file', 'name': meta.get('rootname'), 'url': item.get("url_dl"), 'image': meta.get('poster', ''), 'source': json.dumps([item]), 'meta': meta_json}
                     if item['scrape_provider'] == 'furk': down_file_params['archive'] = True
                     cm.append(("[B]Download File[/B]",'XBMC.RunPlugin(%s)' % build_url(down_file_params)))
             listitem.addContextMenuItems(cm)
             if meta['vid_type'] == 'movie': listitem.setInfo('video', {'title': meta.get('title', ''), 'year': meta.get('year', ''), 'plot': meta.get('plot', '')})
             elif meta['vid_type'] == 'episode': listitem.setInfo('video', {'title': meta.get('rootname', ''), 'plot': meta.get('plot', '')})
             item_list.append({'url': url, 'list_item': listitem, 'item_no': item_no})
         except: pass
     xbmc.PlayList(xbmc.PLAYLIST_VIDEO).clear()
     xbmc.PlayList(xbmc.PLAYLIST_MUSIC).clear()
     item_list = []
     threads = []
     try: results = json.loads(window.getProperty('fen_search_results'))
     except: return
     meta = json.loads(window.getProperty('fen_media_meta'))
     meta_json = window.getProperty('fen_media_meta')
     if results[0].get('play_local', False) or results[0].get('play_downloads', False) or results[0].get('autoplay', False): return self.play_auto()
     total = len(results)
     [threads.append(Thread(_build_directory, results[i], i)) for i in range(total) if i <= total]
     [i.start() for i in threads]
     [i.join() for i in threads]
     item_list = sorted(item_list, key=lambda k: k['item_no'])
     for i in item_list: xbmcplugin.addDirectoryItem(__handle__, i['url'], i['list_item'], isFolder=True)
     xbmcplugin.setContent(__handle__, 'files')
     xbmcplugin.endOfDirectory(__handle__)
     setView('view.media_results')
示例#10
0
 def furkTFile(self, file_id):
     from resources.lib.modules.furk_api import FurkAPI
     from resources.lib.indexers.furk import get_release_quality
     hide_busy_dialog()
     close_all_dialog()
     t_files = FurkAPI().t_files(file_id)
     t_files = [i for i in t_files if 'video' in i['ct'] and 'bitrate' in i]
     meta = json.loads(window.getProperty('fen_media_meta'))
     from_library = meta.get('from_library', False)
     not_widget = xbmc.getInfoLabel('Container.PluginName')
     use_dialog = True if from_library or not not_widget else settings.use_dialog()
     display_list = []
     if use_dialog:
         display_list = ['%02d | [B]%s[/B] | [B]%.2f GB[/B] | [I]%s[/I]' % \
                         (count, get_release_quality(i['name'], i['url_dl'], t_file='yep')[0],
                         float(i['size'])/1073741824,
                         clean_file_name(i['name']).upper()) for count, i in enumerate(t_files, 1)]
         chosen = dialog.select("Fen Results", display_list)
         if chosen < 0: return None
         chosen_result = t_files[chosen]
         url_dl = chosen_result['url_dl']
         from resources.lib.modules.player import FenPlayer
         return FenPlayer().run(url_dl)
     for count, item in enumerate(t_files, 1):
         try:
             cm = []
             url_params = {'mode': 'media_play', 'url': item['url_dl']}
             url = build_url(url_params)
             name = clean_file_name(item['name'])
             video_quality, video_type = get_release_quality(item['name'], item['url_dl'], t_file='yep')
             json_meta = json.dumps(meta)
             display_name = '%02d | [B]%s[/B] | [B]%s[/B] | [B]%.2f GB[/B] | [I]%s[/I]' % (count, video_quality, video_type, float(item['size'])/1073741824, name.upper())
             listitem = xbmcgui.ListItem(display_name)
             listitem.setArt({'poster': meta.get('poster', ''), 'thumb': meta.get('poster', ''), 'fanart': meta.get('fanart')})
             playback_params = {'mode': 'playback_menu', 'from_results': True}
             down_file_params = {'mode': 'download_file', 'name': item['name'], 'url': item['url_dl'], 'meta': json_meta}
             cm.append(("[B]Options[/B]",'XBMC.RunPlugin(%s)' % build_url(playback_params)))
             cm.append(("[B]Download File[/B]",'XBMC.RunPlugin(%s)' % build_url(down_file_params)))
             listitem.addContextMenuItems(cm)
             if meta.get('vid_type') == 'movie': listitem.setInfo('video', {'title': meta.get('title', ''), 'year': meta.get('year', ''), 'plot': meta.get('plot', '')})
             else: listitem.setInfo('video', {'title': meta['rootname'], 'plot': meta.get('plot', '')})
             xbmcplugin.addDirectoryItem(__handle__, url, listitem, isFolder=True)
         except: pass
     xbmcplugin.setContent(__handle__, 'files')
     xbmcplugin.endOfDirectory(__handle__)
     setView('view.pack_results')
示例#11
0
def search_easynews():
    from resources.lib.modules.history import add_to_search_history
    params = dict(parse_qsl(sys.argv[2].replace('?','')))
    default = params.get('suggestion', '')
    search_title = clean_file_name(params.get('query')) if ('query' in params and params.get('query') != 'NA') else None
    if not search_title: search_title = dialog.input('Enter search Term', type=xbmcgui.INPUT_ALPHANUM, defaultt=default)
    if not search_title: return
    try:
        search_name = clean_file_name(urllib.unquote(search_title))
        add_to_search_history(search_name, 'easynews_video_queries')
        files = EasyNews.search(search_name)
        if not files: return dialog.ok('No results', 'No results')
        files = files[0:int(__addon__.getSetting('easynews_limit'))]
        easynews_file_browser(files)
    except: pass
    xbmcplugin.setContent(__handle__, 'files')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.easynews_files')
示例#12
0
def build_next_episode():
    sync_watched_trakt_to_fen()
    try:
        threads = []
        seen = set()
        ep_list = []
        ne_settings = settings.nextep_content_settings()
        ne_display = settings.nextep_display_settings()
        if ne_settings['include_unwatched']:
            for i in get_unwatched_next_episodes(): ep_list.append(i)
        if settings.watched_indicators() in (1, 2):
            from resources.lib.modules.trakt import trakt_get_next_episodes
            info = trakt_get_next_episodes()
            for item in info:
                try:
                    ep_list.append({"tmdb_id": get_trakt_tvshow_id(item), "season": item['season'], "episode": item['number'], "last_played": item['show']['last_watched_at']})
                except: pass
        else:
            settings.check_database(WATCHED_DB)
            dbcon = database.connect(WATCHED_DB)
            dbcur = dbcon.cursor()
            dbcur.execute('''SELECT media_id, season, episode, last_played FROM watched_status WHERE db_type=?''', ('episode',))
            rows = dbcur.fetchall()
            rows = sorted(rows, key = lambda x: (x[0], x[1], x[2]), reverse=True)
            [ep_list.append({"tmdb_id": a, "season": int(b), "episode": int(c), "last_played": d}) for a, b, c, d in rows if not (a in seen or seen.add(a))]
            ep_list = [x for x in ep_list if x['tmdb_id'] not in check_for_next_episode_excludes()]
        ep_list = [i for i in ep_list if not i['tmdb_id'] == None]
        for item in ep_list: threads.append(Thread(process_eps, item, ne_settings, ne_display))
        [i.start() for i in threads]
        [i.join() for i in threads]
        r = [i for i in result if i is not None]
        r = sort_next_eps(r, ne_settings)
        listitems = [i['listitem'] for i in r]
        xbmcplugin.addDirectoryItems(__handle__, listitems, len(listitems))
        xbmcplugin.setContent(__handle__, 'episodes')
        xbmcplugin.endOfDirectory(__handle__)
        setView('view.progress_next_episode')
    except:
        from resources.lib.modules.nav_utils import notification
        notification('Error getting Next Episode Info', time=3500)
        pass
示例#13
0
def search_furk():
    from resources.lib.modules.history import add_to_search_history
    params = dict(parse_qsl(sys.argv[2].replace('?', '')))
    default = params.get('suggestion', '')
    search_title = clean_file_name(params.get('query')) if (
        'query' in params and params.get('query') != 'NA') else None
    if not search_title:
        search_title = dialog.input('Enter search Term',
                                    type=xbmcgui.INPUT_ALPHANUM,
                                    defaultt=default)
    if not search_title: return
    try:
        search_name = clean_file_name(urllib.unquote(search_title))
        search_method = 'search' if 'accurate_search' in params else 'direct_search'
        search_setting = 'furk_video_queries' if params.get(
            'db_type') == 'video' else 'furk_audio_queries'
        list_type = 'video' if params.get('db_type') == 'video' else 'audio'
        add_to_search_history(search_name, search_setting)
        files = Furk.direct_search(
            search_name) if search_method == 'direct_search' else Furk.search(
                search_name)
        if not files: return dialog.ok('No results', 'No results')
        if not settings.include_uncached_results():
            try:
                files = [
                    i for i in files
                    if i.get('is_ready', '0') == '1' and i['type'] == list_type
                ]
            except:
                return dialog.ok('No results', 'No results')
        files = files[0:int(__addon__.getSetting('furk.limit'))]
        furk_file_browser(files, params, display_mode='search')
    except:
        pass
    xbmcplugin.setContent(__handle__, 'files')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.furk_files')
示例#14
0
def build_next_episode_manager():
    from urlparse import parse_qsl
    from resources.lib.indexers.tvshows import aired_episode_number_tvshow
    from resources.lib.modules.nav_utils import add_dir
    from resources.lib.modules.indicators_bookmarks import get_watched_status_tvshow
    params = dict(parse_qsl(sys.argv[2].replace('?','')))
    NEXT_EP_UNWATCHED = __addon__.getSetting('nextep.unwatched_colour')
    if not NEXT_EP_UNWATCHED or NEXT_EP_UNWATCHED == '': NEXT_EP_UNWATCHED = 'red'
    VIEW_NEM = __addon__.getSetting('view.main')
    sorted_list = []
    action = params['action']
    if action == 'manage_unwatched':
        tmdb_list = [i['tmdb_id'] for i in get_unwatched_next_episodes()]
        heading = 'Select Show to remove from Fen Next Episode:'
    elif settings.watched_indicators() in (1, 2):
        from resources.lib.modules.trakt import trakt_get_next_episodes
        tmdb_list, exclude_list = trakt_get_next_episodes(include_hidden=True)
        heading = 'Select Show to Hide/Unhide from Trakt Progress:'
    else:
        settings.check_database(WATCHED_DB)
        dbcon = database.connect(WATCHED_DB)
        dbcur = dbcon.cursor()
        dbcur.execute('''SELECT media_id FROM watched_status WHERE db_type=? GROUP BY media_id''', ('episode',))
        rows = dbcur.fetchall()
        tmdb_list = [row[0] for row in rows]
        exclude_list = check_for_next_episode_excludes()
        heading = 'Select Show to Include/Exclude in Fen Next Episode:'
    add_dir({'mode': 'nill'}, '[I][COLOR=grey][B]INFO:[/B][/COLOR] [COLOR=grey2]%s[/COLOR][/I]' % heading, iconImage='settings.png')
    if not tmdb_list:
        from resources.lib.modules.nav_utils import notification
        notification('No Shows Present', time=5000)
    else:
        for tmdb_id in tmdb_list:
            try:
                meta = make_fresh_tvshow_meta('tmdb_id', tmdb_id)
                if action == 'manage_unwatched':
                    action, display = 'remove', '[COLOR=%s][UNWATCHED][/COLOR] %s' % (NEXT_EP_UNWATCHED, meta['title'])
                    url_params = {'mode': 'add_next_episode_unwatched', 'action': 'remove', 'tmdb_id': meta['tmdb_id'], 'title': meta['title']}
                elif settings.watched_indicators() in (1, 2):
                    action, display = 'unhide' if str(meta['tmdb_id']) in exclude_list else 'hide', '[COLOR=red][EXCLUDED][/COLOR] %s' % meta['title'] if str(meta['tmdb_id']) in exclude_list else '[COLOR=green][INCLUDED][/COLOR] %s' % meta['title']
                    url_params = {"mode": "hide_unhide_trakt_items", "action": action, "media_type": "shows", "media_id": meta['imdb_id'], "section": "progress_watched"}
                else:
                    action, display = 'remove' if str(meta['tmdb_id']) in exclude_list else 'add', '[COLOR=red][EXCLUDED][/COLOR] %s' % meta['title'] if str(meta['tmdb_id']) in exclude_list else '[COLOR=green][INCLUDED][/COLOR] %s' % meta['title']
                    url_params = {'mode': 'add_to_remove_from_next_episode_excludes', 'action': action, 'title': meta['title'], 'media_id': meta['tmdb_id']}
                sorted_list.append({'tmdb_id': tmdb_id, 'display': display, 'url_params': url_params, 'meta': json.dumps(meta)})
            except: pass
        sorted_items = sorted(sorted_list, key=lambda k: k['display'])
        for i in sorted_items:
            try:
                cm = []
                meta = json.loads(i['meta'])
                rootname = meta['title'] + " (" + str(meta['year']) + ")"
                meta['rootname'] = rootname
                aired_episodes = aired_episode_number_tvshow(meta)
                playcount, overlay, total_watched, total_unwatched = get_watched_status_tvshow(meta['tmdb_id'], aired_episodes)
                url = build_url(i['url_params'])
                browse_url = build_url({'mode': 'build_season_list', 'meta': i['meta']})
                cm.append(("[B]Browse...[/B]",'XBMC.Container.Update(%s)' % browse_url))
                listitem = xbmcgui.ListItem(i['display'])
                listitem.setProperty('watchedepisodes', str(total_watched))
                listitem.setProperty('unwatchedepisodes', str(total_unwatched))
                listitem.setProperty('totalepisodes', str(aired_episodes))
                listitem.setProperty('totalseasons', str(meta['number_of_seasons']))
                listitem.addContextMenuItems(cm)
                listitem.setArt({'poster': meta['poster'],
                                'fanart': meta['fanart'],
                                'banner': meta['banner'],
                                'clearart': meta['clearart'],
                                'clearlogo': meta['clearlogo'],
                                'landscape': meta['landscape']})
                listitem.setCast(meta['cast'])
                listitem.setInfo(
                    'video', {
                        'title': meta['title'], 'size': '0', 'duration': meta['duration'],
                        'plot': meta['plot'], 'rating': meta['rating'], 'premiered': meta['premiered'],
                        'studio': meta['studio'],'year': meta['year'],
                        'genre': meta['genre'],'imdbnumber': meta['imdb_id'], 'votes': meta['votes'],
                        'playcount': playcount, 'overlay': overlay})
                xbmcplugin.addDirectoryItem(__handle__, url, listitem, isFolder=True)
            except: pass
        xbmcplugin.setContent(__handle__, 'tvshows')
        xbmcplugin.endOfDirectory(__handle__, cacheToDisc=False)
        setView(VIEW_NEM)
示例#15
0
def browse_audio_album(t_files=None, name=None):
    def build_list_object():
        try:
            cm = []
            url_params = {
                'mode': 'media_play',
                'url': item['url_dl'],
                'rootname': 'nill'
            }
            url = build_url(url_params)
            track_name = clean_file_name(
                batch_replace(to_utf8(item['name']), formats)).upper()
            listitem = xbmcgui.ListItem(track_name)
            down_file_params = {
                'mode': 'download_file',
                'name': item['name'],
                'url': item['url_dl'],
                'image': default_furk_icon,
                'db_type': 'furk_file'
            }
            cm.append(("[B]Download File[/B]",
                       'XBMC.RunPlugin(%s)' % build_url(down_file_params)))
            listitem.addContextMenuItems(cm)
            listitem.setThumbnailImage(default_furk_icon)
            listitem.setArt({'fanart': fanart})
            listitem.setInfo(type='music',
                             infoLabels={
                                 'title': track_name,
                                 'size': int(item['size']),
                                 'album': item['path'],
                                 'duration': item['length']
                             })
            listitem.setProperty("IsPlayable", "true")
            xbmcplugin.addDirectoryItem(__handle__,
                                        url,
                                        listitem,
                                        isFolder=False)
        except:
            pass

    from resources.lib.modules.utils import batch_replace
    formats = ('.3gp', ''), ('.aac', ''), ('.flac', ''), ('.m4a', ''), (
        '.mp3', ''), ('.ogg', ''), ('.raw',
                                    ''), ('.wav',
                                          ''), ('.wma',
                                                ''), ('.webm',
                                                      ''), ('.ra', ''), ('.rm',
                                                                         '')
    params = dict(parse_qsl(sys.argv[2].replace('?', '')))
    seperate = False
    if not t_files:
        seperate = True
        t_fs = window.getProperty('furk_t_files_json')
        t_files = json.loads(t_fs)
    t_files = [i for i in t_files if 'audio' in i['ct']]
    if seperate:
        if dialog.yesno("Fen Music Player", 'Browse Songs or Play Full Album?',
                        '', '', 'Play Now', 'Browse'):
            for item in t_files:
                item_path = clean_file_name(item['path'])
                if item_path == params.get('item_path'):
                    build_list_object()
            xbmcplugin.endOfDirectory(__handle__)
            setView('view.furk_files')
        else:
            from resources.lib.modules.player import FenPlayer
            FenPlayer().playAudioAlbum(t_files, from_seperate=True)
    else:
        for item in t_files:
            build_list_object()
        xbmcplugin.setContent(__handle__, 'files')
        xbmcplugin.endOfDirectory(__handle__)
        setView('view.furk_files')
示例#16
0
 def fetch_list(self):
     try:
         params = dict(parse_qsl(sys.argv[2].replace('?', '')))
         worker = True
         mode = params.get('mode')
         page_no = int(params.get('new_page', 1))
         letter = params.get('new_letter', 'None')
         search_name = ''
         content_type = 'movies'
         var_module = 'tmdb' if 'tmdb' in self.action else 'trakt' if 'trakt' in self.action else 'imdb' if 'imdb' in self.action else ''
         try:
             exec('from resources.lib.modules.%s import %s as function' %
                  (var_module, self.action))
         except:
             pass
         if self.action in ('tmdb_movies_popular',
                            'tmdb_movies_blockbusters',
                            'tmdb_movies_in_theaters',
                            'tmdb_movies_top_rated', 'tmdb_movies_upcoming',
                            'tmdb_movies_latest_releases',
                            'tmdb_movies_premieres',
                            'trakt_movies_trending',
                            'trakt_movies_anticipated',
                            'trakt_movies_top10_boxoffice'):
             data = function(page_no)
             if 'tmdb' in self.action:
                 for item in data['results']:
                     self.list.append(item['id'])
             else:
                 for item in data:
                     self.list.append(get_trakt_movie_id(item))
             if self.action not in ('trakt_movies_top10_boxoffice'):
                 self.new_page = {
                     'mode':
                     mode,
                     'action':
                     self.action,
                     'new_page':
                     str((data['page'] if 'tmdb' in self.action else page_no
                          ) + 1),
                     'foldername':
                     self.action
                 }
         elif self.action in ('trakt_collection', 'trakt_watchlist'):
             data, passed_list, total_pages, limit = function(
                 'movies', page_no, letter, params.get('passed_list', ''))
             self.list = [i['media_id'] for i in data]
             if total_pages > 1: self.total_pages = total_pages
             if len(data) == limit:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(page_no + 1),
                     'new_letter': letter,
                     'passed_list': passed_list,
                     'foldername': self.action
                 }
         elif self.action == 'imdb_movies_oscar_winners':
             self.id_type = 'imdb_id'
             self.list = function(page_no)
             self.new_page = {
                 'mode': mode,
                 'action': self.action,
                 'new_page': str(page_no + 1),
                 'foldername': self.action
             }
         elif self.action == ('trakt_movies_mosts'):
             for item in (function(params['period'], params['duration'],
                                   page_no)):
                 self.list.append(get_trakt_movie_id(item))
             self.new_page = {
                 'mode': mode,
                 'action': self.action,
                 'period': params['period'],
                 'duration': params['duration'],
                 'new_page': str(page_no + 1),
                 'foldername': self.action
             }
         elif self.action == 'tmdb_movies_genres':
             genre_id = params[
                 'genre_id'] if 'genre_id' in params else self.multiselect_genres(
                     params.get('genre_list'))
             if not genre_id: return
             data = function(genre_id, page_no)
             self.list = [i['id'] for i in data['results']]
             if data['page'] < data['total_pages']:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(data['page'] + 1),
                     'genre_id': genre_id,
                     'foldername': genre_id
                 }
         elif self.action == 'tmdb_movies_languages':
             language = params['language']
             if not language: return
             data = function(language, page_no)
             self.list = [i['id'] for i in data['results']]
             if data['page'] < data['total_pages']:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(data['page'] + 1),
                     'language': language,
                     'foldername': language
                 }
         elif self.action == 'tmdb_movies_year':
             data = function(params['year'], page_no)
             self.list = [i['id'] for i in data['results']]
             if data['page'] < data['total_pages']:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(data['page'] + 1),
                     'year': params.get('year'),
                     'foldername': params.get('year')
                 }
         elif self.action == 'tmdb_movies_certifications':
             data = function(params['certification'], page_no)
             self.list = [i['id'] for i in data['results']]
             if data['page'] < data['total_pages']:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(data['page'] + 1),
                     'certification': params.get('certification'),
                     'foldername': params.get('certification')
                 }
         elif self.action in ('favourites_movies', 'subscriptions_movies',
                              'kodi_library_movies', 'watched_movies'):
             (var_module, import_function) = (
                 'favourites', 'retrieve_favourites'
             ) if 'favourites' in self.action else (
                 'subscriptions', 'retrieve_subscriptions'
             ) if 'subscriptions' in self.action else (
                 'indicators_bookmarks',
                 'get_watched_items') if 'watched' in self.action else (
                     'kodi_library', 'retrieve_kodi_library'
                 ) if 'library' in self.action else ''
             try:
                 exec(
                     'from resources.lib.modules.%s import %s as function' %
                     (var_module, import_function))
             except:
                 return
             if self.action == 'kodi_library_movies':
                 self.id_type = 'imdb_id'
             data, passed_list, total_pages, limit = function(
                 'movie', page_no, letter, params.get('passed_list', ''))
             self.list = [i['media_id'] for i in data]
             if total_pages > 1: self.total_pages = total_pages
             if len(data) == limit:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(page_no + 1),
                     'new_letter': letter,
                     'passed_list': passed_list,
                     'foldername': self.action
                 }
         elif self.action == 'in_progress_movies':
             from resources.lib.modules.in_progress import in_progress_movie as function
             self.list = function('movie')
             xbmcplugin.addSortMethod(
                 __handle__, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
         elif self.action == 'tmdb_movies_similar':
             data = function(params['tmdb_id'], page_no)
             self.list = [i['id'] for i in data['results']]
             if data['page'] < data['total_pages']:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(data['page'] + 1),
                     'foldername': self.action,
                     'tmdb_id': params.get('tmdb_id')
                 }
         elif self.action == 'trakt_movies_related':
             for item in function(params['imdb_id'], page_no):
                 self.list.append(get_trakt_movie_id(item))
             self.new_page = {
                 'mode':
                 mode,
                 'action':
                 self.action,
                 'new_page':
                 str(
                     int((params.get('new_page') if 'new_page' in
                          params else 1)) + 1),
                 'foldername':
                 self.action,
                 'imdb_id':
                 params.get('imdb_id')
             }
         elif self.action == 'trakt_recommendations':
             for item in function('movies'):
                 self.list.append(item['ids']['tmdb'])
         elif self.action == 'tmdb_popular_people':
             import os
             worker = False
             icon_directory = settings.get_theme()
             data = function(page_no)
             for item in data['results']:
                 cm = []
                 actor_poster = "http://image.tmdb.org/t/p/original%s" % item[
                     'profile_path'] if item[
                         'profile_path'] else os.path.join(
                             icon_directory, 'app_logo.png')
                 url_params = {
                     'mode': 'build_movie_list',
                     'action': 'tmdb_movies_actor_roles',
                     'actor_id': item['id']
                 }
                 url = build_url(url_params)
                 cm.append((
                     "[B]Extended Info[/B]",
                     'RunScript(script.extendedinfo,info=extendedactorinfo,id=%s)'
                     % item['id']))
                 listitem = xbmcgui.ListItem(item['name'])
                 listitem.setArt({
                     'poster': actor_poster,
                     'fanart': __addon__.getAddonInfo('fanart')
                 })
                 listitem.addContextMenuItems(cm)
                 xbmcplugin.addDirectoryItem(__handle__,
                                             url,
                                             listitem,
                                             isFolder=True)
             if data['page'] < data['total_pages']:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(int(data['page']) + 1),
                     'foldername': self.action
                 }
         elif self.action == 'tmdb_movies_actor_roles':
             data, passed_list, total_pages, limit = function(
                 params['actor_id'], page_no, letter,
                 params.get('passed_list', ''))
             self.list = [i['media_id'] for i in data]
             if total_pages > 1: self.total_pages = total_pages
             if len(data) == limit:
                 self.new_page = {
                     'mode': mode,
                     'action': self.action,
                     'new_page': str(page_no + 1),
                     'new_letter': letter,
                     'passed_list': passed_list,
                     'actor_id': params['actor_id'],
                     'foldername': self.action
                 }
         elif self.action in ('tmdb_movies_search',
                              'tmdb_movies_people_search'):
             import urllib
             if params.get('query') == 'NA':
                 search_title = dialog.input("Search Fen",
                                             type=xbmcgui.INPUT_ALPHANUM)
                 search_name = urllib.unquote(search_title)
             else:
                 search_name = urllib.unquote(params.get('query'))
             if not search_name: return
             if self.action == 'tmdb_movies_people_search':
                 data, passed_list, total_pages, limit = function(
                     search_name, page_no, letter,
                     params.get('passed_list', ''))
                 if total_pages > 1: self.total_pages = total_pages
                 if len(data) == limit:
                     self.new_page = {
                         'mode': mode,
                         'action': self.action,
                         'new_page': str(page_no + 1),
                         'new_letter': letter,
                         'passed_list': passed_list,
                         'query': search_name,
                         'foldername': search_name
                     }
             else:
                 data = function(search_name, page_no)
                 if self.action == 'tmdb_movies_search':
                     if data['page'] < data['total_pages']:
                         self.new_page = {
                             'mode': mode,
                             'action': self.action,
                             'new_page': str(int(data['page']) + 1),
                             'query': search_name,
                             'foldername': search_name
                         }
             self.list = [i['id'] for i in data['results']
                          ] if self.action == 'tmdb_movies_search' else [
                              i['media_id'] for i in data
                          ]
         if self.total_pages:
             url_params = {
                 'mode': 'build_navigate_to_page',
                 'db_type': 'Movies',
                 'current_page': page_no,
                 'total_pages': self.total_pages,
                 'transfer_mode': mode,
                 'transfer_action': self.action,
                 'passed_list': passed_list,
                 'foldername': self.action,
                 'query': search_name,
                 'actor_id': params.get('actor_id', '')
             }
             self.add_dir(url_params, 'Jump To...',
                          'Jump To a Certain Page/Letter...',
                          'item_jump.png')
         if worker: self.worker()
         if self.new_page: self.add_dir(self.new_page)
     except:
         pass
     xbmcplugin.setContent(__handle__, content_type)
     xbmcplugin.endOfDirectory(__handle__)
     setView('view.movies')
示例#17
0
def build_season_list():
    params = dict(parse_qsl(sys.argv[2].replace('?', '')))
    meta = json.loads(
        params.get('meta')) if 'meta' in params else tikimeta.tvshow_meta(
            'tmdb_id', params.get('tmdb_id'))
    show_specials = settings.show_specials()
    use_season_title = settings.use_season_title()
    season_data = [i for i in meta['season_data'] if i['season_number'] > 0
                   ] if not show_specials else meta['season_data']
    watched_indicators = settings.watched_indicators()
    for item in season_data:
        try:
            cm = []
            plot = item['overview'] if item['overview'] != '' else meta['plot']
            title = item['name'] if use_season_title else 'Season %s' % str(
                item['season_number'])
            season_poster = "http://image.tmdb.org/t/p/original%s" % item[
                'poster_path'] if item['poster_path'] is not None else meta[
                    'poster']
            aired_episodes = aired_episode_number_season(
                meta, item['season_number'])
            playcount, overlay, watched, unwatched = get_watched_status_season(
                meta['tmdb_id'], item['season_number'], aired_episodes)
            watched_title = 'Trakt' if watched_indicators in (1, 2) else "Fen"
            watched_params = {
                "mode": "mark_season_as_watched_unwatched",
                "action": 'mark_as_watched',
                "title": meta['title'],
                "year": meta['year'],
                "media_id": meta['tmdb_id'],
                "imdb_id": meta["imdb_id"],
                "tvdb_id": meta["tvdb_id"],
                "season": item['season_number']
            }
            unwatched_params = {
                "mode": "mark_season_as_watched_unwatched",
                "action": 'mark_as_unwatched',
                "title": meta['title'],
                "year": meta['year'],
                "media_id": meta['tmdb_id'],
                "imdb_id": meta["imdb_id"],
                "tvdb_id": meta["tvdb_id"],
                "season": item['season_number']
            }
            playback_menu_params = {'mode': 'playback_menu'}
            cm.append(("[B]Mark Watched %s[/B]" % watched_title,
                       'XBMC.RunPlugin(%s)' % build_url(watched_params)))
            cm.append(("[B]Mark Unwatched %s[/B]" % watched_title,
                       'XBMC.RunPlugin(%s)' % build_url(unwatched_params)))
            cm.append(("[B]Options[/B]",
                       'XBMC.RunPlugin(%s)' % build_url(playback_menu_params)))
            cm.append(
                ("[B]Extended Info[/B]",
                 'RunScript(script.extendedinfo,info=extendedtvinfo,id=%s)' %
                 meta['tmdb_id']))
            url_params = {
                'mode': 'build_episode_list',
                'tmdb_id': meta['tmdb_id'],
                'season': str(item['season_number']),
                'season_id': item['id']
            }
            url = build_url(url_params)
            listitem = xbmcgui.ListItem(title)
            listitem.setProperty('watchedepisodes', str(watched))
            listitem.setProperty('unwatchedepisodes', str(unwatched))
            listitem.setProperty('totalepisodes', str(item['episode_count']))
            listitem.addContextMenuItems(cm)
            listitem.setArt({
                'poster': season_poster,
                'fanart': meta['fanart'],
                'banner': meta['banner'],
                'clearlogo': meta['clearlogo'],
                'landscape': meta['landscape']
            })
            listitem.setCast(meta['cast'])
            listitem.setInfo(
                'video', {
                    'mediatype': 'tvshow',
                    'trailer': str(meta['trailer']),
                    'title': meta.get('title'),
                    'size': '0',
                    'duration': meta.get('episode_run_time'),
                    'plot': plot,
                    'rating': meta.get('rating'),
                    'premiered': meta.get('premiered'),
                    'studio': meta.get('studio'),
                    'year': meta.get('year'),
                    'genre': meta.get('genre'),
                    'code': meta.get('imdb_id'),
                    'tvshowtitle': meta.get('title'),
                    'imdbnumber': meta.get('imdb_id'),
                    'votes': meta.get('votes'),
                    'episode': str(item['episode_count']),
                    'playcount': playcount,
                    'overlay': overlay
                })
            xbmcplugin.addDirectoryItem(__handle__,
                                        url,
                                        listitem,
                                        isFolder=True)
        except:
            pass
    xbmcplugin.setContent(__handle__, 'seasons')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.seasons')
    window.setProperty('fen_media_meta', json.dumps(meta))
示例#18
0
                    'director': director,
                    'playcount': playcount,
                    'overlay': overlay
                })
            if not not_widget:
                listitem.setProperty("fen_widget", 'true')
                listitem.setProperty("fen_playcount", str(playcount))
            xbmcplugin.addDirectoryItem(__handle__,
                                        url,
                                        listitem,
                                        isFolder=False)
        except:
            pass
    xbmcplugin.setContent(__handle__, 'episodes')
    xbmcplugin.endOfDirectory(__handle__)
    setView('view.episodes')


def build_episode(item):
    from resources.lib.modules.utils import make_day

    def check_for_unaired():
        try:
            d = first_aired.split('-')
            episode_date = date(int(d[0]), int(d[1]), int(d[2]))
        except:
            episode_date = None
        current_adjusted_date = settings.adjusted_datetime()
        unaired = False
        if not episode_date or current_adjusted_date < episode_date:
            unaired = True