Files
DevOps/Kodi/Lenovo/addons/script.metadata.editor/resources/lib/functions.py

321 lines
8.6 KiB
Python

#!/usr/bin/python
# coding: utf-8
########################
from resources.lib.helper import *
from resources.lib.database import *
########################
def set_ratings(ratings):
providerlist = []
for item in ratings:
providerlist.append(str(item))
preselect = -1
for item in providerlist:
if ratings[item].get('default'):
preselect = providerlist.index(item)
menu = DIALOG.select(xbmc.getLocalizedString(424), [ADDON.getLocalizedString(32015), ADDON.getLocalizedString(32016), ADDON.getLocalizedString(32017)])
if menu == 0: # set default provider
providerdefault = DIALOG.select(ADDON.getLocalizedString(32014), providerlist, preselect=preselect)
if providerdefault >= 0:
name = providerlist[providerdefault]
for item in ratings:
default = True if item == name else False
ratings[item] = {'default': default,
'rating': ratings[item].get('rating'),
'votes': ratings[item].get('votes')}
elif menu == 1: # edit votes/rating
providerratings = DIALOG.select(ADDON.getLocalizedString(32012), providerlist, preselect=preselect)
if providerratings >= 0:
name = providerlist[providerratings]
cur_rating = round(ratings[name].get('rating', 0.0), 1)
cur_votes = ratings[name].get('votes', 0)
rating = set_float(cur_rating)
votes = set_integer(cur_votes)
if not rating:
rating = 0.0
if not votes:
votes = 0
ratings[name] = {'default': ratings[name].get('default'),
'rating': rating,
'votes': votes}
elif menu == 2: # add new rating provider
supportedlist = ['imdb', 'themoviedb', 'tomatometerallcritics', 'tomatometeravgcritics', 'tomatometerallaudience', 'tomatometeravgaudience', 'metacritic']
for item in supportedlist:
if item in providerlist:
supportedlist.remove(item)
newprovider = DIALOG.select(ADDON.getLocalizedString(32013), supportedlist)
if newprovider >= 0:
name = supportedlist[newprovider]
rating = set_float(heading='Enter rating (floating number - min 0.1 / max 10.0)')
if not rating or float(rating) > 10:
DIALOG.ok(xbmc.getLocalizedString(257), ADDON.getLocalizedString(32018))
else:
votes = set_integer()
if not votes:
votes = 0
if not DIALOG.yesno(ADDON.getLocalizedString(32019), ADDON.getLocalizedString(32020)):
default = False
else:
default = True
for item in ratings:
ratings[item] = {'default': False,
'rating': ratings[item].get('rating'),
'votes': ratings[item].get('votes')}
ratings[name] = {'default': default,
'rating': rating,
'votes': votes}
return ratings
def set_movieset(preset):
db = Database()
db.sets()
sets = db.result().get('set', [])
selectlist = []
for item in sets:
selectlist.append(item.get('title'))
selectlist.sort()
selectlist.insert(0, xbmc.getLocalizedString(231))
selectlist.insert(1, ADDON.getLocalizedString(32005))
preselect = selectlist.index(preset) if preset in selectlist else -1
selectdialog = DIALOG.select(xbmc.getLocalizedString(20466), selectlist, preselect=preselect)
if selectdialog == 0:
return ''
elif selectdialog == 1:
value = set_string()
return value
elif selectdialog > 1:
return selectlist[selectdialog]
return preset
def set_array(dbtype,key,preset):
actionlist = [ADDON.getLocalizedString(32005), ADDON.getLocalizedString(32007), ADDON.getLocalizedString(32006)]
array_action = DIALOG.select(xbmc.getLocalizedString(14241), actionlist)
array_list = get_list_items(preset)
if array_action == 0:
keyboard = xbmc.Keyboard()
keyboard.doModal()
if keyboard.isConfirmed():
new_item = keyboard.getText()
if new_item not in array_list:
array_list.append(new_item)
return remove_empty(array_list)
elif array_action == 1:
array = modify_array(dbtype, key, array_list)
return array
elif array_action == 2:
keyboard = xbmc.Keyboard(preset)
keyboard.doModal()
if keyboard.isConfirmed():
array = keyboard.getText()
else:
array = preset
return get_list_items(array)
else:
return array_list
def modify_array(dbtype,key,values):
modified = []
all_values = []
if not isinstance(values, list):
values = get_list_items(values)
if key in ['genre', 'tags']:
db = Database()
getattr(db, key)()
result = db.result()
if key == 'genre':
if dbtype in ['musicvideo', 'artist', 'album']:
for genre in result.get('audiogenres'):
all_values.append(genre)
else:
for genre in result.get('videogenres'):
all_values.append(genre)
elif key == 'tags':
for tag in result.get('tags'):
if tag not in values:
all_values.append(tag)
all_values = list(set(values + all_values))
all_values.sort()
values.sort()
# open common array dialog if all_values are empty
if not all_values:
notification(ADDON.getLocalizedString(32000), ADDON.getLocalizedString(32048))
value = set_array(dbtype, key, '')
return value
preselectlist = []
for item in values:
preselectlist.append(all_values.index(item))
selectdialog = DIALOG.multiselect(ADDON.getLocalizedString(32002), all_values, preselect=preselectlist)
if selectdialog == -1 or selectdialog is None:
return values
for index in selectdialog:
modified.append(all_values[index])
return modified
def set_integer(preset=''):
preset = str(preset)
if preset == '0':
preset = ''
value = xbmcgui.Dialog().numeric(0, xbmc.getLocalizedString(16028), preset)
if not value:
return None
return int(value)
def set_float(preset='',heading=ADDON.getLocalizedString(32011)):
try:
preset = float(preset)
preset = round(preset,1)
except Exception:
preset = ''
keyboard = xbmc.Keyboard(str(preset))
keyboard.setHeading(heading)
keyboard.doModal()
if keyboard.isConfirmed():
try:
value = float(keyboard.getText())
value = round(value,1)
return value
except Exception:
set_float(preset)
return preset
def set_date(preset):
try:
conv = time.strptime(preset,'%Y-%m-%d')
conv = time.strftime('%d/%m/%Y', conv)
except Exception:
conv = '01/01/1900'
value = xbmcgui.Dialog().numeric(1, xbmc.getLocalizedString(16028), conv)
if value:
value = value.replace(' ','0')
value = time.strptime(value,'%d/%m/%Y')
value = time.strftime('%Y-%m-%d',value)
return value
return preset
def set_time(preset):
value = xbmcgui.Dialog().numeric(2, xbmc.getLocalizedString(16028), preset)
if value:
return value
return preset
def set_string(preset=''):
value = preset.replace('\n', '[CR]')
keyboard = xbmc.Keyboard(value)
keyboard.doModal()
if keyboard.isConfirmed():
value = keyboard.getText()
return value.replace('[CR]', '\n')
def set_integer_range(preset, maximum):
preset = int(preset) if preset else 0
rangelist = []
for i in range(0, maximum):
rangelist.append(str(i))
value = DIALOG.select(xbmc.getLocalizedString(424), rangelist, preselect=preset)
if value >= 0:
return value
return preset
def set_status(preset):
statuslist = ['Returning series', 'In production', 'Planned', 'Cancelled', 'Ended']
if preset == ADDON.getLocalizedString(32022):
preset = ''
value = DIALOG.select(xbmc.getLocalizedString(126), statuslist)
if value >= 0:
return statuslist[value]
return preset
def toggle_tag(preset):
tag = 'Watchlist'
tags = get_list_items(preset)
if tag in tags:
tags.remove(tag)
else:
tags.append(tag)
return tags