def search(params): listing = [] content = "videos" page = 1 update = False category = "Search" if params.mod == "index": listing = get_listing("search") else: category = category + "/" + params.mod result = query = "" dialog = xbmcgui.Dialog() if params.mod == "Discover": content = "" if params.page: page = params.page update = True results = client("/search/movie", get_data={ "type": "discover", "primary_release_year": 2018, "sort_by": "popularity.desc", "page": page }) else: query = dialog.input(translate('Search ' + params.mod), type=xbmcgui.INPUT_ALPHANUM) content = "videos" if query == "": return Plugin.create_listing(listing, succeeded=False) results = client("/search/" + params.mod.lower()[:-1], get_data={ 'page': page, 'type': "search", "language": 'ru', 'query': query }) for i in results: item = [] if params.mod == "Shows": item = makeTvShowItem(i) else: item = makeMovieItem(i) listing.append(item) if len(listing) > 19 and params.mod == "Discover": listing.append({ "label": "Next Page >", "url": plugin.get_url(action='search', mod=params.mod, page=int(page) + 1) }) return Plugin.create_listing(listing, succeeded=True, content=content, update_listing=update, category="Search")
def play(params): touch(TORRSERVED_HOST + params.link) hash = params.link[17:57] success = makePreloadDialog(hash) return Plugin.resolve_url(TORRSERVED_HOST + params.link.replace('/preload/', '/view/'), succeeded=success)
def root(): resp = client("/echo") if not resp: notify(translate("Server is down") % TORRSERVED_HOST) return else: listing = get_listing("index") return Plugin.create_listing(listing, category="TorrServer:v " + resp)
def show_torrents(params): info = '{"TmdbID": "' + params.id + '", "VideoType": "' + params.type + '"}' filter = params.year title = params.title if (params.type == 'tvshow'): info = '{"TmdbID": "' + params.id + '", "VideoType": "show"}' pSelSeason = xbmcgui.Dialog() list = ["Season %d" % x for x in range(1, int(params.season) + 1)] list.insert(0, "All") ret = pSelSeason.select("Select Season", list) if ret != 0: selSeason = str(ret) filter = "S0" + selSeason + "|0" + selSeason + "x" else: filter = "" resp = client("/search/torrent", get_data={'query': title, 'ft': filter}) list = [] if resp is None: return False for tor in resp: size = 0 try: if (tor['Size'][-2:] == u"МБ" or tor['Size'][-2:].lower() == "mb"): size = int(tor['Size'][:3]) * 2 << 19 else: size = float(tor['Size'][:-3]) * float(2 << 29) except: pass name = parseName(tor['Name']) if tor['PeersUl'] >= 0: name = "%s [U:%d|D:%d]" % (name, tor['PeersUl'], tor['PeersDl']) list.append({ 'label': name, 'info': { 'video': { 'size': size, 'mediatype': 'video' } }, 'url': plugin.get_url(action="play_now", magnet=tor['Magnet']), 'is_folder': False, "is_playable": True, 'context_menu': [(translate('Add to DB'), 'RunPlugin(' + plugin.get_url( action='torrents', mod='add', magnet=tor['Magnet'], info=info) + ')')], }) return Plugin.create_listing(list, succeeded=True, content="videos", sort_methods=xbmcplugin.SORT_METHOD_SIZE, cache_to_disk=True)
def play_now(params): pDialog = xbmcgui.DialogProgress() pDialog.create("TorrServer", "Wait for info....") success = False counter = 0 selFile = None while True: if pDialog.iscanceled(): pDialog.close() client("/torrent/drop", post_data={"Hash": params.magnet[20:60]}) break time.sleep(0.5) stat = client("/torrent/play", get_data={ "stat": "true", "link": params.magnet, }) if stat is None or len(stat['FileStats']) == 0: counter += 1 if counter < 60: time.sleep(0.5) continue else: pDialog.close() break if len(stat['FileStats']) > 1 and selFile is None: sDialog = xbmcgui.Dialog() filelist = [] for f in stat['FileStats']: filelist.append(f['Path']) sel = sDialog.select('Choose a file', filelist) if sel == -1: client("/torrent/drop", post_data={"Hash": stat['Hash']}) break else: selFile = sel continue elif len(stat['FileStats']) == 1 and selFile is None: selFile = 0 continue else: pDialog.close() preload = touch(TORRSERVED_HOST + "/torrent/play?link=" + params.magnet + "&file=" + str(selFile)) success = makePreloadDialog(stat['Hash']) break return Plugin.resolve_url(TORRSERVED_HOST + "/torrent/play?link=" + params.magnet + "&file=" + str(selFile), succeeded=success)
def torrents(params): listing = [] if params.mod == "list": listing = get_listing("torrents") elif params.mod == "files": listing = makeFileList(params.hash) elif params.mod == "delete": client("/torrent/rem", post_data={"Hash": params.hash}) notify("Deleted!") xbmc.executebuiltin("Container.Refresh") return return Plugin.create_listing(listing, content="videos", category="Torrents")
# -*- coding: utf-8 -*- import os import json import time import urllib import xbmc import xbmcgui import xbmcplugin from torrserve.client import client, touch from torrserve.config import TORRSERVED_HOST, ADDON_PATH from torrserve.simpleplugin import Plugin from torrserve.utils import humanizeSize, notify, settingsIsOpen, parseName plugin = Plugin() translate = plugin.initialize_gettext() @plugin.action() def root(): resp = client("/echo") if not resp: notify(translate("Server is down") % TORRSERVED_HOST) return else: listing = get_listing("index") return Plugin.create_listing(listing, category="TorrServer:v " + resp) @plugin.action("torrents")