TEST Nuova Ricerca Globale

This commit is contained in:
Alhaziel01
2020-11-14 19:07:40 +01:00
parent 131e7f55f7
commit e974ab740f
10 changed files with 660 additions and 4 deletions

View File

@@ -135,6 +135,11 @@ def run(item=None):
from platformcode import infoplus
return infoplus.Main(item)
# elif item.channel == "search" and item.action == 'new_search':
# from specials import search
# item.mode = 'all'
# return search.new_search(item)
elif item.channel == "backup":
from platformcode import backup
return getattr(backup, item.action)(item)

View File

@@ -81,6 +81,7 @@
<!-- Search -->
<category label="60423">
<setting label="60422" type="lsep"/>
<setting id="new_search" type="bool" label="Nuova ricerca Globale" default="false" visible="true"/>
<setting id="last_search" type="bool" label="60678" default="true" visible="true"/>
<setting id="saved_searches_limit" type="slider" option="int" range="10,10,40" label="60677" default="10" visible="eq(-1,0)" subsetting="true"/>
<setting id="result_mode" type="select" label="60657" lvalues="60675|60676" default="0"/>

View File

@@ -0,0 +1,373 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<window>
<controls>
<!-- control groups -->
<control type='group' id="1"/>
<control type='group' id="2"/>
<control type='group' id="3"/>
<!-- CLOSE BUTTON / BACKGROUND -->
<control type="button">
<left>0</left>
<top>0</top>
<width>100%</width>
<height>100%</height>
<texturefocus colordiffuse="FF232323">white.png</texturefocus>
<texturenofocus colordiffuse="FF232323">white.png</texturenofocus>
<animation effect="fade" time="200">WindowOpen</animation>
<animation effect="fade" time="200">WindowClose</animation>
<onclick>Action(close)</onclick>
</control>
<!-- GROUP CONTROLS -->
<control type="group">
<left>0</left>
<top>0</top>
<animation type="WindowOpen" reversible="false">
<effect type="fade" delay="160" end="100" time="300" />
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" delay="160" start="100" end="0" time="300" />
</animation>
<!-- LOADING -->
<control type="image">
<top>355</top>
<left>490</left>
<width>300</width>
<height>10</height>
<texture>white.png</texture>
<visible allowhiddenfocus="true">!Integer.IsGreater(Container(102).NumItems, 0)</visible>
<animation effect="zoom" pulse="true" center="auto" start="0,100" end="100,100" time="1000" condition="!Integer.IsGreater(Container(200).NumItems, 0)">Conditional</animation>
</control>
<!-- FANART -->
<control type="image">
<width>100%</width>
<height>100%</height>
<aspectratio>center</aspectratio>
<texture colordiffuse="FF555555">$INFO[Container(103).ListItem.Property(fanart)]</texture>
</control>
<!-- SEARCH -->
<control type="group" id="10">
<visible>Control.IsVisible(1)</visible>
<!-- MAIN TITLE -->
<control type="textbox" id='101'>
<left>30</left>
<top>30</top>
<width>1000</width>
<height>30</height>
<font>font30_title</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<visible allowhiddenfocus="true">Integer.IsGreater(Container(102).NumItems, 0)</visible>
<align>left</align>
<aligny>center</aligny>
</control>
<!-- RESULTS -->
<control type="group">
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
<animation effect="fade" time="200">Visible</animation>
<!-- Title -->
<control type="textbox">
<left>400</left>
<top>90</top>
<width>840</width>
<height>30</height>
<font>font30_title</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(103).ListItem.Label] [B][COLOR FFAAAAAA]($INFO[Container(103).CurrentItem]/$INFO[Container(103).NumItems])[/COLOR][/B]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<!-- Plot -->
<control type="textbox">
<left>400</left>
<top>150</top>
<width>840</width>
<height>170</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(103).ListItem.Property(plot)]</label>
<align>left</align>
</control>
<control type="fixedlist" id="103">
<bottom>70</bottom>
<left>0</left>
<width>100%</width>
<height>570</height>
<ondown>102</ondown>
<orientation>horizontal</orientation>
<scrolltime tween="cubic" easing="out">300</scrolltime>
<itemlayout height="570" width="180">
<!-- Poster -->
<control type="image">
<bottom>0</bottom>
<left>0</left>
<width>180</width>
<height>270</height>
<texture>$INFO[ListItem.Property(thumb)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</itemlayout>
<focusedlayout height="570" width="380">
<!-- Poster -->
<control type="image">
<bottom>0</bottom>
<left>0</left>
<width>380</width>
<height>570</height>
<texture>$INFO[ListItem.Property(thumb)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</focusedlayout>
</control>
</control>
<!-- CHANNELS-->
<control type="group">
<bottom>-100</bottom>
<width>100%</width>
<height>150</height>
<animation effect="slide" start="0,150" time="500" condition="Integer.IsGreater(Container(102).NumItems, 0)">Conditional</animation>
<animation effect="slide" start="0,-100" time="200" condition="!Control.HasFocus(102)">Conditional</animation>
<control type="image">
<width>100%</width>
<height>100%</height>
<animation effect="fade" start='100' end='0' time="200" condition="!Control.HasFocus(102)">Conditional</animation>
<texture colordiffuse="FF232323">white.png</texture>
</control>
<control type="image">
<width>100%</width>
<height>100%</height>
<texture colordiffuse="88232323">white.png</texture>
</control>
<control type="list" id="102">
<width>100%</width>
<height>150</height>
<onup>103</onup>
<orientation>horizontal</orientation>
<scrolltime tween="cubic" easing="out">300</scrolltime>
<itemlayout height="150" width="150">
<!-- Poster -->
<control type="image">
<bottom>0</bottom>
<left>0</left>
<width>150</width>
<height>150</height>
<texture colordiffuse="55FFFFFF">$INFO[ListItem.Property(thumb)]</texture>
<aspectratio>scale</aspectratio>
</control>
<!-- Poster -->
<control type="image">
<top>0</top>
<right>0</right>
<width>40</width>
<height>40</height>
<texture colordiffuse="20232323">white.png</texture>
<aspectratio>scale</aspectratio>
</control>
<!-- Title -->
<control type="textbox">
<right>5</right>
<top>5</top>
<width>30</width>
<height>30</height>
<font>font30_title</font>
<textcolor>22FFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[ListItem.Property(results)][/B]</label>
<align>center</align>
<aligny>center</aligny>
</control>
</itemlayout>
<focusedlayout height="150" width="150">
<!-- Poster -->
<control type="image">
<top>0</top>
<left>0</left>
<width>150</width>
<height>150</height>
<texture>$INFO[ListItem.Property(thumb)]</texture>
<aspectratio>scale</aspectratio>
</control>
<!-- Poster -->
<control type="image">
<top>0</top>
<right>0</right>
<width>40</width>
<height>40</height>
<texture colordiffuse="880082C2">white.png</texture>
<aspectratio>scale</aspectratio>
</control>
<!-- Title -->
<control type="textbox">
<right>5</right>
<top>5</top>
<width>30</width>
<height>30</height>
<font>font30_title</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[ListItem.Property(results)][/B]</label>
<align>center</align>
<aligny>center</aligny>
</control>
</focusedlayout>
</control>
</control>
<!-- PROGRESS -->
<!-- <control type='image' id='100'/> -->
<control type="progress" id="100">
<top>0</top>
<left>-10</left>
<width>1330</width>
<height>7</height>
<reveal>false</reveal>
<lefttexture colordiffuse="10000000">white.png</lefttexture>
<righttexture colordiffuse="10000000">white.png</righttexture>
<texturebg colordiffuse="88232323">progress.png</texturebg>
<midtexture colordiffuse="FF0082C2">progress.png</midtexture>
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
</control>
<control type="textbox" id="104">
<top>30</top>
<right>30</right>
<width>200</width>
<height>40</height>
<font>font30_title</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<align>right</align>
<aligny>center</aligny>
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
</control>
</control>
<!-- EPISODES -->
<control type="group" id="20">
<visible>Control.IsVisible(2)</visible>
</control>
<!-- SERVERS -->
<control type="group" id="30">
<visible>Control.IsVisible(3)</visible>
<control type="image">
<description>Poster</description>
<top>0</top>
<left>0</left>
<width>480</width>
<height>720</height>
<texture>$INFO[Container(103).ListItem.Property(thumb)]</texture>
</control>
<control type="textbox" id="99">
<description>Title</description>
<left>520</left>
<top>40</top>
<width>1150</width>
<height>30</height>
<font>font30_title</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<align>left</align>
<aligny>center</aligny>
<label>$INFO[Container(103).ListItem.Label]</label>
</control>
<control type="list" id="300">
<bottom>40</bottom>
<left>520</left>
<width>700</width>
<height>570</height>
<!-- <orientation>horizontal</orientation> -->
<scrolltime tween="cubic" easing="out">300</scrolltime>
<itemlayout height="140" width="700">
<!-- Poster -->
<control type="image">
<top>5</top>
<left>5</left>
<width>120</width>
<height>120</height>
<texture>$INFO[ListItem.Property(thumb)]</texture>
<aspectratio>scale</aspectratio>
</control>
<control type="image">
<top>35</top>
<left>150</left>
<width>60</width>
<height>60</height>
<texture>$INFO[ListItem.Property(quality)]</texture>
<aspectratio>scale</aspectratio>
</control>
<control type="textbox" id="99">
<description>Title</description>
<left>220</left>
<top>35</top>
<width>450</width>
<height>60</height>
<font>font30_title</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<align>left</align>
<aligny>center</aligny>
<label>[B][COLOR FFAAAAAA]$INFO[ListItem.Property(servername)][/COLOR][/B]</label>
</control>
</itemlayout>
<focusedlayout height="140" width="700">
<control type="image">
<width>700</width>
<height>130</height>
<texture colordiffuse="88000000">white.png</texture>
<aspectratio>scale</aspectratio>
</control>
<!-- Poster -->
<control type="image">
<top>0</top>
<left>0</left>
<width>130</width>
<height>130</height>
<visible>Control.HasFocus(300)</visible>
<texture colordiffuse="$INFO[ListItem.Property(color)]">white.png</texture>
<aspectratio>scale</aspectratio>
</control>
<control type="image">
<top>5</top>
<left>5</left>
<width>120</width>
<height>120</height>
<texture>$INFO[ListItem.Property(thumb)]</texture>
<aspectratio>scale</aspectratio>
</control>
<control type="image">
<top>35</top>
<left>150</left>
<width>60</width>
<height>60</height>
<texture>$INFO[ListItem.Property(quality)]</texture>
<aspectratio>scale</aspectratio>
</control>
<control type="textbox" id="99">
<description>Title</description>
<left>220</left>
<top>35</top>
<width>450</width>
<height>60</height>
<font>font30_title</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<align>left</align>
<aligny>center</aligny>
<label>[B][COLOR FFAAAAAA]$INFO[ListItem.Property(servername)][/COLOR][/B]</label>
</control>
</focusedlayout>
</control>
</control>
</control>
<!-- GROUP CONTROLS END -->
</controls>
</window>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 B

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -18,12 +18,17 @@ if PY3:
else:
from concurrent_py2 import futures
from core.item import Item
from core import tmdb, scrapertools, channeltools, filetools, jsontools
from core import tmdb, scrapertools, channeltools, filetools, jsontools, servertools
from channelselector import get_thumb
from platformcode import logger, config, platformtools, unify
from core.support import typo
import xbmcgui
import gc
import xbmc
from threading import Thread
from core.support import dbg
gc.disable()
info_language = ["de", "en", "es", "fr", "it", "pt"] # from videolibrary.json
@@ -191,6 +196,8 @@ def channel_search(item):
return itemlist
else:
filetools.remove(temp_search_file)
if config.get_setting('new_search'):
return Search(item)
searched_id = item.infoLabels['tmdb_id']
@@ -199,10 +206,8 @@ def channel_search(item):
searching += channel_list
searching_titles += channel_titles
cnt = 0
progress = platformtools.dialog_progress(config.get_localized_string(30993) % item.title, config.get_localized_string(70744) % len(channel_list) + '\n' + ', '.join(searching_titles))
config.set_setting('tmdb_active', False)
search_action_list = []
module_dict = {}
for ch in channel_list:
@@ -810,4 +815,276 @@ def get_saved_searches():
else:
saved_searches_list = list(current_saved_searches_list)
return saved_searches_list
return saved_searches_list
SearchWindows = []
def Search(item):
# if SearchWindows:
# SearchWindows[-1].doModal()
# SearchWindows[:-1]
# item.text = 'matrix'
SearchWindow('GlobalSearch.xml', config.get_runtime_path()).start(item)
# Actions
LEFT = 1
RIGHT = 2
UP = 3
DOWN = 4
EXIT = 10
BACKSPACE = 92
# Container
SEARCH = 1
EPISODES = 2
SERVERS = 3
# Search
PROGRESS = 100
MAINTITLE = 101
CHANNELS = 102
RESULTS = 103
COUNT = 104
# Servers
SERVERLIST = 300
# UHDIMG = 301
# FHDIMG = 302
# HDIMG = 303
# SDIMG = 304
# UHD = 305
# FHD = 306
# HD = 307
# SD = 308
class SearchWindow(xbmcgui.WindowXMLDialog):
def start(self, item):
self.exit = False
self.item = item
self.channels = []
self.results = {}
self.channelsList, self.channelsTitle = get_channels(item)
self.focus = SEARCH
self.doModal()
def getModule(self, channel):
try:
module = __import__('channels.%s' % channel, fromlist=["channels.%s" % channel])
mainlist = getattr(module, 'mainlist')(Item(channel=channel, global_search=True))
action = [elem for elem in mainlist if elem.action == "search" and (self.item.mode == 'all' or elem.contentType in [self.item.mode, 'undefined'])]
return module, action
except:
import traceback
logger.error('error importing/getting search items of ' + channel)
logger.error(traceback.format_exc())
def onInit(self):
self.CHANNELS = self.getControl(CHANNELS)
self.RESULTS = self.getControl(RESULTS)
self.PROGRESS = self.getControl(PROGRESS)
self.COUNT = self.getControl(COUNT)
self.MAINTITLE = self.getControl(MAINTITLE)
self.MAINTITLE.setText(typo(config.get_localized_string(30993).replace('...','') % '"%s"' % self.item.text, 'bold'))
self.SEARCH = self.getControl(SEARCH)
self.EPISODES = self.getControl(EPISODES)
self.SERVERS = self.getControl(SERVERS)
self.SERVERLIST = self.getControl(SERVERLIST)
self.moduleDict = {}
self.searchActions = []
self.Focus(self.focus)
if not self.channels:
with futures.ThreadPoolExecutor() as executor:
for channel in self.channelsList:
if self.exit: break
module, action = executor.submit(self.getModule, channel).result()
self.moduleDict[channel] = module
self.searchActions += action
self.executor = futures.ThreadPoolExecutor()
self.thread = Thread(target=self.search)
self.thread.start()
def search(self):
for i, searchAction in enumerate(self.searchActions):
if self.exit: break
self.update(i, searchAction.channel, self.executor.submit(get_channel_results, self.item, self.moduleDict, searchAction).result())
def Focus(self, focusid):
if focusid in [SEARCH]:
self.focus = CHANNELS
self.SEARCH.setVisible(True)
self.EPISODES.setVisible(False)
self.SERVERS.setVisible(False)
if focusid in [EPISODES]:
self.focus = focusid
self.SEARCH.setVisible(False)
self.EPISODES.setVisible(True)
self.SERVERS.setVisible(False)
if focusid in [SERVERS]:
self.focus = SERVERLIST
self.SEARCH.setVisible(False)
self.EPISODES.setVisible(False)
self.SERVERS.setVisible(True)
def update(self, i, channel, result):
if result[1]:
channelParams = channeltools.get_channel_parameters(channel)
name = channelParams['title']
if name not in self.results:
self.results[name] = [result[1], len(self.channels)]
item = xbmcgui.ListItem(name)
item.setProperty('thumb', channelParams['thumbnail'])
item.setProperty('position', '0')
item.setProperty('results', str(len(self.results[name][0])))
self.channels.append(item)
else:
self.results[name].append([result[1], len(self.channels)])
self.channels[int(self.results[name][1])].setProperty('results', str(len(self.results[name][0])))
pos = self.CHANNELS.getSelectedPosition()
self.CHANNELS.reset()
self.CHANNELS.addItems(self.channels)
self.CHANNELS.selectItem(pos)
if len(self.channels) == 1:
self.setFocusId(CHANNELS)
items = []
for result in self.results[name][0]:
item = xbmcgui.ListItem(result.title)
item.setProperty('thumb', result.thumbnail)
item.setProperty('fanart', result.fanart)
item.setProperty('plot', result.plot)
items.append(item)
self.RESULTS.addItems(items)
percent = (i + 1) / len(self.searchActions) * 100
self.PROGRESS.setPercent(percent)
self.COUNT.setText("%s/%s" %(i + 1, len(self.searchActions)))
def onAction(self, action):
action = action.getId()
focus = self.getFocusId()
if action in [LEFT, RIGHT] and focus in [CHANNELS]:
items = []
name = self.CHANNELS.getSelectedItem().getLabel()
subpos = int(self.CHANNELS.getSelectedItem().getProperty('position'))
for result in self.results[name][0]:
logger.info(result)
item = xbmcgui.ListItem(result.title)
item.setProperty('thumb', result.thumbnail)
item.setProperty('fanart', result.fanart)
item.setProperty('plot', result.plot)
items.append(item)
self.RESULTS.reset()
self.RESULTS.addItems(items)
self.RESULTS.selectItem(subpos)
if focus in [RESULTS]:
pos = self.RESULTS.getSelectedPosition()
self.CHANNELS.getSelectedItem().setProperty('position', str(pos))
if action in [BACKSPACE]:
if self.SERVERS.isVisible():
self.Focus(SEARCH)
self.setFocusId(RESULTS)
self.RESULTS.selectItem(self.pos)
else:
self.exit = True
self.close()
if action in [EXIT]:
self.exit = True
self.close()
def onClick(self, control_id):
if control_id in [CHANNELS]:
items = []
name = self.CHANNELS.getSelectedItem().getLabel()
subpos = int(self.CHANNELS.getSelectedItem().getProperty('position'))
for result in self.results[name][0]:
logger.info(result)
item = xbmcgui.ListItem(result.title)
item.setProperty('thumb', result.thumbnail)
item.setProperty('fanart', result.fanart)
item.setProperty('plot', result.plot)
items.append(item)
self.RESULTS.reset()
self.RESULTS.addItems(items)
self.RESULTS.selectItem(subpos)
if control_id in [RESULTS]:
name = self.CHANNELS.getSelectedItem().getLabel()
self.pos = self.RESULTS.getSelectedPosition()
item = self.results[name][0][self.pos]
logger.info('ITEM',item)
channel = __import__('channels.%s' % item.channel, fromlist=["channels.%s" % item.channel])
self.servers = getattr(channel, item.action)(item)
if config.get_setting('checklinks') and not config.get_setting('autoplay'):
checklinks_number = config.get_setting('checklinks_number')
self.servers = servertools.check_list_links(self.servers, checklinks_number)
uhd = []
fhd = []
hd = []
sd = []
unknown = []
for i, item in enumerate(self.servers):
if item.server:
color = scrapertools.find_single_match(item.alive, r'(FF[^\]]+)')
it = xbmcgui.ListItem(item.infoLabels['title'])
it.setProperty('channel', channeltools.get_channel_parameters(item.channel).get('title',''))
it.setProperty('action', item.action)
it.setProperty('thumb', "https://raw.githubusercontent.com/kodiondemand/media/master/resources/servers/%s.png" % item.server.lower())
it.setProperty('servername', servertools.get_server_parameters(item.server.lower()).get('name',item.server))
it.setProperty('server', item.server)
it.setProperty('url', item.url)
# it.setProperty('quality', item.quality)
it.setProperty('color', color if color else 'FF0082C2')
it.setProperty('index', str(i))
if item.quality in ['4k', '2160p', '2160', '4k2160p', '4k2160', '4k 2160p', '4k 2160', '2k']:
it.setProperty('quality', 'uhd.png')
uhd.append(it)
elif item.quality in ['fullhd', 'fullhd 1080', 'fullhd 1080p', 'full hd', 'full hd 1080', 'full hd 1080p', 'hd1080', 'hd1080p', 'hd 1080', 'hd 1080p', '1080', '1080p']:
it.setProperty('quality', 'Fhd.png')
fhd.append(it)
elif item.quality in ['hd', 'hd720', 'hd720p', 'hd 720', 'hd 720p', '720', '720p', 'hdtv']:
it.setProperty('quality', 'hd.png')
hd.append(it)
elif item.quality in ['sd', '480p', '480', '360p', '360', '240p', '240']:
it.setProperty('quality', 'sd.png')
sd.append(it)
else:
it.setProperty('quality', '')
unknown.append(it)
# dbg()
uhd.sort(key=lambda it: it.getProperty('server'))
fhd.sort(key=lambda it: it.getProperty('server'))
hd.sort(key=lambda it: it.getProperty('server'))
sd.sort(key=lambda it: it.getProperty('server'))
unknown.sort(key=lambda it: it.getProperty('server'))
serverlist = uhd + fhd + hd + sd + unknown
self.Focus(SERVERS)
self.SERVERLIST.reset()
self.SERVERLIST.addItems(serverlist)
self.setFocusId(SERVERLIST)
if control_id in [SERVERLIST]:
control = self.getControl(control_id).getSelectedItem()
index = int(self.getControl(control_id).getSelectedItem().getProperty('index'))
server = self.servers[index]
# server.player_mode = 3
self.close()
from platformcode.launcher import run
run(server)
while not platformtools.is_playing():
pass
while platformtools.is_playing():
pass
# dbg()
self.doModal()