321 lines
8.6 KiB
Python
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 |