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:
marco
2020-12-17 18:41:54 +01:00
parent 23e61f23c6
commit de5a65d77a
130 changed files with 853 additions and 553 deletions
+4 -5
View File
@@ -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> <requires>
<!-- <import addon="script.module.libtorrent" optional="true"/> --> <!-- <import addon="script.module.libtorrent" optional="true"/> -->
<import addon="metadata.themoviedb.org"/> <import addon="metadata.themoviedb.org"/>
@@ -26,10 +26,9 @@
<screenshot>resources/media/themes/ss/2.png</screenshot> <screenshot>resources/media/themes/ss/2.png</screenshot>
<screenshot>resources/media/themes/ss/3.png</screenshot> <screenshot>resources/media/themes/ss/3.png</screenshot>
</assets> </assets>
<news>-Nuova Ricerca Globale <news>- corretta e migliorata la nuova ricerca globale
-Nuova Rinumerazione - salvataggio punto di visione basato sull'id tmdb (disponibile su qualunque canale / server anche senza salvare in videoteca)
-Messaggi di Errore più chiari - alcuni fix e migliore</news>
-Fix var</news>
<description lang="it">Naviga velocemente sul web e guarda i contenuti presenti</description> <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] <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> [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>
+50 -50
View File
@@ -1,57 +1,57 @@
{ {
"direct": { "direct": {
"altadefinizione01_link": "https://altadefinizione01.tips", "altadefinizione01_link": "https://altadefinizione01.tips",
"animealtadefinizione": "https://www.animealtadefinizione.it", "animealtadefinizione": "https://www.animealtadefinizione.it",
"animeforce": "https://ww1.animeforce.org", "animeforce": "https://ww1.animeforce.org",
"animeleggendari": "https://animeora.com", "animeleggendari": "https://animeora.com",
"animesaturn": "https://www.animesaturn.it", "animesaturn": "https://www.animesaturn.it",
"animestream": "https://www.animeworld.tv", "animestream": "https://www.animeworld.tv",
"animesubita": "http://www.animesubita.org", "animesubita": "http://www.animesubita.org",
"animetubeita": "http://www.animetubeita.com", "animetubeita": "http://www.animetubeita.com",
"animeunity": "https://www.animeunity.it", "animeunity": "https://www.animeunity.it",
"animeuniverse": "https://www.animeuniverse.it/", "animeuniverse": "https://www.animeuniverse.it/",
"animeworld": "https://www.animeworld.tv", "animeworld": "https://www.animeworld.tv",
"casacinema": "https://www.casacinema.page", "casacinema": "https://www.casacinema.page",
"cb01anime": "https://www.cineblog01.red", "cb01anime": "https://www.cineblog01.red",
"cinemalibero": "https://cinemalibero.store", "cinemalibero": "https://cinemalibero.store",
"cinetecadibologna": "http://cinestore.cinetecadibologna.it", "cinetecadibologna": "http://cinestore.cinetecadibologna.it",
"dreamsub": "https://dreamsub.stream", "dreamsub": "https://dreamsub.stream",
"dsda": "https://www.dsda.press", "dsda": "https://www.dsda.press",
"eurostreaming": "https://eurostreaming.wiki", "eurostreaming": "https://eurostreaming.wiki",
"fastsubita": "https://fastsubita.xyz", "fastsubita": "https://fastsubita.xyz",
"filmgratis": "https://www.filmaltadefinizione.me", "filmgratis": "https://www.filmaltadefinizione.me",
"filmigratis": "https://filmigratis.org", "filmigratis": "https://filmigratis.org",
"filmsenzalimiticc": "https://www.filmsenzalimiti01.online", "filmsenzalimiticc": "https://www.filmsenzalimiti01.online",
"filmstreaming01": "https://filmstreaming01.com", "filmstreaming01": "https://filmstreaming01.com",
"guardaserie_stream": "https://guardaserie.host", "guardaserie_stream": "https://guardaserie.host",
"guardaseriecam": "https://guardaserie.cam", "guardaseriecam": "https://guardaserie.cam",
"guardaserieclick": "https://www.guardaserie.date", "guardaserieclick": "https://www.guardaserie.date",
"guardaserieicu": "https://guardaserie.today", "guardaserieicu": "https://guardaserie.today",
"hd4me": "https://hd4me.net", "hd4me": "https://hd4me.net",
"ilgeniodellostreaming": "https://ilgeniodellostreaming.cat", "ilcorsaronero": "https://ilcorsaronero.link",
"ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.gold", "ilgeniodellostreaming": "https://ilgeniodellostreaming.cat",
"ilcorsaronero": "https://ilcorsaronero.link", "ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.gold",
"italiaserie": "https://italiaserie.best", "italiaserie": "https://italiaserie.best",
"mondoserietv": "https://mondoserietv.fun", "mondoserietv": "https://mondoserietv.fun",
"piratestreaming": "https://www.piratestreaming.date", "piratestreaming": "https://www.piratestreaming.date",
"polpotv": "https://roma.polpo.tv", "polpotv": "https://roma.polpo.tv",
"raiplay": "https://www.raiplay.it", "raiplay": "https://www.raiplay.it",
"serietvonline": "https://serietvonline.cam", "serietvonline": "https://serietvonline.cam",
"serietvsubita": "http://serietvsubita.xyz", "serietvsubita": "http://serietvsubita.xyz",
"serietvu": "https://www.serietvu.link", "serietvu": "https://www.serietvu.link",
"streamingcommunity": "https://streamingcommunity.net", "streamingcommunity": "https://streamingcommunity.net",
"streamtime": "https://t.me/s/StreamTime", "streamtime": "https://t.me/s/StreamTime",
"toonitalia": "https://toonitalia.org", "toonitalia": "https://toonitalia.org",
"vvvvid": "https://www.vvvvid.it" "vvvvid": "https://www.vvvvid.it"
}, },
"findhost": { "findhost": {
"altadefinizione01": "https://altadefinizione01-nuovo.info", "altadefinizione01": "https://altadefinizione01-nuovo.info",
"altadefinizioneclick": "https://altadefinizione-nuovo.me", "altadefinizioneclick": "https://altadefinizione-nuovo.me",
"animealtadefinizione": "https://www.animealtadefinizione.it", "animealtadefinizione": "https://www.animealtadefinizione.it",
"cineblog01": "https://cb01.uno", "cineblog01": "https://cb01.uno",
"film4k": "https://film4k-nuovo.link", "film4k": "https://film4k-nuovo.link",
"filmpertutti": "https://filmpertutti.nuovo.live", "filmpertutti": "https://filmpertutti.nuovo.live",
"seriehd": "https://nuovoindirizzo.info/seriehd/", "seriehd": "https://nuovoindirizzo.info/seriehd/",
"tantifilm": "https://www.tantifilm.wiki" "tantifilm": "https://www.tantifilm.wiki"
} }
} }
+3 -2
View File
@@ -3,7 +3,7 @@
# Canale per AnimeUnity # Canale per AnimeUnity
# ------------------------------------------------------------ # ------------------------------------------------------------
import requests, json, copy import requests, json, copy, inspect
from core import support from core import support
from platformcode import autorenumber from platformcode import autorenumber
@@ -212,7 +212,8 @@ def episodios(item):
contentType='episode', contentType='episode',
url=it['link'])) 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.videolibrary(itemlist, item)
support.download(itemlist, item) support.download(itemlist, item)
return itemlist return itemlist
+1 -1
View File
@@ -95,7 +95,7 @@ def episodios(item):
item.contentType = 'tvshow' item.contentType = 'tvshow'
else:# item.extra == 'serie': else:# item.extra == 'serie':
support.info("Serie :", item) support.info("Serie :", item)
patron = r'(?:>| )(?P<episode>\d+(?:x|×|&#215;)\d+)[;]?[ ]?(?:(?P<title>[^<-]+)(?P<url>.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br /|</a></p|$)' patron = r'(?:>| )(?P<episode>\d+(?:x|×|&#215;)\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)' 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' item.contentType = 'tvshow'
def itemHook(item): def itemHook(item):
+4 -4
View File
@@ -68,10 +68,10 @@ def episodios(item):
data = support.match(item.url, headers=headers).data data = support.match(item.url, headers=headers).data
if 'accordion-item' in 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)' 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+)(?:&#215;|×|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+)(?:&#215;|×|x)(?P<episode>\d+)[^<0-9]*<\/li>(?P<data>.*?javascript:;">(?P<title>[^<]+).*?</tbody>)'
else: else:
patronBlock = r'(?:STAGIONE|Stagione)(?:<[^>]+>)?\s*(?:(?P<lang>[A-Za-z- ]+))?(?P<block>.*?)(?:&nbsp;|<strong>|<div class="addtoany)' patronBlock = r'(?:STAGIONE|Stagione)(?:<[^>]+>)?\s*(?:(?P<lang>[A-Za-z- ]+))?(?P<block>.*?)(?:&nbsp;|<strong>|<div class="addtoany)'
patron = r'(?:/>|p>)\s*(?P<season>\d+)(?:&#215;|×|x)(?P<episode>\d+)[^<]+(?P<other>.*?)(?:<br|</p)' patron = r'(?:/>|p>)\s*(?P<season>\d+)(?:&#215;|×|x)(?P<episode>\d+)[^<]+(?P<data>.*?)(?:<br|</p)'
def itemHook(i): def itemHook(i):
i.url = item.url i.url = item.url
@@ -156,7 +156,7 @@ def newest(categoria):
def findvideos(item): def findvideos(item):
if item.contentType == 'movie': 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: <[^>]+>([^<]+)') return support.server(item, data=data, patronTag='Versione: <[^>]+>([^<]+)')
else: else:
return support.server(item, item.other) return support.server(item, item.data)
+3 -2
View File
@@ -105,7 +105,7 @@ def peliculas(item):
if pagination and len(itemlist) >= item.page * pagination and not item.search: 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())) 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 itemlist = itlist
autorenumber.renumber(itemlist, item, 'bold') autorenumber.start(itemlist)
return itemlist return itemlist
@@ -156,7 +156,8 @@ def episodios(item):
action='findvideos')) action='findvideos'))
itemlist.sort(key=lambda item: (item.season, item.episode)) 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) return support.videolibrary(itemlist, item)
+2 -2
View File
@@ -3,7 +3,7 @@
# Canale per Rai Play # Canale per Rai Play
# ------------------------------------------------------------ # ------------------------------------------------------------
import requests, sys import requests, sys, inspect
from core import support from core import support
from platformcode import autorenumber from platformcode import autorenumber
if sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
@@ -297,7 +297,7 @@ def episodios(item):
it.title = support.typo(item.season + 'x' + episode, 'bold') + (' - ' + it.title) it.title = support.typo(item.season + 'x' + episode, 'bold') + (' - ' + it.title)
if itemlist and itemlist[0].VL: support.videolibrary(itemlist, item) 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) autorenumber.start(itemlist, item)
return itemlist return itemlist
+16 -8
View File
@@ -8,13 +8,18 @@ from core import support
host = support.config.get_channel_url() host = support.config.get_channel_url()
session = requests.Session() headers = {}
response = session.get(host)
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match def getHeaders():
headers = {'content-type': 'application/json;charset=UTF-8', global headers
'Referer': host, if not headers:
'x-csrf-token': csrf_token, session = requests.Session()
'Cookie': '; '.join([x.name + '=' + x.value for x in response.cookies])} 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 @support.menu
@@ -34,6 +39,7 @@ def mainlist(item):
def genres(item): def genres(item):
getHeaders()
support.info() support.info()
itemlist = [] itemlist = []
data = support.scrapertools.decodeHtmlentities(support.match(item).data) data = support.scrapertools.decodeHtmlentities(support.match(item).data)
@@ -85,6 +91,7 @@ def newest(category):
def peliculas(item): def peliculas(item):
getHeaders()
support.info() support.info()
itemlist = [] itemlist = []
videoType = 'movie' if item.contentType == 'movie' else 'tv' videoType = 'movie' if item.contentType == 'movie' else 'tv'
@@ -145,6 +152,7 @@ def peliculas(item):
return itemlist return itemlist
def episodios(item): def episodios(item):
getHeaders()
support.info() support.info()
itemlist = [] itemlist = []
@@ -172,7 +180,7 @@ def episodios(item):
def findvideos(item): def findvideos(item):
getHeaders()
support.info() support.info()
itemlist=[] itemlist=[]
url = support.match(support.match(item).data.replace('&quot;','"').replace('\\',''), patron=r'video_url"\s*:\s*"([^"]+)"').match url = support.match(support.match(item).data.replace('&quot;','"').replace('\\',''), patron=r'video_url"\s*:\s*"([^"]+)"').match
+6 -5
View File
@@ -2,9 +2,9 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
# Canale per vvvvid # Canale per vvvvid
# ---------------------------------------------------------- # ----------------------------------------------------------
import requests, sys import requests, sys, inspect
from core import support, tmdb from core import support, tmdb
from platformcode import autorenumber, logger from platformcode import autorenumber, logger, config
host = support.config.get_channel_url() host = support.config.get_channel_url()
@@ -170,7 +170,8 @@ def episodios(item):
url= host + show_id + '/season/' + str(key['season_id']), url= host + show_id + '/season/' + str(key['season_id']),
action= 'findvideos', action= 'findvideos',
video_id= key['video_id'])) 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 \ if autorenumber.check(item) == True \
or support.match(itemlist[0].title, patron=r"(\d+x\d+)").match: or support.match(itemlist[0].title, patron=r"(\d+x\d+)").match:
support.videolibrary(itemlist,item) support.videolibrary(itemlist,item)
@@ -196,7 +197,7 @@ def findvideos(item):
url = url.split()[-1] url = url.split()[-1]
itemlist.append( itemlist.append(
item.clone(action= 'play', item.clone(action= 'play',
title='direct', title=config.get_localized_string(30137),
url= 'https://or01.top-ix.org/videomg/_definst_/mp4:' + item.url + '/' + url, url= 'https://or01.top-ix.org/videomg/_definst_/mp4:' + item.url + '/' + url,
server= 'directo') server= 'directo')
) )
@@ -206,7 +207,7 @@ def findvideos(item):
itemlist.append( itemlist.append(
item.clone(action= 'play', item.clone(action= 'play',
title='direct', title=config.get_localized_string(30137),
url= item.url + '?' + key, url= item.url + '?' + key,
server= 'directo') server= 'directo')
) )
+2 -1
View File
@@ -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) # 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 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: # Priorities when ordering itemlist:
# 0: Servers and qualities # 0: Servers and qualities
@@ -230,6 +230,7 @@ def start(itemlist, item):
if isinstance(resolved_item[0], list): videoitem.video_urls = resolved_item if isinstance(resolved_item[0], list): videoitem.video_urls = resolved_item
else: videoitem = resolved_item[0] else: videoitem = resolved_item[0]
play_item.autoplay = True
# If not directly reproduce and mark as seen # If not directly reproduce and mark as seen
# Check if the item comes from the video library # Check if the item comes from the video library
try: try:
+1 -1
View File
@@ -30,7 +30,7 @@ cookies_file = os.path.join(config.get_data_path(), "cookies.dat")
# Headers by default, if nothing is specified # Headers by default, if nothing is specified
default_headers = dict() 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"] = "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-Language"] = "it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3"
default_headers["Accept-Charset"] = "UTF-8" default_headers["Accept-Charset"] = "UTF-8"
+6 -1
View File
@@ -224,7 +224,12 @@ def get_nfo(item):
return info_nfo return info_nfo
else: 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): def sort_episode_list(episodelist):
+8 -5
View File
@@ -95,11 +95,14 @@ def search(channel, item, texto):
def dbg(): def dbg():
if config.dev_mode(): if config.dev_mode():
import web_pdb try:
if not web_pdb.WebPdb.active_instance: import web_pdb
import webbrowser if not web_pdb.WebPdb.active_instance:
webbrowser.open('http://127.0.0.1:5555') import webbrowser
web_pdb.set_trace() webbrowser.open('http://127.0.0.1:5555')
web_pdb.set_trace()
except:
pass
def regexDbg(item, patron, headers, data=''): def regexDbg(item, patron, headers, data=''):
+13 -11
View File
@@ -37,6 +37,7 @@ def start():
updater.showSavedChangelog() updater.showSavedChangelog()
def run(item=None): def run(item=None):
# from core.support import dbg;dbg()
logger.debug() logger.debug()
if not item: if not item:
# Extract item from sys.argv # Extract item from sys.argv
@@ -135,12 +136,6 @@ def run(item=None):
from platformcode import infoplus from platformcode import infoplus
return infoplus.Main(item) 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": elif item.channel == "backup":
from platformcode import backup from platformcode import backup
return getattr(backup, item.action)(item) return getattr(backup, item.action)(item)
@@ -489,17 +484,24 @@ def play_from_library(item):
item.play_from = 'window' item.play_from = 'window'
itemlist = videolibrary.findvideos(item) itemlist = videolibrary.findvideos(item)
p_dialog.update(100, ''); sleep(0.5); p_dialog.close() p_dialog.update(100, ''); sleep(0.5); p_dialog.close()
# while platformtools.is_playing(): # Conventional window while platformtools.is_playing(): sleep(1)
# sleep(100) # from core.support import dbg;dbg()
play_time = platformtools.resume_playback(item, True) if item.contentType == 'movie': nfo_path = item.nfo
if not play_time and config.get_setting('autoplay'): 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 return
# The number of links to show is limited # The number of links to show is limited
if config.get_setting("max_links", "videolibrary") != 0: itemlist = limit_itemlist(itemlist) if config.get_setting("max_links", "videolibrary") != 0: itemlist = limit_itemlist(itemlist)
# The list of links is slightly "cleaned" # The list of links is slightly "cleaned"
if config.get_setting("replace_VD", "videolibrary") == 1: itemlist = reorder_itemlist(itemlist) if config.get_setting("replace_VD", "videolibrary") == 1: itemlist = reorder_itemlist(itemlist)
# from core.support import dbg;dbg()
if len(itemlist) > 0: if len(itemlist) > 0:
while not xbmc.Monitor().abortRequested(): while not xbmc.Monitor().abortRequested():
# The user chooses the mirror # The user chooses the mirror
+101 -56
View File
@@ -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))) 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) # 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": 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(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()))) 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": 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})))) 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 # 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 # Search in other channels
if item.contentSerieName != '': 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: 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))) 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 # Download movie
if item.contentType == "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))) 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' if force_direct: item.play_from = 'window'
set_player(item, xlistitem, mediaurl, view, strm)
item, nfo_path, head_nfo, item_nfo = resume_playback(item)
set_player(item, xlistitem, mediaurl, view, strm, nfo_path, head_nfo, item_nfo)
def stop_video(): def stop_video():
@@ -1009,9 +1007,17 @@ def get_video_seleccionado(item, seleccion, video_urls):
return mediaurl, view, mpd 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() logger.debug()
item.options = {'strm':False, 'continue':False}
# logger.debug("item:\n" + item.tostring('\n')) # 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 # Moved del conector "torrent" here
if item.server == "torrent": if item.server == "torrent":
play_torrent(item, xlistitem, mediaurl) 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 player_mode = item.player_mode
else: else:
player_mode = config.get_setting("player_mode") 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 elif "megacrypter.com" in mediaurl: player_mode = 3
logger.info("mediaurl=" + mediaurl) logger.info("mediaurl=" + mediaurl)
if player_mode == 0: if player_mode in [0,1]:
logger.info('Player Mode: Direct') logger.info('Player Mode:' + ['Direct', 'Bookmark'][player_mode])
# Add the listitem to a playlist # Add the listitem to a playlist
playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
playlist.clear() playlist.clear()
playlist.add(mediaurl, xlistitem) playlist.add(mediaurl, xlistitem)
# played_time = resume_playback(get_played_time(item))
# Reproduce # Reproduce
xbmc_player.play(playlist, xlistitem) xbmc_player.play(playlist, xlistitem)
# viewed(item, played_time)
if config.get_setting('trakt_sync'): if config.get_setting('trakt_sync'):
from core import trakt_tools from core import trakt_tools
trakt_tools.wait_for_update_trakt() 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: elif player_mode == 2:
logger.info('Player Mode: Built-In') logger.info('Player Mode: Built-In')
xbmc.executebuiltin("PlayMedia(" + mediaurl + ")") 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) xbmc_player.setSubtitles(item.subtitle)
# if it is a video library file send to mark as seen # if it is a video library file send to mark as seen
if strm or item.strm_path: if strm or item.strm_path: item.options['strm'] = True
from platformcode import xbmc_videolibrary if player_mode == 1: item.options['continue'] = True
xbmc_videolibrary.mark_auto_as_watched(item, nfo_path, head_nfo, item_nfo) 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 # for cases where the audio playback window appears in place of the video one
if item.focusOnVideoPlayer: if item.focusOnVideoPlayer:
while is_playing and xbmcgui.getCurrentWindowId() != 12006: while is_playing() and xbmcgui.getCurrentWindowId() != 12006:
continue continue
xbmc.sleep(500) xbmc.sleep(500)
xbmcgui.Window(12005).show() xbmcgui.Window(12005).show()
@@ -1136,16 +1140,16 @@ def play_torrent(item, xlistitem, mediaurl):
time.sleep(3) time.sleep(3)
def resume_playback(item, return_played_time=False): def resume_playback(played_time):
class ResumePlayback(xbmcgui.WindowXMLDialog): class ResumePlayback(xbmcgui.WindowXMLDialog):
Close = False Close = False
Resume = False Resume = False
def __init__(self, *args, **kwargs): 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.progress_control = None
self.item = kwargs.get('item') played_time = kwargs.get('played_time')
m, s = divmod(float(self.item.played_time), 60) m, s = divmod(played_time, 60)
h, m = divmod(m, 60) h, m = divmod(m, 60)
self.setProperty("time", '%02d:%02d:%02d' % (h, m, s)) 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: if action in self.action_exitkeys_id:
self.set_values(False) self.set_values(False)
self.close() self.close()
if played_time:
Dialog = ResumePlayback('ResumePlayback.xml', config.get_runtime_path(), played_time=played_time)
from core import videolibrarytools, filetools Dialog.show()
t = 0
# Read NFO FILE while not Dialog.is_close() and t < 100:
if item.contentType == 'movie': t += 1
nfo_path = item.nfo xbmc.sleep(100)
else: if not Dialog.Resume: played_time = 0
nfo_path = item.strm_path.replace('strm','nfo') else: played_time = 0
xbmc.sleep(300)
if filetools.isfile(nfo_path): return played_time
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
##### INPUTSTREM ##### ##### INPUTSTREM #####
@@ -1396,3 +1379,65 @@ def get_platform():
ret["arch"] = "arm" ret["arch"] = "arm"
return ret 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()
+23 -17
View File
@@ -20,15 +20,19 @@ from core import scrapertools
from xml.dom import minidom from xml.dom import minidom
def mark_auto_as_watched(item, nfo_path=None, head_nfo=None, item_nfo=None): def mark_auto_as_watched(item):
def mark_as_watched_subThread(item, nfo_path, head_nfo, item_nfo): def mark_as_watched_subThread(item):
logger.debug() logger.debug()
actual_time = 0
total_time = 0
# logger.debug("item:\n" + item.tostring('\n')) # 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 time_limit = time.time() + 30
while not platformtools.is_playing() and time.time() < time_limit: while not platformtools.is_playing() and time.time() < time_limit:
time.sleep(1) time.sleep(1)
marked = False marked = False
next_episode = None next_episode = None
show_server = True 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_dialogs = ['NextDialog.xml', 'NextDialogExtended.xml', 'NextDialogCompact.xml']
next_ep_type = config.get_setting('next_ep_type') next_ep_type = config.get_setting('next_ep_type')
ND = next_dialogs[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(): while platformtools.is_playing():
actual_time = xbmc.Player().getTime() actual_time = xbmc.Player().getTime()
total_time = xbmc.Player().getTotalTime() total_time = xbmc.Player().getTotalTime()
if item_nfo.played_time and xbmcgui.getCurrentWindowId() == 12005: if item.played_time and xbmcgui.getCurrentWindowId() == 12005:
xbmc.Player().seekTime(item_nfo.played_time) xbmc.Player().seekTime(item.played_time)
item_nfo.played_time = 0 # Fix for Slow Devices item.played_time = 0 # Fix for Slow Devices
mark_time = total_time * percentage mark_time = total_time * percentage
difference = total_time - actual_time 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: if actual_time > mark_time and not marked:
logger.info("Marked as Watched") logger.info("Marked as Watched")
item.playcount = 1 item.playcount = 1
marked = True if item.options['strm'] : marked = True
show_server = False show_server = False
from specials import videolibrary from specials import videolibrary
videolibrary.mark_content_as_watched2(item) 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 break
xbmc.sleep(1000) xbmc.sleep(1000)
# Set played time if item.options['continue']:
item_nfo.played_time = int(actual_time) if not marked else 0 if 120 < actual_time < (total_time / 100) * 80:
filetools.write(nfo_path, head_nfo + item_nfo.tojson()) item.played_time = actual_time
else: item.played_time = 0
platformtools.set_played_time(item)
# Silent sync with Trakt # Silent sync with Trakt
if marked and config.get_setting("trakt_sync"): sync_trakt_kodi() 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 it is configured to mark as seen
if config.get_setting("mark_as_watched", "videolibrary"): 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() f.close()
full_info = "".join(full_info) full_info = "".join(full_info)
info = jsontools.load(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"] 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("title", info["tvshowtitle"])
self.setProperty("ep_title", "%dx%02d - %s" % (info["season"], info["episode"], info["title"])) 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: if action in self.action_exitkeys_id:
self.set_exit(True) self.set_exit(True)
self.set_continue_watching(False) self.set_continue_watching(False)
self.close() self.close()
+1
View File
@@ -13,6 +13,7 @@
<setting id="checkdns" type="bool" default="true" visible="false"/> <setting id="checkdns" type="bool" default="true" visible="false"/>
<setting label="70788" type="lsep"/> <setting label="70788" type="lsep"/>
<setting id="debug" type="bool" label="30003" default="false"/> <setting id="debug" type="bool" label="30003" default="false"/>
<setting id="chrome_ua_version" type="text" default="87.0.4280.88" visible="False"/>
</category> </category>
<!-- Playback --> <!-- Playback -->
+140 -90
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<window> <window>
<depth>0.52</depth> <zorder>0.52</zorder>
<coordinates> <coordinates>
<left>0</left> <left>0</left>
<top>0</top> <top>0</top>
@@ -73,7 +73,7 @@
<!-- <font>font30_title</font> --> <!-- <font>font30_title</font> -->
<textcolor>FFFFFFFF</textcolor> <textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor> <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> <align>left</align>
<aligny>center</aligny> <aligny>center</aligny>
</control> </control>
@@ -117,69 +117,110 @@
<orientation>horizontal</orientation> <orientation>horizontal</orientation>
<scrolltime tween="cubic" easing="out">300</scrolltime> <scrolltime tween="cubic" easing="out">300</scrolltime>
<itemlayout height="570" width="180"> <itemlayout height="570" width="180">
<control type="image"> <control type="group">
<description>Item Poster</description>
<top>300</top> <top>300</top>
<left>0</left> <visible>String.IsEmpty(ListItem.Property(channelthumb))</visible>
<width>180</width> <control type="image">
<height>270</height> <description>Item Poster</description>
<texture colordiffuse="AAFFFFFF">$INFO[ListItem.Property(thumb)]</texture> <top>0</top>
<visible>!Control.HasFocus(102)</visible> <left>0</left>
<bordersize>10</bordersize> <width>180</width>
<aspectratio>scale</aspectratio> <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>
<control type="image"> <control type="group">
<description>Item Poster</description> <top>390</top>
<top>300</top> <visible>!String.IsEmpty(ListItem.Property(channelthumb))</visible>
<left>0</left> <control type="image">
<width>180</width> <description>Item Poster</description>
<height>270</height> <top>0</top>
<texture>$INFO[ListItem.Property(thumb)]</texture> <left>0</left>
<visible>Control.HasFocus(102)</visible> <width>180</width>
<bordersize>10</bordersize> <height>180</height>
<aspectratio>scale</aspectratio> <texture colordiffuse="FF999999">$INFO[ListItem.Property(channelthumb)]</texture>
</control> <visible>!Control.HasFocus(102)</visible>
<control type="image"> <bordersize>10</bordersize>
<description>Item Verified</description> <aspectratio>scale</aspectratio>
<top>315</top> </control>
<left>145</left> <control type="image">
<width>20</width> <description>Item Poster</description>
<height>20</height> <top>0</top>
<texture colordiffuse="FF0082C2">$INFO[ListItem.Property(verified)]</texture> <left>0</left>
<aspectratio>scale</aspectratio> <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> </control>
</itemlayout> </itemlayout>
<focusedlayout height="570" width="380"> <focusedlayout height="570" width="380">
<control type="image"> <control type="group">
<description>Item Poster</description> <control type="image">
<top>0</top> <description>Item Poster</description>
<left>0</left> <top>0</top>
<width>380</width> <left>0</left>
<height>570</height> <width>380</width>
<texture colordiffuse="AAFFFFFF">$INFO[ListItem.Property(thumb)]</texture> <height>570</height>
<visible>!Control.HasFocus(102)</visible> <texture colordiffuse="FF999999">$INFO[ListItem.Property(thumb)]</texture>
<bordersize>10</bordersize> <visible>!Control.HasFocus(102)</visible>
<aspectratio>scale</aspectratio> <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>
<control type="image"> <control type="group">
<description>Item Poster</description> <top>420</top>
<top>0</top> <left>230</left>
<left>0</left> <visible>!String.IsEmpty(ListItem.Property(channelthumb))</visible>
<width>380</width> <control type="image">
<height>570</height> <description>Item Poster</description>
<texture>$INFO[ListItem.Property(thumb)]</texture> <top>0</top>
<visible>Control.HasFocus(102)</visible> <left>0</left>
<bordersize>10</bordersize> <width>150</width>
<aspectratio>scale</aspectratio> <height>150</height>
</control> <texture colordiffuse="FF999999">$INFO[ListItem.Property(channelthumb)]</texture>
<control type="image"> <visible>!Control.HasFocus(102)</visible>
<description>Item Verified</description> <bordersize>10</bordersize>
<top>15</top> <aspectratio>scale</aspectratio>
<left>330</left> </control>
<width>40</width> <control type="image">
<height>40</height> <description>Item Poster</description>
<texture colordiffuse="FF0082C2">$INFO[ListItem.Property(verified)]</texture> <top>0</top>
<aspectratio>scale</aspectratio> <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> </control>
</focusedlayout> </focusedlayout>
</control> </control>
@@ -248,10 +289,10 @@
</control> </control>
<control type="textbox"> <control type="textbox">
<description>Results Count</description> <description>Results Count</description>
<right>5</right> <left>110</left>
<top>5</top> <top>0</top>
<width>30</width> <width>40</width>
<height>30</height> <height>40</height>
<!-- <font>font30_title</font> --> <!-- <font>font30_title</font> -->
<textcolor>22FFFFFF</textcolor> <textcolor>22FFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor> <shadowcolor>00000000</shadowcolor>
@@ -259,15 +300,6 @@
<align>center</align> <align>center</align>
<aligny>center</aligny> <aligny>center</aligny>
</control> </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> </itemlayout>
<focusedlayout height="150" width="150"> <focusedlayout height="150" width="150">
<control type="image"> <control type="image">
@@ -288,22 +320,12 @@
<texture colordiffuse="880082C2">white.png</texture> <texture colordiffuse="880082C2">white.png</texture>
<aspectratio>scale</aspectratio> <aspectratio>scale</aspectratio>
</control> </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"> <control type="textbox">
<description>Verified</description> <description>Results Count</description>
<right>5</right> <left>110</left>
<top>5</top> <top>0</top>
<width>30</width> <width>40</width>
<height>30</height> <height>40</height>
<!-- <font>font30_title</font> -->
<textcolor>FFFFFFFF</textcolor> <textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor> <shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[ListItem.Property(results)][/B]</label> <label>[B]$INFO[ListItem.Property(results)][/B]</label>
@@ -346,7 +368,7 @@
<control type="list" id="200"> <!-- Episodes List --> <control type="list" id="200"> <!-- Episodes List -->
<description>Episodes List</description> <description>Episodes List</description>
<bottom>40</bottom> <top>110</top>
<left>520</left> <left>520</left>
<width>700</width> <width>700</width>
<height>570</height> <height>570</height>
@@ -359,7 +381,6 @@
<left>20</left> <left>20</left>
<width>660</width> <width>660</width>
<height>60</height> <height>60</height>
<!-- <font>font30_title</font> -->
<textcolor>FFFFFFFF</textcolor> <textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor> <shadowcolor>00000000</shadowcolor>
<align>left</align> <align>left</align>
@@ -370,6 +391,8 @@
<focusedlayout height="60" width="700"> <focusedlayout height="60" width="700">
<control type="image"> <control type="image">
<description>Selected Background</description> <description>Selected Background</description>
<top>0</top>
<left>0</left>
<width>700</width> <width>700</width>
<height>60</height> <height>60</height>
<texture colordiffuse="88000000">white.png</texture> <texture colordiffuse="88000000">white.png</texture>
@@ -380,7 +403,6 @@
<left>20</left> <left>20</left>
<width>660</width> <width>660</width>
<height>60</height> <height>60</height>
<!-- <font>font30_title</font> -->
<textcolor>FFFFFFFF</textcolor> <textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor> <shadowcolor>00000000</shadowcolor>
<align>left</align> <align>left</align>
@@ -476,6 +498,20 @@
<aligny>center</aligny> <aligny>center</aligny>
<label>[B][COLOR FFAAAAAA]$INFO[ListItem.Property(servername)][/COLOR][/B]</label> <label>[B][COLOR FFAAAAAA]$INFO[ListItem.Property(servername)][/COLOR][/B]</label>
</control> </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> </itemlayout>
<focusedlayout height="140" width="700"> <focusedlayout height="140" width="700">
<control type="image"> <control type="image">
@@ -543,6 +579,20 @@
<aligny>center</aligny> <aligny>center</aligny>
<label>[B][COLOR FFAAAAAA]$INFO[ListItem.Property(servername)][/COLOR][/B]</label> <label>[B][COLOR FFAAAAAA]$INFO[ListItem.Property(servername)][/COLOR][/B]</label>
</control> </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> </focusedlayout>
</control> <!-- END Servers List --> </control> <!-- END Servers List -->
</control> <!-- END SERVERS GROUP --> </control> <!-- END SERVERS GROUP -->
@@ -25,6 +25,7 @@
<width>326</width> <width>326</width>
<height>180</height> <height>180</height>
<texture>$INFO[Window.Property(next_img)]</texture> <texture>$INFO[Window.Property(next_img)]</texture>
<aspectratio>scale</aspectratio>
</control> </control>
<control type="grouplist" id="20"> <control type="grouplist" id="20">
<orientation>vertical</orientation> <orientation>vertical</orientation>
+14 -14
View File
@@ -6,26 +6,26 @@
<controls> <controls>
<control type="group"> <control type="group">
<animation type="WindowOpen" reversible="false"> <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>
<animation type="WindowClose" reversible="false"> <animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="300" /> <effect type="fade" start="100" end="0" time="100" />
</animation> </animation>
<right>440</right> <right>490</right>
<top>320</top> <top>300</top>
<height>40</height> <height>40</height>
<width>400</width> <width>300</width>
<control type="grouplist" id="20"> <control type="grouplist" id="20">
<orientation>vertical</orientation> <orientation>vertical</orientation>
<height>80</height> <height>120</height>
<itemgap>0</itemgap> <itemgap>0</itemgap>
<align>center</align> <align>center</align>
<control type="button" id="3012"> <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> <onclick>SendClick(3012)</onclick>
<height>40</height> <height>60</height>
<width>400</width> <width>300</width>
<font>font30_title</font> <!-- <font>font30_title</font> -->
<textoffsetx>20</textoffsetx> <textoffsetx>20</textoffsetx>
<textcolor>FFFFFFFF</textcolor> <textcolor>FFFFFFFF</textcolor>
<aligny>center</aligny> <aligny>center</aligny>
@@ -35,10 +35,10 @@
<pulseonselect>no</pulseonselect> <pulseonselect>no</pulseonselect>
</control> </control>
<control type="button" id="3013"> <control type="button" id="3013">
<label>$ADDON[plugin.video.kod 30046]</label> <label>[B]$ADDON[plugin.video.kod 30046][/B]</label>
<height>40</height> <height>60</height>
<width>400</width> <width>300</width>
<font>font30_title</font> <!-- <font>font30_title</font> -->
<textoffsetx>20</textoffsetx> <textoffsetx>20</textoffsetx>
<textcolor>FFFFFFFF</textcolor> <textcolor>FFFFFFFF</textcolor>
<aligny>center</aligny> <aligny>center</aligny>
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+1 -1
View File
@@ -22,7 +22,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "$ADDON[plugin.video.kod 60654]", "label": "$ADDON[plugin.video.kod 70708]",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -50,7 +50,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -14,7 +14,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -20,7 +20,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -24,7 +24,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -31,7 +31,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -25,7 +25,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -37,7 +37,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -20,7 +20,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -36,7 +36,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -19,7 +19,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"active": true, "active": true,
"find_videos": { "find_videos": {
"ignore_urls": [], "ignore_urls": ["https://embed.mystream.to/span"],
"patterns": [ "patterns": [
{ {
"pattern": "my?stream\\.(?:\\w+\\.)?[^/]+/(?:external|watch/|embed-)?([0-9a-zA-Z_]+)", "pattern": "my?stream\\.(?:\\w+\\.)?[^/]+/(?:external|watch/|embed-)?([0-9a-zA-Z_]+)",
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -36,7 +36,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -26,7 +26,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -22,7 +22,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -26,7 +26,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -20,7 +20,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -14,7 +14,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -62,7 +62,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": false "visible": false
}, },
+1 -1
View File
@@ -34,7 +34,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -25,7 +25,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -21,7 +21,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },
+1 -1
View File
@@ -17,7 +17,7 @@
"default": false, "default": false,
"enabled": true, "enabled": true,
"id": "black_list", "id": "black_list",
"label": "@60654", "label": "@70708",
"type": "bool", "type": "bool",
"visible": true "visible": true
}, },

Some files were not shown because too many files have changed in this diff Show More