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>
|
<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
@@ -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,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
|
||||||
|
|||||||
@@ -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|×|×)\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)'
|
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):
|
||||||
|
|||||||
@@ -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+)(?:×|×|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:
|
else:
|
||||||
patronBlock = r'(?:STAGIONE|Stagione)(?:<[^>]+>)?\s*(?:(?P<lang>[A-Za-z- ]+))?(?P<block>.*?)(?: |<strong>|<div class="addtoany)'
|
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):
|
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)
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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('"','"').replace('\\',''), patron=r'video_url"\s*:\s*"([^"]+)"').match
|
url = support.match(support.match(item).data.replace('"','"').replace('\\',''), patron=r'video_url"\s*:\s*"([^"]+)"').match
|
||||||
|
|||||||
+6
-5
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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 -->
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 |
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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,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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user