PlexKodiConnect/resources/lib/plexdb_functions.py

403 lines
11 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2016-02-12 00:03:04 +11:00
###############################################################################
2016-08-30 04:00:16 +10:00
from utils import kodiSQL
import logging
2016-08-30 04:00:16 +10:00
###############################################################################
2016-08-30 04:00:16 +10:00
log = logging.getLogger("PLEX."+__name__)
2016-02-12 00:03:04 +11:00
###############################################################################
class Get_Plex_DB():
2016-02-10 21:00:32 +11:00
"""
Usage: with Get_Plex_DB() as plexcursor:
plexcursor.do_something()
2016-02-10 21:00:32 +11:00
On exiting "with" (no matter what), commits get automatically committed
and the db gets closed
"""
def __enter__(self):
self.plexconn = kodiSQL('plex')
self.plexcursor = Plex_DB_Functions(self.plexconn.cursor())
return self.plexcursor
2016-02-10 21:00:32 +11:00
def __exit__(self, type, value, traceback):
self.plexconn.commit()
self.plexconn.close()
2016-02-10 21:00:32 +11:00
class Plex_DB_Functions():
def __init__(self, plexcursor):
self.plexcursor = plexcursor
def getViews(self):
views = []
query = ' '.join((
"SELECT view_id",
"FROM view"
))
self.plexcursor.execute(query)
rows = self.plexcursor.fetchall()
for row in rows:
views.append(row[0])
return views
2016-01-28 06:41:28 +11:00
def getAllViewInfo(self):
plexcursor = self.plexcursor
2016-01-28 06:41:28 +11:00
views = []
query = ' '.join((
"SELECT view_id, view_name, media_type",
"FROM view"
))
plexcursor.execute(query)
rows = plexcursor.fetchall()
2016-01-28 06:41:28 +11:00
for row in rows:
views.append({'id': row[0],
'name': row[1],
'itemtype': row[2]})
return views
def getView_byId(self, viewid):
query = ' '.join((
"SELECT view_name, media_type, kodi_tagid",
"FROM view",
"WHERE view_id = ?"
))
self.plexcursor.execute(query, (viewid,))
view = self.plexcursor.fetchone()
return view
def getView_byType(self, mediatype):
views = []
query = ' '.join((
2016-01-28 06:41:28 +11:00
"SELECT view_id, view_name, media_type",
"FROM view",
"WHERE media_type = ?"
))
self.plexcursor.execute(query, (mediatype,))
rows = self.plexcursor.fetchall()
for row in rows:
views.append({
'id': row[0],
2016-01-28 06:41:28 +11:00
'name': row[1],
'itemtype': row[2]
})
return views
def getView_byName(self, tagname):
query = ' '.join((
"SELECT view_id",
"FROM view",
"WHERE view_name = ?"
))
self.plexcursor.execute(query, (tagname,))
try:
view = self.plexcursor.fetchone()[0]
except TypeError:
view = None
return view
2016-05-31 16:06:42 +10:00
def addView(self, plexid, name, mediatype, tagid):
query = (
'''
INSERT INTO view(
view_id, view_name, media_type, kodi_tagid)
VALUES (?, ?, ?, ?)
'''
)
self.plexcursor.execute(query, (plexid, name, mediatype, tagid))
def updateView(self, name, tagid, mediafolderid):
query = ' '.join((
"UPDATE view",
"SET view_name = ?, kodi_tagid = ?",
"WHERE view_id = ?"
))
self.plexcursor.execute(query, (name, tagid, mediafolderid))
def removeView(self, viewid):
query = ' '.join((
"DELETE FROM view",
"WHERE view_id = ?"
))
self.plexcursor.execute(query, (viewid,))
2016-03-18 02:03:02 +11:00
def getItem_byFileId(self, fileId, kodiType):
2016-03-12 00:42:14 +11:00
"""
2016-03-18 02:03:02 +11:00
Returns the Plex itemId by using the Kodi fileId. VIDEO ONLY
kodiType: 'movie', 'episode', ...
"""
query = ' '.join((
"SELECT emby_id",
"FROM emby",
"WHERE kodi_fileid = ? AND media_type = ?"
))
try:
self.plexcursor.execute(query, (fileId, kodiType))
item = self.plexcursor.fetchone()[0]
2016-03-18 02:03:02 +11:00
return item
except:
return None
def getMusicItem_byFileId(self, fileId, kodiType):
"""
Returns the Plex itemId by using the Kodi fileId. MUSIC ONLY
kodiType: 'song'
2016-03-12 00:42:14 +11:00
"""
query = ' '.join((
"SELECT emby_id",
"FROM emby",
2016-03-18 02:03:02 +11:00
"WHERE kodi_id = ? AND media_type = ?"
2016-03-12 00:42:14 +11:00
))
try:
self.plexcursor.execute(query, (fileId, kodiType))
item = self.plexcursor.fetchone()[0]
2016-03-12 00:42:14 +11:00
return item
except:
return None
2016-05-31 16:06:42 +10:00
def getItem_byId(self, plexid):
query = ' '.join((
"SELECT kodi_id, kodi_fileid, kodi_pathid, parent_id, media_type, emby_type",
"FROM emby",
"WHERE emby_id = ?"
))
try:
self.plexcursor.execute(query, (plexid,))
item = self.plexcursor.fetchone()
return item
except: return None
2016-05-31 16:06:42 +10:00
def getItem_byWildId(self, plexid):
2016-03-16 22:13:47 +11:00
query = ' '.join((
"SELECT kodi_id, media_type",
"FROM emby",
"WHERE emby_id LIKE ?"
))
self.plexcursor.execute(query, (plexid+"%",))
return self.plexcursor.fetchall()
2016-03-16 22:13:47 +11:00
def getItem_byView(self, mediafolderid):
query = ' '.join((
"SELECT kodi_id",
"FROM emby",
"WHERE media_folder = ?"
))
self.plexcursor.execute(query, (mediafolderid,))
return self.plexcursor.fetchall()
def getPlexId(self, kodiid, mediatype):
2016-03-12 00:42:14 +11:00
"""
Returns the Plex ID usind the Kodiid. Result:
(Plex Id, Parent's Plex Id)
"""
query = ' '.join((
"SELECT emby_id, parent_id",
"FROM emby",
"WHERE kodi_id = ? AND media_type = ?"
2016-03-12 00:42:14 +11:00
))
try:
self.plexcursor.execute(query, (kodiid, mediatype))
item = self.plexcursor.fetchone()
2016-03-12 00:42:14 +11:00
return item
except:
return None
def getItem_byKodiId(self, kodiid, mediatype):
query = ' '.join((
"SELECT emby_id, parent_id",
"FROM emby",
"WHERE kodi_id = ?",
"AND media_type = ?"
))
self.plexcursor.execute(query, (kodiid, mediatype,))
return self.plexcursor.fetchone()
def getItem_byParentId(self, parentid, mediatype):
query = ' '.join((
"SELECT emby_id, kodi_id, kodi_fileid",
"FROM emby",
"WHERE parent_id = ?",
"AND media_type = ?"
))
self.plexcursor.execute(query, (parentid, mediatype,))
return self.plexcursor.fetchall()
def getItemId_byParentId(self, parentid, mediatype):
query = ' '.join((
"SELECT emby_id, kodi_id",
"FROM emby",
"WHERE parent_id = ?",
"AND media_type = ?"
))
self.plexcursor.execute(query, (parentid, mediatype,))
return self.plexcursor.fetchall()
def getChecksum(self, mediatype):
query = ' '.join((
"SELECT emby_id, checksum",
"FROM emby",
"WHERE emby_type = ?"
))
self.plexcursor.execute(query, (mediatype,))
return self.plexcursor.fetchall()
2016-05-31 16:06:42 +10:00
def getMediaType_byId(self, plexid):
query = ' '.join((
"SELECT emby_type",
"FROM emby",
"WHERE emby_id = ?"
))
self.plexcursor.execute(query, (plexid,))
try:
itemtype = self.plexcursor.fetchone()[0]
except TypeError:
itemtype = None
return itemtype
def sortby_mediaType(self, itemids, unsorted=True):
sorted_items = {}
for itemid in itemids:
mediatype = self.getMediaType_byId(itemid)
if mediatype:
sorted_items.setdefault(mediatype, []).append(itemid)
elif unsorted:
sorted_items.setdefault('Unsorted', []).append(itemid)
return sorted_items
2016-05-31 16:06:42 +10:00
def addReference(self, plexid, kodiid, embytype, mediatype, fileid=None, pathid=None,
parentid=None, checksum=None, mediafolderid=None):
query = (
'''
INSERT OR REPLACE INTO emby(
emby_id, kodi_id, kodi_fileid, kodi_pathid, emby_type, media_type, parent_id,
checksum, media_folder)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
'''
)
self.plexcursor.execute(query, (plexid, kodiid, fileid, pathid, embytype, mediatype,
parentid, checksum, mediafolderid))
2016-05-31 16:06:42 +10:00
def updateReference(self, plexid, checksum):
query = "UPDATE emby SET checksum = ? WHERE emby_id = ?"
self.plexcursor.execute(query, (checksum, plexid))
2016-05-31 16:06:42 +10:00
def updateParentId(self, plexid, parent_kodiid):
query = "UPDATE emby SET parent_id = ? WHERE emby_id = ?"
self.plexcursor.execute(query, (parent_kodiid, plexid))
def removeItems_byParentId(self, parent_kodiid, mediatype):
query = ' '.join((
"DELETE FROM emby",
"WHERE parent_id = ?",
"AND media_type = ?"
))
self.plexcursor.execute(query, (parent_kodiid, mediatype,))
def removeItem_byKodiId(self, kodiid, mediatype):
query = ' '.join((
"DELETE FROM emby",
"WHERE kodi_id = ?",
"AND media_type = ?"
))
self.plexcursor.execute(query, (kodiid, mediatype,))
2016-05-31 16:06:42 +10:00
def removeItem(self, plexid):
query = "DELETE FROM emby WHERE emby_id = ?"
self.plexcursor.execute(query, (plexid,))
2016-03-16 22:13:47 +11:00
2016-05-31 16:06:42 +10:00
def removeWildItem(self, plexid):
2016-03-16 22:13:47 +11:00
query = "DELETE FROM emby WHERE emby_id LIKE ?"
self.plexcursor.execute(query, (plexid+"%",))
def itemsByType(self, plextype):
"""
Returns a list of dictionaries for all Kodi DB items present for
plextype. One dict is of the type
{
'plexId': the Plex id
'kodiId': the Kodi id
'kodi_type': e.g. 'movie', 'tvshow'
'plex_type': e.g. 'Movie', 'Series', the input plextype
}
"""
query = ' '.join((
"SELECT emby_id, kodi_id, media_type",
"FROM emby",
"WHERE emby_type = ?",
))
self.plexcursor.execute(query, (plextype, ))
result = []
for row in self.plexcursor.fetchall():
result.append({
'plexId': row[0],
'kodiId': row[1],
'kodi_type': row[2],
'plex_type': plextype
})
return result