KoD 1.5.1
- corretta e migliorata la nuova ricerca globale\n- salvataggio punto di visione basato sull'id tmdb (disponibile su qualunque canale / server anche senza salvare in videoteca)\n- alcuni fix e migliore\n
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
<addon id="plugin.video.kod" name="Kodi on Demand" version="1.5" provider-name="KoD Team">
|
||||
<addon id="plugin.video.kod" name="Kodi on Demand" version="1.5.1" provider-name="KoD Team">
|
||||
<requires>
|
||||
<!-- <import addon="script.module.libtorrent" optional="true"/> -->
|
||||
<import addon="metadata.themoviedb.org"/>
|
||||
@@ -26,10 +26,9 @@
|
||||
<screenshot>resources/media/themes/ss/2.png</screenshot>
|
||||
<screenshot>resources/media/themes/ss/3.png</screenshot>
|
||||
</assets>
|
||||
<news>-Nuova Ricerca Globale
|
||||
-Nuova Rinumerazione
|
||||
-Messaggi di Errore più chiari
|
||||
-Fix var</news>
|
||||
<news>- corretta e migliorata la nuova ricerca globale
|
||||
- salvataggio punto di visione basato sull'id tmdb (disponibile su qualunque canale / server anche senza salvare in videoteca)
|
||||
- alcuni fix e migliore</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>
|
||||
|
||||
100
channels.json
100
channels.json
@@ -1,57 +1,57 @@
|
||||
{
|
||||
"direct": {
|
||||
"altadefinizione01_link": "https://altadefinizione01.tips",
|
||||
"animealtadefinizione": "https://www.animealtadefinizione.it",
|
||||
"animeforce": "https://ww1.animeforce.org",
|
||||
"animeleggendari": "https://animeora.com",
|
||||
"animesaturn": "https://www.animesaturn.it",
|
||||
"animestream": "https://www.animeworld.tv",
|
||||
"animesubita": "http://www.animesubita.org",
|
||||
"animetubeita": "http://www.animetubeita.com",
|
||||
"animeunity": "https://www.animeunity.it",
|
||||
"animeuniverse": "https://www.animeuniverse.it/",
|
||||
"animeworld": "https://www.animeworld.tv",
|
||||
"casacinema": "https://www.casacinema.page",
|
||||
"cb01anime": "https://www.cineblog01.red",
|
||||
"cinemalibero": "https://cinemalibero.store",
|
||||
"cinetecadibologna": "http://cinestore.cinetecadibologna.it",
|
||||
"dreamsub": "https://dreamsub.stream",
|
||||
"dsda": "https://www.dsda.press",
|
||||
"eurostreaming": "https://eurostreaming.wiki",
|
||||
"fastsubita": "https://fastsubita.xyz",
|
||||
"filmgratis": "https://www.filmaltadefinizione.me",
|
||||
"filmigratis": "https://filmigratis.org",
|
||||
"filmsenzalimiticc": "https://www.filmsenzalimiti01.online",
|
||||
"filmstreaming01": "https://filmstreaming01.com",
|
||||
"guardaserie_stream": "https://guardaserie.host",
|
||||
"guardaseriecam": "https://guardaserie.cam",
|
||||
"guardaserieclick": "https://www.guardaserie.date",
|
||||
"guardaserieicu": "https://guardaserie.today",
|
||||
"hd4me": "https://hd4me.net",
|
||||
"ilgeniodellostreaming": "https://ilgeniodellostreaming.cat",
|
||||
"ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.gold",
|
||||
"ilcorsaronero": "https://ilcorsaronero.link",
|
||||
"italiaserie": "https://italiaserie.best",
|
||||
"mondoserietv": "https://mondoserietv.fun",
|
||||
"piratestreaming": "https://www.piratestreaming.date",
|
||||
"polpotv": "https://roma.polpo.tv",
|
||||
"raiplay": "https://www.raiplay.it",
|
||||
"serietvonline": "https://serietvonline.cam",
|
||||
"serietvsubita": "http://serietvsubita.xyz",
|
||||
"serietvu": "https://www.serietvu.link",
|
||||
"streamingcommunity": "https://streamingcommunity.net",
|
||||
"streamtime": "https://t.me/s/StreamTime",
|
||||
"toonitalia": "https://toonitalia.org",
|
||||
"altadefinizione01_link": "https://altadefinizione01.tips",
|
||||
"animealtadefinizione": "https://www.animealtadefinizione.it",
|
||||
"animeforce": "https://ww1.animeforce.org",
|
||||
"animeleggendari": "https://animeora.com",
|
||||
"animesaturn": "https://www.animesaturn.it",
|
||||
"animestream": "https://www.animeworld.tv",
|
||||
"animesubita": "http://www.animesubita.org",
|
||||
"animetubeita": "http://www.animetubeita.com",
|
||||
"animeunity": "https://www.animeunity.it",
|
||||
"animeuniverse": "https://www.animeuniverse.it/",
|
||||
"animeworld": "https://www.animeworld.tv",
|
||||
"casacinema": "https://www.casacinema.page",
|
||||
"cb01anime": "https://www.cineblog01.red",
|
||||
"cinemalibero": "https://cinemalibero.store",
|
||||
"cinetecadibologna": "http://cinestore.cinetecadibologna.it",
|
||||
"dreamsub": "https://dreamsub.stream",
|
||||
"dsda": "https://www.dsda.press",
|
||||
"eurostreaming": "https://eurostreaming.wiki",
|
||||
"fastsubita": "https://fastsubita.xyz",
|
||||
"filmgratis": "https://www.filmaltadefinizione.me",
|
||||
"filmigratis": "https://filmigratis.org",
|
||||
"filmsenzalimiticc": "https://www.filmsenzalimiti01.online",
|
||||
"filmstreaming01": "https://filmstreaming01.com",
|
||||
"guardaserie_stream": "https://guardaserie.host",
|
||||
"guardaseriecam": "https://guardaserie.cam",
|
||||
"guardaserieclick": "https://www.guardaserie.date",
|
||||
"guardaserieicu": "https://guardaserie.today",
|
||||
"hd4me": "https://hd4me.net",
|
||||
"ilcorsaronero": "https://ilcorsaronero.link",
|
||||
"ilgeniodellostreaming": "https://ilgeniodellostreaming.cat",
|
||||
"ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.gold",
|
||||
"italiaserie": "https://italiaserie.best",
|
||||
"mondoserietv": "https://mondoserietv.fun",
|
||||
"piratestreaming": "https://www.piratestreaming.date",
|
||||
"polpotv": "https://roma.polpo.tv",
|
||||
"raiplay": "https://www.raiplay.it",
|
||||
"serietvonline": "https://serietvonline.cam",
|
||||
"serietvsubita": "http://serietvsubita.xyz",
|
||||
"serietvu": "https://www.serietvu.link",
|
||||
"streamingcommunity": "https://streamingcommunity.net",
|
||||
"streamtime": "https://t.me/s/StreamTime",
|
||||
"toonitalia": "https://toonitalia.org",
|
||||
"vvvvid": "https://www.vvvvid.it"
|
||||
},
|
||||
},
|
||||
"findhost": {
|
||||
"altadefinizione01": "https://altadefinizione01-nuovo.info",
|
||||
"altadefinizioneclick": "https://altadefinizione-nuovo.me",
|
||||
"animealtadefinizione": "https://www.animealtadefinizione.it",
|
||||
"cineblog01": "https://cb01.uno",
|
||||
"film4k": "https://film4k-nuovo.link",
|
||||
"filmpertutti": "https://filmpertutti.nuovo.live",
|
||||
"seriehd": "https://nuovoindirizzo.info/seriehd/",
|
||||
"altadefinizione01": "https://altadefinizione01-nuovo.info",
|
||||
"altadefinizioneclick": "https://altadefinizione-nuovo.me",
|
||||
"animealtadefinizione": "https://www.animealtadefinizione.it",
|
||||
"cineblog01": "https://cb01.uno",
|
||||
"film4k": "https://film4k-nuovo.link",
|
||||
"filmpertutti": "https://filmpertutti.nuovo.live",
|
||||
"seriehd": "https://nuovoindirizzo.info/seriehd/",
|
||||
"tantifilm": "https://www.tantifilm.wiki"
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
# Canale per AnimeUnity
|
||||
# ------------------------------------------------------------
|
||||
|
||||
import requests, json, copy
|
||||
import requests, json, copy, inspect
|
||||
from core import support
|
||||
from platformcode import autorenumber
|
||||
|
||||
@@ -212,7 +212,8 @@ def episodios(item):
|
||||
contentType='episode',
|
||||
url=it['link']))
|
||||
|
||||
autorenumber.start(itemlist, item)
|
||||
if inspect.stack()[1][3] not in ['find_episodes']:
|
||||
autorenumber.start(itemlist, item)
|
||||
support.videolibrary(itemlist, item)
|
||||
support.download(itemlist, item)
|
||||
return itemlist
|
||||
|
||||
@@ -95,7 +95,7 @@ def episodios(item):
|
||||
item.contentType = 'tvshow'
|
||||
else:# item.extra == 'serie':
|
||||
support.info("Serie :", item)
|
||||
patron = r'(?:>| )(?P<episode>\d+(?:x|×|×)\d+)[;]?[ ]?(?:(?P<title>[^<–-]+)(?P<url>.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br /|</a></p|$)'
|
||||
patron = r'(?:>| )(?P<episode>\d+(?:x|×|×)\d+)[;]?[ ]?(?:(?P<title>[^<–-]+)(?P<data>.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br /|</a></p|$)'
|
||||
patronBlock = r'>(?:[^<]+[Ss]tagione\s|[Ss]tagione [Uu]nica)(?:(?P<lang>iTA|ITA|Sub-ITA|Sub-iTA))?.*?</strong>(?P<block>.+?)(?:<strong|<div class="at-below)'
|
||||
item.contentType = 'tvshow'
|
||||
def itemHook(item):
|
||||
|
||||
@@ -68,10 +68,10 @@ def episodios(item):
|
||||
data = support.match(item.url, headers=headers).data
|
||||
if 'accordion-item' in data:
|
||||
patronBlock = r'<span class="season[^>]*>\d+[^>]+>[^>]+>[^>]+>[^>]+>\D*(?:STAGIONE|Stagione)[ -]+(?P<lang>[a-zA-Z\- ]+)[^<]*</span>(?P<block>.*?)<div id="(?:season|disqus)'
|
||||
patron = r'<img src="(?P<thumb>[^"]+)">.*?<li class="season-no">(?P<season>\d+)(?:×|×|x)(?P<episode>\d+)[^<0-9]*<\/li>(?P<url>.*?javascript:;">(?P<title>[^<]+).*?</tbody>)'
|
||||
patron = r'<img src="(?P<thumb>[^"]+)">.*?<li class="season-no">(?P<season>\d+)(?:×|×|x)(?P<episode>\d+)[^<0-9]*<\/li>(?P<data>.*?javascript:;">(?P<title>[^<]+).*?</tbody>)'
|
||||
else:
|
||||
patronBlock = r'(?:STAGIONE|Stagione)(?:<[^>]+>)?\s*(?:(?P<lang>[A-Za-z- ]+))?(?P<block>.*?)(?: |<strong>|<div class="addtoany)'
|
||||
patron = r'(?:/>|p>)\s*(?P<season>\d+)(?:×|×|x)(?P<episode>\d+)[^<]+(?P<other>.*?)(?:<br|</p)'
|
||||
patron = r'(?:/>|p>)\s*(?P<season>\d+)(?:×|×|x)(?P<episode>\d+)[^<]+(?P<data>.*?)(?:<br|</p)'
|
||||
|
||||
def itemHook(i):
|
||||
i.url = item.url
|
||||
@@ -156,7 +156,7 @@ def newest(categoria):
|
||||
|
||||
def findvideos(item):
|
||||
if item.contentType == 'movie':
|
||||
data = httptools.downloadpage(item.url).data
|
||||
data = support.match(item.url, patron=r'<a target="_blank" rel="nofollow" href="([^"]+)">').matches
|
||||
return support.server(item, data=data, patronTag='Versione: <[^>]+>([^<]+)')
|
||||
else:
|
||||
return support.server(item, item.other)
|
||||
return support.server(item, item.data)
|
||||
|
||||
@@ -105,7 +105,7 @@ def peliculas(item):
|
||||
if pagination and len(itemlist) >= item.page * pagination and not item.search:
|
||||
itlist.append(item.clone(channel=item.channel, action = 'peliculas', title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), page=item.page + 1, thumbnail=support.thumb()))
|
||||
itemlist = itlist
|
||||
autorenumber.renumber(itemlist, item, 'bold')
|
||||
autorenumber.start(itemlist)
|
||||
return itemlist
|
||||
|
||||
|
||||
@@ -156,7 +156,8 @@ def episodios(item):
|
||||
action='findvideos'))
|
||||
|
||||
itemlist.sort(key=lambda item: (item.season, item.episode))
|
||||
autorenumber.renumber(itemlist, item, 'bold')
|
||||
if inspect.stack()[1][3] not in ['find_episodes']:
|
||||
autorenumber.start(itemlist, item)
|
||||
return support.videolibrary(itemlist, item)
|
||||
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# Canale per Rai Play
|
||||
# ------------------------------------------------------------
|
||||
|
||||
import requests, sys
|
||||
import requests, sys, inspect
|
||||
from core import support
|
||||
from platformcode import autorenumber
|
||||
if sys.version_info[0] >= 3:
|
||||
@@ -297,7 +297,7 @@ def episodios(item):
|
||||
it.title = support.typo(item.season + 'x' + episode, 'bold') + (' - ' + it.title)
|
||||
|
||||
if itemlist and itemlist[0].VL: support.videolibrary(itemlist, item)
|
||||
if itemlist and not support.match(itemlist[0].title, patron=r'[Ss]?(\d+)(?:x|_|\.|\s+)[Ee]?[Pp]?(\d+)').match:
|
||||
if itemlist and not support.match(itemlist[0].title, patron=r'[Ss]?(\d+)(?:x|_|\.|\s+)[Ee]?[Pp]?(\d+)').match and inspect.stack()[1][3] not in ['find_episodes']:
|
||||
autorenumber.start(itemlist, item)
|
||||
return itemlist
|
||||
|
||||
|
||||
@@ -8,13 +8,18 @@ from core import support
|
||||
|
||||
host = support.config.get_channel_url()
|
||||
|
||||
session = requests.Session()
|
||||
response = session.get(host)
|
||||
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match
|
||||
headers = {'content-type': 'application/json;charset=UTF-8',
|
||||
'Referer': host,
|
||||
'x-csrf-token': csrf_token,
|
||||
'Cookie': '; '.join([x.name + '=' + x.value for x in response.cookies])}
|
||||
headers = {}
|
||||
|
||||
def getHeaders():
|
||||
global headers
|
||||
if not headers:
|
||||
session = requests.Session()
|
||||
response = session.get(host)
|
||||
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match
|
||||
headers = {'content-type': 'application/json;charset=UTF-8',
|
||||
'Referer': host,
|
||||
'x-csrf-token': csrf_token,
|
||||
'Cookie': '; '.join([x.name + '=' + x.value for x in response.cookies])}
|
||||
|
||||
|
||||
@support.menu
|
||||
@@ -34,6 +39,7 @@ def mainlist(item):
|
||||
|
||||
|
||||
def genres(item):
|
||||
getHeaders()
|
||||
support.info()
|
||||
itemlist = []
|
||||
data = support.scrapertools.decodeHtmlentities(support.match(item).data)
|
||||
@@ -85,6 +91,7 @@ def newest(category):
|
||||
|
||||
|
||||
def peliculas(item):
|
||||
getHeaders()
|
||||
support.info()
|
||||
itemlist = []
|
||||
videoType = 'movie' if item.contentType == 'movie' else 'tv'
|
||||
@@ -145,6 +152,7 @@ def peliculas(item):
|
||||
return itemlist
|
||||
|
||||
def episodios(item):
|
||||
getHeaders()
|
||||
support.info()
|
||||
itemlist = []
|
||||
|
||||
@@ -172,7 +180,7 @@ def episodios(item):
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
|
||||
getHeaders()
|
||||
support.info()
|
||||
itemlist=[]
|
||||
url = support.match(support.match(item).data.replace('"','"').replace('\\',''), patron=r'video_url"\s*:\s*"([^"]+)"').match
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
# ------------------------------------------------------------
|
||||
# Canale per vvvvid
|
||||
# ----------------------------------------------------------
|
||||
import requests, sys
|
||||
import requests, sys, inspect
|
||||
from core import support, tmdb
|
||||
from platformcode import autorenumber, logger
|
||||
from platformcode import autorenumber, logger, config
|
||||
|
||||
host = support.config.get_channel_url()
|
||||
|
||||
@@ -170,7 +170,8 @@ def episodios(item):
|
||||
url= host + show_id + '/season/' + str(key['season_id']),
|
||||
action= 'findvideos',
|
||||
video_id= key['video_id']))
|
||||
autorenumber.start(itemlist, item)
|
||||
if inspect.stack()[1][3] not in ['find_episodes']:
|
||||
autorenumber.start(itemlist, item)
|
||||
if autorenumber.check(item) == True \
|
||||
or support.match(itemlist[0].title, patron=r"(\d+x\d+)").match:
|
||||
support.videolibrary(itemlist,item)
|
||||
@@ -196,7 +197,7 @@ def findvideos(item):
|
||||
url = url.split()[-1]
|
||||
itemlist.append(
|
||||
item.clone(action= 'play',
|
||||
title='direct',
|
||||
title=config.get_localized_string(30137),
|
||||
url= 'https://or01.top-ix.org/videomg/_definst_/mp4:' + item.url + '/' + url,
|
||||
server= 'directo')
|
||||
)
|
||||
@@ -206,7 +207,7 @@ def findvideos(item):
|
||||
|
||||
itemlist.append(
|
||||
item.clone(action= 'play',
|
||||
title='direct',
|
||||
title=config.get_localized_string(30137),
|
||||
url= item.url + '?' + key,
|
||||
server= 'directo')
|
||||
)
|
||||
|
||||
@@ -67,7 +67,7 @@ def start(itemlist, item):
|
||||
# Enable the "View in high quality" action (if the server returns more than one quality, eg gdrive)
|
||||
if not user_config_setting_action: config.set_setting("default_action", 2)
|
||||
|
||||
if user_config_setting_player != 0: config.set_setting("player_mode", 0)
|
||||
# if user_config_setting_player != 0: config.set_setting("player_mode", 0)
|
||||
|
||||
# Priorities when ordering itemlist:
|
||||
# 0: Servers and qualities
|
||||
@@ -230,6 +230,7 @@ def start(itemlist, item):
|
||||
if isinstance(resolved_item[0], list): videoitem.video_urls = resolved_item
|
||||
else: videoitem = resolved_item[0]
|
||||
|
||||
play_item.autoplay = True
|
||||
# If not directly reproduce and mark as seen
|
||||
# Check if the item comes from the video library
|
||||
try:
|
||||
|
||||
@@ -30,7 +30,7 @@ cookies_file = os.path.join(config.get_data_path(), "cookies.dat")
|
||||
|
||||
# Headers by default, if nothing is specified
|
||||
default_headers = dict()
|
||||
default_headers["User-Agent"] = "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
|
||||
default_headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36" % config.get_setting("chrome_ua_version")
|
||||
default_headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
|
||||
default_headers["Accept-Language"] = "it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3"
|
||||
default_headers["Accept-Charset"] = "UTF-8"
|
||||
|
||||
@@ -224,7 +224,12 @@ def get_nfo(item):
|
||||
|
||||
return info_nfo
|
||||
else:
|
||||
return scraper.get_nfo(item)
|
||||
try: return scraper.get_nfo(item)
|
||||
except:
|
||||
if item.contentType == "movie": scraper_actual = ['tmdb'][config.get_setting("scraper_movies", "videolibrary")]
|
||||
else: scraper_actual = ['tmdb', 'tvdb'][config.get_setting("scraper_tvshows", "videolibrary")]
|
||||
scraper = __import__('core.%s' % scraper_actual, fromlist=["core.%s" % scraper_actual])
|
||||
return scraper.get_nfo(item)
|
||||
|
||||
|
||||
def sort_episode_list(episodelist):
|
||||
|
||||
@@ -95,11 +95,14 @@ def search(channel, item, texto):
|
||||
|
||||
def dbg():
|
||||
if config.dev_mode():
|
||||
import web_pdb
|
||||
if not web_pdb.WebPdb.active_instance:
|
||||
import webbrowser
|
||||
webbrowser.open('http://127.0.0.1:5555')
|
||||
web_pdb.set_trace()
|
||||
try:
|
||||
import web_pdb
|
||||
if not web_pdb.WebPdb.active_instance:
|
||||
import webbrowser
|
||||
webbrowser.open('http://127.0.0.1:5555')
|
||||
web_pdb.set_trace()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def regexDbg(item, patron, headers, data=''):
|
||||
|
||||
@@ -37,6 +37,7 @@ def start():
|
||||
updater.showSavedChangelog()
|
||||
|
||||
def run(item=None):
|
||||
# from core.support import dbg;dbg()
|
||||
logger.debug()
|
||||
if not item:
|
||||
# Extract item from sys.argv
|
||||
@@ -135,12 +136,6 @@ def run(item=None):
|
||||
from platformcode import infoplus
|
||||
return infoplus.Main(item)
|
||||
|
||||
elif config.get_setting('new_search') and item.channel == "search" and item.action == 'new_search':
|
||||
from platformcode.globalsearch import Search
|
||||
item.contextual = True
|
||||
Search(item)
|
||||
return
|
||||
|
||||
elif item.channel == "backup":
|
||||
from platformcode import backup
|
||||
return getattr(backup, item.action)(item)
|
||||
@@ -489,17 +484,24 @@ def play_from_library(item):
|
||||
item.play_from = 'window'
|
||||
itemlist = videolibrary.findvideos(item)
|
||||
p_dialog.update(100, ''); sleep(0.5); p_dialog.close()
|
||||
# while platformtools.is_playing(): # Conventional window
|
||||
# sleep(100)
|
||||
play_time = platformtools.resume_playback(item, True)
|
||||
if not play_time and config.get_setting('autoplay'):
|
||||
while platformtools.is_playing(): sleep(1)
|
||||
# from core.support import dbg;dbg()
|
||||
if item.contentType == 'movie': nfo_path = item.nfo
|
||||
else: nfo_path = item.strm_path.replace('strm','nfo')
|
||||
if nfo_path and filetools.isfile(nfo_path):
|
||||
from core import videolibrarytools
|
||||
head_nfo, item_nfo = videolibrarytools.read_nfo(nfo_path)
|
||||
played_time = platformtools.get_played_time(item_nfo)
|
||||
else: played_time = 0
|
||||
|
||||
if not played_time and config.get_setting('autoplay'):
|
||||
return
|
||||
|
||||
# The number of links to show is limited
|
||||
if config.get_setting("max_links", "videolibrary") != 0: itemlist = limit_itemlist(itemlist)
|
||||
# The list of links is slightly "cleaned"
|
||||
if config.get_setting("replace_VD", "videolibrary") == 1: itemlist = reorder_itemlist(itemlist)
|
||||
|
||||
# from core.support import dbg;dbg()
|
||||
if len(itemlist) > 0:
|
||||
while not xbmc.Monitor().abortRequested():
|
||||
# The user chooses the mirror
|
||||
|
||||
@@ -547,7 +547,7 @@ def set_context_commands(item, item_url, parent_item, **kwargs):
|
||||
context_commands.append(("InfoPlus", "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'channel=infoplus&action=Main&from_channel=' + item.channel)))
|
||||
|
||||
# Go to the Main Menu (channel.mainlist)
|
||||
if parent_item.channel not in ["news", "channelselector", "downloads"] and item.action != "mainlist":
|
||||
if parent_item.channel not in ["news", "channelselector", "downloads", "search"] and item.action != "mainlist" and not parent_item.noMainMenu:
|
||||
if parent_item.action != "mainlist":
|
||||
context_commands.insert(0, (config.get_localized_string(60349), "Container.Refresh (%s?%s)" % (sys.argv[0], Item(channel=item.channel, action="mainlist").tourl())))
|
||||
context_commands.insert(1, (config.get_localized_string(70739), "Container.Update (%s?%s)" % (sys.argv[0], Item(action="open_browser", url=item.url).tourl())))
|
||||
@@ -556,7 +556,7 @@ def set_context_commands(item, item_url, parent_item, **kwargs):
|
||||
if item.channel not in ["favorites", "videolibrary", "help", ""] and parent_item.channel != "favorites":
|
||||
context_commands.append( (config.get_localized_string(70557), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, urllib.urlencode({'channel': "kodfavorites", 'action': "addFavourite", 'from_channel': item.channel, 'from_action': item.action}))))
|
||||
# Search in other channels
|
||||
if item.contentTitle and item.contentType in ['movie', 'tvshow'] and item.channel != 'search' and item.action not in ['play'] and parent_item.action != 'mainlist':
|
||||
if item.contentTitle and item.contentType in ['movie', 'tvshow'] and parent_item.channel != 'search' and item.action not in ['play'] and parent_item.action != 'mainlist':
|
||||
|
||||
# Search in other channels
|
||||
if item.contentSerieName != '':
|
||||
@@ -586,7 +586,7 @@ def set_context_commands(item, item_url, parent_item, **kwargs):
|
||||
elif item.action in ["detail", "findvideos"] and item.contentType == 'movie' and item.contentTitle:
|
||||
context_commands.append((config.get_localized_string(60353), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'action=add_pelicula_to_library&from_action=' + item.action)))
|
||||
|
||||
if not item.local and item.channel not in ["downloads", "filmontv"] and item.server != 'torrent' and parent_item.action != 'mainlist' and config.get_setting('downloadenabled'):
|
||||
if not item.local and item.channel not in ["downloads", "filmontv", "search"] and item.server != 'torrent' and parent_item.action != 'mainlist' and config.get_setting('downloadenabled'):
|
||||
# Download movie
|
||||
if item.contentType == "movie":
|
||||
context_commands.append((config.get_localized_string(60354), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'channel=downloads&action=save_download&from_channel=' + item.channel + '&from_action=' + item.action)))
|
||||
@@ -679,9 +679,7 @@ def play_video(item, strm=False, force_direct=False, autoplay=False):
|
||||
|
||||
if force_direct: item.play_from = 'window'
|
||||
|
||||
|
||||
item, nfo_path, head_nfo, item_nfo = resume_playback(item)
|
||||
set_player(item, xlistitem, mediaurl, view, strm, nfo_path, head_nfo, item_nfo)
|
||||
set_player(item, xlistitem, mediaurl, view, strm)
|
||||
|
||||
|
||||
def stop_video():
|
||||
@@ -1009,9 +1007,17 @@ def get_video_seleccionado(item, seleccion, video_urls):
|
||||
return mediaurl, view, mpd
|
||||
|
||||
|
||||
def set_player(item, xlistitem, mediaurl, view, strm, nfo_path=None, head_nfo=None, item_nfo=None):
|
||||
def set_player(item, xlistitem, mediaurl, view, strm):
|
||||
logger.debug()
|
||||
item.options = {'strm':False, 'continue':False}
|
||||
# logger.debug("item:\n" + item.tostring('\n'))
|
||||
|
||||
# Prevent Busy
|
||||
if not item.autoplay:
|
||||
if item.globalsearch: xbmc.executebuiltin("PlayMedia(" + os.path.join(config.get_runtime_path(), "resources", "kod.mp4") + ")")
|
||||
else: xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xbmcgui.ListItem(path=os.path.join(config.get_runtime_path(), "resources", "kod.mp4")))
|
||||
xbmc.Player().stop()
|
||||
|
||||
# Moved del conector "torrent" here
|
||||
if item.server == "torrent":
|
||||
play_torrent(item, xlistitem, mediaurl)
|
||||
@@ -1028,29 +1034,26 @@ def set_player(item, xlistitem, mediaurl, view, strm, nfo_path=None, head_nfo=No
|
||||
player_mode = item.player_mode
|
||||
else:
|
||||
player_mode = config.get_setting("player_mode")
|
||||
if (player_mode == 3 and mediaurl.startswith("rtmp")) or item.play_from == 'window' or item.nfo: player_mode = 0
|
||||
if (player_mode == 3 and mediaurl.startswith("rtmp")): player_mode = 0
|
||||
elif "megacrypter.com" in mediaurl: player_mode = 3
|
||||
logger.info("mediaurl=" + mediaurl)
|
||||
|
||||
if player_mode == 0:
|
||||
logger.info('Player Mode: Direct')
|
||||
if player_mode in [0,1]:
|
||||
logger.info('Player Mode:' + ['Direct', 'Bookmark'][player_mode])
|
||||
# Add the listitem to a playlist
|
||||
playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
|
||||
playlist.clear()
|
||||
playlist.add(mediaurl, xlistitem)
|
||||
|
||||
# played_time = resume_playback(get_played_time(item))
|
||||
|
||||
# Reproduce
|
||||
xbmc_player.play(playlist, xlistitem)
|
||||
# viewed(item, played_time)
|
||||
if config.get_setting('trakt_sync'):
|
||||
from core import trakt_tools
|
||||
trakt_tools.wait_for_update_trakt()
|
||||
|
||||
elif player_mode == 1:
|
||||
logger.info('Player Mode: setResolvedUrl')
|
||||
xlistitem.setPath(mediaurl)
|
||||
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xlistitem)
|
||||
# xbmc.sleep(2500)
|
||||
|
||||
elif player_mode == 2:
|
||||
logger.info('Player Mode: Built-In')
|
||||
xbmc.executebuiltin("PlayMedia(" + mediaurl + ")")
|
||||
@@ -1068,13 +1071,14 @@ def set_player(item, xlistitem, mediaurl, view, strm, nfo_path=None, head_nfo=No
|
||||
xbmc_player.setSubtitles(item.subtitle)
|
||||
|
||||
# if it is a video library file send to mark as seen
|
||||
if strm or item.strm_path:
|
||||
from platformcode import xbmc_videolibrary
|
||||
xbmc_videolibrary.mark_auto_as_watched(item, nfo_path, head_nfo, item_nfo)
|
||||
if strm or item.strm_path: item.options['strm'] = True
|
||||
if player_mode == 1: item.options['continue'] = True
|
||||
from platformcode import xbmc_videolibrary
|
||||
xbmc_videolibrary.mark_auto_as_watched(item)
|
||||
|
||||
# for cases where the audio playback window appears in place of the video one
|
||||
if item.focusOnVideoPlayer:
|
||||
while is_playing and xbmcgui.getCurrentWindowId() != 12006:
|
||||
while is_playing() and xbmcgui.getCurrentWindowId() != 12006:
|
||||
continue
|
||||
xbmc.sleep(500)
|
||||
xbmcgui.Window(12005).show()
|
||||
@@ -1136,16 +1140,16 @@ def play_torrent(item, xlistitem, mediaurl):
|
||||
time.sleep(3)
|
||||
|
||||
|
||||
def resume_playback(item, return_played_time=False):
|
||||
def resume_playback(played_time):
|
||||
class ResumePlayback(xbmcgui.WindowXMLDialog):
|
||||
Close = False
|
||||
Resume = False
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.action_exitkeys_id = [xbmcgui.ACTION_BACKSPACE, xbmcgui.ACTION_PREVIOUS_MENU, xbmcgui.ACTION_NAV_BACK]
|
||||
self.action_exitkeys_id = [92, 10]
|
||||
self.progress_control = None
|
||||
self.item = kwargs.get('item')
|
||||
m, s = divmod(float(self.item.played_time), 60)
|
||||
played_time = kwargs.get('played_time')
|
||||
m, s = divmod(played_time, 60)
|
||||
h, m = divmod(m, 60)
|
||||
self.setProperty("time", '%02d:%02d:%02d' % (h, m, s))
|
||||
|
||||
@@ -1168,38 +1172,17 @@ def resume_playback(item, return_played_time=False):
|
||||
if action in self.action_exitkeys_id:
|
||||
self.set_values(False)
|
||||
self.close()
|
||||
|
||||
|
||||
from core import videolibrarytools, filetools
|
||||
|
||||
# Read NFO FILE
|
||||
if item.contentType == 'movie':
|
||||
nfo_path = item.nfo
|
||||
else:
|
||||
nfo_path = item.strm_path.replace('strm','nfo')
|
||||
|
||||
if filetools.isfile(nfo_path):
|
||||
head_nfo, item_nfo = videolibrarytools.read_nfo(nfo_path)
|
||||
|
||||
if return_played_time:
|
||||
return item_nfo.played_time
|
||||
# Show Window
|
||||
elif (config.get_setting("player_mode") not in [3] or item.play_from == 'window') and item_nfo.played_time and item_nfo.played_time >= 120:
|
||||
Dialog = ResumePlayback('ResumePlayback.xml', config.get_runtime_path(), item=item_nfo)
|
||||
Dialog.show()
|
||||
t = 0
|
||||
while not Dialog.is_close() and t < 100:
|
||||
t += 1
|
||||
xbmc.sleep(100)
|
||||
if not Dialog.Resume: item_nfo.played_time = 0
|
||||
else:
|
||||
item_nfo.played_time = 0
|
||||
|
||||
return item, nfo_path, head_nfo, item_nfo
|
||||
else:
|
||||
item.nfo = item.strm_path = ""
|
||||
return item, None, None, None
|
||||
|
||||
if played_time:
|
||||
Dialog = ResumePlayback('ResumePlayback.xml', config.get_runtime_path(), played_time=played_time)
|
||||
Dialog.show()
|
||||
t = 0
|
||||
while not Dialog.is_close() and t < 100:
|
||||
t += 1
|
||||
xbmc.sleep(100)
|
||||
if not Dialog.Resume: played_time = 0
|
||||
else: played_time = 0
|
||||
xbmc.sleep(300)
|
||||
return played_time
|
||||
|
||||
##### INPUTSTREM #####
|
||||
|
||||
@@ -1396,3 +1379,65 @@ def get_platform():
|
||||
ret["arch"] = "arm"
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
|
||||
def get_played_time(item):
|
||||
import sqlite3
|
||||
from core import filetools
|
||||
db_name = filetools.join(config.get_data_path(), "kod_db.sqlite")
|
||||
ID = item.infoLabels['tmdb_id']
|
||||
conn = sqlite3.connect(db_name, timeout=15)
|
||||
c = conn.cursor()
|
||||
c.execute('CREATE TABLE IF NOT EXISTS viewed (tmdb_id TEXT, season INT, episode INT, played_time REAL)')
|
||||
conn.commit()
|
||||
if ID:
|
||||
if item.contentType == 'movie': c.execute("SELECT played_time FROM viewed WHERE tmdb_id=?", (ID,))
|
||||
elif 'season' in item.infoLabels:
|
||||
S = item.infoLabels['season']
|
||||
E = item.infoLabels['episode']
|
||||
c.execute("SELECT played_time FROM viewed WHERE tmdb_id=? AND season=? AND episode=?", (ID, S, E))
|
||||
elif 'episode' in item.infoLabels:
|
||||
E = item.infoLabels['episode']
|
||||
c.execute("SELECT played_time FROM viewed WHERE tmdb_id=? AND episode=?", (ID, E))
|
||||
result = c.fetchone()
|
||||
if not result: played_time = 0
|
||||
else: played_time = result[0]
|
||||
else: played_time = 0
|
||||
conn.close()
|
||||
return played_time
|
||||
|
||||
def set_played_time(item):
|
||||
import sqlite3
|
||||
from core import filetools
|
||||
ID = item.infoLabels['tmdb_id']
|
||||
played_time = item.played_time
|
||||
db_name = filetools.join(config.get_data_path(), "kod_db.sqlite")
|
||||
conn = sqlite3.connect(db_name, timeout=15)
|
||||
c = conn.cursor()
|
||||
if item.contentType == 'movie':
|
||||
c.execute("SELECT played_time FROM viewed WHERE tmdb_id=?", (ID,))
|
||||
result = c.fetchone()
|
||||
if result:
|
||||
if played_time > 0: c.execute("UPDATE viewed SET played_time=? WHERE tmdb_id=?", (item.played_time, ID))
|
||||
else: c.execute("DELETE from viewed WHERE tmdb_id=?", (ID,))
|
||||
else: c.execute("INSERT INTO viewed (tmdb_id, played_time) VALUES (?, ?)", (ID, item.played_time))
|
||||
elif 'season' in item.infoLabels:
|
||||
S = item.infoLabels['season']
|
||||
E = item.infoLabels['episode']
|
||||
c.execute("SELECT played_time FROM viewed WHERE tmdb_id=? AND season = ? AND episode=?", (ID, S, E))
|
||||
result = c.fetchone()
|
||||
if result:
|
||||
if played_time > 0: c.execute("UPDATE viewed SET played_time=? WHERE tmdb_id=? AND season=? AND episode=?", (item.played_time, ID, S, E))
|
||||
else: c.execute("DELETE from viewed WHERE tmdb_id=? AND season=? AND episode=?", (ID, S, E))
|
||||
else: c.execute("INSERT INTO viewed (tmdb_id, season, episode, played_time) VALUES (?, ?, ?, ?)", (ID, S, E, item.played_time))
|
||||
elif 'episode' in item.infoLabels:
|
||||
E = item.infoLabels['episode']
|
||||
c.execute("SELECT played_time FROM viewed WHERE tmdb_id=? AND episode=?", (ID, E))
|
||||
result = c.fetchone()
|
||||
if result:
|
||||
if played_time > 0: c.execute("UPDATE viewed SET played_time=? WHERE tmdb_id=? AND episode=?", (item.played_time, ID, E))
|
||||
else: c.execute("DELETE from viewed WHERE tmdb_id=? AND episode=?", (ID, E))
|
||||
else: c.execute("INSERT INTO viewed (tmdb_id, episode, played_time) VALUES (?, ?, ?)", (ID, E, item.played_time))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
@@ -20,15 +20,19 @@ from core import scrapertools
|
||||
from xml.dom import minidom
|
||||
|
||||
|
||||
def mark_auto_as_watched(item, nfo_path=None, head_nfo=None, item_nfo=None):
|
||||
def mark_as_watched_subThread(item, nfo_path, head_nfo, item_nfo):
|
||||
def mark_auto_as_watched(item):
|
||||
def mark_as_watched_subThread(item):
|
||||
logger.debug()
|
||||
actual_time = 0
|
||||
total_time = 0
|
||||
# logger.debug("item:\n" + item.tostring('\n'))
|
||||
if item.options['continue']: item.played_time = platformtools.resume_playback(platformtools.get_played_time(item))
|
||||
|
||||
time_limit = time.time() + 30
|
||||
while not platformtools.is_playing() and time.time() < time_limit:
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
marked = False
|
||||
next_episode = None
|
||||
show_server = True
|
||||
@@ -39,14 +43,15 @@ def mark_auto_as_watched(item, nfo_path=None, head_nfo=None, item_nfo=None):
|
||||
next_dialogs = ['NextDialog.xml', 'NextDialogExtended.xml', 'NextDialogCompact.xml']
|
||||
next_ep_type = config.get_setting('next_ep_type')
|
||||
ND = next_dialogs[next_ep_type]
|
||||
next_episode = next_ep(item)
|
||||
try: next_episode = next_ep(item)
|
||||
except: next_episode = False
|
||||
|
||||
while platformtools.is_playing():
|
||||
actual_time = xbmc.Player().getTime()
|
||||
total_time = xbmc.Player().getTotalTime()
|
||||
if item_nfo.played_time and xbmcgui.getCurrentWindowId() == 12005:
|
||||
xbmc.Player().seekTime(item_nfo.played_time)
|
||||
item_nfo.played_time = 0 # Fix for Slow Devices
|
||||
if item.played_time and xbmcgui.getCurrentWindowId() == 12005:
|
||||
xbmc.Player().seekTime(item.played_time)
|
||||
item.played_time = 0 # Fix for Slow Devices
|
||||
|
||||
mark_time = total_time * percentage
|
||||
difference = total_time - actual_time
|
||||
@@ -55,7 +60,7 @@ def mark_auto_as_watched(item, nfo_path=None, head_nfo=None, item_nfo=None):
|
||||
if actual_time > mark_time and not marked:
|
||||
logger.info("Marked as Watched")
|
||||
item.playcount = 1
|
||||
marked = True
|
||||
if item.options['strm'] : marked = True
|
||||
show_server = False
|
||||
from specials import videolibrary
|
||||
videolibrary.mark_content_as_watched2(item)
|
||||
@@ -75,9 +80,11 @@ def mark_auto_as_watched(item, nfo_path=None, head_nfo=None, item_nfo=None):
|
||||
break
|
||||
xbmc.sleep(1000)
|
||||
|
||||
# Set played time
|
||||
item_nfo.played_time = int(actual_time) if not marked else 0
|
||||
filetools.write(nfo_path, head_nfo + item_nfo.tojson())
|
||||
if item.options['continue']:
|
||||
if 120 < actual_time < (total_time / 100) * 80:
|
||||
item.played_time = actual_time
|
||||
else: item.played_time = 0
|
||||
platformtools.set_played_time(item)
|
||||
|
||||
# Silent sync with Trakt
|
||||
if marked and config.get_setting("trakt_sync"): sync_trakt_kodi()
|
||||
@@ -94,7 +101,7 @@ def mark_auto_as_watched(item, nfo_path=None, head_nfo=None, item_nfo=None):
|
||||
|
||||
# If it is configured to mark as seen
|
||||
if config.get_setting("mark_as_watched", "videolibrary"):
|
||||
threading.Thread(target=mark_as_watched_subThread, args=[item, nfo_path, head_nfo, item_nfo]).start()
|
||||
threading.Thread(target=mark_as_watched_subThread, args=[item]).start()
|
||||
|
||||
|
||||
|
||||
@@ -1340,12 +1347,11 @@ class NextDialog(xbmcgui.WindowXMLDialog):
|
||||
f.close()
|
||||
full_info = "".join(full_info)
|
||||
info = jsontools.load(full_info)
|
||||
if "thumbnail" in info:
|
||||
img = info["thumbnail"]
|
||||
else:
|
||||
img = filetools.join(config.get_runtime_path(), "resources", "noimage.png")
|
||||
self.setProperty("next_img", img)
|
||||
info = info["infoLabels"]
|
||||
if "fanart" in info: img = info["fanart"]
|
||||
elif "thumbnail" in info: img = info["thumbnail"]
|
||||
else: img = filetools.join(config.get_runtime_path(), "resources", "noimage.png")
|
||||
self.setProperty("next_img", img)
|
||||
self.setProperty("title", info["tvshowtitle"])
|
||||
self.setProperty("ep_title", "%dx%02d - %s" % (info["season"], info["episode"], info["title"]))
|
||||
|
||||
@@ -1381,4 +1387,4 @@ class NextDialog(xbmcgui.WindowXMLDialog):
|
||||
if action in self.action_exitkeys_id:
|
||||
self.set_exit(True)
|
||||
self.set_continue_watching(False)
|
||||
self.close()
|
||||
self.close()
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<setting id="checkdns" type="bool" default="true" visible="false"/>
|
||||
<setting label="70788" type="lsep"/>
|
||||
<setting id="debug" type="bool" label="30003" default="false"/>
|
||||
<setting id="chrome_ua_version" type="text" default="87.0.4280.88" visible="False"/>
|
||||
</category>
|
||||
|
||||
<!-- Playback -->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<window>
|
||||
<depth>0.52</depth>
|
||||
<zorder>0.52</zorder>
|
||||
<coordinates>
|
||||
<left>0</left>
|
||||
<top>0</top>
|
||||
@@ -73,7 +73,7 @@
|
||||
<!-- <font>font30_title</font> -->
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>$INFO[Container(102).ListItem.Label] [B][COLOR FFAAAAAA]$INFO[Container(102).ListItem.Property(year)] [CR]$INFO[Container(101).ListItem.Label][/COLOR][/B]</label>
|
||||
<label>$INFO[Container(102).ListItem.Label][B][COLOR FFAAAAAA]$INFO[Container(102).ListItem.Property(year)]$INFO[Container(102).ListItem.Property(rating)][CR]$INFO[Container(102).ListItem.Property(channel)][/COLOR][/B]</label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
@@ -117,69 +117,110 @@
|
||||
<orientation>horizontal</orientation>
|
||||
<scrolltime tween="cubic" easing="out">300</scrolltime>
|
||||
<itemlayout height="570" width="180">
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<control type="group">
|
||||
<top>300</top>
|
||||
<left>0</left>
|
||||
<width>180</width>
|
||||
<height>270</height>
|
||||
<texture colordiffuse="AAFFFFFF">$INFO[ListItem.Property(thumb)]</texture>
|
||||
<visible>!Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
<visible>String.IsEmpty(ListItem.Property(channelthumb))</visible>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>180</width>
|
||||
<height>270</height>
|
||||
<texture colordiffuse="FF999999">$INFO[ListItem.Property(thumb)]</texture>
|
||||
<visible>!Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>180</width>
|
||||
<height>270</height>
|
||||
<texture>$INFO[ListItem.Property(thumb)]</texture>
|
||||
<visible>Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>300</top>
|
||||
<left>0</left>
|
||||
<width>180</width>
|
||||
<height>270</height>
|
||||
<texture>$INFO[ListItem.Property(thumb)]</texture>
|
||||
<visible>Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Item Verified</description>
|
||||
<top>315</top>
|
||||
<left>145</left>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
<texture colordiffuse="FF0082C2">$INFO[ListItem.Property(verified)]</texture>
|
||||
<aspectratio>scale</aspectratio>
|
||||
<control type="group">
|
||||
<top>390</top>
|
||||
<visible>!String.IsEmpty(ListItem.Property(channelthumb))</visible>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>180</width>
|
||||
<height>180</height>
|
||||
<texture colordiffuse="FF999999">$INFO[ListItem.Property(channelthumb)]</texture>
|
||||
<visible>!Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>180</width>
|
||||
<height>180</height>
|
||||
<texture>$INFO[ListItem.Property(channelthumb)]</texture>
|
||||
<visible>Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
</control>
|
||||
</itemlayout>
|
||||
<focusedlayout height="570" width="380">
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>380</width>
|
||||
<height>570</height>
|
||||
<texture colordiffuse="AAFFFFFF">$INFO[ListItem.Property(thumb)]</texture>
|
||||
<visible>!Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
<control type="group">
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>380</width>
|
||||
<height>570</height>
|
||||
<texture colordiffuse="FF999999">$INFO[ListItem.Property(thumb)]</texture>
|
||||
<visible>!Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>380</width>
|
||||
<height>570</height>
|
||||
<texture>$INFO[ListItem.Property(thumb)]</texture>
|
||||
<visible>Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>380</width>
|
||||
<height>570</height>
|
||||
<texture>$INFO[ListItem.Property(thumb)]</texture>
|
||||
<visible>Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Item Verified</description>
|
||||
<top>15</top>
|
||||
<left>330</left>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
<texture colordiffuse="FF0082C2">$INFO[ListItem.Property(verified)]</texture>
|
||||
<aspectratio>scale</aspectratio>
|
||||
<control type="group">
|
||||
<top>420</top>
|
||||
<left>230</left>
|
||||
<visible>!String.IsEmpty(ListItem.Property(channelthumb))</visible>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>150</width>
|
||||
<height>150</height>
|
||||
<texture colordiffuse="FF999999">$INFO[ListItem.Property(channelthumb)]</texture>
|
||||
<visible>!Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Item Poster</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>150</width>
|
||||
<height>150</height>
|
||||
<texture>$INFO[ListItem.Property(channelthumb)]</texture>
|
||||
<visible>Control.HasFocus(102)</visible>
|
||||
<bordersize>10</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
</control>
|
||||
</focusedlayout>
|
||||
</control>
|
||||
@@ -248,10 +289,10 @@
|
||||
</control>
|
||||
<control type="textbox">
|
||||
<description>Results Count</description>
|
||||
<right>5</right>
|
||||
<top>5</top>
|
||||
<width>30</width>
|
||||
<height>30</height>
|
||||
<left>110</left>
|
||||
<top>0</top>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
<!-- <font>font30_title</font> -->
|
||||
<textcolor>22FFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
@@ -259,15 +300,6 @@
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Verified</description>
|
||||
<top>5</top>
|
||||
<left>5</left>
|
||||
<width>30</width>
|
||||
<height>30</height>
|
||||
<texture colordiffuse="880082C2">$INFO[ListItem.Property(verified)]</texture>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
</itemlayout>
|
||||
<focusedlayout height="150" width="150">
|
||||
<control type="image">
|
||||
@@ -288,22 +320,12 @@
|
||||
<texture colordiffuse="880082C2">white.png</texture>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="image">
|
||||
<description>Results Count</description>
|
||||
<top>5</top>
|
||||
<left>5</left>
|
||||
<width>30</width>
|
||||
<height>30</height>
|
||||
<texture colordiffuse="FF0082C2">$INFO[ListItem.Property(verified)]</texture>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="textbox">
|
||||
<description>Verified</description>
|
||||
<right>5</right>
|
||||
<top>5</top>
|
||||
<width>30</width>
|
||||
<height>30</height>
|
||||
<!-- <font>font30_title</font> -->
|
||||
<description>Results Count</description>
|
||||
<left>110</left>
|
||||
<top>0</top>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>[B]$INFO[ListItem.Property(results)][/B]</label>
|
||||
@@ -346,7 +368,7 @@
|
||||
|
||||
<control type="list" id="200"> <!-- Episodes List -->
|
||||
<description>Episodes List</description>
|
||||
<bottom>40</bottom>
|
||||
<top>110</top>
|
||||
<left>520</left>
|
||||
<width>700</width>
|
||||
<height>570</height>
|
||||
@@ -359,7 +381,6 @@
|
||||
<left>20</left>
|
||||
<width>660</width>
|
||||
<height>60</height>
|
||||
<!-- <font>font30_title</font> -->
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<align>left</align>
|
||||
@@ -370,6 +391,8 @@
|
||||
<focusedlayout height="60" width="700">
|
||||
<control type="image">
|
||||
<description>Selected Background</description>
|
||||
<top>0</top>
|
||||
<left>0</left>
|
||||
<width>700</width>
|
||||
<height>60</height>
|
||||
<texture colordiffuse="88000000">white.png</texture>
|
||||
@@ -380,7 +403,6 @@
|
||||
<left>20</left>
|
||||
<width>660</width>
|
||||
<height>60</height>
|
||||
<!-- <font>font30_title</font> -->
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<align>left</align>
|
||||
@@ -476,6 +498,20 @@
|
||||
<aligny>center</aligny>
|
||||
<label>[B][COLOR FFAAAAAA]$INFO[ListItem.Property(servername)][/COLOR][/B]</label>
|
||||
</control>
|
||||
<control type="textbox">
|
||||
<description>No Server Title</description>
|
||||
<left>150</left>
|
||||
<top>35</top>
|
||||
<width>450</width>
|
||||
<height>60</height>
|
||||
<!-- <font>font30_title</font> -->
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
<label>$INFO[ListItem.Label]</label>
|
||||
<visible>!ListItem.Property(servername)</visible>
|
||||
</control>
|
||||
</itemlayout>
|
||||
<focusedlayout height="140" width="700">
|
||||
<control type="image">
|
||||
@@ -543,6 +579,20 @@
|
||||
<aligny>center</aligny>
|
||||
<label>[B][COLOR FFAAAAAA]$INFO[ListItem.Property(servername)][/COLOR][/B]</label>
|
||||
</control>
|
||||
<control type="textbox">
|
||||
<description>No Server Title</description>
|
||||
<left>150</left>
|
||||
<top>35</top>
|
||||
<width>450</width>
|
||||
<height>60</height>
|
||||
<!-- <font>font30_title</font> -->
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
<label>$INFO[ListItem.Label]</label>
|
||||
<visible>!ListItem.Property(servername)</visible>
|
||||
</control>
|
||||
</focusedlayout>
|
||||
</control> <!-- END Servers List -->
|
||||
</control> <!-- END SERVERS GROUP -->
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
<width>326</width>
|
||||
<height>180</height>
|
||||
<texture>$INFO[Window.Property(next_img)]</texture>
|
||||
<aspectratio>scale</aspectratio>
|
||||
</control>
|
||||
<control type="grouplist" id="20">
|
||||
<orientation>vertical</orientation>
|
||||
|
||||
@@ -6,26 +6,26 @@
|
||||
<controls>
|
||||
<control type="group">
|
||||
<animation type="WindowOpen" reversible="false">
|
||||
<effect type="fade" start="0" end="100" time="300" />
|
||||
<effect type="fade" start="0" end="100" time="100" />
|
||||
</animation>
|
||||
<animation type="WindowClose" reversible="false">
|
||||
<effect type="fade" start="100" end="0" time="300" />
|
||||
<effect type="fade" start="100" end="0" time="100" />
|
||||
</animation>
|
||||
<right>440</right>
|
||||
<top>320</top>
|
||||
<right>490</right>
|
||||
<top>300</top>
|
||||
<height>40</height>
|
||||
<width>400</width>
|
||||
<width>300</width>
|
||||
<control type="grouplist" id="20">
|
||||
<orientation>vertical</orientation>
|
||||
<height>80</height>
|
||||
<height>120</height>
|
||||
<itemgap>0</itemgap>
|
||||
<align>center</align>
|
||||
<control type="button" id="3012">
|
||||
<label>$ADDON[plugin.video.kod 30045] $INFO[Window.Property(time)]</label>
|
||||
<label>[B]$ADDON[plugin.video.kod 30045] $INFO[Window.Property(time)][/B]</label>
|
||||
<onclick>SendClick(3012)</onclick>
|
||||
<height>40</height>
|
||||
<width>400</width>
|
||||
<font>font30_title</font>
|
||||
<height>60</height>
|
||||
<width>300</width>
|
||||
<!-- <font>font30_title</font> -->
|
||||
<textoffsetx>20</textoffsetx>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<aligny>center</aligny>
|
||||
@@ -35,10 +35,10 @@
|
||||
<pulseonselect>no</pulseonselect>
|
||||
</control>
|
||||
<control type="button" id="3013">
|
||||
<label>$ADDON[plugin.video.kod 30046]</label>
|
||||
<height>40</height>
|
||||
<width>400</width>
|
||||
<font>font30_title</font>
|
||||
<label>[B]$ADDON[plugin.video.kod 30046][/B]</label>
|
||||
<height>60</height>
|
||||
<width>300</width>
|
||||
<!-- <font>font30_title</font> -->
|
||||
<textoffsetx>20</textoffsetx>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<aligny>center</aligny>
|
||||
|
||||
BIN
resources/skins/Default/media/valid.png
Normal file
BIN
resources/skins/Default/media/valid.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@@ -22,7 +22,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "$ADDON[plugin.video.kod 60654]",
|
||||
"label": "$ADDON[plugin.video.kod 70708]",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"active": true,
|
||||
"find_videos": {
|
||||
"ignore_urls": [],
|
||||
"ignore_urls": ["https://embed.mystream.to/span"],
|
||||
"patterns": [
|
||||
{
|
||||
"pattern": "my?stream\\.(?:\\w+\\.)?[^/]+/(?:external|watch/|embed-)?([0-9a-zA-Z_]+)",
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": false
|
||||
},
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"label": "@70708",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user