DB Working but slow
This commit is contained in:
66
main.py
66
main.py
@ -20,6 +20,8 @@ from collections import namedtuple
|
|||||||
sys.path.append(xbmcvfs.translatePath(os.path.join(xbmcaddon.Addon("plugin.audio.subsonic").getAddonInfo("path"), "lib")))
|
sys.path.append(xbmcvfs.translatePath(os.path.join(xbmcaddon.Addon("plugin.audio.subsonic").getAddonInfo("path"), "lib")))
|
||||||
|
|
||||||
import libsonic
|
import libsonic
|
||||||
|
#from lib.dbutils import SQLiteDatabase
|
||||||
|
import lib.dbutils
|
||||||
|
|
||||||
from simpleplugin import Plugin
|
from simpleplugin import Plugin
|
||||||
from simpleplugin import Addon
|
from simpleplugin import Addon
|
||||||
@ -27,9 +29,14 @@ from simpleplugin import Addon
|
|||||||
# Create plugin instance
|
# Create plugin instance
|
||||||
plugin = Plugin()
|
plugin = Plugin()
|
||||||
|
|
||||||
|
db = None
|
||||||
connection = None
|
connection = None
|
||||||
|
|
||||||
cachetime = int(Addon().get_setting('cachetime'))
|
cachetime = int(Addon().get_setting('cachetime'))
|
||||||
|
|
||||||
|
db_filename = "subsonic_sqlite.db"
|
||||||
|
db_path = os.path.join(plugin.profile_dir, db_filename)
|
||||||
|
|
||||||
local_starred = set({})
|
local_starred = set({})
|
||||||
ListContext = namedtuple('ListContext', ['listing', 'succeeded','update_listing', 'cache_to_disk','sort_methods', 'view_mode','content', 'category'])
|
ListContext = namedtuple('ListContext', ['listing', 'succeeded','update_listing', 'cache_to_disk','sort_methods', 'view_mode','content', 'category'])
|
||||||
PlayContext = namedtuple('PlayContext', ['path', 'play_item', 'succeeded'])
|
PlayContext = namedtuple('PlayContext', ['path', 'play_item', 'succeeded'])
|
||||||
@ -748,34 +755,35 @@ def get_entry_playlist(item,params):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def get_artist_info(artist_id, forced=False):
|
def get_artist_info(artist_id, forced=False):
|
||||||
print("Updating artist info for id: %s"%(artist_id))
|
db = get_db()
|
||||||
popup("Updating artist info\nplease wait")
|
|
||||||
last_update = 0
|
|
||||||
artist_info = {}
|
artist_info = {}
|
||||||
cache_file = 'ar-%s'%hashlib.md5(artist_id.encode('utf-8')).hexdigest()
|
print("Retreiving artist info for id: %s"%(artist_id))
|
||||||
with plugin.get_storage(cache_file) as storage:
|
popup("Updating artist info\nplease wait")
|
||||||
try:
|
try:
|
||||||
last_update = storage['updated']
|
artist_record = db.get_artist_info(artist_id)
|
||||||
except KeyError as e:
|
print("Outer %s"%len(artist_record))
|
||||||
plugin.log("Artist keyerror, is this a new cache file? %s"%cache_file)
|
if(len(artist_record)==0):
|
||||||
if(time.time()-last_update>(random.randint(1,111)*360) or forced):
|
print("Empty record, getting data for %s"%artist_id)
|
||||||
plugin.log("Artist cache expired, updating %s elapsed vs random %s forced %s"%(int(time.time()-last_update),(random.randint(1,111)*3600), forced))
|
artist_info = json.dumps(connection.getArtistInfo2(artist_id).get('artistInfo2'))
|
||||||
try:
|
print("Adding to DB artist info: %s"%artist_info)
|
||||||
artist_info = connection.getArtistInfo2(artist_id).get('artistInfo2')
|
if(db.update_artist(artist_id, artist_info, time.time())):
|
||||||
storage['artist_info'] = artist_info
|
plugin.log("Success")
|
||||||
storage['updated']=time.time()
|
else:
|
||||||
except AttributeError as e:
|
plugin.log("Failed")
|
||||||
plugin.log("Attribute error, probably couldn't find any info")
|
artist_record = db.get_artist_info(artist_id)
|
||||||
else:
|
artist_info = json.loads(artist_record[0][1])
|
||||||
print("Cache ok for %s retrieving"%artist_id)
|
last_update = artist_record[0][2]
|
||||||
artist_info = storage['artist_info']
|
plugin.log("Artist info: %s"%artist_info)
|
||||||
|
plugin.log("Last update: %s"%last_update)
|
||||||
|
except Exception as e:
|
||||||
|
print("Error get info from DB %s"%e)
|
||||||
return artist_info
|
return artist_info
|
||||||
|
|
||||||
def get_entry_artist(item,params):
|
def get_entry_artist(item,params):
|
||||||
image = connection.getCoverArtUrl(item.get('coverArt'))
|
image = connection.getCoverArtUrl(item.get('coverArt'))
|
||||||
#artist_info = get_artist_info(item.get('id'))
|
artist_info = get_artist_info(item.get('id'))
|
||||||
#artist_bio = artist_info.get('biography')
|
artist_bio = artist_info.get('biography')
|
||||||
#fanart = artist_info.get('largeImageUrl')
|
fanart = artist_info.get('largeImageUrl')
|
||||||
fanart = image
|
fanart = image
|
||||||
return {
|
return {
|
||||||
'label': get_starred_label(item.get('id'),item.get('name')),
|
'label': get_starred_label(item.get('id'),item.get('name')),
|
||||||
@ -795,7 +803,7 @@ def get_entry_artist(item,params):
|
|||||||
#'title': "testtitle",
|
#'title': "testtitle",
|
||||||
#'album': "testalbum",
|
#'album': "testalbum",
|
||||||
#'comment': "testcomment"
|
#'comment': "testcomment"
|
||||||
#'title': artist_bio
|
'title': artist_bio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1512,6 +1520,16 @@ def walk_tracks_starred():
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
yield from ()
|
yield from ()
|
||||||
|
|
||||||
|
def get_db():
|
||||||
|
global db_path
|
||||||
|
#global db
|
||||||
|
plugin.log("Getting DB %s"%db_path)
|
||||||
|
if 1:#try:
|
||||||
|
db = lib.dbutils.SQLiteDatabase(db_path)
|
||||||
|
#except Exception as e:
|
||||||
|
# plugin.log("Connecting to DB failed: %s"%e)
|
||||||
|
return db
|
||||||
|
|
||||||
# Start plugin from within Kodi.
|
# Start plugin from within Kodi.
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# Map actions
|
# Map actions
|
||||||
|
|||||||
Reference in New Issue
Block a user