KoD 0.8.1
- riorganizzate le impostazioni - aggiunte descrizioni tag qualità su cb01 (presto anche sugli altri) - aggiunto il supporto alle serie di polpotv - fixato server mystream - fix Rinumerazione per episodi Nuovi
This commit is contained in:
12
addon.xml
12
addon.xml
@@ -1,4 +1,4 @@
|
||||
<addon id="plugin.video.kod" name="Kodi on Demand" provider-name="KOD Team" version="0.8">
|
||||
<addon id="plugin.video.kod" name="Kodi on Demand" provider-name="KOD Team" version="0.8.1">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
<import addon="script.module.libtorrent" optional="true"/>
|
||||
@@ -19,11 +19,11 @@
|
||||
<screenshot>resources/media/themes/ss/2.png</screenshot>
|
||||
<screenshot>resources/media/themes/ss/3.png</screenshot>
|
||||
</assets>
|
||||
<news>- tanti miglioramenti "sotto il cofano", supporto iniziale al futuro kodi 19
|
||||
- Nuova modalità di visualizzazione per episodio successivo
|
||||
- fixato wstream tramite l'aggiunta della finestra per risolvere il reCaptcha
|
||||
- aggiunta sezione "segnala un problema" in Aiuto
|
||||
- altri fix e migliorie varie a canali e server</news>
|
||||
<news>- riorganizzate le impostazioni
|
||||
- aggiunte descrizioni tag qualità su cb01 (presto anche sugli altri)
|
||||
- aggiunto il supporto alle serie di polpotv
|
||||
- fixato server mystream
|
||||
- fix Rinumerazione per episodi Nuovi</news>
|
||||
<description lang="it">Naviga velocemente sul web e guarda i contenuti presenti</description>
|
||||
<disclaimer>[COLOR red]The owners and submitters to this addon do not host or distribute any of the content displayed by these addons nor do they have any affiliation with the content providers.[/COLOR]
|
||||
[COLOR yellow]Kodi © is a registered trademark of the XBMC Foundation. We are not connected to or in any other way affiliated with Kodi, Team Kodi, or the XBMC Foundation. Furthermore, any software, addons, or products offered by us will receive no support in official Kodi channels, including the Kodi forums and various social networks.[/COLOR]</disclaimer>
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
"fastsubita": "https://fastsubita.online",
|
||||
"filmgratis": "https://www.filmaltadefinizione.org",
|
||||
"filmigratis": "https://filmigratis.org",
|
||||
"filmpertutti": "https://www.filmpertutti.plus",
|
||||
"filmsenzalimiticc": "https://www.filmsenzalimiti.tech",
|
||||
"filmstreaming01": "https://filmstreaming01.com",
|
||||
"guardarefilm": "https://www.guardarefilm.red",
|
||||
|
||||
@@ -158,7 +158,8 @@ def peliculas(item):
|
||||
|
||||
# patronBlock=[r'<div class="?sequex-page-left"?>(?P<block>.*?)<aside class="?sequex-page-right"?>',
|
||||
# '<div class="?card-image"?>.*?(?=<div class="?card-image"?>|<div class="?rating"?>)']
|
||||
if 'newest' not in item.args: patronNext = '<a class="?page-link"? href="?([^>]+)"?><i class="fa fa-angle-right">'
|
||||
# if 'newest' not in item.args:
|
||||
patronNext = '<a class="?page-link"? href="?([^>]+)"?><i class="fa fa-angle-right">'
|
||||
|
||||
return locals()
|
||||
|
||||
@@ -203,13 +204,6 @@ def findvideos(item):
|
||||
data = httptools.downloadpage(item.url).data
|
||||
data = re.sub('\n|\t', '', data)
|
||||
|
||||
# Extract the quality format
|
||||
patronvideos = '>([^<]+)</strong></div>'
|
||||
matches = re.compile(patronvideos, re.DOTALL).finditer(data)
|
||||
QualityStr = ""
|
||||
for match in matches:
|
||||
QualityStr = scrapertools.decodeHtmlentities(match.group(1))
|
||||
|
||||
# Estrae i contenuti - Streaming
|
||||
load_links(itemlist, '<strong>Streamin?g:</strong>(.*?)cbtable', "orange", "Streaming", "SD")
|
||||
|
||||
@@ -220,12 +214,9 @@ def findvideos(item):
|
||||
load_links(itemlist, '<strong>Streamin?g 3D[^<]+</strong>(.*?)cbtable', "pink", "Streaming 3D")
|
||||
|
||||
itemlist = support.server(item, itemlist=itemlist)
|
||||
if itemlist and QualityStr:
|
||||
itemlist.insert(0,
|
||||
Item(channel=item.channel,
|
||||
action="",
|
||||
title=support.typo(QualityStr,'[] color kod bold'),
|
||||
folder=False))
|
||||
# Extract the quality format
|
||||
patronvideos = '>([^<]+)</strong></div>'
|
||||
support.addQualityTag(item, itemlist, data, patronvideos)
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
@@ -9,8 +9,12 @@ from core import scrapertools, httptools, support
|
||||
from core.item import Item
|
||||
from platformcode import config
|
||||
|
||||
def findhost():
|
||||
page = httptools.downloadpage("https://www.filmpertutti.group/").data
|
||||
url = scrapertools.find_single_match(page, 'Il nuovo indirizzo di FILMPERTUTTI è <a href="([^"]+)')
|
||||
return url
|
||||
|
||||
host = config.get_channel_url()
|
||||
host = config.get_channel_url(findhost)
|
||||
headers = [['Referer', host]]
|
||||
list_servers = ['mixdrop', 'akvideo', 'wstream', 'onlystream', 'speedvideo']
|
||||
list_quality = ['HD', 'SD']
|
||||
|
||||
@@ -12,10 +12,6 @@ host = config.get_channel_url()
|
||||
list_servers = ['mixdrop', 'speedvideo', 'gounlimited', 'onlystream', 'youtube']
|
||||
list_quality = ['default']
|
||||
|
||||
|
||||
checklinks = config.get_setting('checklinks', 'piratestreaming')
|
||||
checklinks_number = config.get_setting('checklinks_number', 'piratestreaming')
|
||||
|
||||
headers = [['Referer', host]]
|
||||
|
||||
@support.menu
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"adult": false,
|
||||
"thumbnail": "polpotv.png",
|
||||
"banner": "polpotv.png",
|
||||
"categories": ["movie"],
|
||||
"categories": ["movie","tvshow"],
|
||||
"not_active":[],
|
||||
"default_off":["include_in_newest"],
|
||||
"settings": []
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# ------------------------------------------------------------
|
||||
# KoD - XBMC Plugin
|
||||
# Canale polpotv
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
|
||||
from core import scrapertools, httptools, support, jsontools
|
||||
from core.item import Item
|
||||
@@ -18,12 +18,21 @@ list_quality = ['1080p','720p','480p','360p']
|
||||
|
||||
@support.menu
|
||||
def mainlist(item):
|
||||
menu = [
|
||||
('Ultimi Film aggiunti', ['/api/movies', 'peliculas', '']),
|
||||
('Generi', ['/api/genres', 'search_movie_by_genre', '']),
|
||||
('Anni {film}', ['', 'search_movie_by_year', '']),
|
||||
('Cerca Film... bold', ['', 'search', ''])
|
||||
]
|
||||
# menu = [
|
||||
# ('Ultimi Film aggiunti', ['/api/movies', 'peliculas', '']),
|
||||
# ('Ultime Serie TV aggiunte', ['/api/shows', 'peliculas', '']),
|
||||
# ('Generi', ['/api/genres', 'search_movie_by_genre', '']),
|
||||
# ('Anni {film}', ['', 'search_movie_by_year', '']),
|
||||
# ('Cerca... bold', ['', 'search', ''])
|
||||
# ]
|
||||
film = ['/api/movies',
|
||||
('Generi', ['/api/genres', 'search_movie_by_genre', '']),
|
||||
('Anni', ['', 'search_movie_by_year', '']),]
|
||||
|
||||
tvshow=['/api/shows']
|
||||
|
||||
search=''
|
||||
|
||||
return locals()
|
||||
|
||||
def newest(categoria):
|
||||
@@ -32,16 +41,23 @@ def newest(categoria):
|
||||
if categoria == 'peliculas':
|
||||
item.contentType = 'movie'
|
||||
item.url = host + '/api/movies'
|
||||
elif categoria == 'series':
|
||||
item.contentType = 'tvshow'
|
||||
item.url = host+'/api/shows'
|
||||
return peliculas(item)
|
||||
|
||||
def peliculas(item):
|
||||
support.log()
|
||||
itemlist = []
|
||||
|
||||
data = httptools.downloadpage(item.url, headers=headers).data
|
||||
json_object = jsontools.load(data)
|
||||
|
||||
for movie in json_object['hydra:member']:
|
||||
itemlist.extend(get_itemlist_movie(movie,item))
|
||||
for element in json_object['hydra:member']:
|
||||
if 'shows' not in item.url:
|
||||
item.contentType='movie'
|
||||
else:
|
||||
item.contentType='tvshow'
|
||||
itemlist.extend(get_itemlist_element(element,item))
|
||||
|
||||
try:
|
||||
if support.inspect.stack()[1][3] not in ['newest']:
|
||||
@@ -51,6 +67,36 @@ def peliculas(item):
|
||||
|
||||
return itemlist
|
||||
|
||||
def episodios(item):
|
||||
support.log()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url, headers=headers).data
|
||||
json_object = jsontools.load(data)
|
||||
for season in json_object['seasons']:
|
||||
seas_url=host+season['@id']+'/releases'
|
||||
itemlist_season=get_season(item.channel, seas_url, season['seasonNumber'])
|
||||
if(len(itemlist_season)>0):
|
||||
itemlist.extend(itemlist_season)
|
||||
|
||||
support.videolibrary(itemlist, item, 'color kod bold')
|
||||
|
||||
return itemlist
|
||||
|
||||
def get_season(channel, seas_url, seasonNumber):
|
||||
support.log()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(seas_url, headers=headers).data
|
||||
json_object = jsontools.load(data)
|
||||
for episode in json_object['hydra:member']:
|
||||
itemlist.append(
|
||||
Item(channel=channel,
|
||||
action='findvideos',
|
||||
contentType='episode',
|
||||
title=str(seasonNumber)+"x"+str("%02d"%episode['episodeNumber']),
|
||||
url=seas_url,
|
||||
extra=str(len(json_object['hydra:member'])-episode['episodeNumber'])))
|
||||
return itemlist[::-1]
|
||||
|
||||
def search(item, texto):
|
||||
support.log(item.url, "search", texto)
|
||||
itemlist=[]
|
||||
@@ -59,7 +105,14 @@ def search(item, texto):
|
||||
data = httptools.downloadpage(item.url, headers=headers).data
|
||||
json_object = jsontools.load(data)
|
||||
for movie in json_object['hydra:member']:
|
||||
itemlist.extend(get_itemlist_movie(movie,item))
|
||||
item.contentType='movie'
|
||||
itemlist.extend(get_itemlist_element(movie,item))
|
||||
item.url = host + "/api/shows?originalTitle="+texto+"&translations.name=" +texto
|
||||
data = httptools.downloadpage(item.url, headers=headers).data
|
||||
json_object = jsontools.load(data)
|
||||
for tvshow in json_object['hydra:member']:
|
||||
item.contentType='tvshow'
|
||||
itemlist.extend(get_itemlist_element(tvshow,item))
|
||||
return itemlist
|
||||
# Continua la ricerca in caso di errore
|
||||
except:
|
||||
@@ -104,10 +157,10 @@ def findvideos(item):
|
||||
try:
|
||||
data = httptools.downloadpage(item.url, headers=headers).data
|
||||
json_object = jsontools.load(data)
|
||||
for video in json_object['hydra:member'][0]['playlist']['videos']:
|
||||
# data = httptools.downloadpage(video['src'], headers={'Origin': host},follow_redirects=None).data
|
||||
# patron = 'href="([^"]+)"'
|
||||
# video_link = scrapertools.find_single_match(data, patron)
|
||||
array_index=0
|
||||
if item.contentType!='movie':
|
||||
array_index=int(item.extra)
|
||||
for video in json_object['hydra:member'][array_index]['playlist']['videos']:
|
||||
itemlist.append(
|
||||
Item(
|
||||
channel=item.channel,
|
||||
@@ -121,44 +174,53 @@ def findvideos(item):
|
||||
pass
|
||||
return support.server(item, itemlist=itemlist)
|
||||
|
||||
def get_itemlist_movie(movie,item):
|
||||
def get_itemlist_element(element,item):
|
||||
support.log()
|
||||
itemlist=[]
|
||||
try:
|
||||
if movie['originalLanguage']['id']=='it':
|
||||
scrapedtitle=movie['originalTitle']
|
||||
if element['originalLanguage']['id']=='it':
|
||||
scrapedtitle=element['originalTitle']
|
||||
else:
|
||||
scrapedtitle=movie['translations'][1]['name']
|
||||
scrapedtitle=element['translations'][1]['name']
|
||||
if scrapedtitle=='':
|
||||
scrapedtitle=movie['originalTitle']
|
||||
scrapedtitle=element['originalTitle']
|
||||
except:
|
||||
scrapedtitle=movie['originalTitle']
|
||||
scrapedtitle=element['originalTitle']
|
||||
try:
|
||||
scrapedplot=movie['translations'][1]['overview']
|
||||
scrapedplot=element['translations'][1]['overview']
|
||||
except:
|
||||
scrapedplot = ""
|
||||
try:
|
||||
scrapedthumbnail="http://"+movie['posterPath']
|
||||
scrapedthumbnail="http://"+element['posterPath']
|
||||
except:
|
||||
scrapedthumbnail=""
|
||||
try:
|
||||
scrapedfanart="http://"+movie['backdropPath']
|
||||
scrapedfanart="http://"+element['backdropPath']
|
||||
except:
|
||||
scrapedfanart=""
|
||||
|
||||
infoLabels = {}
|
||||
infoLabels['tmdbid']=movie['tmdbId']
|
||||
if item.contentType=='movie':
|
||||
next_action='findvideos'
|
||||
quality=support.typo(element['lastQuality'].upper(), '_ [] color kod bold')
|
||||
url="%s%s/releases"
|
||||
infoLabels['tmdbid']=element['tmdbId']
|
||||
else:
|
||||
next_action='episodios'
|
||||
quality=''
|
||||
url="%s%s"
|
||||
itemlist.append(
|
||||
Item(channel=item.channel,
|
||||
action="findvideos",
|
||||
title=support.typo(scrapedtitle,'bold') + support.typo(movie['lastQuality'].upper(), '_ [] color kod bold'),
|
||||
action=next_action,
|
||||
title=support.typo(scrapedtitle,'bold') + quality,
|
||||
fulltitle=scrapedtitle,
|
||||
show=scrapedtitle,
|
||||
plot=scrapedplot,
|
||||
fanart=scrapedfanart,
|
||||
thumbnail=scrapedthumbnail,
|
||||
contentType='movie',
|
||||
contentType=item.contentType,
|
||||
contentTitle=scrapedtitle,
|
||||
url="%s%s/releases" %(host,movie['@id'] ),
|
||||
url=url %(host,element['@id'] ),
|
||||
infoLabels=infoLabels,
|
||||
extra=item.extra))
|
||||
return itemlist
|
||||
|
||||
@@ -5,7 +5,11 @@
|
||||
|
||||
import requests
|
||||
from core import support
|
||||
from lib.concurrent import futures
|
||||
import sys
|
||||
if sys.version_info[0] >= 3:
|
||||
from concurrent import futures
|
||||
else:
|
||||
from concurrent_py2 import futures
|
||||
current_session = requests.Session()
|
||||
host = support.config.get_channel_url()
|
||||
onair = host + '/palinsesto/onAir.json'
|
||||
@@ -112,10 +116,10 @@ def search(item, text):
|
||||
json = current_session.get(host + '/dl/RaiTV/RaiPlayMobile/Prod/Config/programmiAZ-elenco.json').json()
|
||||
for key in json:
|
||||
for key in json[key]:
|
||||
if key.has_key('PathID') and (text.lower() in key['name'].lower()):
|
||||
if 'PathID' in key and (text.lower() in key['name'].lower()):
|
||||
itemlist.append(support.Item(channel = item.channel, title = support.typo(key['name'],'bold'), fulltitle = key['name'], show = key['name'], url = key['PathID'].replace('/?json', '.json'), action = 'Type',
|
||||
thumbnail = getUrl(key['images']['portrait'] if key['images'].has_key('portrait') else key['images']['portrait43'] if key['images'].has_key('portrait43') else key['images']['landscape']),
|
||||
fanart = getUrl(key['images']['landscape'] if key['images'].has_key('landscape') else key['images']['landscape43'])))
|
||||
thumbnail = getUrl(key['images']['portrait'] if 'portrait' in key['images'] else key['images']['portrait43'] if 'portrait43' in key['images'] else key['images']['landscape']),
|
||||
fanart = getUrl(key['images']['landscape'] if 'landscape' in key['images'] else key['images']['landscape43'])))
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
@@ -233,7 +237,7 @@ def findvideos(item):
|
||||
if item.url.endswith('json'):
|
||||
json = current_session.get(item.url).json()
|
||||
|
||||
if json.has_key('first_item_path'):
|
||||
if 'first_item_path' in json:
|
||||
url = current_session.get(getUrl(json['first_item_path'])).json()['video']['content_url']
|
||||
else:
|
||||
url = json['video']['content_url']
|
||||
@@ -288,9 +292,9 @@ def load_episodes(key, item):
|
||||
itemlist=[]
|
||||
json = current_session.get(getUrl(key['path_id'])).json()['items']
|
||||
for key in json:
|
||||
ep = support.match(key['subtitle'].encode('utf8'), patron=r'St\s*(\d+)\s*Ep\s*(\d+)').match
|
||||
ep = support.match(key['subtitle'], patron=r'St\s*(\d+)\s*Ep\s*(\d+)').match
|
||||
if ep:
|
||||
title = ep[0] + 'x' + ep[1].zfill(2) + support.re.sub(r'St\s*\d+\s*Ep\s*\d+','',key['subtitle'].encode('utf8'))
|
||||
title = ep[0] + 'x' + ep[1].zfill(2) + support.re.sub(r'St\s*\d+\s*Ep\s*\d+','',key['subtitle'])
|
||||
else:
|
||||
title = key['subtitle'].strip()
|
||||
if not title:
|
||||
|
||||
@@ -101,7 +101,11 @@ def episodios(item):
|
||||
seasons = support.match(url, patronBlock=patron_season, patron=patron_option)
|
||||
|
||||
data = ''
|
||||
from concurrent import futures
|
||||
import sys
|
||||
if sys.version_info[0] >= 3:
|
||||
from concurrent import futures
|
||||
else:
|
||||
from concurrent_py2 import futures
|
||||
with futures.ThreadPoolExecutor() as executor:
|
||||
thL = []
|
||||
for i, season in enumerate(seasons.matches):
|
||||
|
||||
@@ -6,7 +6,11 @@ import requests, re
|
||||
from core import support, tmdb
|
||||
from core.item import Item
|
||||
from specials import autorenumber
|
||||
from lib.concurrent import futures
|
||||
import sys
|
||||
if sys.version_info[0] >= 3:
|
||||
from concurrent import futures
|
||||
else:
|
||||
from concurrent_py2 import futures
|
||||
|
||||
|
||||
host = support.config.get_channel_url()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import glob
|
||||
import os
|
||||
import sys
|
||||
|
||||
from core import channeltools
|
||||
from core.item import Item
|
||||
@@ -11,6 +12,8 @@ import xbmcaddon
|
||||
addon = xbmcaddon.Addon('plugin.video.kod')
|
||||
downloadenabled = addon.getSetting('downloadenabled')
|
||||
|
||||
from specials import shortcuts
|
||||
CONTEXT = shortcuts.context()
|
||||
|
||||
def getmainlist(view="thumb_"):
|
||||
logger.info()
|
||||
@@ -19,54 +22,80 @@ def getmainlist(view="thumb_"):
|
||||
if config.dev_mode():
|
||||
itemlist.append(Item(title="Redirect", channel="checkhost", action="check_channels",
|
||||
thumbnail='',
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails"))
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails",
|
||||
context = CONTEXT))
|
||||
# Añade los canales que forman el menú principal
|
||||
if addon.getSetting('enable_news_menu') == "true":
|
||||
# itemlist.append(Item(title=config.get_localized_string(30130), channel="news", action="mainlist",
|
||||
# thumbnail=get_thumb("news.png", view),
|
||||
# category=config.get_localized_string(30119), viewmode="thumbnails",
|
||||
# context=CONTEXT + [{"title": config.get_localized_string(70285), "channel": "news", "action": "menu_opciones","goto": True}]))
|
||||
itemlist.append(Item(title=config.get_localized_string(30130), channel="news", action="mainlist",
|
||||
thumbnail=get_thumb("news.png", view),
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails",
|
||||
context=[{"title": config.get_localized_string(70285), "channel": "news", "action": "menu_opciones",
|
||||
"goto": True}]))
|
||||
context=CONTEXT + [{"title": config.get_localized_string(70285), "channel": "shortcuts", "action": "SettingOnPosition", "category":5}]))
|
||||
|
||||
if addon.getSetting('enable_channels_menu') == "true":
|
||||
itemlist.append(Item(title=config.get_localized_string(30118), channel="channelselector", action="getchanneltypes",
|
||||
thumbnail=get_thumb("channels.png", view), view=view,
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails"))
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails",
|
||||
context = CONTEXT))
|
||||
|
||||
if addon.getSetting('enable_search_menu') == "true":
|
||||
# itemlist.append(Item(title=config.get_localized_string(30103), channel="search", path='special', action="mainlist",
|
||||
# thumbnail=get_thumb("search.png", view),
|
||||
# category=config.get_localized_string(30119), viewmode="list",
|
||||
# context = CONTEXT + [{"title": config.get_localized_string(60412), "action": "setting_channel_new", "channel": "search"},
|
||||
# {"title": config.get_localized_string(70286), "action": "settings", "channel": "search"}]))
|
||||
itemlist.append(Item(title=config.get_localized_string(30103), channel="search", path='special', action="mainlist",
|
||||
thumbnail=get_thumb("search.png", view),
|
||||
category=config.get_localized_string(30119), viewmode="list"))
|
||||
category=config.get_localized_string(30119), viewmode="list",
|
||||
context = CONTEXT + [{"title": config.get_localized_string(60412), "action": "setting_channel_new", "channel": "search"},
|
||||
{"title": config.get_localized_string(70286), "channel": "shortcuts", "action": "SettingOnPosition", "category":3}]))
|
||||
|
||||
if addon.getSetting('enable_onair_menu') == "true":
|
||||
itemlist.append(Item(channel="filmontv", action="mainlist", title=config.get_localized_string(50001),
|
||||
thumbnail=get_thumb("on_the_air.png"), viewmode="thumbnails"))
|
||||
thumbnail=get_thumb("on_the_air.png"), viewmode="thumbnails",
|
||||
context = CONTEXT))
|
||||
|
||||
if addon.getSetting('enable_link_menu') == "true":
|
||||
itemlist.append(Item(title=config.get_localized_string(70527), channel="kodfavorites", action="mainlist",
|
||||
thumbnail=get_thumb("mylink.png", view), view=view,
|
||||
category=config.get_localized_string(70527), viewmode="thumbnails"))
|
||||
category=config.get_localized_string(70527), viewmode="thumbnails",
|
||||
context = CONTEXT))
|
||||
|
||||
if addon.getSetting('enable_fav_menu') == "true":
|
||||
itemlist.append(Item(title=config.get_localized_string(30102), channel="favorites", action="mainlist",
|
||||
thumbnail=get_thumb("favorites.png", view),
|
||||
category=config.get_localized_string(30102), viewmode="thumbnails"))
|
||||
category=config.get_localized_string(30102), viewmode="thumbnails",
|
||||
context = CONTEXT))
|
||||
|
||||
if config.get_videolibrary_support() and addon.getSetting('enable_library_menu') == "true":
|
||||
# itemlist.append(Item(title=config.get_localized_string(30131), channel="videolibrary", action="mainlist",
|
||||
# thumbnail=get_thumb("videolibrary.png", view),
|
||||
# category=config.get_localized_string(30119), viewmode="thumbnails",
|
||||
# context=CONTEXT + [{"title": config.get_localized_string(70287), "channel": "videolibrary",
|
||||
# "action": "channel_config"}]))
|
||||
itemlist.append(Item(title=config.get_localized_string(30131), channel="videolibrary", action="mainlist",
|
||||
thumbnail=get_thumb("videolibrary.png", view),
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails",
|
||||
context=[{"title": config.get_localized_string(70287), "channel": "videolibrary",
|
||||
"action": "channel_config"}]))
|
||||
context=CONTEXT + [{"title": config.get_localized_string(70287), "channel": "shortcuts", "action": "SettingOnPosition", "category":2},
|
||||
{"title": config.get_localized_string(60568), "channel": "videolibrary", "action": "update_videolibrary"}]))
|
||||
if downloadenabled != "false":
|
||||
# itemlist.append(Item(title=config.get_localized_string(30101), channel="downloads", action="mainlist",
|
||||
# thumbnail=get_thumb("downloads.png", view), viewmode="list",
|
||||
# context=CONTEXT + [{"title": config.get_localized_string(70288), "channel": "setting", "config": "downloads",
|
||||
# "action": "channel_config"}]))
|
||||
itemlist.append(Item(title=config.get_localized_string(30101), channel="downloads", action="mainlist",
|
||||
thumbnail=get_thumb("downloads.png", view), viewmode="list",
|
||||
context=[{"title": config.get_localized_string(70288), "channel": "setting", "config": "downloads",
|
||||
"action": "channel_config"}]))
|
||||
context=CONTEXT + [{"title": config.get_localized_string(70288), "channel": "shortcuts", "action": "SettingOnPosition", "category":4}]))
|
||||
|
||||
thumb_setting = "setting_%s.png" % 0 # config.get_setting("plugin_updates_available")
|
||||
|
||||
itemlist.append(Item(title=config.get_localized_string(30100), channel="setting", action="mainlist",
|
||||
# itemlist.append(Item(title=config.get_localized_string(30100), channel="setting", action="mainlist",
|
||||
# thumbnail=get_thumb(thumb_setting, view),
|
||||
# category=config.get_localized_string(30100), viewmode="list"))
|
||||
itemlist.append(Item(title=config.get_localized_string(30100), channel="setting", action="settings",
|
||||
thumbnail=get_thumb(thumb_setting, view),
|
||||
category=config.get_localized_string(30100), viewmode="list"))
|
||||
itemlist.append(Item(title=config.get_localized_string(30104) + " (v" + config.get_addon_version(with_fix=True) + ")", channel="help", action="mainlist",
|
||||
@@ -93,13 +122,13 @@ def getchanneltypes(view="thumb_"):
|
||||
title = config.get_localized_string(30121)
|
||||
itemlist.append(Item(title=title, channel="channelselector", action="filterchannels", view=view,
|
||||
category=title, channel_type="all", thumbnail=get_thumb("channels_all.png", view),
|
||||
viewmode="thumbnails"))
|
||||
viewmode="thumbnails", context = CONTEXT))
|
||||
|
||||
for channel_type in channel_types:
|
||||
title = config.get_localized_category(channel_type)
|
||||
itemlist.append(Item(title=title, channel="channelselector", action="filterchannels", category=title,
|
||||
channel_type=channel_type, viewmode="thumbnails",
|
||||
thumbnail=get_thumb("channels_%s.png" % channel_type, view)))
|
||||
thumbnail=get_thumb("channels_%s.png" % channel_type, view), context = CONTEXT))
|
||||
|
||||
# itemlist.append(Item(title='Oggi in TV', channel="filmontv", action="mainlist", view=view,
|
||||
# category=title, channel_type="all", thumbnail=get_thumb("on_the_air.png", view),
|
||||
@@ -109,7 +138,7 @@ def getchanneltypes(view="thumb_"):
|
||||
|
||||
itemlist.append(Item(title=config.get_localized_string(70685), channel="community", action="mainlist", view=view,
|
||||
category=config.get_localized_string(70685), channel_type="all", thumbnail=get_thumb("channels_community.png", view),
|
||||
viewmode="thumbnails"))
|
||||
viewmode="thumbnails", context = CONTEXT))
|
||||
return itemlist
|
||||
|
||||
|
||||
@@ -215,7 +244,7 @@ def filterchannels(category, view="thumb_"):
|
||||
channelslist.append(Item(title=channel_parameters["title"], channel=channel_parameters["channel"],
|
||||
action="mainlist", thumbnail=channel_parameters["thumbnail"],
|
||||
fanart=channel_parameters["fanart"], plot=channel_info, category=channel_parameters["title"],
|
||||
language=channel_parameters["language"], viewmode="list", context=context))
|
||||
language=channel_parameters["language"], viewmode="list", context=CONTEXT + context))
|
||||
|
||||
except:
|
||||
logger.error("Se ha producido un error al leer los datos del canal '%s'" % channel)
|
||||
|
||||
@@ -10,6 +10,7 @@ from platformcode import config, logger
|
||||
|
||||
DEFAULT_UPDATE_URL = "/channels/"
|
||||
dict_channels_parameters = dict()
|
||||
default_file = dict()
|
||||
|
||||
remote_path = 'https://raw.githubusercontent.com/kodiondemand/media/master/'
|
||||
|
||||
@@ -177,7 +178,9 @@ def get_lang(channel_name):
|
||||
def get_default_settings(channel_name):
|
||||
from core import filetools
|
||||
default_path = filetools.join(config.get_runtime_path(), 'default_channel_settings' + '.json')
|
||||
default_file = jsontools.load(filetools.read(default_path))
|
||||
global default_file
|
||||
if not default_file:
|
||||
default_file = jsontools.load(filetools.read(default_path))
|
||||
|
||||
channel_path = filetools.join(config.get_runtime_path(), 'channels', channel_name + '.json')
|
||||
adult_path = filetools.join(config.get_runtime_path(), 'channels', 'porn', channel_name + '.json')
|
||||
@@ -258,7 +261,7 @@ def get_channel_setting(name, channel, default=None):
|
||||
|
||||
Devuelve el valor del parametro 'name' en la configuracion propia del canal 'channel'.
|
||||
|
||||
Busca en la ruta \addon_data\plugin.video.alfa\settings_channels el archivo channel_data.json y lee
|
||||
Busca en la ruta \addon_data\plugin.video.kod\settings_channels el archivo channel_data.json y lee
|
||||
el valor del parametro 'name'. Si el archivo channel_data.json no existe busca en la carpeta channels el archivo
|
||||
channel.json y crea un archivo channel_data.json antes de retornar el valor solicitado. Si el parametro 'name'
|
||||
tampoco existe en el el archivo channel.json se devuelve el parametro default.
|
||||
@@ -317,7 +320,7 @@ def set_channel_setting(name, value, channel):
|
||||
Establece 'value' como el valor del parametro 'name' en la configuracion propia del canal 'channel'.
|
||||
Devuelve el valor cambiado o None si la asignacion no se ha podido completar.
|
||||
|
||||
Si se especifica el nombre del canal busca en la ruta \addon_data\plugin.video.alfa\settings_channels el
|
||||
Si se especifica el nombre del canal busca en la ruta \addon_data\plugin.video.kod\settings_channels el
|
||||
archivo channel_data.json y establece el parametro 'name' al valor indicado por 'value'.
|
||||
Si el parametro 'name' no existe lo añade, con su valor, al archivo correspondiente.
|
||||
|
||||
|
||||
@@ -12,11 +12,10 @@ except ImportError:
|
||||
import urllib, urlparse, cookielib
|
||||
|
||||
|
||||
import inspect, os, time, json
|
||||
import os, time, json
|
||||
from threading import Lock
|
||||
from core.jsontools import to_utf8
|
||||
from platformcode import config, logger
|
||||
from platformcode.logger import WebErrorException
|
||||
from core import scrapertools
|
||||
|
||||
# Get the addon version
|
||||
@@ -42,6 +41,13 @@ if HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT == 0: HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT =
|
||||
# Random use of User-Agents, if nad is not specified
|
||||
HTTPTOOLS_DEFAULT_RANDOM_HEADERS = False
|
||||
|
||||
domainCF = list()
|
||||
channelsCF = ['guardaserieclick', 'casacinema', 'dreamsub', 'ilgeniodellostreaming', 'piratestreaming', 'altadefinizioneclick', 'altadefinizione01_link']
|
||||
otherCF = ['altadefinizione-nuovo.link', 'wstream.video', 'akvideo.stream', 'backin.net']
|
||||
for ch in channelsCF:
|
||||
domainCF.append(urlparse.urlparse(config.get_channel_url(name=ch)).hostname)
|
||||
domainCF.extend(otherCF)
|
||||
|
||||
def get_user_agent():
|
||||
# Returns the global user agent to be used when necessary for the url.
|
||||
return default_headers["User-Agent"]
|
||||
@@ -253,10 +259,9 @@ def downloadpage(url, **opt):
|
||||
url = scrapertools.unescape(url)
|
||||
load_cookies()
|
||||
domain = urlparse.urlparse(url).netloc
|
||||
global domainCF
|
||||
CF = False
|
||||
if domain in ['www.guardaserie.media', 'casacinema.space', 'wstream.video', 'akvideo.stream', 'backin.net',
|
||||
'dreamsub.stream', 'altadefinizione-nuovo.link', 'ilgeniodellostreaming.si', 'www.piratestreaming.gratis',
|
||||
'altadefinizione.style']:
|
||||
if domain in domainCF:
|
||||
from lib import cloudscraper
|
||||
session = cloudscraper.create_scraper()
|
||||
CF = True
|
||||
|
||||
@@ -353,7 +353,7 @@ class Item(object):
|
||||
def fromurl(self, url):
|
||||
"""
|
||||
Genera un item a partir de una cadena de texto. La cadena puede ser creada por la funcion tourl() o tener
|
||||
el formato antiguo: plugin://plugin.video.alfa/?channel=... (+ otros parametros)
|
||||
el formato antiguo: plugin://plugin.video.kod/?channel=... (+ otros parametros)
|
||||
Uso: item.fromurl("cadena")
|
||||
|
||||
@param url: url
|
||||
|
||||
@@ -735,8 +735,12 @@ def check_list_links(itemlist, numero='', timeout=3):
|
||||
El parámetro numero indica cuantos enlaces hay que verificar (0:5, 1:10, 2:15, 3:20)
|
||||
El parámetro timeout indica un tope de espera para descargar la página
|
||||
"""
|
||||
numero = ((int(numero) + 1) * 5) if numero != '' else 10
|
||||
from lib.concurrent import futures
|
||||
numero = numero if numero > 4 else ((int(numero) + 1) * 5) if numero != '' else 5
|
||||
import sys
|
||||
if sys.version_info[0] >= 3:
|
||||
from concurrent import futures
|
||||
else:
|
||||
from concurrent_py2 import futures
|
||||
with futures.ThreadPoolExecutor() as executor:
|
||||
checked = []
|
||||
for it in itemlist:
|
||||
|
||||
151
core/support.py
151
core/support.py
@@ -5,7 +5,13 @@ import base64
|
||||
import inspect
|
||||
import os
|
||||
import re
|
||||
from concurrent import futures
|
||||
import sys
|
||||
PY3 = False
|
||||
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
||||
if PY3:
|
||||
from concurrent import futures
|
||||
else:
|
||||
from concurrent_py2 import futures
|
||||
|
||||
try:
|
||||
import urllib.request as urllib
|
||||
@@ -20,7 +26,9 @@ from core import httptools, scrapertools, servertools, tmdb, channeltools
|
||||
from core.item import Item
|
||||
from lib import unshortenit
|
||||
from platformcode import logger, config
|
||||
from specials import autoplay
|
||||
from specials import autoplay, shortcuts
|
||||
|
||||
CONTEXT =shortcuts.context()
|
||||
|
||||
def hdpass_get_servers(item):
|
||||
def get_hosts(url, quality):
|
||||
@@ -295,7 +303,8 @@ def scrapeBlock(item, args, block, patron, headers, action, pagination, debug, t
|
||||
contentLanguage = lang1,
|
||||
contentEpisodeNumber=episode if episode else '',
|
||||
news= item.news if item.news else '',
|
||||
other = scraped['other'] if scraped['other'] else ''
|
||||
other = scraped['other'] if scraped['other'] else '',
|
||||
context = CONTEXT
|
||||
)
|
||||
|
||||
# for lg in list(set(listGroups).difference(known_keys)):
|
||||
@@ -420,7 +429,7 @@ def scrape(func):
|
||||
|
||||
# next page for pagination
|
||||
if pagination and len(matches) > pag * pagination and not search:
|
||||
if inspect.stack()[1][3] != 'get_newest':
|
||||
if inspect.stack()[1][3] not in ['newest','get_newest']:
|
||||
itemlist.append(
|
||||
Item(channel=item.channel,
|
||||
action = item.action,
|
||||
@@ -616,7 +625,8 @@ def menuItem(itemlist, filename, title='', action='', url='', contentType='movie
|
||||
url = url,
|
||||
extra = extra,
|
||||
args = args,
|
||||
contentType = contentType
|
||||
contentType = contentType,
|
||||
context = CONTEXT
|
||||
))
|
||||
|
||||
# Apply auto Thumbnails at the menus
|
||||
@@ -664,7 +674,7 @@ def menu(func):
|
||||
url = host + var[0] if len(var) > 0 else '',
|
||||
action = var[1] if len(var) > 1 else 'peliculas',
|
||||
args=var[2] if len(var) > 2 else '',
|
||||
contentType= var[3] if len(var) > 3 else 'movie',)
|
||||
contentType= var[3] if len(var) > 3 else 'movie')
|
||||
|
||||
# Make MAIN MENU
|
||||
elif dictUrl[name] is not None:
|
||||
@@ -683,7 +693,7 @@ def menu(func):
|
||||
url = host + var[0] if len(var) > 0 else '',
|
||||
action = var[1] if len(var) > 1 else 'peliculas',
|
||||
args=var[2] if len(var) > 2 else '',
|
||||
contentType= var[3] if len(var) > 3 else 'movie' if name == 'film' else 'tvshow',)
|
||||
contentType= var[3] if len(var) > 3 else 'movie' if name == 'film' else 'tvshow')
|
||||
# add search menu for category
|
||||
if 'search' not in args: menuItem(itemlist, filename, config.get_localized_string(70741) % title + ' … submenu bold', 'search', host + url, contentType='movie' if name == 'film' else 'tvshow')
|
||||
|
||||
@@ -719,56 +729,45 @@ def typo(string, typography=''):
|
||||
kod_color = '0xFF65B3DA' #'0xFF0081C2'
|
||||
try: string = str(string)
|
||||
except: string = str(string.encode('utf8'))
|
||||
|
||||
typography2 = match(string, patron=r'\{([^\}]+)\}').match
|
||||
# Check if the typographic attributes are in the string or outside
|
||||
if typography2:
|
||||
string = re.sub(r'(\s*\{[^\}]+\})', '', string)
|
||||
typography += ' ' + typography2
|
||||
|
||||
if typography:
|
||||
string = string + ' ' + typography
|
||||
if config.get_localized_string(30992) in string:
|
||||
string = string + ' >'
|
||||
|
||||
# If there are no attributes, it applies the default ones
|
||||
attribute = ['[]','()','{}','submenu','color','bold','italic','_','--','[B]','[I]','[COLOR]']
|
||||
|
||||
# movie_word_list = ['film', 'serie', 'tv', 'anime', 'cinema', 'sala']
|
||||
# search_word_list = ['cerca']
|
||||
# categories_word_list = ['genere', 'categoria', 'categorie', 'ordine', 'lettera', 'anno', 'alfabetico', 'a-z', 'menu']
|
||||
|
||||
# if not any(word in string for word in attribute):
|
||||
# if any(word in string.lower() for word in search_word_list):
|
||||
# string = '[COLOR '+ kod_color +']' + string + '[/COLOR]'
|
||||
# elif any(word in string.lower() for word in categories_word_list):
|
||||
# string = ' > ' + string
|
||||
# elif any(word in string.lower() for word in movie_word_list):
|
||||
# string = '[B]' + string + '[/B]'
|
||||
attribute = ['[]','()','submenu','color','bold','italic','_','--','[B]','[I]','[COLOR]']
|
||||
|
||||
# Otherwise it uses the typographical attributes of the string
|
||||
# else:
|
||||
if '[]' in string:
|
||||
string = '[' + re.sub(r'\s\[\]','',string) + ']'
|
||||
string = '[' + re.sub(r'\s*\[\]','',string) + ']'
|
||||
if '()' in string:
|
||||
string = '(' + re.sub(r'\s\(\)','',string) + ')'
|
||||
if '{}' in string:
|
||||
string = '{' + re.sub(r'\s\{\}','',string) + '}'
|
||||
string = '(' + re.sub(r'\s*\(\)','',string) + ')'
|
||||
if 'submenu' in string:
|
||||
string = "•• " + re.sub(r'\ssubmenu','',string)
|
||||
string = "•• " + re.sub(r'\s*submenu','',string)
|
||||
if 'color' in string:
|
||||
color = scrapertools.find_single_match(string, 'color ([a-z]+)')
|
||||
if color == 'kod' or '': color = kod_color
|
||||
string = '[COLOR '+ color +']' + re.sub(r'\scolor\s([a-z]+)','',string) + '[/COLOR]'
|
||||
if 'bold' in string:
|
||||
string = '[B]' + re.sub(r'\sbold','',string) + '[/B]'
|
||||
string = '[B]' + re.sub(r'\s*bold','',string) + '[/B]'
|
||||
if 'italic' in string:
|
||||
string = '[I]' + re.sub(r'\sitalic','',string) + '[/I]'
|
||||
string = '[I]' + re.sub(r'\s*italic','',string) + '[/I]'
|
||||
if '_' in string:
|
||||
string = ' ' + re.sub(r'\s_','',string)
|
||||
string = ' ' + re.sub(r'\s*_','',string)
|
||||
if '--' in string:
|
||||
string = ' - ' + re.sub(r'\s--','',string)
|
||||
string = ' - ' + re.sub(r'\s*--','',string)
|
||||
if 'bullet' in string:
|
||||
string = '[B]' + "•" + '[/B] ' + re.sub(r'\sbullet','',string)
|
||||
string = '[B]' + "•" + '[/B] ' + re.sub(r'\s*bullet','',string)
|
||||
if 'capitalize' in string.lower():
|
||||
string = re.sub(r'\s*capitalize','',string).capitalize()
|
||||
if 'uppercase' in string.lower():
|
||||
string = re.sub(r'\s*uppercase','',string).upper()
|
||||
if 'lowercase' in string.lower():
|
||||
string = re.sub(r'\s*lowercase','',string).lower()
|
||||
if '{}' in string:
|
||||
string = re.sub(r'\s*\{\}','',string)
|
||||
|
||||
return string
|
||||
|
||||
@@ -818,12 +817,15 @@ def match(item_url_string, **args):
|
||||
# check type of item_url_string
|
||||
if string:
|
||||
data = item_url_string
|
||||
elif type(item_url_string) == str:
|
||||
if item_url_string.startswith('http'): url = item_url_string
|
||||
else : data = item_url_string
|
||||
else:
|
||||
elif isinstance(item_url_string, Item):
|
||||
# if item_url_string is an item use item.url as url
|
||||
url = item_url_string.url
|
||||
else:
|
||||
if item_url_string.startswith('http'): url = item_url_string
|
||||
else : data = item_url_string
|
||||
# else:
|
||||
# # if item_url_string is an item use item.url as url
|
||||
# url = item_url_string.url
|
||||
|
||||
# if there is a url, download the page
|
||||
if url:
|
||||
@@ -1021,7 +1023,7 @@ def pagination(itemlist, item, page, perpage, function_level=1):
|
||||
thumbnail=thumb()))
|
||||
return itemlist
|
||||
|
||||
def server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=True, down_load=True):
|
||||
def server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=True, down_load=True, patronTag=None):
|
||||
|
||||
if not data and not itemlist:
|
||||
data = httptools.downloadpage(item.url, headers=headers, ignore_response_code=True).data
|
||||
@@ -1057,6 +1059,8 @@ def server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=Tru
|
||||
videoitem.contentType = item.contentType
|
||||
verifiedItemlist.append(videoitem)
|
||||
|
||||
if patronTag:
|
||||
addQualityTag(item, verifiedItemlist, data, patronTag)
|
||||
return controls(verifiedItemlist, item, AutoPlay, CheckLinks, down_load)
|
||||
|
||||
def controls(itemlist, item, AutoPlay=True, CheckLinks=True, down_load=True):
|
||||
@@ -1079,11 +1083,9 @@ def controls(itemlist, item, AutoPlay=True, CheckLinks=True, down_load=True):
|
||||
if CL and not AP:
|
||||
if get_setting('checklinks', item.channel):
|
||||
checklinks = get_setting('checklinks', item.channel)
|
||||
else:
|
||||
checklinks = get_setting('checklinks')
|
||||
if get_setting('checklinks_number', item.channel):
|
||||
checklinks_number = get_setting('checklinks_number', item.channel)
|
||||
else:
|
||||
checklinks = get_setting('checklinks')
|
||||
checklinks_number = get_setting('checklinks_number')
|
||||
itemlist = servertools.check_list_links(itemlist, checklinks_number)
|
||||
|
||||
@@ -1148,3 +1150,64 @@ def extract_wrapped(decorated):
|
||||
from types import FunctionType
|
||||
closure = (c.cell_contents for c in decorated.__closure__)
|
||||
return next((c for c in closure if isinstance(c, FunctionType)), None)
|
||||
|
||||
def addQualityTag(item, itemlist, data, patron):
|
||||
defQualVideo = {
|
||||
"CAM": "metodo di ripresa che indica video di bassa qualità",
|
||||
"TS": "questo metodo di ripresa effettua la ripresa su un tre piedi. Qualità sufficiente.",
|
||||
"TC": "abbreviazione di TeleCine. Il metodo di ripresa del film è basato su una macchina capace di riversare le Super-8, o 35mm. La qualità è superiore a quella offerta da CAM e TS.",
|
||||
"R5": "la qualità video di un R5 è pari a quella di un dvd, può contenere anche sottotitoli. Se è presente la dicitura LINE.ITALIAN è in italiano, altrimenti sarà disponibile in una lingua asiatica o russa.",
|
||||
"R6": "video proveniente dall’Asia.",
|
||||
"FS": "video a schermo pieno, cioè FullScreen, quindi con un rapporto di 4:3.",
|
||||
"WS": "video WideScreen, cioè rapporto 16:9.",
|
||||
"VHSSCR": "video estratto da una videocassetta VHS.",
|
||||
"DVDRIP": "la fonte video proviene da un DVD, la qualità è buona.",
|
||||
"DVDSCR": "la fonte video proviene da un DVD. Tali filmati, di solito, appartengono a copie promozionali.",
|
||||
"HDTVRIP": "video copiato e registrato da televisori in HD e che, per questo, restituiscono una qualità eccellente.",
|
||||
"PD": "video registrato da Tv satellitare, qualità accettabile.",
|
||||
"TV": "video registrato da Tv satellitare, qualità accettabile.",
|
||||
"SAT": "video registrato da Tv satellitare, qualità accettabile.",
|
||||
"DVBRIP": "video registrato da Tv satellitare, qualità accettabile.",
|
||||
"TVRIP": "ripping simile al SAT RIP, solo che, in questo caso, la qualità del vide può variare a seconda dei casi.",
|
||||
"VHSRIP": "video registrato da videocassetta. Qualità variabile.",
|
||||
"BRRIP": "indica che il video è stato preso da una fonte BluRay. Nella maggior parte dei casi, avremo un video ad alta definizione.",
|
||||
"BDRIP": "indica che il video è stato preso da una fonte BluRay. Nella maggior parte dei casi, avremo un video ad alta definizione.",
|
||||
"DTTRIP": "video registrato da un canale digitale terreste. Qualità sufficiente.",
|
||||
"HQ": "video in alta qualità.",
|
||||
"WEBRIP": "in questo caso, i film sono estratti da portali relativi a canali televisivi o di video sharing come YouTube. La qualità varia dall’SD al 1080p.",
|
||||
"WEB-DL": "si tratta di un 720p o 1080p reperiti dalla versione americana di iTunes americano. La qualità è paragonabile a quella di un BluRayRip e permette di fruire di episodi televisivi, senza il fastidioso bollo distintivo della rete che trasmette.",
|
||||
"WEBDL": "si tratta di un 720p o 1080p reperiti dalla versione americana di iTunes americano. La qualità è paragonabile a quella di un BluRayRip e permette di fruire di episodi televisivi, senza il fastidioso bollo distintivo della rete che trasmette.",
|
||||
"DLMux": "si tratta di un 720p o 1080p reperiti dalla versione americana di iTunes americano. La qualità è paragonabile a quella di un BluRayRip e permette di fruire di episodi televisivi, senza il fastidioso bollo distintivo della rete che trasmette.",
|
||||
"DVD5": "il film è in formato DVD Single Layer, nel quale vengono mantenute tutte le caratteristiche del DVD originale: tra queste il menu multilingue, i sottotitoli e i contenuti speciali, se presenti. Il video è codificato nel formato DVD originale MPEG-2.",
|
||||
"DVD9": "ha le stesse caratteristiche del DVD5, ma le dimensioni del file sono di un DVD Dual Layer (8,5 GB).",
|
||||
}
|
||||
|
||||
defQualAudio = {
|
||||
"MD": "l’audio è stato registrato via microfono, quindi la qualità è scarsa.",
|
||||
"DTS": "audio ricavato dai dischi DTS2, quindi la qualità audio è elevata.",
|
||||
"LD": "l’audio è stato registrato tramite jack collegato alla macchina da presa, pertanto di discreta qualità.",
|
||||
"DD": "audio ricavato dai dischi DTS cinema. L’audio è di buona qualità, ma potreste riscontrare il fatto che non potrebbe essere più riproducibile.",
|
||||
"AC3": "audio in Dolby Digital puo' variare da 2.0 a 5.1 canali in alta qualità.",
|
||||
"MP3": "codec per compressione audio utilizzato MP3.",
|
||||
}
|
||||
qualityStr = scrapertools.find_single_match(data, patron).strip()
|
||||
if PY3:
|
||||
qualityStr = qualityStr.encode('ascii', 'ignore')
|
||||
else:
|
||||
qualityStr = qualityStr.decode('unicode_escape').encode('ascii', 'ignore')
|
||||
|
||||
if qualityStr:
|
||||
try:
|
||||
audio, video = qualityStr.split('.')
|
||||
descr = typo(video + ': ', 'color kod') + defQualVideo.get(video.upper(), '') + '\n' +\
|
||||
typo(audio + ': ', 'color kod') + defQualAudio.get(audio.upper(), '')
|
||||
except:
|
||||
descr = ''
|
||||
itemlist.insert(0,
|
||||
Item(channel=item.channel,
|
||||
action="",
|
||||
title=typo(qualityStr, '[] color kod bold'),
|
||||
plot=descr,
|
||||
folder=False))
|
||||
else:
|
||||
log('nessun tag qualità trovato')
|
||||
|
||||
12
core/tvdb.py
12
core/tvdb.py
@@ -692,8 +692,8 @@ class Tvdb(object):
|
||||
response.close()
|
||||
|
||||
except Exception as ex:
|
||||
if isinstance(ex, urllib).HTTPError:
|
||||
logger.debug("code es %s " % ex.code)
|
||||
# if isinstance(ex, urllib).HTTPError:
|
||||
logger.debug("code es %s " % ex.code)
|
||||
|
||||
message = "An exception of type %s occured. Arguments:\n%s" % (type(ex).__name__, repr(ex.args))
|
||||
logger.error("error en: %s" % message)
|
||||
@@ -757,8 +757,8 @@ class Tvdb(object):
|
||||
response.close()
|
||||
|
||||
except Exception as ex:
|
||||
if isinstance(ex, urllib).HTTPError:
|
||||
logger.debug("code es %s " % ex.code)
|
||||
# if isinstance(ex, urllib.parse).HTTPError:
|
||||
logger.debug("code es %s " % ex.code)
|
||||
|
||||
message = "An exception of type %s occured. Arguments:\n%s" % (type(ex).__name__, repr(ex.args))
|
||||
logger.error("error en: %s" % message)
|
||||
@@ -846,8 +846,8 @@ class Tvdb(object):
|
||||
response.close()
|
||||
|
||||
except Exception as ex:
|
||||
if isinstance(ex, urllib).HTTPError:
|
||||
logger.debug("code es %s " % ex.code)
|
||||
# if isinstance(ex, urllib).HTTPError:
|
||||
logger.debug("code es %s " % ex.code)
|
||||
|
||||
message = "An exception of type %s occured. Arguments:\n%s" % (type(ex).__name__, repr(ex.args))
|
||||
logger.error("error en: %s" % message)
|
||||
|
||||
@@ -461,13 +461,14 @@ def save_tvshow(item, episodelist):
|
||||
item.infoLabels['title'] = item.contentSerieName
|
||||
item_tvshow = Item(title=item.contentSerieName, channel="videolibrary", action="get_seasons",
|
||||
fanart=item.infoLabels['fanart'], thumbnail=item.infoLabels['thumbnail'],
|
||||
infoLabels=item.infoLabels, path=path.replace(TVSHOWS_PATH, ""))
|
||||
infoLabels=item.infoLabels, path=path.replace(TVSHOWS_PATH, ""), fulltitle=item.fulltitle)
|
||||
item_tvshow.library_playcounts = {}
|
||||
item_tvshow.library_urls = {item.channel: item.url}
|
||||
|
||||
else:
|
||||
# Si existe tvshow.nfo, pero estamos añadiendo un nuevo canal actualizamos el listado de urls
|
||||
head_nfo, item_tvshow = read_nfo(tvshow_path)
|
||||
item_tvshow.fulltitle = item.fulltitle
|
||||
item_tvshow.channel = "videolibrary"
|
||||
item_tvshow.action = "get_seasons"
|
||||
item_tvshow.library_urls[item.channel] = item.url
|
||||
|
||||
@@ -12,7 +12,7 @@ from platformcode import config, logger
|
||||
logger.info("init...")
|
||||
|
||||
librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib'))
|
||||
sys.path.insert(0, librerias)
|
||||
sys.path.append(librerias)
|
||||
|
||||
if not config.dev_mode():
|
||||
from platformcode import updater
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
"default": 2,
|
||||
"enabled": true,
|
||||
"visible": "eq(-1,true)",
|
||||
"lvalues": [ "3", "5", "10", "15", "20" ]
|
||||
"lvalues": [ "5", "10", "15", "20" ]
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
@@ -7,13 +7,18 @@
|
||||
import base64
|
||||
import os.path
|
||||
import re
|
||||
import traceback
|
||||
|
||||
try:
|
||||
from python_libtorrent import get_libtorrent
|
||||
import xbmc, xbmcgui
|
||||
except:
|
||||
pass
|
||||
|
||||
lt = get_libtorrent()
|
||||
except Exception, e:
|
||||
import libtorrent as lt
|
||||
from platformcode import config
|
||||
LIBTORRENT_PATH = config.get_setting("libtorrent_path", server="torrent", default='')
|
||||
|
||||
from servers import torrent as torr
|
||||
lt, e, e1, e2 = torr.import_libtorrent(LIBTORRENT_PATH)
|
||||
|
||||
|
||||
class Cache(object):
|
||||
|
||||
@@ -1,27 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
try:
|
||||
from python_libtorrent import get_libtorrent, get_platform
|
||||
|
||||
lt = get_libtorrent()
|
||||
except Exception, e:
|
||||
import libtorrent as lt
|
||||
|
||||
import os
|
||||
import pickle
|
||||
import random
|
||||
import time
|
||||
import urllib
|
||||
|
||||
try:
|
||||
import xbmc, xbmcgui
|
||||
except:
|
||||
pass
|
||||
|
||||
from platformcode import config, logger
|
||||
LIBTORRENT_PATH = config.get_setting("libtorrent_path", server="torrent", default='')
|
||||
|
||||
from servers import torrent as torr
|
||||
lt, e, e1, e2 = torr.import_libtorrent(LIBTORRENT_PATH)
|
||||
|
||||
from cache import Cache
|
||||
from dispatcher import Dispatcher
|
||||
from file import File
|
||||
from handler import Handler
|
||||
from monitor import Monitor
|
||||
from platformcode import logger
|
||||
from resume_data import ResumeData
|
||||
from server import Server
|
||||
|
||||
try:
|
||||
BUFFER = int(config.get_setting("bt_buffer", server="torrent", default="50"))
|
||||
except:
|
||||
BUFFER = 50
|
||||
config.set_setting("bt_buffer", "50", server="torrent")
|
||||
DOWNLOAD_PATH = config.get_setting("bt_download_path", server="torrent", default=config.get_setting("downloadpath"))
|
||||
BACKGROUND = config.get_setting("mct_background_download", server="torrent", default=True)
|
||||
RAR = config.get_setting("mct_rar_unpack", server="torrent", default=True)
|
||||
msg_header = 'Client Torrent BT'
|
||||
|
||||
|
||||
class Client(object):
|
||||
INITIAL_TRACKERS = ['udp://tracker.openbittorrent.com:80',
|
||||
@@ -30,11 +43,29 @@ class Client(object):
|
||||
'udp://tracker.coppersurfer.tk:80',
|
||||
'udp://tracker.leechers-paradise.org:6969',
|
||||
'udp://exodus.desync.com:6969',
|
||||
'udp://tracker.publicbt.com:80']
|
||||
'udp://tracker.publicbt.com:80',
|
||||
'http://tracker.torrentbay.to:6969/announce',
|
||||
'http://tracker.pow7.com/announce',
|
||||
'udp://tracker.ccc.de:80/announce',
|
||||
'udp://open.demonii.com:1337',
|
||||
'http://9.rarbg.com:2710/announce',
|
||||
'http://bt.careland.com.cn:6969/announce',
|
||||
'http://explodie.org:6969/announce',
|
||||
'http://mgtracker.org:2710/announce',
|
||||
'http://tracker.best-torrents.net:6969/announce',
|
||||
'http://tracker.tfile.me/announce',
|
||||
'http://tracker1.wasabii.com.tw:6969/announce',
|
||||
'udp://9.rarbg.com:2710/announce',
|
||||
'udp://9.rarbg.me:2710/announce',
|
||||
'udp://coppersurfer.tk:6969/announce',
|
||||
'http://www.spanishtracker.com:2710/announce',
|
||||
'http://www.todotorrents.com:2710/announce'
|
||||
] ### Added some trackers from MCT
|
||||
|
||||
VIDEO_EXTS = {'.avi': 'video/x-msvideo', '.mp4': 'video/mp4', '.mkv': 'video/x-matroska',
|
||||
'.m4v': 'video/mp4', '.mov': 'video/quicktime', '.mpg': 'video/mpeg', '.ogv': 'video/ogg',
|
||||
'.ogg': 'video/ogg', '.webm': 'video/webm', '.ts': 'video/mp2t', '.3gp': 'video/3gpp'}
|
||||
'.ogg': 'video/ogg', '.webm': 'video/webm', '.ts': 'video/mp2t', '.3gp': 'video/3gpp',
|
||||
'.rar': 'video/unrar'}
|
||||
|
||||
def __init__(self, url=None, port=None, ip=None, auto_shutdown=True, wait_time=20, timeout=5, auto_delete=True,
|
||||
temp_path=None, is_playing_fnc=None, print_status=False):
|
||||
@@ -54,16 +85,26 @@ class Client(object):
|
||||
if temp_path:
|
||||
self.temp_path = temp_path
|
||||
else:
|
||||
self.temp_path = os.path.join(os.path.dirname(__file__), "tmp")
|
||||
self.temp_path = DOWNLOAD_PATH
|
||||
self.is_playing_fnc = is_playing_fnc
|
||||
self.timeout = timeout
|
||||
self.auto_delete = auto_delete
|
||||
self.wait_time = wait_time
|
||||
self.auto_shutdown = auto_shutdown
|
||||
self.buffer_size = 15
|
||||
self.buffer_size = BUFFER
|
||||
self.first_pieces_priorize = BUFFER
|
||||
self.last_pieces_priorize = 5
|
||||
self.state_file = "state"
|
||||
self.torrent_paramss = {'save_path': self.temp_path, 'storage_mode': lt.storage_mode_t.storage_mode_sparse}
|
||||
try:
|
||||
self.torrent_paramss = {'save_path': self.temp_path, 'storage_mode': lt.storage_mode_t.storage_mode_allocate}
|
||||
except Exception as e:
|
||||
try:
|
||||
do = xbmcgui.Dialog()
|
||||
e = e1 or e2
|
||||
do.ok(config.get_localized_string(30035) + 'BT Libtorrent', config.get_localized_string(30036), config.get_localized_string(60015), str(e))
|
||||
except:
|
||||
pass
|
||||
return
|
||||
|
||||
# State
|
||||
self.has_meta = False
|
||||
@@ -75,12 +116,15 @@ class Client(object):
|
||||
self.file = None
|
||||
self.files = None
|
||||
self._th = None
|
||||
self.seleccion = 0
|
||||
self.index = 0
|
||||
|
||||
# Sesion
|
||||
self._cache = Cache(self.temp_path)
|
||||
self._ses = lt.session()
|
||||
self._ses.listen_on(0, 0)
|
||||
# Cargamos el archivo de estado (si esxiste)
|
||||
#self._ses.listen_on(0, 0) ### ALFA: it blocks repro of some .torrents
|
||||
# Cargamos el archivo de estado (si existe)
|
||||
""" ### ALFA: it blocks repro of some .torrents
|
||||
if os.path.exists(os.path.join(self.temp_path, self.state_file)):
|
||||
try:
|
||||
f = open(os.path.join(self.temp_path, self.state_file), "rb")
|
||||
@@ -89,6 +133,7 @@ class Client(object):
|
||||
f.close()
|
||||
except:
|
||||
pass
|
||||
"""
|
||||
|
||||
self._start_services()
|
||||
|
||||
@@ -111,6 +156,15 @@ class Client(object):
|
||||
if url:
|
||||
self.start_url(url)
|
||||
|
||||
def set_speed_limits(self, download=0, upload=0):
|
||||
"""
|
||||
Función encargada de poner límites a la velocidad de descarga o subida
|
||||
"""
|
||||
if isinstance(download, int) and download > 0:
|
||||
self._th.set_download_limit(download * 1024)
|
||||
if isinstance(upload, int) and download > 0:
|
||||
self._th.set_upload_limit(upload * 1024)
|
||||
|
||||
def get_play_list(self):
|
||||
"""
|
||||
Función encargada de generar el playlist
|
||||
@@ -150,12 +204,14 @@ class Client(object):
|
||||
"""
|
||||
Función encargada de buscar los archivos reproducibles del torrent
|
||||
"""
|
||||
self.total_size = 0
|
||||
# Obtenemos los archivos que la extension este en la lista
|
||||
videos = filter(lambda f: self.VIDEO_EXTS.has_key(os.path.splitext(f.path)[1]), files)
|
||||
|
||||
if not videos:
|
||||
raise Exception('No video files in torrent')
|
||||
for v in videos:
|
||||
self.total_size += v.size ### ALFA
|
||||
videos[videos.index(v)].index = files.index(v)
|
||||
return videos
|
||||
|
||||
@@ -166,6 +222,10 @@ class Client(object):
|
||||
# Seleccionamos el archivo que vamos a servir
|
||||
fmap = self.meta.map_file(f.index, 0, 1)
|
||||
self.file = File(f.path, self.temp_path, f.index, f.size, fmap, self.meta.piece_length(), self)
|
||||
if self.seleccion < 0: ### ALFA
|
||||
self.file.first_piece = 0 ### ALFA
|
||||
self.file.last_piece = self.meta.num_pieces() ### ALFA
|
||||
self.file.size = self.total_size ### ALFA
|
||||
self.prioritize_file()
|
||||
|
||||
def prioritize_piece(self, pc, idx):
|
||||
@@ -175,7 +235,12 @@ class Client(object):
|
||||
piece_duration = 1000
|
||||
min_deadline = 2000
|
||||
dl = idx * piece_duration + min_deadline
|
||||
self._th.set_piece_deadline(pc, dl, lt.deadline_flags.alert_when_available)
|
||||
""" ### ALFA
|
||||
try:
|
||||
self._th.set_piece_deadline(pc, dl, lt.deadline_flags.alert_when_available)
|
||||
except:
|
||||
pass
|
||||
"""
|
||||
|
||||
if idx == 0:
|
||||
tail_pieces = 9
|
||||
@@ -187,6 +252,7 @@ class Client(object):
|
||||
|
||||
# Piezas siguientes a la primera se activan
|
||||
for i in xrange(pc + 1, self.file.last_piece + 1):
|
||||
#self._th.piece_priority(i, 0)
|
||||
self._th.piece_priority(i, 1)
|
||||
|
||||
def prioritize_file(self):
|
||||
@@ -198,8 +264,19 @@ class Client(object):
|
||||
if i >= self.file.first_piece and i <= self.file.last_piece:
|
||||
priorities.append(1)
|
||||
else:
|
||||
priorities.append(0)
|
||||
if self.index < 0:
|
||||
priorities.append(1) ### ALFA
|
||||
else:
|
||||
priorities.append(0) ### ALFA
|
||||
|
||||
self._th.prioritize_pieces(priorities)
|
||||
|
||||
x = 0
|
||||
for i, _set in enumerate(self._th.piece_priorities()):
|
||||
if _set > 0: x += 1
|
||||
#logger.info("***** Nº Pieza: %s: %s" % (i, str(_set)))
|
||||
logger.info("***** Piezas %s : Activas: %s" % (str(i+1), str(x)))
|
||||
logger.info("***** first_piece %s : last_piece: %s" % (str(self.file.first_piece), str(self.file.last_piece)))
|
||||
|
||||
def download_torrent(self, url):
|
||||
"""
|
||||
@@ -279,6 +356,12 @@ class Client(object):
|
||||
self._ses.remove_torrent(self._th, self.auto_delete)
|
||||
del self._ses
|
||||
self.closed = True
|
||||
|
||||
def pause(self):
|
||||
"""
|
||||
Función encargada de de pausar el torrent
|
||||
"""
|
||||
self._ses.pause()
|
||||
|
||||
def _start_services(self):
|
||||
"""
|
||||
@@ -287,6 +370,7 @@ class Client(object):
|
||||
self._ses.add_dht_router("router.bittorrent.com", 6881)
|
||||
self._ses.add_dht_router("router.bitcomet.com", 554)
|
||||
self._ses.add_dht_router("router.utorrent.com", 6881)
|
||||
self._ses.add_dht_router("dht.transmissionbt.com",6881) ### from MCT
|
||||
self._ses.start_dht()
|
||||
self._ses.start_lsd()
|
||||
self._ses.start_upnp()
|
||||
@@ -323,19 +407,29 @@ class Client(object):
|
||||
if self._th:
|
||||
s = self._th.status()
|
||||
# Download Rate
|
||||
s._download_rate = s.download_rate / 1000
|
||||
s._download_rate = s.download_rate / 1024
|
||||
|
||||
# Progreso del archivo
|
||||
if self.file:
|
||||
pieces = s.pieces[self.file.first_piece:self.file.last_piece]
|
||||
pieces = s.pieces[self.file.first_piece:self.file.last_piece] ### ALFA
|
||||
progress = float(sum(pieces)) / len(pieces)
|
||||
s.pieces_len = len(pieces) ### ALFA
|
||||
s.pieces_sum = sum(pieces) ### ALFA
|
||||
#logger.info('***** Estado piezas: %s' % pieces)
|
||||
else:
|
||||
progress = 0
|
||||
s.pieces_len = 0 ### ALFA
|
||||
s.pieces_sum = 0 ### ALFA
|
||||
|
||||
s.progress_file = progress * 100
|
||||
|
||||
# Tamaño del archivo
|
||||
s.file_name = '' ### ALFA
|
||||
s.seleccion = '' ### ALFA
|
||||
|
||||
if self.file:
|
||||
s.seleccion = self.seleccion ### ALFA
|
||||
s.file_name = self.file.path ### ALFA
|
||||
s.file_size = self.file.size / 1048576.0
|
||||
else:
|
||||
s.file_size = 0
|
||||
@@ -355,14 +449,14 @@ class Client(object):
|
||||
# El tamaño del buffer de inicio es el tamaño del buffer menos el tamaño del buffer del final
|
||||
first_pieces_priorize = self.buffer_size - self.last_pieces_priorize
|
||||
|
||||
# Comprobamos que partes del buffer del inicio estan disponibles
|
||||
# Comprobamos qué partes del buffer del inicio estan disponibles
|
||||
for x in range(first_pieces_priorize):
|
||||
if self._th.have_piece(self.file.first_piece + x):
|
||||
bp.append(True)
|
||||
else:
|
||||
bp.append(False)
|
||||
|
||||
# Comprobamos que partes del buffer del final estan disponibles
|
||||
# Comprobamos qué partes del buffer del final estan disponibles
|
||||
for x in range(self.last_pieces_priorize):
|
||||
if self._th.have_piece(self.file.last_piece - x):
|
||||
bp.append(True)
|
||||
@@ -395,8 +489,8 @@ class Client(object):
|
||||
s.timeout = "Off"
|
||||
|
||||
# Estado de la descarga
|
||||
STATE_STR = ['En cola', 'Comprobando', 'Descargando metadata', \
|
||||
'Descargando', 'Finalizado', 'Seeding', 'Allocating', 'Comprobando fastresume']
|
||||
STATE_STR = ['Queued', 'Checking', 'Downloading Metadata', \
|
||||
'Downloading', 'Finalized', 'Seeding', 'Allocating', 'Checking Fastresume']
|
||||
s.str_state = STATE_STR[s.state]
|
||||
|
||||
# Estado DHT
|
||||
@@ -468,7 +562,7 @@ class Client(object):
|
||||
Servicio encargado de anunciar el torrent
|
||||
"""
|
||||
self._th.force_reannounce()
|
||||
self._th.force_dht_announce()
|
||||
self._th.force_dht_announce()
|
||||
|
||||
def save_state(self):
|
||||
"""
|
||||
@@ -504,14 +598,33 @@ class Client(object):
|
||||
|
||||
# Guardamos la lista de archivos
|
||||
self.files = self._find_files(files)
|
||||
|
||||
# Si hay varios vídeos (no RAR), se selecciona el vídeo o "todos"
|
||||
lista = []
|
||||
seleccion = 0
|
||||
for file in self.files:
|
||||
if '.rar' in str(file.path):
|
||||
seleccion = -9
|
||||
lista += [os.path.split(str(file.path))[1]]
|
||||
if len(lista) > 1 and seleccion >= 0:
|
||||
d = xbmcgui.Dialog()
|
||||
seleccion = d.select(msg_header + config.get_localized_string(30034), lista)
|
||||
|
||||
if seleccion < 0:
|
||||
index = 0
|
||||
self.index = seleccion
|
||||
else:
|
||||
index = seleccion
|
||||
self.index = self.files[index].index
|
||||
self.seleccion = seleccion
|
||||
|
||||
# Marcamos el primer archivo como activo
|
||||
self.set_file(self.files[0])
|
||||
self.set_file(self.files[index])
|
||||
|
||||
# Damos por iniciada la descarga
|
||||
self.start_time = time.time()
|
||||
|
||||
# Guardamos el .torrent en el cahce
|
||||
# Guardamos el .torrent en el cache
|
||||
self._cache.file_complete(self._th.get_torrent_info())
|
||||
|
||||
self.has_meta = True
|
||||
@@ -522,7 +635,7 @@ class Client(object):
|
||||
'''
|
||||
if self.file and not self.file.cursor:
|
||||
num_start_pieces = self.buffer_size - self.last_pieces_priorize # Cantidad de piezas a priorizar al inicio
|
||||
num_end_pieces = self.last_pieces_priorize # Canridad de piezas a priorizar al final
|
||||
num_end_pieces = self.last_pieces_priorize # Cantidad de piezas a priorizar al final
|
||||
|
||||
pieces_count = 0
|
||||
# Priorizamos las ultimas piezas
|
||||
@@ -543,13 +656,14 @@ class Client(object):
|
||||
'''
|
||||
Servicio encargado de mostrar en el log el estado de la descarga
|
||||
'''
|
||||
s = self.status
|
||||
if self.file:
|
||||
archivo = self.file.index
|
||||
s = self.status ### ALFA
|
||||
if self.seleccion >= 0:
|
||||
archivo = self.seleccion + 1
|
||||
else:
|
||||
archivo = "N/D"
|
||||
archivo = self.seleccion
|
||||
|
||||
logger.info(
|
||||
'%.2f%% de %.1fMB %s | %.1f kB/s | #%s %d%% | AutoClose: %s | S: %d(%d) P: %d(%d)) | TRK: %d DHT: %d PEX: %d LSD %d | DHT:%s (%d) | Trakers: %d' % \
|
||||
'%.2f%% de %.1fMB %s | %.1f kB/s | #%s %d%% | AutoClose: %s | S: %d(%d) P: %d(%d)) | TRK: %d DHT: %d PEX: %d LSD %d | DHT:%s (%d) | Trakers: %d | Pieces: %d (%d)' % \
|
||||
(s.progress_file, s.file_size, s.str_state, s._download_rate, archivo, s.buffer, s.timeout, s.num_seeds, \
|
||||
s.num_complete, s.num_peers, s.num_incomplete, s.trk_peers, s.dht_peers, s.pex_peers, s.lsd_peers,
|
||||
s.dht_state, s.dht_nodes, s.trackers))
|
||||
s.dht_state, s.dht_nodes, s.trackers, s.pieces_sum, s.pieces_len)) ### ALFA
|
||||
|
||||
@@ -2,12 +2,18 @@
|
||||
|
||||
from monitor import Monitor
|
||||
|
||||
try:
|
||||
from python_libtorrent import get_libtorrent
|
||||
import traceback
|
||||
|
||||
lt = get_libtorrent()
|
||||
except Exception, e:
|
||||
import libtorrent as lt
|
||||
try:
|
||||
import xbmc, xbmcgui
|
||||
except:
|
||||
pass
|
||||
|
||||
from platformcode import config
|
||||
LIBTORRENT_PATH = config.get_setting("libtorrent_path", server="torrent", default='')
|
||||
|
||||
from servers import torrent as torr
|
||||
lt, e, e1, e2 = torr.import_libtorrent(LIBTORRENT_PATH)
|
||||
|
||||
|
||||
class Dispatcher(Monitor):
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
__author__ = 'Brian Quinlan (brian@sweetapp.com)'
|
||||
|
||||
from concurrent.futures._base import (FIRST_COMPLETED,
|
||||
from concurrent_py2.futures._base import (FIRST_COMPLETED,
|
||||
FIRST_EXCEPTION,
|
||||
ALL_COMPLETED,
|
||||
CancelledError,
|
||||
@@ -14,10 +14,10 @@ from concurrent.futures._base import (FIRST_COMPLETED,
|
||||
Executor,
|
||||
wait,
|
||||
as_completed)
|
||||
from concurrent.futures.thread import ThreadPoolExecutor
|
||||
from concurrent_py2.futures.thread import ThreadPoolExecutor
|
||||
|
||||
try:
|
||||
from concurrent.futures.process import ProcessPoolExecutor
|
||||
from concurrent_py2.futures.process import ProcessPoolExecutor
|
||||
except ImportError:
|
||||
# some platforms don't have multiprocessing
|
||||
pass
|
||||
@@ -44,7 +44,7 @@ Process #1..n:
|
||||
"""
|
||||
|
||||
import atexit
|
||||
from concurrent.futures import _base
|
||||
from concurrent_py2.futures import _base
|
||||
import Queue as queue
|
||||
import multiprocessing
|
||||
import threading
|
||||
@@ -4,7 +4,7 @@
|
||||
"""Implements ThreadPoolExecutor."""
|
||||
|
||||
import atexit
|
||||
from concurrent.futures import _base
|
||||
from concurrent_py2.futures import _base
|
||||
import itertools
|
||||
import Queue as queue
|
||||
import threading
|
||||
@@ -1226,9 +1226,10 @@ def post_tmdb_findvideos(item, itemlist):
|
||||
return (item, itemlist)
|
||||
|
||||
|
||||
def get_torrent_size(url, referer=None, post=None, data_torrent=False, timeout=5):
|
||||
def get_torrent_size(url, referer=None, post=None, torrents_path=None, data_torrent=False, \
|
||||
timeout=5, file_list=False, lookup=True, local_torr=None, headers={}, short_pad=False):
|
||||
logger.info()
|
||||
from core import videolibrarytools
|
||||
from servers import torrent
|
||||
|
||||
"""
|
||||
|
||||
@@ -1243,7 +1244,8 @@ def get_torrent_size(url, referer=None, post=None, data_torrent=False, timeout=5
|
||||
Entrada: post: contenido del post en caso de llamada con post
|
||||
Entrada: data_torrent: Flag por si se quiere el contenido del .torretn de vuelta
|
||||
Salida: size: str con el tamaño y tipo de medida ( MB, GB, etc)
|
||||
Salida: torrent: dict() con el contenido del .torrent (opcional)
|
||||
Salida: torrent_f: dict() con el contenido del .torrent (opcional)
|
||||
Salida: files: dict() con los nombres de los archivos del torrent y su tamaño (opcional)
|
||||
|
||||
"""
|
||||
|
||||
@@ -1251,17 +1253,21 @@ def get_torrent_size(url, referer=None, post=None, data_torrent=False, timeout=5
|
||||
import math
|
||||
if (size == 0):
|
||||
return '0B'
|
||||
size_name = ("B", "KB", "M B", "G B", "TB", "PB", "EB", "ZB", "YB")
|
||||
size_name = ("B", "KB", "M·B", "G·B", "TB", "PB", "EB", "ZB", "YB")
|
||||
i = int(math.floor(math.log(size, 1024)))
|
||||
p = math.pow(1024, i)
|
||||
s = round(size / p, 2)
|
||||
#s = round(size / p, 2)
|
||||
s = round(old_div(size, p), 2)
|
||||
return '%s %s' % (s, size_name[i])
|
||||
|
||||
def decode(text):
|
||||
try:
|
||||
src = tokenize(text)
|
||||
data = decode_item(src.next, src.next())
|
||||
for token in src: # look for more tokens
|
||||
if not PY3:
|
||||
data = decode_item(src.next, src.next()) #Py2
|
||||
else:
|
||||
data = decode_item(src.__next__, next(src)) #Py3
|
||||
for token in src: # look for more tokens
|
||||
raise SyntaxError("trailing junk")
|
||||
except (AttributeError, ValueError, StopIteration):
|
||||
try:
|
||||
@@ -1301,15 +1307,18 @@ def get_torrent_size(url, referer=None, post=None, data_torrent=False, timeout=5
|
||||
data.append(decode_item(next, tok))
|
||||
tok = next()
|
||||
if token == "d":
|
||||
data = dict(zip(data[0::2], data[1::2]))
|
||||
#data = dict(zip(data[0::2], data[1::2]))
|
||||
data = dict(list(zip(data[0::2], data[1::2])))
|
||||
else:
|
||||
raise ValueError
|
||||
return data
|
||||
|
||||
|
||||
#Móludo principal
|
||||
size = ""
|
||||
torrent = ''
|
||||
size = ''
|
||||
torrent_f = ''
|
||||
torrent_file = ''
|
||||
files = {}
|
||||
try:
|
||||
#torrents_path = config.get_videolibrary_path() + '/torrents' #path para dejar el .torrent
|
||||
|
||||
@@ -1319,32 +1328,56 @@ def get_torrent_size(url, referer=None, post=None, data_torrent=False, timeout=5
|
||||
#urllib.URLopener.version = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0'
|
||||
#urllib.urlretrieve(url, torrents_path + "/generictools.torrent") #desacargamos el .torrent a la carpeta
|
||||
#torrent_file = open(torrents_path + "/generictools.torrent", "rb").read() #leemos el .torrent
|
||||
|
||||
torrents_path, torrent_file = videolibrarytools.caching_torrents(url, referer=referer, post=post, timeout=timeout, lookup=True, data_torrent=True)
|
||||
|
||||
if ((url and not local_torr) or url.startswith('magnet')):
|
||||
torrents_path, torrent_file = torrent.caching_torrents(url, \
|
||||
referer=referer, post=post, torrents_path=torrents_path, \
|
||||
timeout=timeout, lookup=lookup, data_torrent=True, headers=headers)
|
||||
elif local_torr:
|
||||
torrent_file = filetools.read(local_torr)
|
||||
if not torrent_file:
|
||||
if data_torrent:
|
||||
return (size, torrent)
|
||||
if not lookup:
|
||||
return (size, torrents_path, torrent_f, files)
|
||||
elif file_list and data_torrent:
|
||||
return (size, torrent_f, files)
|
||||
elif file_list:
|
||||
return (size, files)
|
||||
elif data_torrent:
|
||||
return (size, torrent_f)
|
||||
return size #Si hay un error, devolvemos el "size" y "torrent" vacíos
|
||||
|
||||
torrent = decode(torrent_file) #decodificamos el .torrent
|
||||
torrent_f = decode(torrent_file) #decodificamos el .torrent
|
||||
|
||||
#si sólo tiene un archivo, tomamos la longitud y la convertimos a una unidad legible, si no dará error
|
||||
try:
|
||||
sizet = torrent["info"]['length']
|
||||
sizet = torrent_f["info"]['length']
|
||||
size = convert_size(sizet)
|
||||
|
||||
files = torrent_f["info"].copy()
|
||||
if 'path' not in files: files.update({'path': ['']})
|
||||
if 'piece length' in files: del files['piece length']
|
||||
if 'pieces' in files: del files['pieces']
|
||||
if 'name' in files: del files['name']
|
||||
files = [files]
|
||||
files.append({"__name": torrent_f["info"]["name"], 'length': 0})
|
||||
except:
|
||||
pass
|
||||
|
||||
#si tiene múltiples archivos sumamos la longitud de todos
|
||||
if not size:
|
||||
try:
|
||||
check_video = scrapertools.find_multiple_matches(str(torrent["info"]["files"]), "'length': (\d+).*?}")
|
||||
check_video = scrapertools.find_multiple_matches(str(torrent_f["info"]["files"]), "'length': (\d+).*?}")
|
||||
sizet = sum([int(i) for i in check_video])
|
||||
size = convert_size(sizet)
|
||||
|
||||
files = torrent_f["info"]["files"][:]
|
||||
files.append({"__name": torrent_f["info"]["name"], 'length': 0})
|
||||
|
||||
except:
|
||||
pass
|
||||
size = 'ERROR'
|
||||
|
||||
except:
|
||||
size = 'ERROR'
|
||||
logger.error('ERROR al buscar el tamaño de un .Torrent: ' + str(url))
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
@@ -1352,13 +1385,22 @@ def get_torrent_size(url, referer=None, post=None, data_torrent=False, timeout=5
|
||||
# os.remove(torrents_path + "/generictools.torrent") #borramos el .torrent
|
||||
#except:
|
||||
# pass
|
||||
|
||||
if '.rar' in str(files):
|
||||
size = '[COLOR magenta][B]RAR-[/B][/COLOR]%s' % size
|
||||
|
||||
#logger.debug(str(url))
|
||||
logger.info(str(size))
|
||||
|
||||
if data_torrent:
|
||||
return (size, torrent)
|
||||
return size
|
||||
if not lookup:
|
||||
return (size, torrents_path, torrent_f, files)
|
||||
elif file_list and data_torrent:
|
||||
return (size, torrent_f, files)
|
||||
elif file_list:
|
||||
return (size, files)
|
||||
elif data_torrent:
|
||||
return (size, torrent_f)
|
||||
return size
|
||||
|
||||
|
||||
def get_field_from_kodi_DB(item, from_fields='*', files='file'):
|
||||
|
||||
24
lib/python_libtorrent/__init__.py
Normal file
24
lib/python_libtorrent/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
24
lib/python_libtorrent/android_armv7/0.16.19/__init__.py
Normal file
24
lib/python_libtorrent/android_armv7/0.16.19/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6804840
|
||||
24
lib/python_libtorrent/android_armv7/1.0.6/__init__.py
Normal file
24
lib/python_libtorrent/android_armv7/1.0.6/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6545732
|
||||
24
lib/python_libtorrent/android_armv7/1.0.7/__init__.py
Normal file
24
lib/python_libtorrent/android_armv7/1.0.7/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6519704
|
||||
24
lib/python_libtorrent/android_armv7/1.0.8/__init__.py
Normal file
24
lib/python_libtorrent/android_armv7/1.0.8/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6513752
|
||||
24
lib/python_libtorrent/android_armv7/1.0.9/__init__.py
Normal file
24
lib/python_libtorrent/android_armv7/1.0.9/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6518156
|
||||
24
lib/python_libtorrent/android_armv7/1.1.0/__init__.py
Normal file
24
lib/python_libtorrent/android_armv7/1.1.0/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
4608320
|
||||
24
lib/python_libtorrent/android_armv7/1.1.1/__init__.py
Normal file
24
lib/python_libtorrent/android_armv7/1.1.1/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
4628960
|
||||
24
lib/python_libtorrent/android_armv7/__init__.py
Normal file
24
lib/python_libtorrent/android_armv7/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
24
lib/python_libtorrent/android_x86/0.16.19/__init__.py
Normal file
24
lib/python_libtorrent/android_x86/0.16.19/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
7145572
|
||||
24
lib/python_libtorrent/android_x86/1.0.6/__init__.py
Normal file
24
lib/python_libtorrent/android_x86/1.0.6/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6921524
|
||||
24
lib/python_libtorrent/android_x86/1.0.7/__init__.py
Normal file
24
lib/python_libtorrent/android_x86/1.0.7/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6890380
|
||||
24
lib/python_libtorrent/android_x86/1.0.8/__init__.py
Normal file
24
lib/python_libtorrent/android_x86/1.0.8/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6889512
|
||||
24
lib/python_libtorrent/android_x86/1.0.9/__init__.py
Normal file
24
lib/python_libtorrent/android_x86/1.0.9/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
6889548
|
||||
24
lib/python_libtorrent/android_x86/1.1.0/__init__.py
Normal file
24
lib/python_libtorrent/android_x86/1.1.0/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
5369280
|
||||
24
lib/python_libtorrent/android_x86/1.1.1/__init__.py
Normal file
24
lib/python_libtorrent/android_x86/1.1.1/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
5393984
|
||||
24
lib/python_libtorrent/android_x86/__init__.py
Normal file
24
lib/python_libtorrent/android_x86/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
24
lib/python_libtorrent/darwin/0.16.19/__init__.py
Normal file
24
lib/python_libtorrent/darwin/0.16.19/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
10425648
|
||||
24
lib/python_libtorrent/darwin/1.0.9/__init__.py
Normal file
24
lib/python_libtorrent/darwin/1.0.9/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
3578388
|
||||
24
lib/python_libtorrent/darwin/1.1.0/__init__.py
Normal file
24
lib/python_libtorrent/darwin/1.1.0/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
5292640
|
||||
24
lib/python_libtorrent/darwin/1.1.1/__init__.py
Normal file
24
lib/python_libtorrent/darwin/1.1.1/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
5331516
|
||||
24
lib/python_libtorrent/darwin/__init__.py
Normal file
24
lib/python_libtorrent/darwin/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
24
lib/python_libtorrent/ios_arm/1.0.7/__init__.py
Normal file
24
lib/python_libtorrent/ios_arm/1.0.7/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
8834480
|
||||
24
lib/python_libtorrent/ios_arm/1.0.8/__init__.py
Normal file
24
lib/python_libtorrent/ios_arm/1.0.8/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
8779608
|
||||
24
lib/python_libtorrent/ios_arm/1.0.9/__init__.py
Normal file
24
lib/python_libtorrent/ios_arm/1.0.9/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
8831856
|
||||
24
lib/python_libtorrent/ios_arm/1.1.1/__init__.py
Normal file
24
lib/python_libtorrent/ios_arm/1.1.1/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
3439420
|
||||
24
lib/python_libtorrent/ios_arm/__init__.py
Normal file
24
lib/python_libtorrent/ios_arm/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
24
lib/python_libtorrent/linux_aarch64_ucs2/1.1.0/__init__.py
Normal file
24
lib/python_libtorrent/linux_aarch64_ucs2/1.1.0/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
5191944
|
||||
24
lib/python_libtorrent/linux_aarch64_ucs2/__init__.py
Normal file
24
lib/python_libtorrent/linux_aarch64_ucs2/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
24
lib/python_libtorrent/linux_aarch64_ucs4/1.1.0/__init__.py
Normal file
24
lib/python_libtorrent/linux_aarch64_ucs4/1.1.0/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
5191944
|
||||
24
lib/python_libtorrent/linux_aarch64_ucs4/1.1.1/__init__.py
Normal file
24
lib/python_libtorrent/linux_aarch64_ucs4/1.1.1/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
2884768
|
||||
24
lib/python_libtorrent/linux_aarch64_ucs4/__init__.py
Normal file
24
lib/python_libtorrent/linux_aarch64_ucs4/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
24
lib/python_libtorrent/linux_armv6/0.16.19/__init__.py
Normal file
24
lib/python_libtorrent/linux_armv6/0.16.19/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
2133072
|
||||
24
lib/python_libtorrent/linux_armv6/1.0.11/__init__.py
Normal file
24
lib/python_libtorrent/linux_armv6/1.0.11/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
2286476
|
||||
24
lib/python_libtorrent/linux_armv6/1.0.6/__init__.py
Normal file
24
lib/python_libtorrent/linux_armv6/1.0.6/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
1979232
|
||||
24
lib/python_libtorrent/linux_armv6/1.0.7/__init__.py
Normal file
24
lib/python_libtorrent/linux_armv6/1.0.7/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
2286424
|
||||
24
lib/python_libtorrent/linux_armv6/1.0.9/__init__.py
Normal file
24
lib/python_libtorrent/linux_armv6/1.0.9/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
2286424
|
||||
24
lib/python_libtorrent/linux_armv6/1.1.0/__init__.py
Normal file
24
lib/python_libtorrent/linux_armv6/1.1.0/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
@@ -0,0 +1 @@
|
||||
2388664
|
||||
24
lib/python_libtorrent/linux_armv6/1.1.1/__init__.py
Normal file
24
lib/python_libtorrent/linux_armv6/1.1.1/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#-*- coding: utf-8 -*-
|
||||
'''
|
||||
python-libtorrent for Kodi (script.module.libtorrent)
|
||||
Copyright (C) 2015-2016 DiMartino, srg70, RussakHH, aisman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
'''
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user