diff --git a/addon.xml b/addon.xml
index a51b658f..46296624 100644
--- a/addon.xml
+++ b/addon.xml
@@ -16,10 +16,10 @@
String.IsEqual(ListItem.dbtype,tvshow)
-
-
-
-
+ -
+
+ !String.StartsWith(ListItem.FileNameAndPath, plugin://plugin.video.kod/) + [ String.IsEqual(ListItem.dbtype, tvshow) | String.IsEqual(ListItem.dbtype, movie) | String.IsEqual(ListItem.dbtype, season) | String.IsEqual(ListItem.dbtype, episode) ]
+
diff --git a/contextmenu.py b/contextmenu.py
new file mode 100644
index 00000000..8ef69684
--- /dev/null
+++ b/contextmenu.py
@@ -0,0 +1,83 @@
+import os
+from platformcode import config, logger
+import xbmc, sys, xbmcgui, os
+
+librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib'))
+sys.path.insert(0, librerias)
+
+from core import jsontools, support
+
+addon_id = config.get_addon_core().getAddonInfo('id')
+
+LOCAL_FILE = os.path.join(config.get_runtime_path(), "platformcode/contextmenu/contextmenu.json")
+f = open(LOCAL_FILE)
+try:
+ contextmenu_settings = jsontools.load( f.read() )
+except:
+ contextmenu_settings = []
+f.close()
+
+
+
+
+def build_menu():
+
+ tmdbid = xbmc.getInfoLabel('ListItem.Property(tmdb_id)')
+ mediatype = xbmc.getInfoLabel('ListItem.DBTYPE')
+ title = xbmc.getInfoLabel('ListItem.Title')
+ year = xbmc.getInfoLabel('ListItem.Year')
+ imdb = xbmc.getInfoLabel('ListItem.IMDBNumber')
+ filePath = xbmc.getInfoLabel('ListItem.FileNameAndPath')
+ containerPath = xbmc.getInfoLabel('Container.FolderPath')
+
+ logstr = "Selected ListItem is: 'IMDB: {}' - TMDB: {}' - 'Title: {}' - 'Year: {}'' - 'Type: {}'".format(imdb, tmdbid, title, year, mediatype)
+ logger.info(logstr)
+ logger.info(filePath)
+ logger.info(containerPath)
+
+ contextmenumodules = []
+ contextmenu = []
+
+ for itemmodule in contextmenu_settings:
+ logger.debug('check contextmenu', itemmodule )
+ module = __import__(itemmodule, None, None, [ itemmodule] )
+
+ # if module.check_condition():
+ logger.info('Add contextmenu item ->',itemmodule )
+ contextmenumodules.append( module )
+
+
+ contextmenuitems = []
+ contextmenuactions = []
+ empty = False
+ if len(contextmenumodules) == 0:
+ logger.info('No contextmodule found, build an empty one')
+ contextmenucontextmenuitems.append( empty_item() )
+ empty = True
+ else:
+ support.dbg()
+ for itemmodule in contextmenumodules:
+ module_item_actions = itemmodule.get_menu_items()
+ contextmenuitems = contextmenuitems + [item for item, fn in module_item_actions ]
+ contextmenuactions = contextmenuactions + [fn for item, fn in module_item_actions ]
+
+ ret = xbmcgui.Dialog().contextmenu( contextmenuitems )
+
+ if not empty and ret > -1:
+ module_function = contextmenuactions[ ret ]
+ logger.info( 'Contextmenu module index', ret, 'for -> {}', itemmodule )
+ if module_function:
+ module_function()
+ else:
+ logger.warn('No function for menu item: {}'.format(contextmenuitems[ret]) )
+
+
+def empty_item():
+ return config.get_localized_string(90004)
+
+
+if __name__ == '__main__':
+ build_menu()
+
+
+
diff --git a/platformcode/contextmenu/contextmenu.json b/platformcode/contextmenu/contextmenu.json
new file mode 100644
index 00000000..0fac1b25
--- /dev/null
+++ b/platformcode/contextmenu/contextmenu.json
@@ -0,0 +1,5 @@
+[
+ "platformcode.contextmenu.search_on_kod",
+ "platformcode.contextmenu.search_on_channels",
+ "platformcode.contextmenu.update_tv_show"
+]
\ No newline at end of file
diff --git a/platformcode/contextmenu/search_on_channels.py b/platformcode/contextmenu/search_on_channels.py
new file mode 100644
index 00000000..a254cefa
--- /dev/null
+++ b/platformcode/contextmenu/search_on_channels.py
@@ -0,0 +1,126 @@
+import xbmc, sys, os
+from platformcode import config, logger
+import re
+# incliuding folder libraries
+librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib'))
+sys.path.insert(0, librerias)
+
+
+from core import tmdb
+from core.item import Item
+
+addon_id = config.get_addon_core().getAddonInfo('id')
+
+
+def check_condition():
+ logger.debug('check item condition')
+ mediatype = xbmc.getInfoLabel('ListItem.DBTYPE')
+
+ folderPath = xbmc.getInfoLabel('Container.FolderPath')
+ filePath = xbmc.getInfoLabel('ListItem.Path')
+ fileNameAndPath = xbmc.getInfoLabel('ListItem.FileNameAndPath')
+
+ logger.debug('Container:',folderPath )
+ logger.debug('listitem mediatype:',mediatype )
+ logger.debug('filenamepath:', fileNameAndPath )
+ logger.info('filepath:', filePath )
+
+ item_is_coming_from_kod = addon_id in filePath
+ if not item_is_coming_from_kod:
+ videolibpath = config.get_setting("videolibrarypath")
+ if filePath.startswith(videolibpath):
+ pattern = re.compile("\[.*\][\\\/]?$")
+ item_is_coming_from_kod = pattern.search(filePath)
+
+ if item_is_coming_from_kod:
+ logger.debug("item IS already managed by KOD", item_is_coming_from_kod)
+
+ # logger.info('container is KOD? {}'.format(we_are_in_kod) )
+
+ return mediatype and item_is_coming_from_kod # and not we_are_in_kod
+
+
+def get_menu_items():
+ logger.debug('get menu item')
+ if check_condition():
+ return config.get_localized_string(90003) , execute
+ else:
+ return []
+
+
+def execute():
+ """
+ Gather the selected ListItem's attributes in order to compute the `Item` parameters
+ and perform the KOD's globalsearch.
+ Globalsearch will be executed specifing the content-type of the selected ListItem
+
+ NOTE: this method needs the DBTYPE and TMDB_ID specified as ListItem's properties
+ """
+
+ # These following lines are commented and keep in the code just as reminder.
+ # In future, they could be used to filter the search outcome
+
+ # ADDON: maybe can we know if the current windows is related to a specific addon?
+ # we could skip the ContextMenu if we already are in KOD's window
+
+ tmdbid = xbmc.getInfoLabel('ListItem.Property(tmdb_id)')
+ mediatype = xbmc.getInfoLabel('ListItem.DBTYPE')
+ title = xbmc.getInfoLabel('ListItem.Title')
+ year = xbmc.getInfoLabel('ListItem.Year')
+ imdb = xbmc.getInfoLabel('ListItem.IMDBNumber')
+
+ logstr = "Selected ListItem is: 'IMDB: {}' - TMDB: {}' - 'Title: {}' - 'Year: {}'' - 'Type: {}'".format(imdb, tmdbid, title, year, mediatype)
+ logger.info(logstr)
+
+ if not tmdbid and imdb:
+ logger.info('No TMDBid found. Try to get by IMDB')
+ it = Item(contentType= mediatype, infoLabels={'imdb_id' : imdb})
+ try:
+ tmdb.set_infoLabels(it)
+ tmdbid = it.infoLabels.get('tmdb_id', '')
+ except:
+ logger.info("Cannot find TMDB via imdb")
+
+ if not tmdbid:
+ logger.info('No TMDBid found. Try to get by Title/Year')
+ it = Item(contentTitle= title, contentType= mediatype, infoLabels={'year' : year})
+ try:
+ tmdb.set_infoLabels(it)
+ tmdbid = it.infoLabels.get('tmdb_id', '')
+ except:
+ logger.info("Cannot find TMDB via title/year")
+
+
+ if not tmdbid:
+ # We can continue searching by 'title (year)'
+ logger.info( "No TMDB found, proceed with title/year:", title , "(" , year, ")" )
+
+
+
+ # User wants to search on other channels
+ logger.info("Search on other channels")
+
+ item = Item(
+ action="from_context",
+ channel="search",
+ contentType= mediatype,
+ mode="search",
+ contextual= True,
+ text= title,
+ type= mediatype,
+ infoLabels= {
+ 'tmdb_id': tmdbid,
+ 'year': year,
+ 'mediatype': mediatype
+ },
+ folder= False
+ )
+
+ logger.info("Invoking Item: ", item.tostring() )
+
+ itemurl = item.tourl()
+ xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?" + itemurl + ")")
+
+
+
+
diff --git a/platformcode/contextmenu/search_on_kod.py b/platformcode/contextmenu/search_on_kod.py
new file mode 100644
index 00000000..cdbf37a8
--- /dev/null
+++ b/platformcode/contextmenu/search_on_kod.py
@@ -0,0 +1,121 @@
+import xbmc, sys, xbmcgui, os
+from platformcode import config, logger
+
+# incliuding folder libraries
+librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib'))
+sys.path.insert(0, librerias)
+import re
+
+from core import tmdb
+from core.item import Item
+
+addon_id = config.get_addon_core().getAddonInfo('id')
+
+
+def check_condition():
+ logger.debug('[SOK] check item condition')
+ mediatype = xbmc.getInfoLabel('ListItem.DBTYPE')
+
+ folderPath = xbmc.getInfoLabel('Container.FolderPath')
+ filePath = xbmc.getInfoLabel('ListItem.Path')
+ fileNameAndPath = xbmc.getInfoLabel('ListItem.FileNameAndPath')
+
+ logger.debug('Container:',folderPath )
+ logger.debug('listitem mediatype:',mediatype )
+ logger.debug('filenamepath:', fileNameAndPath )
+ logger.info('filepath:', filePath )
+
+ item_is_coming_from_kod = addon_id in filePath
+ if not item_is_coming_from_kod:
+ videolibpath = config.get_setting("videolibrarypath")
+ if filePath.startswith(videolibpath):
+ pattern = re.compile("\[.*\][\\\/]?$")
+ item_is_coming_from_kod = pattern.search(filePath)
+
+ if item_is_coming_from_kod:
+ logger.debug("item IS already managed by KOD", item_is_coming_from_kod)
+
+ # logger.info('[SOK] container is KOD? {}'.format(we_are_in_kod) )
+
+ return mediatype and not item_is_coming_from_kod # and not we_are_in_kod
+
+def get_menu_items():
+ logger.debug('get menu item')
+ if check_condition():
+ return config.get_localized_string(90005) , execute
+ else:
+ return []
+
+
+def execute():
+ """
+ Gather the selected ListItem's attributes in order to compute the `Item` parameters
+ and perform the KOD's globalsearch.
+ Globalsearch will be executed specifing the content-type of the selected ListItem
+
+ NOTE: this method needs the DBTYPE and TMDB_ID specified as ListItem's properties
+ """
+
+ # These following lines are commented and keep in the code just as reminder.
+ # In future, they could be used to filter the search outcome
+
+ # ADDON: maybe can we know if the current windows is related to a specific addon?
+ # we could skip the ContextMenu if we already are in KOD's window
+
+ tmdbid = xbmc.getInfoLabel('ListItem.Property(tmdb_id)')
+ mediatype = xbmc.getInfoLabel('ListItem.DBTYPE')
+ title = xbmc.getInfoLabel('ListItem.Title')
+ year = xbmc.getInfoLabel('ListItem.Year')
+ imdb = xbmc.getInfoLabel('ListItem.IMDBNumber')
+
+ logstr = "Selected ListItem is: 'IMDB: {}' - TMDB: {}' - 'Title: {}' - 'Year: {}'' - 'Type: {}'".format(imdb, tmdbid, title, year, mediatype)
+ logger.info(logstr)
+
+ if not tmdbid and imdb:
+ logger.info('No TMDBid found. Try to get by IMDB')
+ it = Item(contentType= mediatype, infoLabels={'imdb_id' : imdb})
+ try:
+ tmdb.set_infoLabels(it)
+ tmdbid = it.infoLabels.get('tmdb_id', '')
+ except:
+ logger.info("Cannot find TMDB via imdb")
+
+ if not tmdbid:
+ logger.info('No TMDBid found. Try to get by Title/Year')
+ it = Item(contentTitle= title, contentType= mediatype, infoLabels={'year' : year})
+ try:
+ tmdb.set_infoLabels(it)
+ tmdbid = it.infoLabels.get('tmdb_id', '')
+ except:
+ logger.info("Cannot find TMDB via title/year")
+
+
+ if not tmdbid:
+ # We can continue searching by 'title (year)'
+ logger.info( "No TMDB found, proceed with title/year:", title , "(" , year, ")" )
+
+
+ logger.info("Search on KOD (gobalsearch)")
+
+ item = Item(
+ action="Search",
+ channel="globalsearch",
+ contentType= mediatype,
+ mode="search",
+ text= title,
+ type= mediatype,
+ infoLabels= {
+ 'tmdb_id': tmdbid,
+ 'year': year
+ },
+ folder= False
+ )
+
+ logger.info("Invoking Item:", item.tostring() )
+
+ itemurl = item.tourl()
+ xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?" + itemurl + ")")
+
+
+
+
diff --git a/platformcode/contextmenu/update_tv_show.py b/platformcode/contextmenu/update_tv_show.py
new file mode 100644
index 00000000..f98c3177
--- /dev/null
+++ b/platformcode/contextmenu/update_tv_show.py
@@ -0,0 +1,133 @@
+# -*- coding: utf-8 -*-
+import xbmc, sys, xbmcgui, os, xbmcvfs, traceback
+from platformcode import config, logger
+
+librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib'))
+sys.path.insert(0, librerias)
+
+from core.item import Item
+from lib.sambatools import libsmb as samba
+from core import scrapertools, support
+
+
+def exists(path, silent=False, vfs=True):
+ path = xbmc.translatePath(path)
+ try:
+ if vfs:
+ result = bool(xbmcvfs.exists(path))
+ if not result and not path.endswith('/') and not path.endswith('\\'):
+ result = bool(xbmcvfs.exists(join(path, ' ').rstrip()))
+ return result
+ elif path.lower().startswith("smb://"):
+ return samba.exists(path)
+ else:
+ return os.path.exists(path)
+ except:
+ logger.error("ERROR when checking the path: %s" % path)
+ if not silent:
+ logger.error(traceback.format_exc())
+ return False
+
+
+def join(*paths):
+ list_path = []
+ if paths[0].startswith("/"):
+ list_path.append("")
+ for path in paths:
+ if path:
+ list_path += path.replace("\\", "/").strip("/").split("/")
+
+ if scrapertools.find_single_match(paths[0], r'(^\w+:\/\/)'):
+ return str("/".join(list_path))
+ else:
+ return str(os.sep.join(list_path))
+
+
+def search_paths(Id):
+ records = execute_sql('SELECT idPath FROM tvshowlinkpath WHERE idShow LIKE "%s"' % Id)
+ if len(records) >= 1:
+ for record in records:
+ path_records = execute_sql('SELECT strPath FROM path WHERE idPath LIKE "%s"' % record[0])
+ for path in path_records:
+ if config.get_setting('videolibrarypath') in path[0] and exists(join(path[0], 'tvshow.nfo')):
+ return path[0]
+ return ''
+
+
+def execute_sql(sql):
+ logger.debug()
+ file_db = ""
+ records = None
+
+ # We look for the archive of the video database according to the version of kodi
+ video_db = config.get_platform(True)['video_db']
+ if video_db:
+ file_db = os.path.join(xbmc.translatePath("special://userdata/Database"), video_db)
+
+ # alternative method to locate the database
+ if not file_db or not os.path.exists(file_db):
+ file_db = ""
+ for f in os.path.listdir(xbmc.translatePath("special://userdata/Database")):
+ path_f = os.path.join(xbmc.translatePath("special://userdata/Database"), f)
+
+ if os.path.pathoos.pathols.isfile(path_f) and f.lower().startswith('myvideos') and f.lower().endswith('.db'):
+ file_db = path_f
+ break
+
+ if file_db:
+ logger.debug("DB file: %s" % file_db)
+ conn = None
+ try:
+ import sqlite3
+ conn = sqlite3.connect(file_db)
+ cursor = conn.cursor()
+
+ logger.debug("Running sql: %s" % sql)
+ cursor.execute(sql)
+ conn.commit()
+
+ records = cursor.fetchall()
+ if sql.lower().startswith("select"):
+ if len(records) == 1 and records[0][0] is None:
+ records = []
+
+ conn.close()
+ logger.debug("Query executed. Records: %s" % len(records))
+
+ except:
+ logger.error("Error executing sql query")
+ if conn:
+ conn.close()
+
+ else:
+ logger.debug("Database not found")
+
+ return records
+
+
+def check_condition():
+ # support.dbg()
+ dbid = xbmc.getInfoLabel('ListItem.DBID')
+ path = search_paths( dbid )
+ if path:
+ return True
+ return False
+
+
+def get_menu_items():
+ logger.debug('get menu item')
+ if check_condition():
+ return config.get_localized_string(70269) , execute
+ else:
+ return []
+
+
+
+def execute():
+ dbid = xbmc.getInfoLabel('ListItem.DBID')
+ path = search_paths( dbid )
+ if path:
+ item = Item(action="update_tvshow", channel="videolibrary", path=path)
+ # Why? I think it is not necessary, just commented
+ # item.tourl()
+ xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?" + item.tourl() + ")")
diff --git a/platformcode/platformtools.py b/platformcode/platformtools.py
index 38a3f840..312066df 100644
--- a/platformcode/platformtools.py
+++ b/platformcode/platformtools.py
@@ -322,13 +322,6 @@ def render_items(itemlist, parent_item):
default_fanart = config.get_fanart()
def_context_commands = shortcuts.context()
- # for adding extendedinfo to contextual menu, if it's used
- has_extendedinfo = xbmc.getCondVisibility('System.HasAddon(script.extendedinfo)')
- # for adding superfavourites to contextual menu, if it's used
- sf_file_path = xbmc.translatePath("special://home/addons/plugin.program.super.favourites/LaunchSFMenu.py")
- check_sf = os.path.exists(sf_file_path)
- superfavourites = check_sf and xbmc.getCondVisibility('System.HasAddon("plugin.program.super.favourites")')
-
# if there's no item, add "no elements" item
if not len(itemlist):
itemlist.append(Item(title=config.get_localized_string(60347), thumbnail=get_thumb('nofolder.png')))
@@ -343,8 +336,11 @@ def render_items(itemlist, parent_item):
if not item.title:
item.title = ''
# If there is no action or it is findvideos / play, folder = False because no listing will be returned
- if item.action in ['play', '']:
- item.folder = False
+ if item.folder == "": # not set
+ if item.action in ['play', '']:
+ item.folder = False
+ else:
+ item.folder = True
if item.fanart == "":
item.fanart = parent_item.fanart
if item.action == 'play' and thumb_type == 1 and not item.forcethumb:
@@ -365,14 +361,13 @@ def render_items(itemlist, parent_item):
listitem.setArt({'icon': icon_image, 'thumb': item.thumbnail, 'poster': item.thumbnail,
'fanart': item.fanart if item.fanart else default_fanart})
- if config.get_setting("player_mode") == 1 and item.action == "play" and not item.nfo:
- listitem.setProperty('IsPlayable', 'true')
+ listitem.setProperty('IsPlayable', str(config.get_setting("player_mode") == 1 and item.action == "play" and not item.nfo).lower())
set_infolabels(listitem, item)
# context menu
if parent_item.channel != 'special':
- context_commands = def_context_commands + set_context_commands(item, item_url, parent_item, has_extendedinfo=has_extendedinfo, superfavourites=superfavourites)
+ context_commands = def_context_commands + set_context_commands(item, item_url, parent_item)
else:
context_commands = def_context_commands
listitem.addContextMenuItems(context_commands)
@@ -594,25 +589,6 @@ def set_context_commands(item, item_url, parent_item, **kwargs):
# if item.infoLabels['plot'] and (num_version_xbmc < 17.0 or item.contentType == 'season'):
# context_commands.append((config.get_localized_string(60348), "Action(Info)"))
- # ExtendedInfo: If the addon is installed and a series of conditions are met
- if kwargs.get('has_extendedinfo') \
- and config.get_setting("extended_info") == True:
- if item.contentType == "episode" and item.contentEpisodeNumber and item.contentSeason and (item.infoLabels['tmdb_id'] or item.contentSerieName):
- param = "tvshow_id =%s, tvshow=%s, season=%s, episode=%s" % (item.infoLabels['tmdb_id'], item.contentSerieName, item.contentSeason, item.contentEpisodeNumber)
- context_commands.append(("ExtendedInfo", "RunScript(script.extendedinfo,info=extendedepisodeinfo,%s)" % param))
-
- elif item.contentType == "season" and item.contentSeason and (item.infoLabels['tmdb_id'] or item.contentSerieName):
- param = "tvshow_id =%s,tvshow=%s, season=%s" % (item.infoLabels['tmdb_id'], item.contentSerieName, item.contentSeason)
- context_commands.append(("ExtendedInfo", "RunScript(script.extendedinfo,info=seasoninfo,%s)" % param))
-
- elif item.contentType == "tvshow" and (item.infoLabels['tmdb_id'] or item.infoLabels['tvdb_id'] or item.infoLabels['imdb_id'] or item.contentSerieName):
- param = "id =%s,tvdb_id=%s,imdb_id=%s,name=%s" % (item.infoLabels['tmdb_id'], item.infoLabels['tvdb_id'], item.infoLabels['imdb_id'], item.contentSerieName)
- context_commands.append(("ExtendedInfo", "RunScript(script.extendedinfo,info=extendedtvinfo,%s)" % param))
-
- elif item.contentType == "movie" and (item.infoLabels['tmdb_id'] or item.infoLabels['imdb_id'] or item.contentTitle):
- param = "id =%s,imdb_id=%s,name=%s" % (item.infoLabels['tmdb_id'], item.infoLabels['imdb_id'], item.contentTitle)
- context_commands.append(("ExtendedInfo", "RunScript(script.extendedinfo,info=extendedinfo,%s)" % param))
-
# InfoPlus
if config.get_setting("infoplus"):
#if item.infoLabels['tmdb_id'] or item.infoLabels['imdb_id'] or item.infoLabels['tvdb_id'] or \
@@ -622,8 +598,6 @@ def set_context_commands(item, item_url, parent_item, **kwargs):
# Open in browser and previous menu
if parent_item.channel not in ["news", "channelselector", "downloads", "search"] and item.action != "mainlist" and not parent_item.noMainMenu:
- if parent_item.action != "mainlist":
- context_commands.insert(0, (config.get_localized_string(60349), "Container.Refresh (%s?%s)" % (sys.argv[0], Item(channel=item.channel, action="mainlist").tourl())))
context_commands.insert(1, (config.get_localized_string(70739), "Container.Update (%s?%s)" % (sys.argv[0], Item(action="open_browser", url=item.url).tourl())))
# Add to kodfavoritos (My links)
@@ -683,9 +657,6 @@ def set_context_commands(item, item_url, parent_item, **kwargs):
if (item.contentTitle and item.contentType in ['movie', 'tvshow']) or "buscar_trailer" in context:
context_commands.append((config.get_localized_string(60359), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, urllib.urlencode({ 'channel': "trailertools", 'action': "buscartrailer", 'search_title': item.contentTitle if item.contentTitle else item.fulltitle, 'contextual': True}))))
- if kwargs.get('superfavourites'):
- context_commands.append((config.get_localized_string(60361), "RunScript(special://home/addons/plugin.program.super.favourites/LaunchSFMenu.py)"))
-
if config.dev_mode():
context_commands.insert(0, ("item info", "Container.Update (%s?%s)" % (sys.argv[0], Item(action="itemInfo", parent=item.tojson()).tourl())))
return context_commands
diff --git a/platformcode/shortcuts.py b/platformcode/shortcuts.py
index 6a7197bc..7e21b3f7 100644
--- a/platformcode/shortcuts.py
+++ b/platformcode/shortcuts.py
@@ -11,7 +11,7 @@ def context():
# pre-serialised
if config.get_setting('quick_menu'): context.append((config.get_localized_string(60360), 'RunPlugin(plugin://plugin.video.kod/?ewogICAgImFjdGlvbiI6ICJzaG9ydGN1dF9tZW51IiwgCiAgICAiY2hhbm5lbCI6ICJzaG9ydGN1dHMiLCAKICAgICJpbmZvTGFiZWxzIjoge30KfQ%3D%3D)'))
- if config.get_setting('kod_menu'): context.append((config.get_localized_string(60026), 'RunPlugin(plugin://plugin.video.kod/?ewogICAgImFjdGlvbiI6ICJzZXR0aW5nc19tZW51IiwgCiAgICAiY2hhbm5lbCI6ICJzaG9ydGN1dHMiLCAKICAgICJpbmZvTGFiZWxzIjoge30KfQ%3D%3D)'))
+ # if config.get_setting('kod_menu'): context.append((config.get_localized_string(60026), 'RunPlugin(plugin://plugin.video.kod/?ewogICAgImFjdGlvbiI6ICJzZXR0aW5nc19tZW51IiwgCiAgICAiY2hhbm5lbCI6ICJzaG9ydGN1dHMiLCAKICAgICJpbmZvTGFiZWxzIjoge30KfQ%3D%3D)'))
return context
diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po
index ec414ea0..0c59e78d 100644
--- a/resources/language/resource.language.en_gb/strings.po
+++ b/resources/language/resource.language.en_gb/strings.po
@@ -6481,5 +6481,21 @@ msgid "Downloading..."
msgstr ""
msgctxt "#90001"
+msgid "KOD options"
+msgstr "KOD options..."
+
+msgctxt "#90002"
+msgid "No TMDB found"
+msgstr "No TmdbId found, cannot continue"
+
+msgctxt "#90003"
+msgid "Already on KOD, continue searching on other channels?"
+msgstr "Item is coming from KOD, continue searching on other channels?"
+
+msgctxt "#90004"
+msgid "No contextmenu option"
+msgstr "No options"
+
+msgctxt "#90005"
msgid "Search on KOD"
-msgstr "Search on KOD..."
+msgstr "Search with KOD"
diff --git a/resources/language/resource.language.it_it/strings.po b/resources/language/resource.language.it_it/strings.po
index d1198d29..0163f562 100644
--- a/resources/language/resource.language.it_it/strings.po
+++ b/resources/language/resource.language.it_it/strings.po
@@ -6481,7 +6481,22 @@ msgctxt "#80050"
msgid "Downloading..."
msgstr "Download in corso..."
-
msgctxt "#90001"
+msgid "KOD options"
+msgstr "Opzioni di KOD..."
+
+msgctxt "#90002"
+msgid "No TMDB found"
+msgstr "Non sono riuscito a trovare le informazioni su TMDB"
+
+msgctxt "#90003"
+msgid "Already on KOD, continue searching on other channels?"
+msgstr "Preferisci cercare su altri canali?"
+
+msgctxt "#90004"
+msgid "No contextmenu option"
+msgstr "Nessuna opzione possibile"
+
+msgctxt "#90005"
msgid "Search on KOD"
-msgstr "Cerca con KOD..."
+msgstr "Cerca con KOD"
diff --git a/resources/settings.xml b/resources/settings.xml
index 3acf0ec7..5399e071 100644
--- a/resources/settings.xml
+++ b/resources/settings.xml
@@ -149,7 +149,7 @@
-
+