Riutilizzo connessione al db di kodi
This commit is contained in:
@@ -3,10 +3,11 @@ import xbmc, os, math
|
||||
from core import filetools, support
|
||||
from core.videolibrarydb import videolibrarydb
|
||||
from platformcode import config, logger, platformtools
|
||||
from platformcode.xbmc_videolibrary import execute_sql_kodi, get_data
|
||||
from platformcode.xbmc_videolibrary import execute_sql_kodi, get_data, get_file_db
|
||||
from time import time, strftime, localtime
|
||||
import sqlite3
|
||||
|
||||
|
||||
conn = sqlite3.connect(get_file_db())
|
||||
|
||||
|
||||
class addVideo(object):
|
||||
@@ -62,56 +63,57 @@ class addVideo(object):
|
||||
payload = {
|
||||
"jsonrpc": "2.0",
|
||||
"method": "VideoLibrary.Scan",
|
||||
"directory" : self.strPath,
|
||||
"directory": self.strPath,
|
||||
"id": 1
|
||||
}
|
||||
get_data(payload)
|
||||
|
||||
|
||||
conn.close()
|
||||
|
||||
def get_id(self):
|
||||
Type = 'id' + self.item.contentType.replace('tv','').capitalize()
|
||||
sql = 'select {} from {}_view where (uniqueid_value like "{}" and uniqueid_type like "kod")'.format(Type, self.item.contentType, self.item.videolibrary_id)
|
||||
n, records = execute_sql_kodi(sql)
|
||||
n, records = execute_sql_kodi(sql, conn=conn)
|
||||
if n: return True, records[0][0]
|
||||
|
||||
sql = 'SELECT MAX({}) FROM {}_view'.format(Type, self.item.contentType)
|
||||
nun_records, records = execute_sql_kodi(sql)
|
||||
nun_records, records = execute_sql_kodi(sql, conn=conn)
|
||||
if nun_records == 1: _id = records[0][0] + 1
|
||||
else: _id = 1
|
||||
return False, _id
|
||||
|
||||
def set_path(self):
|
||||
sql = 'select idPath from path where (strPath like "{}")'.format(self.parentPath)
|
||||
nun_records, records = execute_sql_kodi(sql)
|
||||
nun_records, records = execute_sql_kodi(sql, conn=conn)
|
||||
if records:
|
||||
self.idParentPath = records[0][0]
|
||||
else:
|
||||
return
|
||||
|
||||
sql = 'select idPath from path where (strPath like "{}")'.format(self.strPath)
|
||||
nun_records, records = execute_sql_kodi(sql)
|
||||
nun_records, records = execute_sql_kodi(sql, conn=conn)
|
||||
if records:
|
||||
self.idPath = records[0][0]
|
||||
self.idPath = records[0][0]
|
||||
else:
|
||||
self.idPath = get_id('idPath', 'path')
|
||||
|
||||
sql = 'INSERT OR IGNORE INTO path (idPath, strPath, dateAdded, idParentPath, noUpdate) VALUES ( ?, ?, ?, ?, ?)'
|
||||
params = (self.idPath, self.strPath, self.date, self.idParentPath, 1)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
def set_sets(self):
|
||||
self.idSet = None
|
||||
if self.info.get('set'):
|
||||
sql = 'SELECT idSet from sets where (strSet like "{}")'.format(self.info.get('set'))
|
||||
# params = self.info.get('set')
|
||||
n, records = execute_sql_kodi(sql)
|
||||
n, records = execute_sql_kodi(sql, conn=conn)
|
||||
if records:
|
||||
self.idSet = records[0][0]
|
||||
else:
|
||||
self.idSet = get_id('idSet', 'sets')
|
||||
sql = 'INSERT OR IGNORE INTO sets (idSet, strSet, strOvervieW) VALUES ( ?, ?, ?)'
|
||||
params = (self.idSet, self.info.get('set'), self.info.get('setoverview'))
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
if self.info.get('setposters'):
|
||||
self.art.append({'media_id':self.idSet, 'media_type': 'set', 'type':'poster', 'url':self.info.get('setposters')[0]})
|
||||
if self.info.get('setfanarts'):
|
||||
@@ -125,7 +127,7 @@ class addVideo(object):
|
||||
else:
|
||||
sql = 'INSERT OR IGNORE INTO files (idFile, idPath, strFilename, dateAdded) VALUES ( ?, ?, ?, ?)'
|
||||
params = (self.idFile, self.idPath, self.strFilename, self.date)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
def set_rating(self):
|
||||
self.rating_id = get_id('rating_id', 'rating')
|
||||
@@ -134,7 +136,7 @@ class addVideo(object):
|
||||
media_type = self.item.contentType
|
||||
sql = 'INSERT OR IGNORE INTO rating (rating_id, media_id, media_type, rating_type, rating, votes) VALUES ( ?, ?, ?, ?, ?, ?)'
|
||||
params = (self.rating_id, self.VideoId, media_type, 'tmdb', rating, votes)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
def set_ids(self):
|
||||
self.uniqueID = get_id('uniqueid_id', 'uniqueid')
|
||||
@@ -142,14 +144,14 @@ class addVideo(object):
|
||||
self.uniqueIDType = 'kod'
|
||||
sql = 'INSERT OR IGNORE INTO uniqueid (uniqueid_id, media_id, media_type, value, type) VALUES ( ?, ?, ?, ?, ?)'
|
||||
params = [(self.uniqueID, self.VideoId, self.item.contentType, self.uniqueIdValue, self.uniqueIDType)]
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
i = self.uniqueID + 1
|
||||
for _id in ['imdb', 'tmdb', 'tvdb']:
|
||||
if _id +'_id' in self.info:
|
||||
params.append((i, self.VideoId, self.item.contentType, self.info[_id + '_id'], _id))
|
||||
if params:
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
def set_actors(self):
|
||||
actor_id = get_id('actor_id', 'actor')
|
||||
@@ -157,7 +159,7 @@ class addVideo(object):
|
||||
if actors: actors.sort(key=lambda a: a[3])
|
||||
l_actors = []
|
||||
sql = 'select actor_id, name from actor'
|
||||
n, current_actors = execute_sql_kodi(sql)
|
||||
n, current_actors = execute_sql_kodi(sql, conn=conn)
|
||||
if current_actors: l_actors = [a[1] for a in current_actors]
|
||||
actor_params = []
|
||||
actor_link_params = []
|
||||
@@ -230,51 +232,51 @@ class addVideo(object):
|
||||
if countrys:
|
||||
for country in countrys:
|
||||
sql = 'select country_id from country where name = "{}"'.format(country)
|
||||
n, records = execute_sql_kodi(sql)
|
||||
n, records = execute_sql_kodi(sql, conn=conn)
|
||||
if records:
|
||||
_id = records[0][0]
|
||||
else:
|
||||
_id = get_id('country_id', 'country')
|
||||
sql = 'INSERT OR IGNORE INTO country (country_id, name) VALUES (?, ?)'
|
||||
params = (_id, country)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
sql = 'INSERT OR IGNORE INTO country_link (country_id, media_id, media_type) VALUES (?, ?, ?)'
|
||||
params = (_id, self.VideoId, self.item.contentType)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
def set_genre(self):
|
||||
genres = self.info.get('genre','').split(', ')
|
||||
if genres:
|
||||
for genre in genres:
|
||||
sql = 'select genre_id from genre where name = "{}"'.format(genre)
|
||||
n, records = execute_sql_kodi(sql)
|
||||
n, records = execute_sql_kodi(sql, conn=conn)
|
||||
if records:
|
||||
_id = records[0][0]
|
||||
else:
|
||||
_id = get_id('genre_id', 'genre')
|
||||
sql = 'INSERT OR IGNORE INTO genre (genre_id, name) VALUES (?, ?)'
|
||||
params = (_id, genre)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
sql = 'INSERT OR IGNORE INTO genre_link (genre_id, media_id, media_type) VALUES (?, ?, ?)'
|
||||
params = (_id, self.VideoId, self.item.contentType)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
def set_studio(self):
|
||||
studios = self.info.get('studio','').split(', ')
|
||||
if studios:
|
||||
for studio in studios:
|
||||
sql = 'select studio_id from studio where name = "{}"'.format(studio)
|
||||
n, records = execute_sql_kodi(sql)
|
||||
n, records = execute_sql_kodi(sql, conn=conn)
|
||||
if records:
|
||||
_id = records[0][0]
|
||||
else:
|
||||
_id = get_id('studio_id', 'studio')
|
||||
sql = 'INSERT OR IGNORE INTO studio (studio_id, name) VALUES (?, ?)'
|
||||
params = (_id, studio)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
sql = 'INSERT OR IGNORE INTO studio_link (studio_id, media_id, media_type) VALUES (?, ?, ?)'
|
||||
params = (_id, self.VideoId, self.item.contentType)
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
def set_movie(self):
|
||||
posters, fanarts = get_images(self.item)
|
||||
@@ -302,7 +304,7 @@ class addVideo(object):
|
||||
self.idPath, # c23
|
||||
self.idSet, # idSet
|
||||
self.info.get('premiered')) # premiered
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
if self.item.thumbnail:
|
||||
self.art.append({'media_id':self.VideoId, 'media_type': 'movie', 'type':'poster', 'url':self.item.thumbnail})
|
||||
if self.item.fanart:
|
||||
@@ -341,14 +343,14 @@ class addVideo(object):
|
||||
self.idPath, # c23
|
||||
self.idSet, # idSet
|
||||
self.info.get('premiered')) # premiered
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
def set_art(self):
|
||||
params = []
|
||||
art_urls = []
|
||||
_id = get_id('art_id', 'art')
|
||||
sql = 'select media_id, media_type, type from art'
|
||||
n, records = execute_sql_kodi(sql)
|
||||
n, records = execute_sql_kodi(sql, conn=conn)
|
||||
if records:
|
||||
art_urls = [[u[0], u[1], u[2]] for u in records]
|
||||
for art in self.art:
|
||||
@@ -357,7 +359,7 @@ class addVideo(object):
|
||||
_id += 1
|
||||
if params:
|
||||
sql = 'INSERT OR IGNORE INTO art (art_id, media_id, media_type, type, url) VALUES (?, ?, ?, ?, ?)'
|
||||
n, records = execute_sql_kodi(sql, params)
|
||||
n, records = execute_sql_kodi(sql, params, conn)
|
||||
|
||||
|
||||
def add_video(item):
|
||||
@@ -394,7 +396,7 @@ def process_path(path):
|
||||
|
||||
def get_id(column, table):
|
||||
sql = 'SELECT MAX({}) FROM {}'.format(column, table)
|
||||
nun_records, records = execute_sql_kodi(sql)
|
||||
nun_records, records = execute_sql_kodi(sql, conn=conn)
|
||||
if nun_records == 1: _id = records[0][0] + 1
|
||||
else: _id = 1
|
||||
return _id
|
||||
|
||||
@@ -506,7 +506,7 @@ def play_from_library(item):
|
||||
path = filetools.join(config.get_runtime_path(), 'servers', item.server.lower() + '.json')
|
||||
name = jsontools.load(open(path, "rb").read())['name']
|
||||
if name.startswith('@'): name = config.get_localized_string(int(name.replace('@','')))
|
||||
it = xbmcgui.ListItem('\n[B]%s[/B] %s - %s [%s]' % (name, quality, item.contentTitle, get_channel_parameters(item.contentChannel)['title']))
|
||||
it = xbmcgui.ListItem('\n[B]%s[/B] %s - %s [%s]' % (name, quality, item.contentTitle, get_channel_parameters(item.channel).get('title', '')))
|
||||
it.setArt({'thumb':item.thumbnail})
|
||||
options.append(it)
|
||||
else:
|
||||
|
||||
@@ -399,7 +399,7 @@ def set_watched_on_kod(data):
|
||||
season = records[0][0]
|
||||
seasons = videolibrarydb['seasons'].get(_id, {})
|
||||
item = seasons.get(season, None)
|
||||
item.all_ep
|
||||
# item.all_ep
|
||||
|
||||
else:
|
||||
# support.dbg()
|
||||
@@ -1170,21 +1170,11 @@ def check_db(path):
|
||||
return ret
|
||||
|
||||
|
||||
def execute_sql_kodi(sql, params=None):
|
||||
def get_file_db():
|
||||
"""
|
||||
Run sql query against kodi database
|
||||
@param sql: Valid sql query
|
||||
@type sql: str
|
||||
@return: Number of records modified or returned by the query
|
||||
@rtype nun_records: int
|
||||
@return: list with the query result
|
||||
@rtype records: list of tuples
|
||||
Return the path of MyVideos kodi db
|
||||
"""
|
||||
logger.debug()
|
||||
file_db = ""
|
||||
nun_records = 0
|
||||
records = None
|
||||
|
||||
file_db = ''
|
||||
# We look for the archive of the video database according to the version of kodi
|
||||
video_db = config.get_platform(True)['video_db']
|
||||
if video_db:
|
||||
@@ -1199,14 +1189,38 @@ def execute_sql_kodi(sql, params=None):
|
||||
if filetools.isfile(path_f) and f.lower().startswith('myvideos') and f.lower().endswith('.db'):
|
||||
file_db = path_f
|
||||
break
|
||||
return file_db
|
||||
|
||||
|
||||
def execute_sql_kodi(sql, params=None, conn=None):
|
||||
"""
|
||||
Run sql query against kodi database
|
||||
@param sql: Valid sql query
|
||||
@type sql: str
|
||||
@param params: Parameters to insert instead of ? in sql
|
||||
@type params: list, tuple
|
||||
@param conn: sqlite3 connection to use, reusing same one increase performance on multiple calls
|
||||
@type conn: sqlite3.Connection
|
||||
@return: Number of records modified or returned by the query
|
||||
@rtype nun_records: int
|
||||
@return: list with the query result
|
||||
@rtype records: list of tuples
|
||||
"""
|
||||
logger.debug()
|
||||
file_db = get_file_db()
|
||||
nun_records = 0
|
||||
records = None
|
||||
|
||||
if file_db:
|
||||
logger.debug("DB file: %s" % file_db)
|
||||
conn = None
|
||||
conn_internal = None
|
||||
try:
|
||||
import sqlite3
|
||||
conn = sqlite3.connect(file_db)
|
||||
cursor = conn.cursor()
|
||||
if not conn:
|
||||
import sqlite3
|
||||
conn_internal = sqlite3.connect(file_db)
|
||||
else:
|
||||
conn_internal = conn
|
||||
cursor = conn_internal.cursor()
|
||||
|
||||
logger.debug("Running sql: %s" % sql)
|
||||
if params:
|
||||
@@ -1216,7 +1230,7 @@ def execute_sql_kodi(sql, params=None):
|
||||
cursor.execute(sql, params)
|
||||
else:
|
||||
cursor.execute(sql)
|
||||
conn.commit()
|
||||
conn_internal.commit()
|
||||
|
||||
records = cursor.fetchall()
|
||||
if sql.lower().startswith("select"):
|
||||
@@ -1227,13 +1241,14 @@ def execute_sql_kodi(sql, params=None):
|
||||
else:
|
||||
nun_records = conn.total_changes
|
||||
|
||||
conn.close()
|
||||
if not conn:
|
||||
conn_internal.close()
|
||||
logger.debug("Query executed. Records: %s" % nun_records)
|
||||
|
||||
except:
|
||||
logger.error("Error executing sql query")
|
||||
if conn:
|
||||
conn.close()
|
||||
if not conn and conn_internal:
|
||||
conn_internal.close()
|
||||
|
||||
else:
|
||||
logger.debug("Database not found")
|
||||
|
||||
@@ -55,24 +55,10 @@ def search_paths(Id):
|
||||
|
||||
def execute_sql(sql):
|
||||
logger.debug()
|
||||
file_db = ""
|
||||
from platformcode.xbmc_videolibrary import get_file_db
|
||||
file_db = get_file_db()
|
||||
records = None
|
||||
|
||||
# We look for the archive of the video database according to the version of kodi
|
||||
video_db = config.get_platform(True)['video_db']
|
||||
if video_db:
|
||||
file_db = os.path.join(xbmc.translatePath("special://userdata/Database"), video_db)
|
||||
|
||||
# alternative method to locate the database
|
||||
if not file_db or not os.path.exists(file_db):
|
||||
file_db = ""
|
||||
for f in os.path.listdir(xbmc.translatePath("special://userdata/Database")):
|
||||
path_f = os.path.join(xbmc.translatePath("special://userdata/Database"), f)
|
||||
|
||||
if os.path.pathoos.pathols.isfile(path_f) and f.lower().startswith('myvideos') and f.lower().endswith('.db'):
|
||||
file_db = path_f
|
||||
break
|
||||
|
||||
if file_db:
|
||||
logger.debug("DB file: %s" % file_db)
|
||||
conn = None
|
||||
|
||||
Reference in New Issue
Block a user