diff --git a/platformcode/config.py b/platformcode/config.py index d7f79eda..f0a145eb 100644 --- a/platformcode/config.py +++ b/platformcode/config.py @@ -79,11 +79,16 @@ def get_platform(full_version=False): '13': 'MyVideos78.db', '14': 'MyVideos90.db', '15': 'MyVideos93.db', '16': 'MyVideos99.db', '17': 'MyVideos107.db', '18': 'MyVideos116.db', '19': 'MyVideos119.db', '20': 'MyVideos120.db'} + view_db = {'10': 'ViewModes1.db', '11': 'ViewModes4.db', '12': 'ViewModes4.db', + '13': 'ViewModes6.db', '14': 'ViewModes6.db', '15': 'ViewModes6.db', + '16': 'ViewModes6.db', '17': 'ViewModes6.db', '18': 'ViewModes6.db', + '19': 'ViewModes6.db', '20': 'ViewModes6.db'} num_version = xbmc.getInfoLabel('System.BuildVersion') num_version = re.match("\d+\.\d+", num_version).group(0) ret['name_version'] = codename.get(num_version.split('.')[0], num_version) ret['video_db'] = video_db.get(num_version.split('.')[0], "") + ret['view_db'] = view_db.get(num_version.split('.')[0], "") ret['num_version'] = float(num_version) if ret['num_version'] < 14: ret['platform'] = "xbmc-" + ret['name_version'] @@ -443,3 +448,9 @@ def get_online_server_thumb(server): def get_language(): return get_localized_string(20001) + +def get_skin(): + import xbmc + from core import jsontools + js = '{"jsonrpc": "2.0", "method": "Settings.GetSettingValue", "params": {"setting": "lookandfeel.skin"}, "id": 1 }' + return jsontools.load(xbmc.executeJSONRPC(js)).get('result', {}).get('value') diff --git a/platformcode/platformtools.py b/platformcode/platformtools.py index d0dab3d8..2b7194c0 100644 --- a/platformcode/platformtools.py +++ b/platformcode/platformtools.py @@ -331,6 +331,9 @@ def render_items(itemlist, parent_item): itemlist.append(Item(title=config.get_localized_string(60347), thumbnail=thumb('nofolder'))) mode, Type = get_view_mode(itemlist[0], parent_item) + # from core.support import dbg;dbg() + if mode: + set_view_mode(parent_item.tourl(), mode) dirItems = [] @@ -402,7 +405,6 @@ def render_items(itemlist, parent_item): xbmcplugin.addDirectoryItems(_handle, dirItems) if Type: xbmcplugin.setContent(handle=int(sys.argv[1]), content=Type) - if mode: xbmc.executebuiltin('Container.SetViewMode(%s)' % mode) if parent_item.sorted: if parent_item.sorted == 'year': xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_DATE) @@ -423,9 +425,9 @@ def render_items(itemlist, parent_item): xbmcplugin.endOfDirectory(_handle, succeeded=True, updateListing=False, cacheToDisc= True) # if parent_item.action in ['news', 'search', 'new_search', 'now_on_tv'] else False) - if mode: - xbmc.sleep(50) - xbmc.executebuiltin('Container.SetViewMode(%s)' % mode) + # if mode: + # xbmc.sleep(50) + # xbmc.executebuiltin('Container.SetViewMode(%s)' % mode) from core import db; db.close() logger.debug('END renderItems') @@ -533,6 +535,64 @@ def get_view_mode(item, parent_item): return None, None +def set_view_mode(url, mode): + import re + find = re.findall('(%\d\w)', url, flags=re.DOTALL) + for f in find: + url = url.replace(f, f.lower()) + + def get_connection(): + from core import filetools + + file_db = "" + + # We look for the archive of the video database according to the version of kodi + view_db = config.get_platform(True)['view_db'] + if view_db: + file_db = filetools.join(xbmc.translatePath("special://userdata/Database"), view_db) + + # alternative method to locate the database + if not file_db or not filetools.exists(file_db): + file_db = "" + for f in filetools.listdir(xbmc.translatePath("special://userdata/Database")): + path_f = filetools.join(xbmc.translatePath("special://userdata/Database"), f) + + if filetools.isfile(path_f) and f.lower().startswith('viewmodes') and f.lower().endswith('.db'): + file_db = path_f + break + try: + import sqlite3 + return sqlite3.connect(file_db) + except: + return None + + def execute_sql(conn, sql): + cursor = conn.cursor() + cursor.execute(sql) + conn.commit() + + return cursor.fetchall() + + conn = get_connection() + if conn: + skin_name = config.get_skin() + try: + sql = 'select idView from view where (path="{}?{}" and skin="{}")'.format(sys.argv[0], url, skin_name) + records = execute_sql(conn, sql) + if records: + # from core.support import dbg;dbg() + sql = 'update view set viewMode={} where idView={}'.format(mode, records[0][0]) + records = execute_sql(conn, sql) + else: + # from core.support import dbg;dbg() + sql = 'INSERT INTO view (window, path, viewMode, sortMethod, sortOrder, sortAttributes, skin) VALUES ' \ + '(10025, "{}?{}", {}, 0, 1, 0, "{}")'.format(sys.argv[0], url, mode, skin_name) + records = execute_sql(conn, sql) + except: + pass + conn.close() + + def set_infolabels(listitem, item, player=False): """ Method to pass the information to the listitem (see tmdb.set_InfoLabels())