- Unico Tread per:
- Segna come visto - Episodio successivo - Rimosse impostazioni nascondi server (non più necessarie) - Ottimizzazione grafica finestre
@@ -267,4 +267,4 @@ def findvid_serie(item):
|
|||||||
|
|
||||||
def play(item):
|
def play(item):
|
||||||
support.log()
|
support.log()
|
||||||
return servertools.find_video_items(data=item.url)
|
return servertools.find_video_items(item, data=item.url)
|
||||||
|
|||||||
@@ -1192,9 +1192,6 @@ def server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=Tru
|
|||||||
if patronTag:
|
if patronTag:
|
||||||
addQualityTag(item, verifiedItemlist, data, patronTag)
|
addQualityTag(item, verifiedItemlist, data, patronTag)
|
||||||
|
|
||||||
# Auto Play & Hide Links
|
|
||||||
AP = config.get_setting('autoplay')
|
|
||||||
|
|
||||||
# Check Links
|
# Check Links
|
||||||
if not item.global_search and (config.get_setting('checklinks') or config.get_setting('checklinks', item.channel)):
|
if not item.global_search and (config.get_setting('checklinks') or config.get_setting('checklinks', item.channel)):
|
||||||
if config.get_setting('checklinks', item.channel):
|
if config.get_setting('checklinks', item.channel):
|
||||||
@@ -1210,7 +1207,7 @@ def server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=Tru
|
|||||||
videolibrary(verifiedItemlist, item)
|
videolibrary(verifiedItemlist, item)
|
||||||
if Download:
|
if Download:
|
||||||
download(verifiedItemlist, item, function_level=3)
|
download(verifiedItemlist, item, function_level=3)
|
||||||
if item.contentChannel == 'videolibrary' or not config.get_setting('autoplay') or not config.get_setting('hide_servers'):
|
# if item.contentChannel == 'videolibrary' or not config.get_setting('autoplay'):
|
||||||
return verifiedItemlist
|
return verifiedItemlist
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -400,7 +400,6 @@ def limit_itemlist(itemlist):
|
|||||||
|
|
||||||
|
|
||||||
def play_from_library(item):
|
def play_from_library(item):
|
||||||
# from core.support import dbg;dbg()
|
|
||||||
"""
|
"""
|
||||||
The .strm files when played from kodi, this expects it to be a "playable" file so it cannot contain
|
The .strm files when played from kodi, this expects it to be a "playable" file so it cannot contain
|
||||||
more items, at most a selection dialog can be placed.
|
more items, at most a selection dialog can be placed.
|
||||||
@@ -413,22 +412,49 @@ def play_from_library(item):
|
|||||||
"""
|
"""
|
||||||
import xbmcgui, xbmcplugin, xbmc
|
import xbmcgui, xbmcplugin, xbmc
|
||||||
from time import sleep, time
|
from time import sleep, time
|
||||||
from specials import nextep
|
|
||||||
|
|
||||||
def show_server(item, itemlist, p_dialog):
|
itemlist=[]
|
||||||
if item.show_server:
|
item.fromLibrary = True
|
||||||
|
logger.info()
|
||||||
|
# logger.debug("item: \n" + item.tostring('\n'))
|
||||||
|
|
||||||
|
# Try to reproduce an image (this does nothing and also does not give an error)
|
||||||
|
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xbmcgui.ListItem(path=os.path.join(config.get_runtime_path(), "resources", "kod.mp4")))
|
||||||
|
xbmc.Player().stop()
|
||||||
|
|
||||||
|
# Modify the action (currently the video library needs "findvideos" since this is where the sources are searched
|
||||||
|
item.action = "findvideos"
|
||||||
|
|
||||||
|
window_type = config.get_setting("window_type", "videolibrary")
|
||||||
|
# and launch kodi again
|
||||||
|
if xbmc.getCondVisibility('Window.IsMedia') and not window_type == 1:
|
||||||
|
# Conventional window
|
||||||
|
xbmc.executebuiltin("Container.Update(" + sys.argv[0] + "?" + item.tourl() + ")")
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Pop-up window
|
||||||
|
from specials import videolibrary, autoplay
|
||||||
|
p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(60683))
|
||||||
|
p_dialog.update(0, '')
|
||||||
|
item.play_from = 'window'
|
||||||
|
itemlist = videolibrary.findvideos(item)
|
||||||
|
p_dialog.update(100, ''); sleep(0.5); p_dialog.close()
|
||||||
|
while platformtools.is_playing(): # Conventional window
|
||||||
|
sleep(1)
|
||||||
|
play_time = platformtools.resume_playback(item, True)
|
||||||
|
if not play_time:
|
||||||
|
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)
|
||||||
|
|
||||||
p_dialog.update(100, ''); sleep(0.5); p_dialog.close()
|
|
||||||
|
|
||||||
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
|
||||||
options = []
|
options = []
|
||||||
selection_implementation =0
|
selection_implementation = 0
|
||||||
for item in itemlist:
|
for item in itemlist:
|
||||||
item.thumbnail = "https://github.com/kodiondemand/media/raw/master/resources/servers/" + item.server.lower() + '.png'
|
item.thumbnail = "https://github.com/kodiondemand/media/raw/master/resources/servers/" + item.server.lower() + '.png'
|
||||||
quality = '[B][' + item.quality + '][/B]' if item.quality else ''
|
quality = '[B][' + item.quality + '][/B]' if item.quality else ''
|
||||||
@@ -446,63 +472,5 @@ def play_from_library(item):
|
|||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
item = videolibrary.play(itemlist[selection + selection_implementation])[0]
|
item = videolibrary.play(itemlist[selection + selection_implementation])[0]
|
||||||
item.play_from = 'window'
|
|
||||||
platformtools.play_video(item)
|
platformtools.play_video(item)
|
||||||
if (platformtools.is_playing() and item.action) or item.server == 'torrent' or config.get_setting('autoplay'): break
|
if (platformtools.is_playing() and item.action) or item.server == 'torrent' or config.get_setting('autoplay'): break
|
||||||
|
|
||||||
itemlist=[]
|
|
||||||
item.fromLibrary = True
|
|
||||||
logger.info()
|
|
||||||
logger.debug("item: \n" + item.tostring('\n'))
|
|
||||||
|
|
||||||
# We try to reproduce an image (this does nothing and also does not give an error)
|
|
||||||
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xbmcgui.ListItem(path=os.path.join(config.get_runtime_path(), "resources", "kod.mp4")))
|
|
||||||
xbmc.Player().stop()
|
|
||||||
|
|
||||||
# we modify the action (currently the video library needs "findvideos" since this is where the sources are searched
|
|
||||||
item.action = "findvideos"
|
|
||||||
check_next_ep = nextep.check(item)
|
|
||||||
|
|
||||||
window_type = config.get_setting("window_type", "videolibrary")
|
|
||||||
|
|
||||||
# and we launch kodi again
|
|
||||||
if xbmc.getCondVisibility('Window.IsMedia') and not window_type == 1:
|
|
||||||
# Conventional window
|
|
||||||
xbmc.executebuiltin("Container.Update(" + sys.argv[0] + "?" + item.tourl() + ")")
|
|
||||||
|
|
||||||
else:
|
|
||||||
# from core.support import dbg;dbg()
|
|
||||||
# Pop-up window
|
|
||||||
if config.get_setting('autoplay') and config.get_setting('hide_servers'):
|
|
||||||
item.show_server = False
|
|
||||||
else:
|
|
||||||
item.show_server = True
|
|
||||||
|
|
||||||
from specials import videolibrary, autoplay
|
|
||||||
p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(60683))
|
|
||||||
p_dialog.update(0, '')
|
|
||||||
|
|
||||||
itemlist = videolibrary.findvideos(item)
|
|
||||||
|
|
||||||
# if not config.get_setting('autoplay'): show_server(item, itemlist, p_dialog)
|
|
||||||
|
|
||||||
if check_next_ep:
|
|
||||||
item.show_server = True
|
|
||||||
# p_dialog.update(100, '')
|
|
||||||
# sleep(0.5)
|
|
||||||
# p_dialog.close()
|
|
||||||
if not config.get_setting('autoplay'): show_server(item, itemlist, p_dialog)
|
|
||||||
item = nextep.return_item(item)
|
|
||||||
if item.next_ep: return play_from_library(item)
|
|
||||||
else:
|
|
||||||
while platformtools.is_playing(): # Conventional window
|
|
||||||
sleep(5)
|
|
||||||
p_dialog.update(50, '')
|
|
||||||
|
|
||||||
show_server(item, itemlist, p_dialog)
|
|
||||||
|
|
||||||
if item.show_server and check_next_ep:
|
|
||||||
nextep.run(item)
|
|
||||||
sleep(0.5)
|
|
||||||
p_dialog.close()
|
|
||||||
|
|
||||||
|
|||||||
@@ -548,7 +548,10 @@ def play_video(item, strm=False, force_direct=False, autoplay=False):
|
|||||||
xlistitem.setProperty('inputstream.adaptive.manifest_type', 'mpd')
|
xlistitem.setProperty('inputstream.adaptive.manifest_type', 'mpd')
|
||||||
|
|
||||||
if force_direct: item.play_from = 'window'
|
if force_direct: item.play_from = 'window'
|
||||||
set_player(item, xlistitem, mediaurl, view, strm)
|
|
||||||
|
|
||||||
|
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():
|
||||||
@@ -876,9 +879,9 @@ def get_video_seleccionado(item, seleccion, video_urls):
|
|||||||
return mediaurl, view, mpd
|
return mediaurl, view, mpd
|
||||||
|
|
||||||
|
|
||||||
def set_player(item, xlistitem, mediaurl, view, strm):
|
def set_player(item, xlistitem, mediaurl, view, strm, nfo_path=None, head_nfo=None, item_nfo=None):
|
||||||
logger.info()
|
logger.info()
|
||||||
logger.debug("item:\n" + item.tostring('\n'))
|
# logger.debug("item:\n" + item.tostring('\n'))
|
||||||
# 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)
|
||||||
@@ -914,7 +917,7 @@ def set_player(item, xlistitem, mediaurl, view, strm):
|
|||||||
# 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:
|
||||||
from platformcode import xbmc_videolibrary
|
from platformcode import xbmc_videolibrary
|
||||||
xbmc_videolibrary.mark_auto_as_watched(item)
|
xbmc_videolibrary.mark_auto_as_watched(item, nfo_path, head_nfo, item_nfo)
|
||||||
xlistitem.setPath(mediaurl)
|
xlistitem.setPath(mediaurl)
|
||||||
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xlistitem)
|
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xlistitem)
|
||||||
xbmc.sleep(2500)
|
xbmc.sleep(2500)
|
||||||
@@ -938,7 +941,7 @@ def set_player(item, xlistitem, mediaurl, view, strm):
|
|||||||
# 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:
|
||||||
from platformcode import xbmc_videolibrary
|
from platformcode import xbmc_videolibrary
|
||||||
xbmc_videolibrary.mark_auto_as_watched(item)
|
xbmc_videolibrary.mark_auto_as_watched(item, nfo_path, head_nfo, item_nfo)
|
||||||
|
|
||||||
|
|
||||||
def torrent_client_installed(show_tuple=False):
|
def torrent_client_installed(show_tuple=False):
|
||||||
@@ -999,3 +1002,88 @@ def play_torrent(item, xlistitem, mediaurl):
|
|||||||
|
|
||||||
def log(texto):
|
def log(texto):
|
||||||
xbmc.log(texto, xbmc.LOGNOTICE)
|
xbmc.log(texto, xbmc.LOGNOTICE)
|
||||||
|
|
||||||
|
def resume_playback(item, return_played_time=False):
|
||||||
|
class ResumePlayback(xbmcgui.WindowXMLDialog):
|
||||||
|
Close = False
|
||||||
|
Resume = False
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.action_exitkeys_id = [xbmcgui.ACTION_BACKSPACE, xbmcgui.ACTION_PREVIOUS_MENU, xbmcgui.ACTION_NAV_BACK]
|
||||||
|
self.progress_control = None
|
||||||
|
self.item = kwargs.get('item')
|
||||||
|
m, s = divmod(float(self.item.played_time), 60)
|
||||||
|
h, m = divmod(m, 60)
|
||||||
|
self.setProperty("time", '%02d:%02d:%02d' % (h, m, s))
|
||||||
|
|
||||||
|
def set_values(self, value):
|
||||||
|
self.Resume = value
|
||||||
|
self.Close = True
|
||||||
|
|
||||||
|
def is_close(self):
|
||||||
|
return self.Close
|
||||||
|
|
||||||
|
def onClick(self, controlId):
|
||||||
|
if controlId == 3012: # Resume
|
||||||
|
self.set_values(True)
|
||||||
|
self.close()
|
||||||
|
elif controlId == 3013: # Cancel
|
||||||
|
self.set_values(False)
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def onAction(self, action):
|
||||||
|
if action in self.action_exitkeys_id:
|
||||||
|
self.set_values(False)
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
|
||||||
|
from core import videolibrarytools, filetools
|
||||||
|
|
||||||
|
# if nfo and strm_path not exist
|
||||||
|
if not item.nfo:
|
||||||
|
if item.contentType == 'movie':
|
||||||
|
vl = xbmc.translatePath(filetools.join(config.get_setting("videolibrarypath"), config.get_setting("folder_movies")))
|
||||||
|
path = '%s [%s]' % (item.contentTitle, item.infoLabels['IMDBNumber'])
|
||||||
|
item.nfo = filetools.join(vl, path, path + '.nfo')
|
||||||
|
if not item.strm_path: item.strm_path = filetools.join(path, item.contentTitle + '.strm')
|
||||||
|
else:
|
||||||
|
vl = xbmc.translatePath(filetools.join(config.get_setting("videolibrarypath"), config.get_setting("folder_tvshows")))
|
||||||
|
path = '%s [%s]' % (item.contentSerieName, item.infoLabels['IMDBNumber'])
|
||||||
|
item.nfo = filetools.join(vl, path, 'tvshow.nfo')
|
||||||
|
if item.contentSeason and item.contentEpisodeNumber:
|
||||||
|
title = str(item.contentSeason) + 'x' + str(item.contentEpisodeNumber).zfill(2)
|
||||||
|
else:
|
||||||
|
season, episode = scrapertools.find_single_match(item.title, r'(\d+)x(\d+)')
|
||||||
|
item.contentSeason = int(season)
|
||||||
|
item.contentEpisodeNumber = int(episode)
|
||||||
|
title = season + 'x' + episode.zfill(2)
|
||||||
|
if not item.strm_path: item.strm_path = filetools.join(path, title + '.strm')
|
||||||
|
|
||||||
|
# Read NFO FILE
|
||||||
|
if item.contentType == 'movie':
|
||||||
|
nfo_path = item.nfo
|
||||||
|
elif xbmc.translatePath(filetools.join(config.get_setting("videolibrarypath"), config.get_setting("folder_tvshows"))) in item.strm_path:
|
||||||
|
nfo_path = item.strm_path.replace('strm','nfo')
|
||||||
|
else:
|
||||||
|
nfo_path = xbmc.translatePath(filetools.join(config.get_setting("videolibrarypath"), config.get_setting("folder_tvshows"),item.strm_path.replace('strm','nfo')))
|
||||||
|
if filetools.isfile(nfo_path):
|
||||||
|
head_nfo, item_nfo = videolibrarytools.read_nfo(nfo_path)
|
||||||
|
|
||||||
|
if return_played_time:
|
||||||
|
return item_nfo.played_time
|
||||||
|
# Show Window
|
||||||
|
elif (config.get_setting("player_mode") not in [1, 3] or item.play_from == 'window') and item_nfo.played_time:
|
||||||
|
Dialog = ResumePlayback('ResumePlayback.xml', config.get_runtime_path(), item=item_nfo)
|
||||||
|
Dialog.show()
|
||||||
|
t = 0
|
||||||
|
while not Dialog.is_close() and t < 50:
|
||||||
|
t += 1
|
||||||
|
xbmc.sleep(100)
|
||||||
|
if not Dialog.Resume: item_nfo.played_time = 0
|
||||||
|
else:
|
||||||
|
item_nfo.played_time = 0
|
||||||
|
|
||||||
|
return nfo_path, head_nfo, item_nfo
|
||||||
|
else:
|
||||||
|
item.nfo = item.strm_path = ""
|
||||||
|
return None, None, None
|
||||||
@@ -15,7 +15,7 @@ from core import scrapertools
|
|||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
|
|
||||||
|
|
||||||
def mark_auto_as_watched(item):
|
def mark_auto_as_watched(item, nfo_path=None, head_nfo=None, item_nfo=None):
|
||||||
def mark_as_watched_subThread(item, nfo_path, head_nfo, item_nfo):
|
def mark_as_watched_subThread(item, nfo_path, head_nfo, item_nfo):
|
||||||
logger.info()
|
logger.info()
|
||||||
# logger.debug("item:\n" + item.tostring('\n'))
|
# logger.debug("item:\n" + item.tostring('\n'))
|
||||||
@@ -25,22 +25,54 @@ def mark_auto_as_watched(item):
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
sync_with_trakt = False
|
sync_with_trakt = False
|
||||||
|
next_episode = None
|
||||||
|
show_server = True
|
||||||
|
EXIT = False
|
||||||
|
|
||||||
percentage = float(config.get_setting("watched_setting")) / 100
|
percentage = float(config.get_setting("watched_setting")) / 100
|
||||||
while platformtools.is_playing():
|
time_from_end = config.get_setting('next_ep_seconds')
|
||||||
|
|
||||||
|
while platformtools.is_playing() and not EXIT:
|
||||||
actual_time = xbmc.Player().getTime()
|
actual_time = xbmc.Player().getTime()
|
||||||
totaltime = xbmc.Player().getTotalTime()
|
total_time = xbmc.Player().getTotalTime()
|
||||||
if item_nfo.played_time and actual_time < item_nfo.played_time:
|
if item_nfo.played_time and item_nfo.played_time > actual_time > 1:
|
||||||
xbmc.Player().seekTime(item_nfo.played_time)
|
xbmc.Player().seekTime(item_nfo.played_time)
|
||||||
|
|
||||||
mark_time = totaltime * percentage
|
mark_time = total_time * percentage
|
||||||
|
difference = total_time - actual_time
|
||||||
|
|
||||||
|
# Mark as Watched
|
||||||
if actual_time > mark_time:
|
if actual_time > mark_time:
|
||||||
logger.debug("Marked as Watched")
|
logger.debug("Marked as Watched")
|
||||||
item.playcount = 1
|
item.playcount = 1
|
||||||
sync_with_trakt = True
|
sync_with_trakt = True
|
||||||
from specials import videolibrary
|
from specials import videolibrary
|
||||||
videolibrary.mark_content_as_watched2(item)
|
videolibrary.mark_content_as_watched2(item)
|
||||||
break
|
show_server = False
|
||||||
|
if item.contentType == 'movie' or not config.get_setting('next_ep'):
|
||||||
|
EXIT = True
|
||||||
|
|
||||||
|
# check for next Episode
|
||||||
|
if item.contentType != 'movie' and total_time > time_from_end >= difference:
|
||||||
|
next_dialogs = ['NextDialog.xml', 'NextDialogExtended.xml', 'NextDialogCompact.xml']
|
||||||
|
next_ep_type = config.get_setting('next_ep_type')
|
||||||
|
ND = next_dialogs[next_ep_type]
|
||||||
|
next_episode = next_ep(item)
|
||||||
|
if next_episode:
|
||||||
|
nextdialog = NextDialog(ND, config.get_runtime_path())
|
||||||
|
nextdialog.show()
|
||||||
|
while platformtools.is_playing() and not nextdialog.is_exit():
|
||||||
|
xbmc.sleep(100)
|
||||||
|
pass
|
||||||
|
EXIT = True
|
||||||
|
nextdialog.close()
|
||||||
|
if nextdialog.continuewatching:
|
||||||
|
next_episode.next_ep = True
|
||||||
|
else:
|
||||||
|
EXIT = True
|
||||||
|
|
||||||
|
if next_episode and next_episode.next_ep:
|
||||||
|
xbmc.Player().stop()
|
||||||
|
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
@@ -51,91 +83,23 @@ def mark_auto_as_watched(item):
|
|||||||
|
|
||||||
# Silent sync with Trakt
|
# Silent sync with Trakt
|
||||||
if sync_with_trakt and config.get_setting("trakt_sync"):sync_trakt_kodi()
|
if sync_with_trakt and config.get_setting("trakt_sync"):sync_trakt_kodi()
|
||||||
|
while platformtools.is_playing():
|
||||||
|
xbmc.sleep(100)
|
||||||
|
if not show_server and item.play_from != 'window':
|
||||||
|
xbmc.sleep(700)
|
||||||
|
xbmc.executebuiltin('Action(Back)')
|
||||||
|
xbmc.sleep(500)
|
||||||
|
if next_episode:
|
||||||
|
if next_episode.next_ep:
|
||||||
|
from platformcode.launcher import play_from_library
|
||||||
|
return play_from_library(next_episode)
|
||||||
|
|
||||||
# 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"):
|
||||||
nfo_path, head_nfo, item_nfo = resume_playback(item)
|
|
||||||
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, nfo_path, head_nfo, item_nfo]).start()
|
||||||
|
|
||||||
|
|
||||||
def resume_playback(item):
|
|
||||||
class ResumePlayback(xbmcgui.WindowXMLDialog):
|
|
||||||
Close = False
|
|
||||||
Resume = False
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
self.action_exitkeys_id = [xbmcgui.ACTION_BACKSPACE, xbmcgui.ACTION_PREVIOUS_MENU, xbmcgui.ACTION_NAV_BACK]
|
|
||||||
self.progress_control = None
|
|
||||||
self.item = kwargs.get('item')
|
|
||||||
m, s = divmod(float(self.item.played_time), 60)
|
|
||||||
h, m = divmod(m, 60)
|
|
||||||
self.setProperty("title", config.get_localized_string(30045) +' %02d:%02d:%02d' % (h, m, s))
|
|
||||||
|
|
||||||
def set_values(self, value):
|
|
||||||
self.Resume = value
|
|
||||||
self.Close = True
|
|
||||||
|
|
||||||
def is_close(self):
|
|
||||||
return self.Close
|
|
||||||
|
|
||||||
def onClick(self, controlId):
|
|
||||||
if controlId == 3012: # Resume
|
|
||||||
self.set_values(True)
|
|
||||||
self.close()
|
|
||||||
elif controlId == 3013: # Cancel
|
|
||||||
self.set_values(False)
|
|
||||||
self.close()
|
|
||||||
|
|
||||||
def onAction(self, action):
|
|
||||||
if action in self.action_exitkeys_id:
|
|
||||||
self.set_values(False)
|
|
||||||
self.close()
|
|
||||||
|
|
||||||
|
|
||||||
from core import videolibrarytools
|
|
||||||
# from core.support import dbg;dbg()
|
|
||||||
|
|
||||||
# if nfo and strm_path not exist
|
|
||||||
if not item.nfo:
|
|
||||||
if item.contentType == 'movie':
|
|
||||||
vl = xbmc.translatePath(filetools.join(config.get_setting("videolibrarypath"), config.get_setting("folder_movies")))
|
|
||||||
path = '%s [%s]' % (item.contentTitle, item.infoLabels['IMDBNumber'])
|
|
||||||
item.nfo = filetools.join(vl, path, path + '.nfo')
|
|
||||||
if not item.strm_path: item.strm_path = filetools.join(path, item.contentTitle + '.strm')
|
|
||||||
else:
|
|
||||||
vl = xbmc.translatePath(filetools.join(config.get_setting("videolibrarypath"), config.get_setting("folder_tvshows")))
|
|
||||||
path = '%s [%s]' % (item.contentSerieName, item.infoLabels['IMDBNumber'])
|
|
||||||
item.nfo = filetools.join(vl, path, 'tvshow.nfo')
|
|
||||||
if item.contentSeason and item.contentEpisodeNumber:
|
|
||||||
title = str(item.contentSeason) + 'x' + str(item.contentEpisodeNumber).zfill(2)
|
|
||||||
else:
|
|
||||||
season, episode = scrapertools.find_single_match(item.title, r'(\d+)x(\d+)')
|
|
||||||
item.contentSeason = int(season)
|
|
||||||
item.contentEpisodeNumber = int(episode)
|
|
||||||
title = season + 'x' + episode.zfill(2)
|
|
||||||
if not item.strm_path: item.strm_path = filetools.join(path, title + '.strm')
|
|
||||||
|
|
||||||
# Read NFO FILE
|
|
||||||
if item.contentType == 'movie':
|
|
||||||
nfo_path = item.nfo
|
|
||||||
elif xbmc.translatePath(filetools.join(config.get_setting("videolibrarypath"), config.get_setting("folder_tvshows"))) in item.strm_path:
|
|
||||||
nfo_path = item.strm_path.replace('strm','nfo')
|
|
||||||
else:
|
|
||||||
nfo_path = xbmc.translatePath(filetools.join(config.get_setting("videolibrarypath"), config.get_setting("folder_tvshows"),item.strm_path.replace('strm','nfo')))
|
|
||||||
head_nfo, item_nfo = videolibrarytools.read_nfo(nfo_path)
|
|
||||||
|
|
||||||
# Show Window
|
|
||||||
if (config.get_setting("player_mode") not in [3] or item.play_from == 'window') and item_nfo.played_time:
|
|
||||||
Dialog = ResumePlayback('ResumePlayback.xml', config.get_runtime_path(), item=item_nfo)
|
|
||||||
Dialog.show()
|
|
||||||
t = 0
|
|
||||||
while not Dialog.is_close() and t < 50:
|
|
||||||
t += 1
|
|
||||||
xbmc.sleep(100)
|
|
||||||
if not Dialog.Resume: item_nfo.played_time = 0
|
|
||||||
else:
|
|
||||||
item_nfo.played_time = 0
|
|
||||||
return nfo_path, head_nfo, item_nfo
|
|
||||||
|
|
||||||
|
|
||||||
def sync_trakt_addon(path_folder):
|
def sync_trakt_addon(path_folder):
|
||||||
@@ -164,7 +128,7 @@ def sync_trakt_addon(path_folder):
|
|||||||
shows = list(shows.items())
|
shows = list(shows.items())
|
||||||
|
|
||||||
# we get the series id to compare
|
# we get the series id to compare
|
||||||
_id = re.findall("\[(.*?)\]", path_folder, flags=re.DOTALL)[0]
|
_id = re.findall(r"\[(.*?)\]", path_folder, flags=re.DOTALL)[0]
|
||||||
logger.debug("the id is %s" % _id)
|
logger.debug("the id is %s" % _id)
|
||||||
|
|
||||||
if "tt" in _id:
|
if "tt" in _id:
|
||||||
@@ -206,7 +170,7 @@ def sync_trakt_addon(path_folder):
|
|||||||
logger.debug("dict_trakt_show %s " % dict_trakt_show)
|
logger.debug("dict_trakt_show %s " % dict_trakt_show)
|
||||||
|
|
||||||
# we get the keys that are episodes
|
# we get the keys that are episodes
|
||||||
regex_epi = re.compile('\d+x\d+')
|
regex_epi = re.compile(r'\d+x\d+')
|
||||||
keys_episodes = [key for key in serie.library_playcounts if regex_epi.match(key)]
|
keys_episodes = [key for key in serie.library_playcounts if regex_epi.match(key)]
|
||||||
# we get the keys that are seasons
|
# we get the keys that are seasons
|
||||||
keys_seasons = [key for key in serie.library_playcounts if 'season ' in key]
|
keys_seasons = [key for key in serie.library_playcounts if 'season ' in key]
|
||||||
@@ -330,7 +294,6 @@ def mark_content_as_watched_on_kodi(item, value=1):
|
|||||||
path = filetools.join(tail, filename)
|
path = filetools.join(tail, filename)
|
||||||
|
|
||||||
for d in data['result']['episodes']:
|
for d in data['result']['episodes']:
|
||||||
|
|
||||||
if d['file'].replace("/", "\\").endswith(path.replace("/", "\\")):
|
if d['file'].replace("/", "\\").endswith(path.replace("/", "\\")):
|
||||||
# logger.debug("I mark the episode as seen")
|
# logger.debug("I mark the episode as seen")
|
||||||
episodeid = d['episodeid']
|
episodeid = d['episodeid']
|
||||||
@@ -430,7 +393,7 @@ def mark_content_as_watched_on_kod(path):
|
|||||||
path1 = path.replace("\\\\", "\\") # Windows format
|
path1 = path.replace("\\\\", "\\") # Windows format
|
||||||
if not path2:
|
if not path2:
|
||||||
path2 = path1.replace("\\", "/") # Format no Windows
|
path2 = path1.replace("\\", "/") # Format no Windows
|
||||||
nfo_name = scrapertools.find_single_match(path2, '\]\/(.*?)$') # I build the name of the .nfo
|
nfo_name = scrapertools.find_single_match(path2, r'\]\/(.*?)$') # I build the name of the .nfo
|
||||||
path1 = path1.replace(nfo_name, '') # for SQL I just need the folder
|
path1 = path1.replace(nfo_name, '') # for SQL I just need the folder
|
||||||
path2 = path2.replace(nfo_name, '') # for SQL I just need the folder
|
path2 = path2.replace(nfo_name, '') # for SQL I just need the folder
|
||||||
path2 = filetools.remove_smb_credential(path2) # If the file is on an SMB server, we remove the credentials
|
path2 = filetools.remove_smb_credential(path2) # If the file is on an SMB server, we remove the credentials
|
||||||
@@ -448,7 +411,7 @@ def mark_content_as_watched_on_kod(path):
|
|||||||
if contentType == "episode_view":
|
if contentType == "episode_view":
|
||||||
title_plain = title.replace('.strm', '') # If it is Serial, we remove the suffix .strm
|
title_plain = title.replace('.strm', '') # If it is Serial, we remove the suffix .strm
|
||||||
else:
|
else:
|
||||||
title_plain = scrapertools.find_single_match(item.strm_path, '.(.*?\s\[.*?\])') # if it's a movie, we remove the title
|
title_plain = scrapertools.find_single_match(item.strm_path, r'.(.*?\s\[.*?\])') # if it's a movie, we remove the title
|
||||||
if playCount is None or playCount == 0: # not yet seen, we set it to 0
|
if playCount is None or playCount == 0: # not yet seen, we set it to 0
|
||||||
playCount_final = 0
|
playCount_final = 0
|
||||||
elif playCount >= 1:
|
elif playCount >= 1:
|
||||||
@@ -463,7 +426,7 @@ def mark_content_as_watched_on_kod(path):
|
|||||||
if item.infoLabels['mediatype'] == "tvshow": # We update the Season and Series playCounts
|
if item.infoLabels['mediatype'] == "tvshow": # We update the Season and Series playCounts
|
||||||
for season in item.library_playcounts:
|
for season in item.library_playcounts:
|
||||||
if "season" in season: # we look for the tags "season" inside playCounts
|
if "season" in season: # we look for the tags "season" inside playCounts
|
||||||
season_num = int(scrapertools.find_single_match(season, 'season (\d+)')) # we save the season number
|
season_num = int(scrapertools.find_single_match(season, r'season (\d+)')) # we save the season number
|
||||||
item = videolibrary.check_season_playcount(item, season_num) # We call the method that updates Temps. and series
|
item = videolibrary.check_season_playcount(item, season_num) # We call the method that updates Temps. and series
|
||||||
|
|
||||||
filetools.write(path, head_nfo + item.tojson())
|
filetools.write(path, head_nfo + item.tojson())
|
||||||
@@ -551,7 +514,7 @@ def update(folder_content=config.get_setting("folder_tvshows"), folder=""):
|
|||||||
# update_path = filetools.join(videolibrarypath, folder_content, folder) + "/" # Encoder problems in "folder"
|
# update_path = filetools.join(videolibrarypath, folder_content, folder) + "/" # Encoder problems in "folder"
|
||||||
update_path = filetools.join(videolibrarypath, folder_content, ' ').rstrip()
|
update_path = filetools.join(videolibrarypath, folder_content, ' ').rstrip()
|
||||||
|
|
||||||
if videolibrarypath.startswith("special:") or not scrapertools.find_single_match(update_path, '(^\w+:\/\/)'):
|
if videolibrarypath.startswith("special:") or not scrapertools.find_single_match(update_path, r'(^\w+:\/\/)'):
|
||||||
payload["params"] = {"directory": update_path}
|
payload["params"] = {"directory": update_path}
|
||||||
|
|
||||||
while xbmc.getCondVisibility('Library.IsScanningVideo()'):
|
while xbmc.getCondVisibility('Library.IsScanningVideo()'):
|
||||||
@@ -593,7 +556,7 @@ def set_content(content_type, silent=False, custom=False):
|
|||||||
if not xbmc.getCondVisibility('System.HasAddon(metadata.themoviedb.org)'):
|
if not xbmc.getCondVisibility('System.HasAddon(metadata.themoviedb.org)'):
|
||||||
if not silent:
|
if not silent:
|
||||||
# Ask if we want to install metadata.themoviedb.org
|
# Ask if we want to install metadata.themoviedb.org
|
||||||
install = platformtools.dialog_yesno(config.get_localized_string(60046))
|
install = platformtools.dialog_yesno(config.get_localized_string(60046),'')
|
||||||
else:
|
else:
|
||||||
install = True
|
install = True
|
||||||
|
|
||||||
@@ -617,7 +580,7 @@ def set_content(content_type, silent=False, custom=False):
|
|||||||
continuar = False
|
continuar = False
|
||||||
if not silent:
|
if not silent:
|
||||||
# Ask if we want to install metadata.universal
|
# Ask if we want to install metadata.universal
|
||||||
install = platformtools.dialog_yesno(config.get_localized_string(70095))
|
install = platformtools.dialog_yesno(config.get_localized_string(70095),'')
|
||||||
else:
|
else:
|
||||||
install = True
|
install = True
|
||||||
|
|
||||||
@@ -647,7 +610,7 @@ def set_content(content_type, silent=False, custom=False):
|
|||||||
if not xbmc.getCondVisibility('System.HasAddon(metadata.tvdb.com)'):
|
if not xbmc.getCondVisibility('System.HasAddon(metadata.tvdb.com)'):
|
||||||
if not silent:
|
if not silent:
|
||||||
#Ask if we want to install metadata.tvdb.com
|
#Ask if we want to install metadata.tvdb.com
|
||||||
install = platformtools.dialog_yesno(config.get_localized_string(60048))
|
install = platformtools.dialog_yesno(config.get_localized_string(60048),'')
|
||||||
else:
|
else:
|
||||||
install = True
|
install = True
|
||||||
|
|
||||||
@@ -671,7 +634,7 @@ def set_content(content_type, silent=False, custom=False):
|
|||||||
continuar = False
|
continuar = False
|
||||||
if not silent:
|
if not silent:
|
||||||
# Ask if we want to install metadata.tvshows.themoviedb.org
|
# Ask if we want to install metadata.tvshows.themoviedb.org
|
||||||
install = platformtools.dialog_yesno(config.get_localized_string(60050))
|
install = platformtools.dialog_yesno(config.get_localized_string(60050),'')
|
||||||
else:
|
else:
|
||||||
install = True
|
install = True
|
||||||
|
|
||||||
@@ -705,7 +668,7 @@ def set_content(content_type, silent=False, custom=False):
|
|||||||
if sql_videolibrarypath.startswith("special://"):
|
if sql_videolibrarypath.startswith("special://"):
|
||||||
sql_videolibrarypath = sql_videolibrarypath.replace('/profile/', '/%/').replace('/home/userdata/', '/%/')
|
sql_videolibrarypath = sql_videolibrarypath.replace('/profile/', '/%/').replace('/home/userdata/', '/%/')
|
||||||
sep = '/'
|
sep = '/'
|
||||||
elif scrapertools.find_single_match(sql_videolibrarypath, '(^\w+:\/\/)'):
|
elif scrapertools.find_single_match(sql_videolibrarypath, r'(^\w+:\/\/)'):
|
||||||
sep = '/'
|
sep = '/'
|
||||||
else:
|
else:
|
||||||
sep = os.sep
|
sep = os.sep
|
||||||
@@ -1283,3 +1246,112 @@ def ask_set_content(silent=False):
|
|||||||
else:
|
else:
|
||||||
platformtools.dialog_ok(config.get_localized_string(80026), config.get_localized_string(80023))
|
platformtools.dialog_ok(config.get_localized_string(80026), config.get_localized_string(80023))
|
||||||
do_config(True)
|
do_config(True)
|
||||||
|
|
||||||
|
|
||||||
|
def next_ep(item):
|
||||||
|
from core.item import Item
|
||||||
|
logger.info()
|
||||||
|
item.next_ep = False
|
||||||
|
|
||||||
|
if config.get_setting('next_ep'): # play next file if exist
|
||||||
|
# check if next file exist
|
||||||
|
current_filename = filetools.basename(item.strm_path)
|
||||||
|
base_path = filetools.basename(filetools.dirname(item.strm_path))
|
||||||
|
path = filetools.join(config.get_videolibrary_path(), config.get_setting("folder_tvshows"),base_path)
|
||||||
|
fileList = []
|
||||||
|
for file in filetools.listdir(path):
|
||||||
|
if file.endswith('.strm'):
|
||||||
|
fileList.append(file)
|
||||||
|
|
||||||
|
fileList.sort()
|
||||||
|
|
||||||
|
nextIndex = fileList.index(current_filename) + 1
|
||||||
|
if nextIndex == 0 or nextIndex == len(fileList):
|
||||||
|
next_file = None
|
||||||
|
else:
|
||||||
|
next_file = fileList[nextIndex]
|
||||||
|
logger.info('Next File:' + next_file)
|
||||||
|
|
||||||
|
# start next episode window afther x time
|
||||||
|
if next_file:
|
||||||
|
season_ep = next_file.split('.')[0]
|
||||||
|
season = season_ep.split('x')[0]
|
||||||
|
episode = season_ep.split('x')[1]
|
||||||
|
next_ep = '%sx%s' % (season, episode)
|
||||||
|
item = Item(
|
||||||
|
action= 'play_from_library',
|
||||||
|
channel= 'videolibrary',
|
||||||
|
contentEpisodeNumber= episode,
|
||||||
|
contentSeason= season,
|
||||||
|
contentTitle= next_ep,
|
||||||
|
contentType= 'episode',
|
||||||
|
infoLabels= {'episode': episode, 'mediatype': 'episode', 'season': season, 'title': next_ep},
|
||||||
|
strm_path= filetools.join(base_path, next_file),
|
||||||
|
play_from = item.play_from)
|
||||||
|
|
||||||
|
global INFO
|
||||||
|
INFO = filetools.join(path, next_file.replace("strm", "nfo"))
|
||||||
|
# logger.info('Next Info:\n' + str(INFO))
|
||||||
|
|
||||||
|
return item
|
||||||
|
|
||||||
|
|
||||||
|
class NextDialog(xbmcgui.WindowXMLDialog):
|
||||||
|
item = None
|
||||||
|
cancel = False
|
||||||
|
EXIT = False
|
||||||
|
continuewatching = True
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.action_exitkeys_id = [xbmcgui.ACTION_STOP, xbmcgui.ACTION_BACKSPACE, xbmcgui.ACTION_PREVIOUS_MENU, xbmcgui.ACTION_NAV_BACK]
|
||||||
|
self.progress_control = None
|
||||||
|
|
||||||
|
# set info
|
||||||
|
f = filetools.file_open(INFO, 'r')
|
||||||
|
full_info = f.read().split('\n')
|
||||||
|
full_info = full_info[1:]
|
||||||
|
f.close()
|
||||||
|
full_info = "".join(full_info)
|
||||||
|
info = jsontools.load(full_info)
|
||||||
|
if "thumbnail" in info:
|
||||||
|
img = info["thumbnail"]
|
||||||
|
else:
|
||||||
|
img = filetools.join(config.get_runtime_path(), "resources", "noimage.png")
|
||||||
|
self.setProperty("next_img", img)
|
||||||
|
info = info["infoLabels"]
|
||||||
|
self.setProperty("title", info["tvshowtitle"])
|
||||||
|
self.setProperty("ep_title", "%dx%02d - %s" % (info["season"], info["episode"], info["title"]))
|
||||||
|
|
||||||
|
def set_exit(self, EXIT):
|
||||||
|
self.EXIT = EXIT
|
||||||
|
|
||||||
|
def set_continue_watching(self, continuewatching):
|
||||||
|
self.continuewatching = continuewatching
|
||||||
|
|
||||||
|
def is_exit(self):
|
||||||
|
return self.EXIT
|
||||||
|
|
||||||
|
def onFocus(self, controlId):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def doAction(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def closeDialog(self):
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def onClick(self, controlId):
|
||||||
|
if controlId == 3012: # Still watching
|
||||||
|
self.set_exit(True)
|
||||||
|
self.set_continue_watching(True)
|
||||||
|
self.close()
|
||||||
|
elif controlId == 3013: # Cancel
|
||||||
|
self.set_exit(True)
|
||||||
|
self.set_continue_watching(False)
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def onAction(self, action):
|
||||||
|
if action in self.action_exitkeys_id:
|
||||||
|
self.set_exit(True)
|
||||||
|
self.set_continue_watching(False)
|
||||||
|
self.close()
|
||||||
@@ -195,6 +195,10 @@ msgctxt "#30045"
|
|||||||
msgid "Resume from:"
|
msgid "Resume from:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30046"
|
||||||
|
msgid "Resume from start"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgctxt "#30050"
|
msgctxt "#30050"
|
||||||
msgid "Server connection error"
|
msgid "Server connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -195,6 +195,10 @@ msgctxt "#30045"
|
|||||||
msgid "Resume from:"
|
msgid "Resume from:"
|
||||||
msgstr "Riprendi da:"
|
msgstr "Riprendi da:"
|
||||||
|
|
||||||
|
msgctxt "#30046"
|
||||||
|
msgid "Resume from start"
|
||||||
|
msgstr "Riprendi dall'inizio"
|
||||||
|
|
||||||
msgctxt "#30050"
|
msgctxt "#30050"
|
||||||
msgid "Server connection error"
|
msgid "Server connection error"
|
||||||
msgstr "Errore connessione server"
|
msgstr "Errore connessione server"
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<setting id="player_mode" type="select" lvalues="30026|30027|30028|30029" label="30044" default="1"/>
|
<setting id="player_mode" type="select" lvalues="30026|30027|30028|30029" label="30044" default="1"/>
|
||||||
<setting id="default_action" type="select" lvalues="30006|30007|30008" label="30005" default="0"/>
|
<setting id="default_action" type="select" lvalues="30006|30007|30008" label="30005" default="0"/>
|
||||||
<setting id="autoplay" type="bool" label="70562" default="false" visible="true"/>
|
<setting id="autoplay" type="bool" label="70562" default="false" visible="true"/>
|
||||||
<setting id="hide_servers" type="bool" label="70747" default="false" visible="eq(-1,true)" subsetting="true"/>
|
<!-- <setting id="hide_servers" type="bool" label="70747" default="false" visible="eq(-1,true)" subsetting="true"/> -->
|
||||||
<setting id="checklinks" type="bool" label="30020" default="false"/>
|
<setting id="checklinks" type="bool" label="30020" default="false"/>
|
||||||
<setting id="checklinks_number" type="slider" option="int" range="5,5,20" label="30021" default="5" visible="eq(-1,true)" subsetting="true"/>
|
<setting id="checklinks_number" type="slider" option="int" range="5,5,20" label="30021" default="5" visible="eq(-1,true)" subsetting="true"/>
|
||||||
</category>
|
</category>
|
||||||
@@ -35,10 +35,10 @@
|
|||||||
<setting id="videolibrary_kodi" type="bool" label="70120" default="false"/>
|
<setting id="videolibrary_kodi" type="bool" label="70120" default="false"/>
|
||||||
<setting label="59997" type="lsep"/>
|
<setting label="59997" type="lsep"/>
|
||||||
<setting id="videolibrary_max_quality" type="bool" label="70729" default="false" visible="true"/>
|
<setting id="videolibrary_max_quality" type="bool" label="70729" default="false" visible="true"/>
|
||||||
<setting id="next_ep" type="select" label="70746" lvalues="70752|70747|70748" default="0"/>
|
<setting id="next_ep" type="bool" label="70746" default="true"/>
|
||||||
<setting id="next_ep_type" type="select" label="70754" lvalues="70755|70756|70757" default="0" visible="eq(-1,2)" subsetting="true"/>
|
<setting id="next_ep_type" type="select" label="70754" lvalues="70755|70756|70757" default="0" visible="eq(-1,true)" subsetting="true"/>
|
||||||
<setting id="next_ep_seconds" type="slider" option="int" range="20,10,120" label="70749" default="40" visible="!eq(-2,0)" subsetting="true"/>
|
<setting id="next_ep_seconds" type="slider" option="int" range="20,10,240" label="70749" default="40" visible="eq(-2,true)" subsetting="true"/>
|
||||||
<setting id="watched_setting" type="slider" option="int" range="20,10,100" label="60634" default="80"/>
|
<setting id="watched_setting" type="slider" option="int" range="20,10,90" label="60634" default="80"/>
|
||||||
<setting id="trakt_sync" type="bool" label="70109" default="false"/>
|
<setting id="trakt_sync" type="bool" label="70109" default="false"/>
|
||||||
<setting label="30030" type="lsep"/>
|
<setting label="30030" type="lsep"/>
|
||||||
<setting id="vidolibrary_preferences" type="action" label="60542" action="RunPlugin(plugin://plugin.video.kod/?ew0KICAgICJhY3Rpb24iOiAiY2hhbm5lbF9jb25maWciLA0KICAgICJjaGFubmVsIjogInZpZGVvbGlicmFyeSINCn0==)"/>
|
<setting id="vidolibrary_preferences" type="action" label="60542" action="RunPlugin(plugin://plugin.video.kod/?ew0KICAgICJhY3Rpb24iOiAiY2hhbm5lbF9jb25maWciLA0KICAgICJjaGFubmVsIjogInZpZGVvbGlicmFyeSINCn0==)"/>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<control type="image">
|
<control type="image">
|
||||||
<width>100%</width>
|
<width>100%</width>
|
||||||
<height>100%</height>
|
<height>100%</height>
|
||||||
<texture colordiffuse="FF232323">Shortcut/white.png</texture>
|
<texture colordiffuse="FF232323">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<!-- Divider -->
|
<!-- Divider -->
|
||||||
<control type="image">
|
<control type="image">
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<right>0</right>
|
<right>0</right>
|
||||||
<width>100%</width>
|
<width>100%</width>
|
||||||
<height>1</height>
|
<height>1</height>
|
||||||
<texture colordiffuse="33FFFFFF">Shortcut/white.png</texture>
|
<texture colordiffuse="33FFFFFF">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<control type="label" id="10002">
|
<control type="label" id="10002">
|
||||||
@@ -47,8 +47,8 @@
|
|||||||
<top>25</top>
|
<top>25</top>
|
||||||
<width>30</width>
|
<width>30</width>
|
||||||
<height>30</height>
|
<height>30</height>
|
||||||
<texturefocus colordiffuse="FFFFFFFF">Controls/DialogCloseButton-focus.png</texturefocus>
|
<texturefocus colordiffuse="FFFFFFFF">close.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="55FFFFFF">Controls/DialogCloseButton-focus.png</texturenofocus>
|
<texturenofocus colordiffuse="55FFFFFF">close.png</texturenofocus>
|
||||||
</control>
|
</control>
|
||||||
<!-- OK -->
|
<!-- OK -->
|
||||||
<control type="button" id="10004">
|
<control type="button" id="10004">
|
||||||
@@ -58,8 +58,8 @@
|
|||||||
<height>60</height>
|
<height>60</height>
|
||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<texturefocus colordiffuse="FF0081C2">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="FF191919">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="FF191919">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70001]</label>
|
<label>$ADDON[plugin.video.kod 70001]</label>
|
||||||
@@ -72,8 +72,8 @@
|
|||||||
<height>60</height>
|
<height>60</height>
|
||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<texturefocus colordiffuse="FF0081C2">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="FF191919">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="FF191919">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70002]</label>
|
<label>$ADDON[plugin.video.kod 70002]</label>
|
||||||
@@ -86,8 +86,8 @@
|
|||||||
<height>60</height>
|
<height>60</height>
|
||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<texturefocus colordiffuse="FF0081C2">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="FF191919">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="FF191919">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70003]</label>
|
<label>$ADDON[plugin.video.kod 70003]</label>
|
||||||
@@ -116,14 +116,14 @@
|
|||||||
<right>0</right>
|
<right>0</right>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
<height>540</height>
|
<height>540</height>
|
||||||
<texture border="2" colordiffuse="FF232323">Shortcut/white.png</texture>
|
<texture border="2" colordiffuse="FF232323">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<control type="image" id="10009">
|
<control type="image" id="10009">
|
||||||
<top>120</top>
|
<top>120</top>
|
||||||
<right>0</right>
|
<right>0</right>
|
||||||
<width>10</width>
|
<width>10</width>
|
||||||
<height>540</height>
|
<height>540</height>
|
||||||
<texture border="2" colordiffuse="33FFFFFF">Shortcut/white.png</texture>
|
<texture border="2" colordiffuse="33FFFFFF">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
</controls>
|
</controls>
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
<top>0</top>
|
<top>0</top>
|
||||||
<width>100%</width>
|
<width>100%</width>
|
||||||
<height>100%</height>
|
<height>100%</height>
|
||||||
<texturefocus colordiffuse="80DCDCDC">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="80DCDCDC">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="80DCDCDC">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="80DCDCDC">white.png</texturenofocus>
|
||||||
<animation effect="fade" time="200">WindowOpen</animation>
|
<animation effect="fade" time="200">WindowOpen</animation>
|
||||||
<animation effect="fade" time="200">WindowClose</animation>
|
<animation effect="fade" time="200">WindowClose</animation>
|
||||||
<onclick>Action(close)</onclick>
|
<onclick>Action(close)</onclick>
|
||||||
@@ -39,9 +39,9 @@
|
|||||||
<top>219</top>
|
<top>219</top>
|
||||||
<width>1100</width>
|
<width>1100</width>
|
||||||
<height>10</height>
|
<height>10</height>
|
||||||
<texturesliderbackground colordiffuse="FFDCDCDC">Shortcut/white.png</texturesliderbackground>
|
<texturesliderbackground colordiffuse="FFDCDCDC">white.png</texturesliderbackground>
|
||||||
<texturesliderbar colordiffuse="FF1f1f1f">Shortcut/white.png</texturesliderbar>
|
<texturesliderbar colordiffuse="FF1f1f1f">white.png</texturesliderbar>
|
||||||
<texturesliderbarfocus colordiffuse="FF0082C2">Shortcut/white.png</texturesliderbarfocus>
|
<texturesliderbarfocus colordiffuse="FF0082C2">white.png</texturesliderbarfocus>
|
||||||
<showonepage>false</showonepage>
|
<showonepage>false</showonepage>
|
||||||
<orientation>horizontal</orientation>
|
<orientation>horizontal</orientation>
|
||||||
<ondown>32500</ondown>
|
<ondown>32500</ondown>
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
<control type="image">
|
<control type="image">
|
||||||
<width>1100</width>
|
<width>1100</width>
|
||||||
<height>218</height>
|
<height>218</height>
|
||||||
<texture colordiffuse="FFDCDCDC">Shortcut/white.png</texture>
|
<texture colordiffuse="FFDCDCDC">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<control type="list" id="32500">
|
<control type="list" id="32500">
|
||||||
<left>-130</left>
|
<left>-130</left>
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
<top>1</top>
|
<top>1</top>
|
||||||
<width>220</width>
|
<width>220</width>
|
||||||
<height>218</height>
|
<height>218</height>
|
||||||
<texture colordiffuse="FF0082C2">Shortcut/white.png</texture>
|
<texture colordiffuse="FF0082C2">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<control type="textbox">
|
<control type="textbox">
|
||||||
<left>0</left>
|
<left>0</left>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<control type="image">
|
<control type="image">
|
||||||
<width>100%</width>
|
<width>100%</width>
|
||||||
<height>100%</height>
|
<height>100%</height>
|
||||||
<texture colordiffuse="FF232323">Shortcut/white.png</texture>
|
<texture colordiffuse="FF232323">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<!-- FANART -->
|
<!-- FANART -->
|
||||||
<control type="image" id="10004">
|
<control type="image" id="10004">
|
||||||
@@ -47,8 +47,8 @@
|
|||||||
<top>25</top>
|
<top>25</top>
|
||||||
<width>30</width>
|
<width>30</width>
|
||||||
<height>30</height>
|
<height>30</height>
|
||||||
<texturefocus colordiffuse="FFFFFFFF">Controls/DialogCloseButton-focus.png</texturefocus>
|
<texturefocus colordiffuse="FFFFFFFF">close.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="55FFFFFF">Controls/DialogCloseButton-focus.png</texturenofocus>
|
<texturenofocus colordiffuse="55FFFFFF">close.png</texturenofocus>
|
||||||
</control>
|
</control>
|
||||||
<!-- LOCANDINA -->
|
<!-- LOCANDINA -->
|
||||||
<control type="image" id="10005">
|
<control type="image" id="10005">
|
||||||
@@ -315,8 +315,8 @@
|
|||||||
<width>200</width>
|
<width>200</width>
|
||||||
<height>50</height>
|
<height>50</height>
|
||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<texturefocus colordiffuse="FF0081C2">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="000081C2">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="000081C2">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70005]</label>
|
<label>$ADDON[plugin.video.kod 70005]</label>
|
||||||
@@ -327,8 +327,8 @@
|
|||||||
<width>200</width>
|
<width>200</width>
|
||||||
<height>50</height>
|
<height>50</height>
|
||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<texturefocus colordiffuse="FF0081C2">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="000081C2">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="000081C2">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70006]</label>
|
<label>$ADDON[plugin.video.kod 70006]</label>
|
||||||
@@ -339,8 +339,8 @@
|
|||||||
<width>200</width>
|
<width>200</width>
|
||||||
<height>50</height>
|
<height>50</height>
|
||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<texturefocus colordiffuse="FF0081C2">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="000081C2">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="000081C2">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70002]</label>
|
<label>$ADDON[plugin.video.kod 70002]</label>
|
||||||
@@ -351,8 +351,8 @@
|
|||||||
<width>200</width>
|
<width>200</width>
|
||||||
<height>50</height>
|
<height>50</height>
|
||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<texturefocus colordiffuse="FF0081C2">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="000081C2">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="000081C2">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70007]</label>
|
<label>$ADDON[plugin.video.kod 70007]</label>
|
||||||
|
|||||||
@@ -5,45 +5,25 @@
|
|||||||
<onload>Dialog.Close(videoosd,true)</onload>
|
<onload>Dialog.Close(videoosd,true)</onload>
|
||||||
<controls>
|
<controls>
|
||||||
<control type="group">
|
<control type="group">
|
||||||
|
<top>0</top>
|
||||||
|
<right>0</right>
|
||||||
|
<width>100%</width>
|
||||||
<animation type="WindowOpen" reversible="false">
|
<animation type="WindowOpen" reversible="false">
|
||||||
<effect type="fade" start="0" end="100" time="600" />
|
<effect type="fade" start="0" end="100" time="400" />
|
||||||
<effect type="slide" start="115,0" end="0,0" time="600" />
|
<effect type="slide" start="115,0" end="0,0" time="400" />
|
||||||
</animation>
|
</animation>
|
||||||
<animation type="WindowClose" reversible="false">
|
<animation type="WindowClose" reversible="false">
|
||||||
<effect type="fade" start="100" end="0" time="400" />
|
<effect type="fade" start="100" end="0" time="300" />
|
||||||
<effect type="slide" start="0,0" end="115,0" time="400" />
|
<effect type="slide" start="0,0" end="115,0" time="300" />
|
||||||
</animation>
|
</animation>
|
||||||
<control type="group">
|
|
||||||
<right>0</right>
|
|
||||||
<top>15</top>
|
|
||||||
<height>40</height>
|
|
||||||
<width>100%</width>
|
|
||||||
<!-- Background -->
|
|
||||||
<control type="image">
|
|
||||||
<top>0</top>
|
|
||||||
<width>100%</width>
|
|
||||||
<height>40</height>
|
|
||||||
<texture colordiffuse="00111111">NextDialog/background-diffuse.png</texture>
|
|
||||||
</control>
|
|
||||||
<control type="group">
|
|
||||||
<top>0</top>
|
|
||||||
<right>0</right>
|
|
||||||
<width>100%</width>
|
|
||||||
<!-- buttons -->
|
|
||||||
<control type="button" id="3012">
|
|
||||||
<left>-1000</left>
|
|
||||||
<top>-1000</top>
|
|
||||||
<height>1</height>
|
|
||||||
<width>1</width>
|
|
||||||
</control>
|
|
||||||
<control type="grouplist" id="20">
|
<control type="grouplist" id="20">
|
||||||
<orientation>horizontal</orientation>
|
<orientation>horizontal</orientation>
|
||||||
|
<top>15</top>
|
||||||
<height>40</height>
|
<height>40</height>
|
||||||
<itemgap>0</itemgap>
|
<itemgap>0</itemgap>
|
||||||
<align>right</align>
|
<align>right</align>
|
||||||
<control type="button" id="11">
|
<control type="button" id="3012">
|
||||||
<label>$INFO[Window.Property(title)] | $INFO[Window.Property(ep_title)] | $INFO[Player.TimeRemaining(secs),,]</label>
|
<label>$INFO[Window.Property(title)] - $INFO[Window.Property(ep_title)] | $INFO[Player.TimeRemaining(secs),,]</label>
|
||||||
<onclick>SendClick(3012)</onclick>
|
|
||||||
<height>40</height>
|
<height>40</height>
|
||||||
<width min="50">auto</width>
|
<width min="50">auto</width>
|
||||||
<font>font30_title</font>
|
<font>font30_title</font>
|
||||||
@@ -54,8 +34,8 @@
|
|||||||
<shadowcolor>22000000</shadowcolor>
|
<shadowcolor>22000000</shadowcolor>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<texturefocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturefocus>
|
<texturefocus border="10" colordiffuse="88232323">white.png</texturefocus>
|
||||||
<texturenofocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturenofocus>
|
<texturenofocus border="10" colordiffuse="88232323">white.png</texturenofocus>
|
||||||
<pulseonselect>no</pulseonselect>
|
<pulseonselect>no</pulseonselect>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="3013">
|
<control type="button" id="3013">
|
||||||
@@ -70,17 +50,15 @@
|
|||||||
<shadowcolor>22000000</shadowcolor>
|
<shadowcolor>22000000</shadowcolor>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<texturefocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturefocus>
|
<texturefocus border="10" colordiffuse="88232323">white.png</texturefocus>
|
||||||
<texturenofocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturenofocus>
|
<texturenofocus border="10" colordiffuse="88232323">white.png</texturenofocus>
|
||||||
<pulseonselect>no</pulseonselect>
|
<pulseonselect>no</pulseonselect>
|
||||||
</control>
|
</control>
|
||||||
<control type="image">
|
<control type="image">
|
||||||
<top>0</top>
|
<top>0</top>
|
||||||
<width>30</width>
|
<width>30</width>
|
||||||
<height>40</height>
|
<height>40</height>
|
||||||
<texture colordiffuse="88232323">NextDialog/background-diffuse.png</texture>
|
<texture colordiffuse="88232323">white.png</texture>
|
||||||
</control>
|
|
||||||
</control>
|
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
|
|||||||
@@ -4,59 +4,34 @@
|
|||||||
<onload>Dialog.Close(fullscreeninfo,true)</onload>
|
<onload>Dialog.Close(fullscreeninfo,true)</onload>
|
||||||
<onload>Dialog.Close(videoosd,true)</onload>
|
<onload>Dialog.Close(videoosd,true)</onload>
|
||||||
<controls>
|
<controls>
|
||||||
<control type="group">
|
|
||||||
<animation type="WindowOpen" reversible="false">
|
|
||||||
<effect type="fade" start="0" end="100" time="600" />
|
|
||||||
<effect type="slide" start="115,0" end="0,0" time="600" />
|
|
||||||
</animation>
|
|
||||||
<animation type="WindowClose" reversible="false">
|
|
||||||
<effect type="fade" start="100" end="0" time="400" />
|
|
||||||
<effect type="slide" start="0,0" end="115,0" time="400" />
|
|
||||||
</animation>
|
|
||||||
<control type="group">
|
|
||||||
<right>0</right>
|
|
||||||
<top>15</top>
|
|
||||||
<height>50</height>
|
|
||||||
<width>100%</width>
|
|
||||||
<!-- Background -->
|
|
||||||
<control type="image">
|
|
||||||
<top>0</top>
|
|
||||||
<width>100%</width>
|
|
||||||
<height>40</height>
|
|
||||||
<!-- <texture colordiffuse="00111111">NextDialog/button-bg.png</texture> -->
|
|
||||||
</control>
|
|
||||||
<control type="group">
|
|
||||||
<top>0</top>
|
|
||||||
<right>0</right>
|
|
||||||
<width>100%</width>
|
|
||||||
<!-- buttons -->
|
|
||||||
<control type="button" id="3012">
|
|
||||||
<left>-1000</left>
|
|
||||||
<top>-1000</top>
|
|
||||||
<height>1</height>
|
|
||||||
<width>1</width>
|
|
||||||
</control>
|
|
||||||
<control type="grouplist" id="20">
|
<control type="grouplist" id="20">
|
||||||
<orientation>horizontal</orientation>
|
<orientation>horizontal</orientation>
|
||||||
|
<top>15</top>
|
||||||
<height>40</height>
|
<height>40</height>
|
||||||
<itemgap>0</itemgap>
|
<itemgap>0</itemgap>
|
||||||
<align>right</align>
|
<align>right</align>
|
||||||
<control type="button" id="11">
|
<animation type="WindowOpen" reversible="false">
|
||||||
|
<effect type="fade" start="0" end="100" time="400" />
|
||||||
|
<effect type="slide" start="115,0" end="0,0" time="400" />
|
||||||
|
</animation>
|
||||||
|
<animation type="WindowClose" reversible="false">
|
||||||
|
<effect type="fade" start="100" end="0" time="300" />
|
||||||
|
<effect type="slide" start="0,0" end="115,0" time="300" />
|
||||||
|
</animation>
|
||||||
|
<control type="button" id="3012">
|
||||||
<label>[B]$INFO[Player.TimeRemaining(secs),,][/B]</label>
|
<label>[B]$INFO[Player.TimeRemaining(secs),,][/B]</label>
|
||||||
<onclick>SendClick(3012)</onclick>
|
|
||||||
<!-- <visible>!Integer.IsGreater(Player.TimeRemaining,59)</visible> -->
|
|
||||||
<height>40</height>
|
<height>40</height>
|
||||||
<width>100</width>
|
<width>80</width>
|
||||||
<font>font30_title</font>
|
<font>font30_title</font>
|
||||||
<textoffsetx>12</textoffsetx>
|
<textoffsetx>10</textoffsetx>
|
||||||
<textcolor>80FFFFFF</textcolor>
|
<textcolor>80FFFFFF</textcolor>
|
||||||
<focusedcolor>FFFFFFFF</focusedcolor>
|
<focusedcolor>FFFFFFFF</focusedcolor>
|
||||||
<selectedcolor>80FFFFFF</selectedcolor>
|
<selectedcolor>80FFFFFF</selectedcolor>
|
||||||
<shadowcolor>22000000</shadowcolor>
|
<shadowcolor>22000000</shadowcolor>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<align>left</align>
|
<align>left</align>
|
||||||
<texturefocus border="10">NextDialog/play-fo.png</texturefocus>
|
<texturefocus border="0" colordiffuse="FFFFFFFF">NextDialog/play.png</texturefocus>
|
||||||
<texturenofocus border="10">NextDialog/play-nf.png</texturenofocus>
|
<texturenofocus border="0" colordiffuse="80FFFFFF">NextDialog/play.png</texturenofocus>
|
||||||
<pulseonselect>no</pulseonselect>
|
<pulseonselect>no</pulseonselect>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="3013">
|
<control type="button" id="3013">
|
||||||
@@ -71,8 +46,8 @@
|
|||||||
<shadowcolor>22000000</shadowcolor>
|
<shadowcolor>22000000</shadowcolor>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<texturefocus border="10">NextDialog/close-fo.png</texturefocus>
|
<texturefocus border="10" colordiffuse="FFFFFFFF">NextDialog/close.png</texturefocus>
|
||||||
<texturenofocus border="10">NextDialog/close-nf.png</texturenofocus>
|
<texturenofocus border="10" colordiffuse="80FFFFFF">NextDialog/close.png</texturenofocus>
|
||||||
<pulseonselect>no</pulseonselect>
|
<pulseonselect>no</pulseonselect>
|
||||||
</control>
|
</control>
|
||||||
<control type="image">
|
<control type="image">
|
||||||
@@ -82,8 +57,5 @@
|
|||||||
<texture>NextDialog/background.png</texture>
|
<texture>NextDialog/background.png</texture>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
|
||||||
</control>
|
|
||||||
</control>
|
|
||||||
</controls>
|
</controls>
|
||||||
</window>
|
</window>
|
||||||
@@ -6,12 +6,12 @@
|
|||||||
<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="600" />
|
<effect type="fade" start="0" end="100" time="400" />
|
||||||
<effect type="slide" start="115,0" end="0,0" time="600" />
|
<effect type="slide" start="115,0" end="0,0" time="400" />
|
||||||
</animation>
|
</animation>
|
||||||
<animation type="WindowClose" reversible="false">
|
<animation type="WindowClose" reversible="false">
|
||||||
<effect type="fade" start="100" end="0" time="400" />
|
<effect type="fade" start="100" end="0" time="300" />
|
||||||
<effect type="slide" start="0,0" end="115,0" time="400" />
|
<effect type="slide" start="0,0" end="115,0" time="300" />
|
||||||
</animation>
|
</animation>
|
||||||
<control type="group">
|
<control type="group">
|
||||||
<right>30</right>
|
<right>30</right>
|
||||||
@@ -26,26 +26,14 @@
|
|||||||
<height>180</height>
|
<height>180</height>
|
||||||
<texture>$INFO[Window.Property(next_img)]</texture>
|
<texture>$INFO[Window.Property(next_img)]</texture>
|
||||||
</control>
|
</control>
|
||||||
<control type="group">
|
|
||||||
<top>0</top>
|
|
||||||
<right>0</right>
|
|
||||||
<width>100%</width>
|
|
||||||
<!-- buttons -->
|
|
||||||
<control type="button" id="3012">
|
|
||||||
<left>-1000</left>
|
|
||||||
<top>-1000</top>
|
|
||||||
<height>1</height>
|
|
||||||
<width>1</width>
|
|
||||||
</control>
|
|
||||||
<control type="grouplist" id="20">
|
<control type="grouplist" id="20">
|
||||||
<orientation>vertical</orientation>
|
<orientation>vertical</orientation>
|
||||||
<height>220</height>
|
<height>220</height>
|
||||||
<width>326</width>
|
<width>326</width>
|
||||||
<itemgap>0</itemgap>
|
<itemgap>0</itemgap>
|
||||||
<right>0</right>
|
<right>0</right>
|
||||||
<control type="button" id="11">
|
<control type="button" id="3012">
|
||||||
<label></label>
|
<label></label>
|
||||||
<onclick>SendClick(3012)</onclick>
|
|
||||||
<height>180</height>
|
<height>180</height>
|
||||||
<width>326</width>
|
<width>326</width>
|
||||||
<right>0</right>
|
<right>0</right>
|
||||||
@@ -58,7 +46,7 @@
|
|||||||
<aligny>top</aligny>
|
<aligny>top</aligny>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<texturefocus border="10">NextDialog/background-play.png</texturefocus>
|
<texturefocus border="10">NextDialog/background-play.png</texturefocus>
|
||||||
<texturenofocus border="10" colordiffuse="00232323">NextDialog/background-diffuse.png</texturenofocus>
|
<texturenofocus border="10" colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<pulseonselect>no</pulseonselect>
|
<pulseonselect>no</pulseonselect>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="3013">
|
<control type="button" id="3013">
|
||||||
@@ -69,12 +57,12 @@
|
|||||||
<textoffsetx>20</textoffsetx>
|
<textoffsetx>20</textoffsetx>
|
||||||
<textcolor>80FFFFFF</textcolor>
|
<textcolor>80FFFFFF</textcolor>
|
||||||
<focusedcolor>FFFFFFFF</focusedcolor>
|
<focusedcolor>FFFFFFFF</focusedcolor>
|
||||||
<selectedcolor>80FFFFFF</selectedcolor>
|
<selectedcolor>FFFFFFFF</selectedcolor>
|
||||||
<shadowcolor>22000000</shadowcolor>
|
<shadowcolor>22000000</shadowcolor>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<texturefocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturefocus>
|
<texturefocus border="10" colordiffuse="FF0082C2">white.png</texturefocus>
|
||||||
<texturenofocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturenofocus>
|
<texturenofocus border="10" colordiffuse="FF232323">white.png</texturenofocus>
|
||||||
<pulseonselect>no</pulseonselect>
|
<pulseonselect>no</pulseonselect>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
@@ -87,7 +75,7 @@
|
|||||||
<scroll>true</scroll>
|
<scroll>true</scroll>
|
||||||
<scrollspeed>50</scrollspeed>
|
<scrollspeed>50</scrollspeed>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<shadowcolor>ff000000</shadowcolor>
|
<shadowcolor>FF000000</shadowcolor>
|
||||||
<info>Window.Property(title)</info>
|
<info>Window.Property(title)</info>
|
||||||
<font>font30_title</font>
|
<font>font30_title</font>
|
||||||
</control>
|
</control>
|
||||||
@@ -100,7 +88,7 @@
|
|||||||
<scroll>true</scroll>
|
<scroll>true</scroll>
|
||||||
<scrollspeed>50</scrollspeed>
|
<scrollspeed>50</scrollspeed>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<shadowcolor>ff000000</shadowcolor>
|
<shadowcolor>FF000000</shadowcolor>
|
||||||
<info>Window.Property(ep_title)</info>
|
<info>Window.Property(ep_title)</info>
|
||||||
<font>font20_title</font>
|
<font>font20_title</font>
|
||||||
</control>
|
</control>
|
||||||
@@ -114,12 +102,11 @@
|
|||||||
<scroll>true</scroll>
|
<scroll>true</scroll>
|
||||||
<scrollspeed>50</scrollspeed>
|
<scrollspeed>50</scrollspeed>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<shadowcolor>ff000000</shadowcolor>
|
<shadowcolor>FF000000</shadowcolor>
|
||||||
<info>Player.TimeRemaining(secs),,</info>
|
<info>Player.TimeRemaining(secs),,</info>
|
||||||
<font>font30_title</font>
|
<font>font30_title</font>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
|
||||||
</controls>
|
</controls>
|
||||||
</window>
|
</window>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
<width>510</width>
|
<width>510</width>
|
||||||
<height>640</height>
|
<height>640</height>
|
||||||
<left>45</left>
|
<left>45</left>
|
||||||
<texture>Shortcut/dialog-bg-solid.png</texture>
|
<texture>Controls/dialog-bg-solid.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<control type="textbox" id="10000">
|
<control type="textbox" id="10000">
|
||||||
<top>30</top>
|
<top>30</top>
|
||||||
@@ -39,8 +39,8 @@
|
|||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<focusedcolor>FFFFFFFF</focusedcolor>
|
<focusedcolor>FFFFFFFF</focusedcolor>
|
||||||
<texturefocus>Controls/KeyboardKey.png</texturefocus>
|
<texturefocus colordiffuse="FF0082C2">white.png</texturefocus>
|
||||||
<texturenofocus>Controls/KeyboardKeyNF.png</texturenofocus>
|
<texturenofocus colordiffuse="000082C2">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70007]</label>
|
<label>$ADDON[plugin.video.kod 70007]</label>
|
||||||
@@ -57,8 +57,8 @@
|
|||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<focusedcolor>FFFFFFFF</focusedcolor>
|
<focusedcolor>FFFFFFFF</focusedcolor>
|
||||||
<texturefocus>Controls/KeyboardKey.png</texturefocus>
|
<texturefocus colordiffuse="FF0082C2">white.png</texturefocus>
|
||||||
<texturenofocus>Controls/KeyboardKeyNF.png</texturenofocus>
|
<texturenofocus colordiffuse="000082C2">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 707433]</label>
|
<label>$ADDON[plugin.video.kod 707433]</label>
|
||||||
@@ -75,8 +75,8 @@
|
|||||||
<textwidth>110</textwidth>
|
<textwidth>110</textwidth>
|
||||||
<textcolor>FFFFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<focusedcolor>FFFFFFFF</focusedcolor>
|
<focusedcolor>FFFFFFFF</focusedcolor>
|
||||||
<texturefocus>Controls/KeyboardKey.png</texturefocus>
|
<texturefocus colordiffuse="FF0082C2">white.png</texturefocus>
|
||||||
<texturenofocus>Controls/KeyboardKeyNF.png</texturenofocus>
|
<texturenofocus colordiffuse="000082C2">white.png</texturenofocus>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<label>$ADDON[plugin.video.kod 70008]</label>
|
<label>$ADDON[plugin.video.kod 70008]</label>
|
||||||
@@ -96,9 +96,9 @@
|
|||||||
<left>75</left>
|
<left>75</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10002</onup>
|
<onup>10002</onup>
|
||||||
<ondown>10008</ondown>
|
<ondown>10008</ondown>
|
||||||
@@ -110,9 +110,9 @@
|
|||||||
<left>225</left>
|
<left>225</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10003</onup>
|
<onup>10003</onup>
|
||||||
<ondown>10009</ondown>
|
<ondown>10009</ondown>
|
||||||
@@ -124,9 +124,9 @@
|
|||||||
<left>375</left>
|
<left>375</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10004</onup>
|
<onup>10004</onup>
|
||||||
<ondown>10010</ondown>
|
<ondown>10010</ondown>
|
||||||
@@ -138,9 +138,9 @@
|
|||||||
<left>75</left>
|
<left>75</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10005</onup>
|
<onup>10005</onup>
|
||||||
<ondown>10011</ondown>
|
<ondown>10011</ondown>
|
||||||
@@ -152,9 +152,9 @@
|
|||||||
<left>225</left>
|
<left>225</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10006</onup>
|
<onup>10006</onup>
|
||||||
<ondown>10012</ondown>
|
<ondown>10012</ondown>
|
||||||
@@ -166,9 +166,9 @@
|
|||||||
<left>375</left>
|
<left>375</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10007</onup>
|
<onup>10007</onup>
|
||||||
<ondown>10013</ondown>
|
<ondown>10013</ondown>
|
||||||
@@ -180,9 +180,9 @@
|
|||||||
<left>75</left>
|
<left>75</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10008</onup>
|
<onup>10008</onup>
|
||||||
<ondown>10002</ondown>
|
<ondown>10002</ondown>
|
||||||
@@ -194,9 +194,9 @@
|
|||||||
<left>225</left>
|
<left>225</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10009</onup>
|
<onup>10009</onup>
|
||||||
<ondown>10003</ondown>
|
<ondown>10003</ondown>
|
||||||
@@ -208,9 +208,9 @@
|
|||||||
<left>375</left>
|
<left>375</left>
|
||||||
<width>150</width>
|
<width>150</width>
|
||||||
<height>150</height>
|
<height>150</height>
|
||||||
<texturefocus colordiffuse="AA232323">Controls/background-diffuse.png</texturefocus>
|
<texturefocus colordiffuse="AA232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="00232323">Controls/background-diffuse.png</texturenofocus>
|
<texturenofocus colordiffuse="00232323">white.png</texturenofocus>
|
||||||
<alttexturefocus colordiffuse="FF232323">Controls/check_mark.png</alttexturefocus>
|
<alttexturefocus colordiffuse="FF0082C2">Controls/check_mark.png</alttexturefocus>
|
||||||
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
<alttexturenofocus colordiffuse="FFFFFFFF">Controls/check_mark.png</alttexturenofocus>
|
||||||
<onup>10010</onup>
|
<onup>10010</onup>
|
||||||
<ondown>10004</ondown>
|
<ondown>10004</ondown>
|
||||||
|
|||||||
@@ -6,53 +6,45 @@
|
|||||||
<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="600" />
|
<effect type="fade" start="0" end="100" time="300" />
|
||||||
<effect type="slide" start="115,0" end="0,0" time="600" />
|
|
||||||
</animation>
|
</animation>
|
||||||
<animation type="WindowClose" reversible="false">
|
<animation type="WindowClose" reversible="false">
|
||||||
<effect type="fade" start="100" end="0" time="400" />
|
<effect type="fade" start="100" end="0" time="300" />
|
||||||
<effect type="slide" start="0,0" end="115,0" time="400" />
|
|
||||||
</animation>
|
</animation>
|
||||||
<right>0</right>
|
<right>440</right>
|
||||||
<top>15</top>
|
<top>320</top>
|
||||||
<height>40</height>
|
<height>40</height>
|
||||||
<width>100%</width>
|
<width>400</width>
|
||||||
<control type="grouplist" id="20">
|
<control type="grouplist" id="20">
|
||||||
<orientation>horizontal</orientation>
|
<orientation>vertical</orientation>
|
||||||
<height>40</height>
|
<height>80</height>
|
||||||
<itemgap>0</itemgap>
|
<itemgap>0</itemgap>
|
||||||
<align>right</align>
|
<align>center</align>
|
||||||
<control type="button" id="3012">
|
<control type="button" id="3012">
|
||||||
<label>$INFO[Window.Property(title)]</label>
|
<label>$ADDON[plugin.video.kod 30045] $INFO[Window.Property(time)]</label>
|
||||||
<onclick>SendClick(3012)</onclick>
|
<onclick>SendClick(3012)</onclick>
|
||||||
<height>40</height>
|
<height>40</height>
|
||||||
<width min="50">auto</width>
|
<width>400</width>
|
||||||
<font>font30_title</font>
|
<font>font30_title</font>
|
||||||
<textoffsetx>20</textoffsetx>
|
<textoffsetx>20</textoffsetx>
|
||||||
<textcolor>80FFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<focusedcolor>FFFFFFFF</focusedcolor>
|
|
||||||
<selectedcolor>80FFFFFF</selectedcolor>
|
|
||||||
<shadowcolor>22000000</shadowcolor>
|
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<texturefocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturefocus>
|
<texturefocus border="10" colordiffuse="FF0082C2">white.png</texturefocus>
|
||||||
<texturenofocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturenofocus>
|
<texturenofocus border="10" colordiffuse="FF232323">white.png</texturenofocus>
|
||||||
<pulseonselect>no</pulseonselect>
|
<pulseonselect>no</pulseonselect>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="3013">
|
<control type="button" id="3013">
|
||||||
<label>$ADDON[plugin.video.kod 60396]</label>
|
<label>$ADDON[plugin.video.kod 30046]</label>
|
||||||
<height>40</height>
|
<height>40</height>
|
||||||
<width min="50">auto</width>
|
<width>400</width>
|
||||||
<font>font30_title</font>
|
<font>font30_title</font>
|
||||||
<textoffsetx>20</textoffsetx>
|
<textoffsetx>20</textoffsetx>
|
||||||
<textcolor>80FFFFFF</textcolor>
|
<textcolor>FFFFFFFF</textcolor>
|
||||||
<focusedcolor>FFFFFFFF</focusedcolor>
|
|
||||||
<selectedcolor>80FFFFFF</selectedcolor>
|
|
||||||
<shadowcolor>22000000</shadowcolor>
|
|
||||||
<aligny>center</aligny>
|
<aligny>center</aligny>
|
||||||
<align>center</align>
|
<align>center</align>
|
||||||
<texturefocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturefocus>
|
<texturefocus border="10" colordiffuse="FF0082C2">white.png</texturefocus>
|
||||||
<texturenofocus border="10" colordiffuse="88232323">NextDialog/background-diffuse.png</texturenofocus>
|
<texturenofocus border="10" colordiffuse="FF232323">white.png</texturenofocus>
|
||||||
<pulseonselect>no</pulseonselect>
|
<pulseonselect>no</pulseonselect>
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
<top>0</top>
|
<top>0</top>
|
||||||
<width>100%</width>
|
<width>100%</width>
|
||||||
<height>100%</height>
|
<height>100%</height>
|
||||||
<texturefocus colordiffuse="80232323">Shortcut/white.png</texturefocus>
|
<texturefocus colordiffuse="80232323">white.png</texturefocus>
|
||||||
<texturenofocus colordiffuse="80232323">Shortcut/white.png</texturenofocus>
|
<texturenofocus colordiffuse="80232323">white.png</texturenofocus>
|
||||||
<animation effect="fade" time="200">WindowOpen</animation>
|
<animation effect="fade" time="200">WindowOpen</animation>
|
||||||
<animation effect="fade" time="200">WindowClose</animation>
|
<animation effect="fade" time="200">WindowClose</animation>
|
||||||
<onclick>Action(close)</onclick>
|
<onclick>Action(close)</onclick>
|
||||||
@@ -39,9 +39,9 @@
|
|||||||
<top>219</top>
|
<top>219</top>
|
||||||
<width>1100</width>
|
<width>1100</width>
|
||||||
<height>10</height>
|
<height>10</height>
|
||||||
<texturesliderbackground colordiffuse="FF232323">Shortcut/white.png</texturesliderbackground>
|
<texturesliderbackground colordiffuse="FF232323">white.png</texturesliderbackground>
|
||||||
<texturesliderbar colordiffuse="FF1f1f1f">Shortcut/white.png</texturesliderbar>
|
<texturesliderbar colordiffuse="FF1f1f1f">white.png</texturesliderbar>
|
||||||
<texturesliderbarfocus colordiffuse="FF0082C2">Shortcut/white.png</texturesliderbarfocus>
|
<texturesliderbarfocus colordiffuse="FF0082C2">white.png</texturesliderbarfocus>
|
||||||
<showonepage>false</showonepage>
|
<showonepage>false</showonepage>
|
||||||
<orientation>horizontal</orientation>
|
<orientation>horizontal</orientation>
|
||||||
<ondown>32500</ondown>
|
<ondown>32500</ondown>
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
<control type="image">
|
<control type="image">
|
||||||
<width>1100</width>
|
<width>1100</width>
|
||||||
<height>218</height>
|
<height>218</height>
|
||||||
<texture colordiffuse="FF232323">Shortcut/white.png</texture>
|
<texture colordiffuse="FF232323">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<control type="list" id="32500">
|
<control type="list" id="32500">
|
||||||
<left>-130</left>
|
<left>-130</left>
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
<top>1</top>
|
<top>1</top>
|
||||||
<width>220</width>
|
<width>220</width>
|
||||||
<height>218</height>
|
<height>218</height>
|
||||||
<texture colordiffuse="FF0082C2">Shortcut/white.png</texture>
|
<texture colordiffuse="FF0082C2">white.png</texture>
|
||||||
</control>
|
</control>
|
||||||
<control type="textbox">
|
<control type="textbox">
|
||||||
<left>0</left>
|
<left>0</left>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 866 B |
|
Before Width: | Height: | Size: 912 B |
|
Before Width: | Height: | Size: 863 B |
|
Before Width: | Height: | Size: 902 B |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 167 B |
@@ -28,6 +28,7 @@ def start(itemlist, item):
|
|||||||
:param item: item (the main item of the channel)
|
:param item: item (the main item of the channel)
|
||||||
:return: try to auto-reproduce, in case of failure it returns the itemlist that it received in the beginning
|
:return: try to auto-reproduce, in case of failure it returns the itemlist that it received in the beginning
|
||||||
'''
|
'''
|
||||||
|
from inspect import stack
|
||||||
if item.global_search:
|
if item.global_search:
|
||||||
return itemlist
|
return itemlist
|
||||||
logger.info()
|
logger.info()
|
||||||
@@ -111,6 +112,7 @@ def start(itemlist, item):
|
|||||||
# if the server and the quality are not in the favorites lists or the url is repeated, we discard the item
|
# if the server and the quality are not in the favorites lists or the url is repeated, we discard the item
|
||||||
if item.server.lower() not in favorite_servers or item.quality.lower() not in favorite_quality or item.url in url_list_valid:
|
if item.server.lower() not in favorite_servers or item.quality.lower() not in favorite_quality or item.url in url_list_valid:
|
||||||
item.type_b = True
|
item.type_b = True
|
||||||
|
item.play_from = base_item.play_from
|
||||||
b_dict['videoitem']= item
|
b_dict['videoitem']= item
|
||||||
autoplay_b.append(b_dict)
|
autoplay_b.append(b_dict)
|
||||||
continue
|
continue
|
||||||
@@ -122,6 +124,7 @@ def start(itemlist, item):
|
|||||||
# if the server is not in the favorites list or the url is repeated, we discard the item
|
# if the server is not in the favorites list or the url is repeated, we discard the item
|
||||||
if item.server.lower() not in favorite_servers or item.url in url_list_valid:
|
if item.server.lower() not in favorite_servers or item.url in url_list_valid:
|
||||||
item.type_b = True
|
item.type_b = True
|
||||||
|
item.play_from = base_item.play_from
|
||||||
b_dict['videoitem'] = item
|
b_dict['videoitem'] = item
|
||||||
autoplay_b.append(b_dict)
|
autoplay_b.append(b_dict)
|
||||||
continue
|
continue
|
||||||
@@ -132,6 +135,7 @@ def start(itemlist, item):
|
|||||||
# if the quality is not in the favorites list or the url is repeated, we discard the item
|
# if the quality is not in the favorites list or the url is repeated, we discard the item
|
||||||
if item.quality.lower() not in favorite_quality or item.url in url_list_valid:
|
if item.quality.lower() not in favorite_quality or item.url in url_list_valid:
|
||||||
item.type_b = True
|
item.type_b = True
|
||||||
|
item.play_from = base_item.play_from
|
||||||
b_dict['videoitem'] = item
|
b_dict['videoitem'] = item
|
||||||
autoplay_b.append(b_dict)
|
autoplay_b.append(b_dict)
|
||||||
continue
|
continue
|
||||||
@@ -140,13 +144,14 @@ def start(itemlist, item):
|
|||||||
else: # Do not order
|
else: # Do not order
|
||||||
|
|
||||||
# if the url is repeated, we discard the item
|
# if the url is repeated, we discard the item
|
||||||
|
item.play_from = base_item.play_from
|
||||||
if item.url in url_list_valid:
|
if item.url in url_list_valid:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# If the item reaches here we add it to the list of valid urls and to autoplay_list
|
# If the item reaches here we add it to the list of valid urls and to autoplay_list
|
||||||
url_list_valid.append(item.url)
|
url_list_valid.append(item.url)
|
||||||
item.plan_b=True
|
item.plan_b=True
|
||||||
|
item.play_from = base_item.play_from
|
||||||
autoplay_elem['videoitem'] = item
|
autoplay_elem['videoitem'] = item
|
||||||
autoplay_list.append(autoplay_elem)
|
autoplay_list.append(autoplay_elem)
|
||||||
|
|
||||||
@@ -225,13 +230,11 @@ def start(itemlist, item):
|
|||||||
else: videoitem = resolved_item[0]
|
else: videoitem = resolved_item[0]
|
||||||
|
|
||||||
# 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:
|
||||||
if base_item.contentChannel == 'videolibrary':
|
if base_item.contentChannel == 'videolibrary' or base_item.nfo:
|
||||||
# Mark as seen
|
# Mark as seen
|
||||||
from platformcode import xbmc_videolibrary
|
from platformcode import xbmc_videolibrary
|
||||||
xbmc_videolibrary.mark_auto_as_watched(base_item)
|
|
||||||
# Fill the video with the data of the main item and play
|
# Fill the video with the data of the main item and play
|
||||||
play_item = base_item.clone(url=videoitem)
|
play_item = base_item.clone(url=videoitem)
|
||||||
platformtools.play_video(play_item.url, autoplay=True)
|
platformtools.play_video(play_item.url, autoplay=True)
|
||||||
|
|||||||
@@ -1,207 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
import xbmc, xbmcgui, os
|
|
||||||
from platformcode import config, platformtools
|
|
||||||
from time import time, sleep
|
|
||||||
from core import jsontools, filetools
|
|
||||||
from core.support import log, dbg
|
|
||||||
from core.item import Item
|
|
||||||
from platformcode.launcher import play_from_library
|
|
||||||
|
|
||||||
import sys
|
|
||||||
if sys.version_info[0] >= 3:
|
|
||||||
from concurrent import futures
|
|
||||||
else:
|
|
||||||
from concurrent_py2 import futures
|
|
||||||
|
|
||||||
next_dialogs = ['NextDialog.xml', 'NextDialogExtended.xml', 'NextDialogCompact.xml']
|
|
||||||
next_ep_type = config.get_setting('next_ep_type')
|
|
||||||
|
|
||||||
# compatibility with previous version
|
|
||||||
if type(next_ep_type) == bool:
|
|
||||||
ND = 'NextDialogCompact.xml' if config.get_setting('next_ep_type') else 'NextDialog.xml'
|
|
||||||
else:
|
|
||||||
ND = next_dialogs[next_ep_type]
|
|
||||||
|
|
||||||
def check(item):
|
|
||||||
return True if config.get_setting('next_ep') > 0 and item.contentType != 'movie' else False
|
|
||||||
|
|
||||||
|
|
||||||
def return_item(item):
|
|
||||||
log()
|
|
||||||
with futures.ThreadPoolExecutor() as executor:
|
|
||||||
future = executor.submit(next_ep, item)
|
|
||||||
item = future.result()
|
|
||||||
return item
|
|
||||||
|
|
||||||
def run(item):
|
|
||||||
log()
|
|
||||||
with futures.ThreadPoolExecutor() as executor:
|
|
||||||
future = executor.submit(next_ep, item)
|
|
||||||
item = future.result()
|
|
||||||
if item.next_ep:
|
|
||||||
return play_from_library(item)
|
|
||||||
|
|
||||||
|
|
||||||
def videolibrary(item):
|
|
||||||
from threading import Thread
|
|
||||||
item.videolibrary = True
|
|
||||||
Thread(target=next_ep, args=[item]).start()
|
|
||||||
|
|
||||||
|
|
||||||
def next_ep(item):
|
|
||||||
log()
|
|
||||||
|
|
||||||
condition = config.get_setting('next_ep')
|
|
||||||
item.next_ep = False
|
|
||||||
item.show_server = True
|
|
||||||
|
|
||||||
VL = True if item.videolibrary else False
|
|
||||||
|
|
||||||
time_over = False
|
|
||||||
time_limit = time() + 30
|
|
||||||
time_setting = config.get_setting('next_ep_seconds')
|
|
||||||
TimeFromEnd = time_setting
|
|
||||||
|
|
||||||
# wait until the video plays
|
|
||||||
while not platformtools.is_playing() and time() < time_limit:
|
|
||||||
sleep(1)
|
|
||||||
|
|
||||||
while platformtools.is_playing() and not time_over:
|
|
||||||
try:
|
|
||||||
Total = xbmc.Player().getTotalTime()
|
|
||||||
Actual = xbmc.Player().getTime()
|
|
||||||
Difference = Total - Actual
|
|
||||||
if Total > TimeFromEnd >= Difference:
|
|
||||||
time_over = True
|
|
||||||
except:
|
|
||||||
break
|
|
||||||
|
|
||||||
if time_over:
|
|
||||||
if condition == 1: # hide server afther x second
|
|
||||||
item.show_server = False
|
|
||||||
elif condition == 2: # play next file if exist
|
|
||||||
# check if next file exist
|
|
||||||
current_filename = filetools.basename(item.strm_path)
|
|
||||||
base_path = filetools.basename(filetools.dirname(item.strm_path))
|
|
||||||
path = filetools.join(config.get_videolibrary_path(), config.get_setting("folder_tvshows"),base_path)
|
|
||||||
fileList = []
|
|
||||||
for file in filetools.listdir(path):
|
|
||||||
if file.endswith('.strm'):
|
|
||||||
fileList.append(file)
|
|
||||||
|
|
||||||
fileList.sort()
|
|
||||||
|
|
||||||
nextIndex = fileList.index(current_filename) + 1
|
|
||||||
if nextIndex == 0 or nextIndex == len(fileList):
|
|
||||||
next_file = None
|
|
||||||
else:
|
|
||||||
next_file = fileList[nextIndex]
|
|
||||||
log('Next File:', next_file)
|
|
||||||
|
|
||||||
# start next episode window afther x time
|
|
||||||
if next_file:
|
|
||||||
season_ep = next_file.split('.')[0]
|
|
||||||
season = season_ep.split('x')[0]
|
|
||||||
episode = season_ep.split('x')[1]
|
|
||||||
next_ep = '%sx%s' % (season, episode)
|
|
||||||
item = Item(
|
|
||||||
action= 'play_from_library',
|
|
||||||
channel= 'videolibrary',
|
|
||||||
contentEpisodeNumber= episode,
|
|
||||||
contentSeason= season,
|
|
||||||
contentTitle= next_ep,
|
|
||||||
contentType= 'episode',
|
|
||||||
infoLabels= {'episode': episode, 'mediatype': 'episode', 'season': season, 'title': next_ep},
|
|
||||||
strm_path= os.sep + filetools.join(base_path, next_file))
|
|
||||||
|
|
||||||
global INFO
|
|
||||||
INFO = filetools.join(path, next_file.replace("strm", "nfo"))
|
|
||||||
log('Next Info:',INFO)
|
|
||||||
|
|
||||||
nextDialog = NextDialog(ND, config.get_runtime_path())
|
|
||||||
nextDialog.show()
|
|
||||||
while platformtools.is_playing() and not nextDialog.is_still_watching():
|
|
||||||
xbmc.sleep(100)
|
|
||||||
pass
|
|
||||||
|
|
||||||
nextDialog.close()
|
|
||||||
log('Next Episode:', nextDialog.stillwatching)
|
|
||||||
|
|
||||||
if nextDialog.stillwatching or nextDialog.continuewatching:
|
|
||||||
item.next_ep = True
|
|
||||||
xbmc.Player().stop()
|
|
||||||
if VL:
|
|
||||||
sleep(1)
|
|
||||||
xbmc.executebuiltin('Action(Back)')
|
|
||||||
sleep(0.5)
|
|
||||||
return play_from_library(item)
|
|
||||||
else:
|
|
||||||
item.show_server = False
|
|
||||||
if VL:
|
|
||||||
sleep(1)
|
|
||||||
xbmc.executebuiltin('Action(Back)')
|
|
||||||
sleep(0.5)
|
|
||||||
return None
|
|
||||||
|
|
||||||
return item
|
|
||||||
|
|
||||||
|
|
||||||
class NextDialog(xbmcgui.WindowXMLDialog):
|
|
||||||
item = None
|
|
||||||
cancel = False
|
|
||||||
stillwatching = False
|
|
||||||
continuewatching = True
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
log()
|
|
||||||
self.action_exitkeys_id = [xbmcgui.ACTION_STOP, xbmcgui.ACTION_BACKSPACE, xbmcgui.ACTION_PREVIOUS_MENU, xbmcgui.ACTION_NAV_BACK]
|
|
||||||
self.progress_control = None
|
|
||||||
|
|
||||||
# set info
|
|
||||||
f = filetools.file_open(INFO, 'r')
|
|
||||||
full_info = f.read().split('\n')
|
|
||||||
full_info = full_info[1:]
|
|
||||||
f.close()
|
|
||||||
full_info = "".join(full_info)
|
|
||||||
info = jsontools.load(full_info)
|
|
||||||
info = info["infoLabels"]
|
|
||||||
self.setProperty("title", info["tvshowtitle"])
|
|
||||||
self.setProperty("ep_title", "%dx%02d - %s" % (info["season"], info["episode"], info["title"]))
|
|
||||||
if "episodio_imagen" in info:
|
|
||||||
img = info["episodio_imagen"]
|
|
||||||
else:
|
|
||||||
img = filetools.join(config.get_runtime_path(), "resources", "noimage.png")
|
|
||||||
self.setProperty("next_img", img)
|
|
||||||
|
|
||||||
def set_still_watching(self, stillwatching):
|
|
||||||
self.stillwatching = stillwatching
|
|
||||||
|
|
||||||
def set_continue_watching(self, continuewatching):
|
|
||||||
self.continuewatching = continuewatching
|
|
||||||
|
|
||||||
def is_still_watching(self):
|
|
||||||
return self.stillwatching
|
|
||||||
|
|
||||||
def onFocus(self, controlId):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def doAction(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def closeDialog(self):
|
|
||||||
self.close()
|
|
||||||
|
|
||||||
def onClick(self, controlId):
|
|
||||||
if controlId == 3012: # Still watching
|
|
||||||
self.set_still_watching(True)
|
|
||||||
self.set_continue_watching(False)
|
|
||||||
self.close()
|
|
||||||
elif controlId == 3013: # Cancel
|
|
||||||
self.set_continue_watching(False)
|
|
||||||
self.close()
|
|
||||||
|
|
||||||
def onAction(self, action):
|
|
||||||
log()
|
|
||||||
if action in self.action_exitkeys_id:
|
|
||||||
self.set_continue_watching(False)
|
|
||||||
self.close()
|
|
||||||
@@ -582,6 +582,7 @@ def findvideos(item):
|
|||||||
|
|
||||||
# We run find_videos, from the channel or common
|
# We run find_videos, from the channel or common
|
||||||
item_json.contentChannel = 'videolibrary'
|
item_json.contentChannel = 'videolibrary'
|
||||||
|
item_json.play_from = item.play_from
|
||||||
if hasattr(channel, 'findvideos'):
|
if hasattr(channel, 'findvideos'):
|
||||||
from core import servertools
|
from core import servertools
|
||||||
if item_json.videolibray_emergency_urls:
|
if item_json.videolibray_emergency_urls:
|
||||||
@@ -629,10 +630,7 @@ def findvideos(item):
|
|||||||
|
|
||||||
if autoplay.play_multi_channel(item, itemlist): # hideserver
|
if autoplay.play_multi_channel(item, itemlist): # hideserver
|
||||||
return []
|
return []
|
||||||
from inspect import stack
|
|
||||||
from specials import nextep
|
|
||||||
if nextep.check(item) and stack()[1][3] == 'run':
|
|
||||||
nextep.videolibrary(item)
|
|
||||||
add_download_items(item, itemlist)
|
add_download_items(item, itemlist)
|
||||||
return itemlist
|
return itemlist
|
||||||
|
|
||||||
|
|||||||