Updated kodi settings on Lenovo
This commit is contained in:
310
Kodi/Lenovo/addons/script.embuary.info/resources/lib/helper.py
Normal file
310
Kodi/Lenovo/addons/script.embuary.info/resources/lib/helper.py
Normal file
@@ -0,0 +1,310 @@
|
||||
#!/usr/bin/python
|
||||
# coding: utf-8
|
||||
|
||||
########################
|
||||
|
||||
import xbmc
|
||||
import xbmcaddon
|
||||
import xbmcgui
|
||||
import xbmcplugin
|
||||
import json
|
||||
import time
|
||||
import datetime
|
||||
import os
|
||||
import operator
|
||||
import arrow
|
||||
import sys
|
||||
import simplecache
|
||||
import hashlib
|
||||
|
||||
########################
|
||||
|
||||
ADDON = xbmcaddon.Addon()
|
||||
ADDON_ID = ADDON.getAddonInfo('id')
|
||||
ADDON_VERSION = ADDON.getAddonInfo('version')
|
||||
ADDON_PATH = ADDON.getAddonInfo('path')
|
||||
|
||||
INFO = xbmc.LOGINFO
|
||||
WARNING = xbmc.LOGWARNING
|
||||
DEBUG = xbmc.LOGDEBUG
|
||||
ERROR = xbmc.LOGERROR
|
||||
|
||||
DIALOG = xbmcgui.Dialog()
|
||||
|
||||
COUNTRY_CODE = ADDON.getSettingString('country_code')
|
||||
DEFAULT_LANGUAGE = ADDON.getSettingString('language_code')
|
||||
FALLBACK_LANGUAGE = 'en'
|
||||
|
||||
CACHE = simplecache.SimpleCache()
|
||||
CACHE.enable_mem_cache = False
|
||||
CACHE.data_is_json = True
|
||||
CACHE_ENABLED = ADDON.getSettingBool('cache_enabled')
|
||||
CACHE_PREFIX = ADDON_ID + '_' + ADDON_VERSION + '_' + DEFAULT_LANGUAGE + COUNTRY_CODE + '_'
|
||||
|
||||
#TIMEZONE = 'US/Alaska'
|
||||
TIMEZONE = 'local'
|
||||
|
||||
########################
|
||||
|
||||
def log(txt,loglevel=DEBUG,json=False,force=False):
|
||||
if force:
|
||||
loglevel = INFO
|
||||
|
||||
if json:
|
||||
txt = json_prettyprint(txt)
|
||||
|
||||
message = u'[ %s ] %s' % (ADDON_ID,txt)
|
||||
xbmc.log(msg=message, level=loglevel)
|
||||
|
||||
|
||||
def get_cache(key):
|
||||
if CACHE_ENABLED:
|
||||
return CACHE.get(CACHE_PREFIX + key)
|
||||
|
||||
|
||||
def write_cache(key,data,cache_time=336):
|
||||
if data:
|
||||
CACHE.set(CACHE_PREFIX + key, data, expiration=datetime.timedelta(hours=cache_time))
|
||||
|
||||
|
||||
def format_currency(integer):
|
||||
try:
|
||||
integer = int(integer)
|
||||
if integer < 1:
|
||||
raise Exception
|
||||
|
||||
return '{:,.0f}'.format(integer)
|
||||
|
||||
except Exception:
|
||||
return ''
|
||||
|
||||
|
||||
def sort_dict(items,key,reverse=False):
|
||||
''' Dummy date to always add planned or rumored items at the end of the list
|
||||
if no release date is available yet.
|
||||
'''
|
||||
for item in items:
|
||||
if not item.get(key):
|
||||
if not reverse:
|
||||
item[key] = '2999-01-01'
|
||||
else:
|
||||
item[key] = '1900-01-01'
|
||||
|
||||
return sorted(items, key=operator.itemgetter(key),reverse=reverse)
|
||||
|
||||
|
||||
def remove_quotes(label):
|
||||
if not label:
|
||||
return ''
|
||||
|
||||
if label.startswith("'") and label.endswith("'") and len(label) > 2:
|
||||
label = label[1:-1]
|
||||
if label.startswith('"') and label.endswith('"') and len(label) > 2:
|
||||
label = label[1:-1]
|
||||
|
||||
return label
|
||||
|
||||
|
||||
def get_date(date_time):
|
||||
date_time_obj = datetime.datetime.strptime(date_time, '%Y-%m-%d %H:%M:%S')
|
||||
date_obj = date_time_obj.date()
|
||||
|
||||
return date_obj
|
||||
|
||||
|
||||
def execute(cmd):
|
||||
xbmc.executebuiltin(cmd)
|
||||
|
||||
|
||||
def condition(condition):
|
||||
return xbmc.getCondVisibility(condition)
|
||||
|
||||
|
||||
def busydialog(close=False):
|
||||
if not close and not condition('Window.IsVisible(busydialognocancel)'):
|
||||
execute('ActivateWindow(busydialognocancel)')
|
||||
elif close:
|
||||
execute('Dialog.Close(busydialognocancel)')
|
||||
|
||||
|
||||
def textviewer(params):
|
||||
DIALOG.textviewer(remove_quotes(params.get('header', '')), remove_quotes(params.get('message', '')))
|
||||
|
||||
|
||||
def winprop(key,value=None,clear=False,window_id=10000):
|
||||
window = xbmcgui.Window(window_id)
|
||||
|
||||
if clear:
|
||||
window.clearProperty(key.replace('.json', '').replace('.bool', ''))
|
||||
|
||||
elif value is not None:
|
||||
|
||||
if key.endswith('.json'):
|
||||
key = key.replace('.json', '')
|
||||
value = json.dumps(value)
|
||||
|
||||
elif key.endswith('.bool'):
|
||||
key = key.replace('.bool', '')
|
||||
value = 'true' if value else 'false'
|
||||
|
||||
window.setProperty(key, value)
|
||||
|
||||
else:
|
||||
result = window.getProperty(key.replace('.json', '').replace('.bool', ''))
|
||||
|
||||
if result:
|
||||
if key.endswith('.json'):
|
||||
result = json.loads(result)
|
||||
elif key.endswith('.bool'):
|
||||
result = result in ('true', '1')
|
||||
|
||||
return result
|
||||
|
||||
def date_year(value):
|
||||
if not value:
|
||||
return value
|
||||
|
||||
try:
|
||||
year = str(arrow.get(value).year)
|
||||
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return year
|
||||
|
||||
def date_format(value,date='short'):
|
||||
if not value:
|
||||
return value
|
||||
|
||||
try:
|
||||
date_time = arrow.get(value)
|
||||
value = date_time.strftime(xbmc.getRegion('date%s' % date))
|
||||
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return value
|
||||
|
||||
|
||||
def date_delta(date):
|
||||
date = arrow.get(date, 'YYYY-MM-DD').date()
|
||||
return date - datetime.date.today()
|
||||
|
||||
|
||||
def date_weekday(date=None):
|
||||
if not date:
|
||||
utc = arrow.utcnow()
|
||||
date = utc.to(TIMEZONE).date()
|
||||
|
||||
try:
|
||||
weekdays = (xbmc.getLocalizedString(11), xbmc.getLocalizedString(12), xbmc.getLocalizedString(13), xbmc.getLocalizedString(14), xbmc.getLocalizedString(15), xbmc.getLocalizedString(16), xbmc.getLocalizedString(17))
|
||||
date = arrow.get(date).date()
|
||||
weekday = date.weekday()
|
||||
return weekdays[weekday], weekday
|
||||
|
||||
except Exception:
|
||||
return '', ''
|
||||
|
||||
|
||||
def utc_to_local(value):
|
||||
conv_date = arrow.get(value).to(TIMEZONE)
|
||||
conv_date_str = conv_date.strftime('%Y-%m-%d')
|
||||
|
||||
if xbmc.getRegion('time').startswith('%I'):
|
||||
conv_time_str = conv_date.strftime('%I:%M %p')
|
||||
else:
|
||||
conv_time_str = conv_date.strftime('%H:%M')
|
||||
|
||||
return conv_date_str, conv_time_str
|
||||
|
||||
|
||||
def get_bool(value,string='true'):
|
||||
try:
|
||||
if value.lower() == string:
|
||||
return True
|
||||
raise Exception
|
||||
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def get_joined_items(item):
|
||||
if len(item) > 0:
|
||||
item = ' / '.join(item)
|
||||
else:
|
||||
item = ''
|
||||
return item
|
||||
|
||||
|
||||
def get_first_item(item):
|
||||
if len(item) > 0:
|
||||
item = item[0]
|
||||
else:
|
||||
item = ''
|
||||
|
||||
return item
|
||||
|
||||
|
||||
def json_call(method,properties=None,sort=None,query_filter=None,limit=None,params=None,item=None,options=None,limits=None):
|
||||
json_string = {'jsonrpc': '2.0', 'id': 1, 'method': method, 'params': {}}
|
||||
|
||||
if properties is not None:
|
||||
json_string['params']['properties'] = properties
|
||||
|
||||
if limit is not None:
|
||||
json_string['params']['limits'] = {'start': 0, 'end': int(limit)}
|
||||
|
||||
if sort is not None:
|
||||
json_string['params']['sort'] = sort
|
||||
|
||||
if query_filter is not None:
|
||||
json_string['params']['filter'] = query_filter
|
||||
|
||||
if options is not None:
|
||||
json_string['params']['options'] = options
|
||||
|
||||
if limits is not None:
|
||||
json_string['params']['limits'] = limits
|
||||
|
||||
if item is not None:
|
||||
json_string['params']['item'] = item
|
||||
|
||||
if params is not None:
|
||||
json_string['params'].update(params)
|
||||
|
||||
json_string = json.dumps(json_string)
|
||||
|
||||
result = xbmc.executeJSONRPC(json_string)
|
||||
|
||||
''' Python 2 compatibility
|
||||
'''
|
||||
try:
|
||||
result = unicode(result, 'utf-8', errors='ignore')
|
||||
except NameError:
|
||||
pass
|
||||
|
||||
return json.loads(result)
|
||||
|
||||
|
||||
def set_plugincontent(content=None,category=None):
|
||||
if category:
|
||||
xbmcplugin.setPluginCategory(int(sys.argv[1]), category)
|
||||
if content:
|
||||
xbmcplugin.setContent(int(sys.argv[1]), content)
|
||||
|
||||
|
||||
def json_prettyprint(string):
|
||||
return json.dumps(string, sort_keys=True, indent=4, separators=(',', ': '))
|
||||
|
||||
|
||||
def urljoin(*args):
|
||||
''' Joins given arguments into an url. Trailing but not leading slashes are
|
||||
stripped for each argument.
|
||||
'''
|
||||
arglist = [arg for arg in args if arg is not None]
|
||||
return '/'.join(map(lambda x: str(x).rstrip('/'), arglist))
|
||||
|
||||
|
||||
def md5hash(value):
|
||||
value = str(value).encode()
|
||||
return hashlib.md5(value).hexdigest()
|
||||
Reference in New Issue
Block a user