Change emby to jellyfin in functions, variables etc.

This commit is contained in:
Claus Vium 2019-02-02 18:21:22 +01:00
parent 647636430f
commit 233192863a
39 changed files with 273 additions and 278 deletions

View file

@ -18,7 +18,6 @@ from downloader import TheVoid
from obj import Objects
from helper import _, playutils, api, window, settings, dialog, JSONRPC
from dialogs import resume
from emby import Emby
from utils import get_play_action
#################################################################################################

View file

@ -9,8 +9,8 @@ import urllib
import downloader as server
from obj import Objects
from kodi import Movies as KodiDb, queries as QU
from database import emby_db, queries as QUEM
from helper import api, catch, stop, validate, emby_item, library_check, values, settings, Local
from database import jellyfin_db, queries as QUEM
from helper import api, catch, stop, validate, jellyfin_item, library_check, values, settings, Local
##################################################################################################
@ -21,14 +21,14 @@ LOG = logging.getLogger("JELLYFIN."+__name__)
class Movies(KodiDb):
def __init__(self, server, embydb, videodb, direct_path):
def __init__(self, server, jellyfindb, videodb, direct_path):
self.server = server
self.emby = embydb
self.jellyfin = jellyfindb
self.video = videodb
self.direct_path = direct_path
self.emby_db = emby_db.EmbyDatabase(embydb.cursor)
self.jellyfin_db = jellyfin_db.JellyfinDatabase(jellyfindb.cursor)
self.objects = Objects()
self.item_ids = []
@ -46,7 +46,7 @@ class Movies(KodiDb):
return self.remove
@stop()
@emby_item()
@jellyfin_item()
@library_check()
def movie(self, item, e_item, library):
@ -146,7 +146,7 @@ class Movies(KodiDb):
obj['FileId'] = self.add_file(*values(obj, QU.add_file_obj))
self.add(*values(obj, QU.add_movie_obj))
self.emby_db.add_reference(*values(obj, QUEM.add_reference_movie_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_movie_obj))
LOG.info("ADD movie [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MovieId'], obj['Id'], obj['Title'])
def movie_update(self, obj):
@ -160,7 +160,7 @@ class Movies(KodiDb):
self.update_unique_id(*values(obj, QU.update_unique_id_movie_obj))
self.update(*values(obj, QU.update_movie_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE movie [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MovieId'], obj['Id'], obj['Title'])
def trailer(self, obj):
@ -203,7 +203,7 @@ class Movies(KodiDb):
@stop()
@emby_item()
@jellyfin_item()
def boxset(self, item, e_item):
''' If item does not exist, entry will be added.
@ -234,11 +234,11 @@ class Movies(KodiDb):
temp_obj['Movie'] = movie
temp_obj['MovieId'] = obj['Current'][temp_obj['Movie']]
self.remove_from_boxset(*values(temp_obj, QU.delete_movie_set_obj))
self.emby_db.update_parent_id(*values(temp_obj, QUEM.delete_parent_boxset_obj))
self.jellyfin_db.update_parent_id(*values(temp_obj, QUEM.delete_parent_boxset_obj))
LOG.info("DELETE from boxset [%s] %s: %s", temp_obj['SetId'], temp_obj['Title'], temp_obj['MovieId'])
self.artwork.add(obj['Artwork'], obj['SetId'], "set")
self.emby_db.add_reference(*values(obj, QUEM.add_reference_boxset_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_boxset_obj))
LOG.info("UPDATE boxset [%s] %s", obj['SetId'], obj['Title'])
def boxset_current(self, obj):
@ -246,7 +246,7 @@ class Movies(KodiDb):
''' Add or removes movies based on the current movies found in the boxset.
'''
try:
current = self.emby_db.get_item_id_by_parent_id(*values(obj, QUEM.get_item_id_by_parent_boxset_obj))
current = self.jellyfin_db.get_item_id_by_parent_id(*values(obj, QUEM.get_item_id_by_parent_boxset_obj))
movies = dict(current)
except ValueError:
movies = {}
@ -261,7 +261,7 @@ class Movies(KodiDb):
temp_obj['Id'] = movie['Id']
try:
temp_obj['MovieId'] = self.emby_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
temp_obj['MovieId'] = self.jellyfin_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
except TypeError:
LOG.info("Failed to process %s to boxset.", temp_obj['Title'])
@ -270,7 +270,7 @@ class Movies(KodiDb):
if temp_obj['Id'] not in obj['Current']:
self.set_boxset(*values(temp_obj, QU.update_movie_set_obj))
self.emby_db.update_parent_id(*values(temp_obj, QUEM.update_parent_movie_obj))
self.jellyfin_db.update_parent_id(*values(temp_obj, QUEM.update_parent_movie_obj))
LOG.info("ADD to boxset [%s/%s] %s: %s to boxset", temp_obj['SetId'], temp_obj['MovieId'], temp_obj['Title'], temp_obj['Id'])
else:
obj['Current'].pop(temp_obj['Id'])
@ -279,12 +279,12 @@ class Movies(KodiDb):
''' Special function to remove all existing boxsets.
'''
boxsets = self.emby_db.get_items_by_media('set')
boxsets = self.jellyfin_db.get_items_by_media('set')
for boxset in boxsets:
self.remove(boxset[0])
@stop()
@emby_item()
@jellyfin_item()
def userdata(self, item, e_item):
''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks
@ -313,11 +313,11 @@ class Movies(KodiDb):
LOG.debug("New resume point %s: %s", obj['Id'], obj['Resume'])
self.add_playstate(*values(obj, QU.add_bookmark_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("USERDATA movie [%s/%s] %s: %s", obj['FileId'], obj['MovieId'], obj['Id'], obj['Title'])
@stop()
@emby_item()
@jellyfin_item()
def remove(self, item_id, e_item):
''' Remove movieid, fileid, jellyfin reference.
@ -338,15 +338,15 @@ class Movies(KodiDb):
self.delete(*values(obj, QU.delete_movie_obj))
elif obj['Media'] == 'set':
for movie in self.emby_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_movie_obj)):
for movie in self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_movie_obj)):
temp_obj = dict(obj)
temp_obj['MovieId'] = movie[1]
temp_obj['Movie'] = movie[0]
self.remove_from_boxset(*values(temp_obj, QU.delete_movie_set_obj))
self.emby_db.update_parent_id(*values(temp_obj, QUEM.delete_parent_boxset_obj))
self.jellyfin_db.update_parent_id(*values(temp_obj, QUEM.delete_parent_boxset_obj))
self.delete_boxset(*values(obj, QU.delete_set_obj))
self.emby_db.remove_item(*values(obj, QUEM.delete_item_obj))
self.jellyfin_db.remove_item(*values(obj, QUEM.delete_item_obj))
LOG.info("DELETE %s [%s/%s] %s", obj['Media'], obj['FileId'], obj['KodiId'], obj['Id'])

View file

@ -9,8 +9,8 @@ import urllib
from obj import Objects
from kodi import Music as KodiDb, queries_music as QU
from database import emby_db, queries as QUEM
from helper import api, catch, stop, validate, emby_item, values, library_check, settings, Local
from database import jellyfin_db, queries as QUEM
from helper import api, catch, stop, validate, jellyfin_item, values, library_check, settings, Local
##################################################################################################
@ -21,14 +21,14 @@ LOG = logging.getLogger("JELLYFIN."+__name__)
class Music(KodiDb):
def __init__(self, server, embydb, musicdb, direct_path):
def __init__(self, server, jellyfindb, musicdb, direct_path):
self.server = server
self.emby = embydb
self.jellyfin = jellyfindb
self.music = musicdb
self.direct_path = direct_path
self.emby_db = emby_db.EmbyDatabase(embydb.cursor)
self.jellyfin_db = jellyfin_db.JellyfinDatabase(jellyfindb.cursor)
self.objects = Objects()
self.item_ids = []
@ -48,7 +48,7 @@ class Music(KodiDb):
return self.remove
@stop()
@emby_item()
@jellyfin_item()
@library_check()
def artist(self, item, e_item, library):
@ -107,19 +107,19 @@ class Music(KodiDb):
Kodi doesn't allow that. In case that happens we just merge the artist entries.
'''
obj['ArtistId'] = self.get(*values(obj, QU.get_artist_obj))
self.emby_db.add_reference(*values(obj, QUEM.add_reference_artist_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_artist_obj))
LOG.info("ADD artist [%s] %s: %s", obj['ArtistId'], obj['Name'], obj['Id'])
def artist_update(self, obj):
''' Update object to kodi.
'''
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE artist [%s] %s: %s", obj['ArtistId'], obj['Name'], obj['Id'])
@stop()
@emby_item()
@jellyfin_item()
def album(self, item, e_item):
''' Update object to kodi.
@ -172,14 +172,14 @@ class Music(KodiDb):
''' Add object to kodi.
'''
obj['AlbumId'] = self.get_album(*values(obj, QU.get_album_obj))
self.emby_db.add_reference(*values(obj, QUEM.add_reference_album_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_album_obj))
LOG.info("ADD album [%s] %s: %s", obj['AlbumId'], obj['Title'], obj['Id'])
def album_update(self, obj):
''' Update object to kodi.
'''
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE album [%s] %s: %s", obj['AlbumId'], obj['Title'], obj['Id'])
def artist_discography(self, obj):
@ -193,12 +193,12 @@ class Music(KodiDb):
temp_obj['AlbumId'] = obj['Id']
try:
temp_obj['ArtistId'] = self.emby_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
temp_obj['ArtistId'] = self.jellyfin_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
except TypeError:
continue
self.add_discography(*values(temp_obj, QU.update_discography_obj))
self.emby_db.update_parent_id(*values(temp_obj, QUEM.update_parent_album_obj))
self.jellyfin_db.update_parent_id(*values(temp_obj, QUEM.update_parent_album_obj))
def artist_link(self, obj):
@ -212,12 +212,12 @@ class Music(KodiDb):
temp_obj['Id'] = artist['Id']
try:
temp_obj['ArtistId'] = self.emby_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
temp_obj['ArtistId'] = self.jellyfin_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
except TypeError:
try:
self.artist(self.server['api'].get_item(temp_obj['Id']), library=None)
temp_obj['ArtistId'] = self.emby_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
temp_obj['ArtistId'] = self.jellyfin_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
except Exception as error:
LOG.error(error)
continue
@ -228,7 +228,7 @@ class Music(KodiDb):
@stop()
@emby_item()
@jellyfin_item()
def song(self, item, e_item):
''' Update object to kodi.
@ -310,7 +310,7 @@ class Music(KodiDb):
obj['PathId'] = self.add_path(obj['Path'])
try:
obj['AlbumId'] = self.emby_db.get_item_by_id(*values(obj, QUEM.get_item_song_obj))[0]
obj['AlbumId'] = self.jellyfin_db.get_item_by_id(*values(obj, QUEM.get_item_song_obj))[0]
except TypeError:
try:
@ -318,12 +318,12 @@ class Music(KodiDb):
raise TypeError("No album id found associated?")
self.album(self.server['api'].get_item(obj['SongAlbumId']))
obj['AlbumId'] = self.emby_db.get_item_by_id(*values(obj, QUEM.get_item_song_obj))[0]
obj['AlbumId'] = self.jellyfin_db.get_item_by_id(*values(obj, QUEM.get_item_song_obj))[0]
except TypeError:
self.single(obj)
self.add_song(*values(obj, QU.add_song_obj))
self.emby_db.add_reference(*values(obj, QUEM.add_reference_song_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_song_obj))
LOG.debug("ADD song [%s/%s/%s] %s: %s", obj['PathId'], obj['AlbumId'], obj['SongId'], obj['Id'], obj['Title'])
def song_update(self, obj):
@ -333,7 +333,7 @@ class Music(KodiDb):
self.update_path(*values(obj, QU.update_path_obj))
self.update_song(*values(obj, QU.update_song_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE song [%s/%s/%s] %s: %s", obj['PathId'], obj['AlbumId'], obj['SongId'], obj['Id'], obj['Title'])
def get_song_path_filename(self, obj, api):
@ -368,12 +368,12 @@ class Music(KodiDb):
artists.append(temp_obj['Name'])
try:
temp_obj['ArtistId'] = self.emby_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
temp_obj['ArtistId'] = self.jellyfin_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
except TypeError:
try:
self.artist(self.server['api'].get_item(temp_obj['Id']), library=None)
temp_obj['ArtistId'] = self.emby_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
temp_obj['ArtistId'] = self.jellyfin_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
except Exception as error:
LOG.error(error)
continue
@ -402,12 +402,12 @@ class Music(KodiDb):
temp_obj['Index'] = index
try:
temp_obj['ArtistId'] = self.emby_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
temp_obj['ArtistId'] = self.jellyfin_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
except TypeError:
try:
self.artist(self.server['api'].get_item(temp_obj['Id']), library=None)
temp_obj['ArtistId'] = self.emby_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
temp_obj['ArtistId'] = self.jellyfin_db.get_item_by_id(*values(temp_obj, QUEM.get_item_obj))[0]
except Exception as error:
LOG.error(error)
continue
@ -422,7 +422,7 @@ class Music(KodiDb):
@stop()
@emby_item()
@jellyfin_item()
def userdata(self, item, e_item):
''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks
@ -446,11 +446,11 @@ class Music(KodiDb):
self.rate_song(*values(obj, QU.update_song_rating_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("USERDATA %s [%s] %s: %s", obj['Media'], obj['KodiId'], obj['Id'], obj['Title'])
@stop()
@emby_item()
@jellyfin_item()
def remove(self, item_id, e_item):
''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks
@ -470,47 +470,47 @@ class Music(KodiDb):
if obj['Media'] == 'song':
self.remove_song(obj['KodiId'], obj['Id'])
self.emby_db.remove_wild_item(obj['id'])
self.jellyfin_db.remove_wild_item(obj['id'])
for item in self.emby_get_item_by_wild_id(*values(obj, QUEM.get_item_by_wild_obj)):
for item in self.jellyfin_db.get_item_by_wild_id(*values(obj, QUEM.get_item_by_wild_obj)):
if item[1] == 'album':
temp_obj = dict(obj)
temp_obj['ParentId'] = item[0]
if not self.emby_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_song_obj)):
if not self.jellyfin_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_song_obj)):
self.remove_album(temp_obj['ParentId'], obj['Id'])
elif obj['Media'] == 'album':
obj['ParentId'] = obj['KodiId']
for song in self.emby_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_song_obj)):
for song in self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_song_obj)):
self.remove_song(song[1], obj['Id'])
else:
self.emby_db.remove_items_by_parent_id(*values(obj, QUEM.delete_item_by_parent_song_obj))
self.jellyfin_db.remove_items_by_parent_id(*values(obj, QUEM.delete_item_by_parent_song_obj))
self.remove_album(obj['KodiId'], obj['Id'])
elif obj['Media'] == 'artist':
obj['ParentId'] = obj['KodiId']
for album in self.emby_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_album_obj)):
for album in self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_album_obj)):
temp_obj = dict(obj)
temp_obj['ParentId'] = album[1]
for song in self.emby_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_song_obj)):
for song in self.jellyfin_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_song_obj)):
self.remove_song(song[1], obj['Id'])
else:
self.emby_db.remove_items_by_parent_id(*values(temp_obj, QUEM.delete_item_by_parent_song_obj))
self.emby_db.remove_items_by_parent_id(*values(temp_obj, QUEM.delete_item_by_parent_artist_obj))
self.jellyfin_db.remove_items_by_parent_id(*values(temp_obj, QUEM.delete_item_by_parent_song_obj))
self.jellyfin_db.remove_items_by_parent_id(*values(temp_obj, QUEM.delete_item_by_parent_artist_obj))
self.remove_album(temp_obj['ParentId'], obj['Id'])
else:
self.emby_db.remove_items_by_parent_id(*values(obj, QUEM.delete_item_by_parent_album_obj))
self.jellyfin_db.remove_items_by_parent_id(*values(obj, QUEM.delete_item_by_parent_album_obj))
self.remove_artist(obj['KodiId'], obj['Id'])
self.emby_db.remove_item(*values(obj, QUEM.delete_item_obj))
self.jellyfin_db.remove_item(*values(obj, QUEM.delete_item_obj))
def remove_artist(self, kodi_id, item_id):
@ -530,7 +530,7 @@ class Music(KodiDb):
self.delete_song(kodi_id)
LOG.info("DELETE song [%s] %s", kodi_id, item_id)
@emby_item()
@jellyfin_item()
def get_child(self, item_id, e_item):
''' Get all child elements from tv show jellyfin id.
@ -548,13 +548,13 @@ class Music(KodiDb):
obj['ParentId'] = obj['KodiId']
for album in self.emby_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_album_obj)):
for album in self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_album_obj)):
temp_obj = dict(obj)
temp_obj['ParentId'] = album[1]
child.append((album[0],))
for song in self.emby_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_song_obj)):
for song in self.jellyfin_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_song_obj)):
child.append((song[0],))
return child

View file

@ -9,8 +9,8 @@ import urllib
from obj import Objects
from kodi import MusicVideos as KodiDb, queries as QU
from database import emby_db, queries as QUEM
from helper import api, catch, stop, validate, library_check, emby_item, values, Local
from database import jellyfin_db, queries as QUEM
from helper import api, catch, stop, validate, library_check, jellyfin_item, values, Local
##################################################################################################
@ -21,14 +21,14 @@ LOG = logging.getLogger("JELLYFIN."+__name__)
class MusicVideos(KodiDb):
def __init__(self, server, embydb, videodb, direct_path):
def __init__(self, server, jellyfindb, videodb, direct_path):
self.server = server
self.emby = embydb
self.jellyfin = jellyfindb
self.video = videodb
self.direct_path = direct_path
self.emby_db = emby_db.EmbyDatabase(embydb.cursor)
self.jellyfin_db = jellyfin_db.JellyfinDatabase(jellyfindb.cursor)
self.objects = Objects()
self.item_ids = []
@ -44,7 +44,7 @@ class MusicVideos(KodiDb):
return self.remove
@stop()
@emby_item()
@jellyfin_item()
@library_check()
def musicvideo(self, item, e_item, library):
@ -149,7 +149,7 @@ class MusicVideos(KodiDb):
obj['FileId'] = self.add_file(*values(obj, QU.add_file_obj))
self.add(*values(obj, QU.add_musicvideo_obj))
self.emby_db.add_reference(*values(obj, QUEM.add_reference_mvideo_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_mvideo_obj))
LOG.info("ADD mvideo [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title'])
def musicvideo_update(self, obj):
@ -157,7 +157,7 @@ class MusicVideos(KodiDb):
''' Update object to kodi.
'''
self.update(*values(obj, QU.update_musicvideo_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE mvideo [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title'])
def get_path_filename(self, obj):
@ -185,7 +185,7 @@ class MusicVideos(KodiDb):
@stop()
@emby_item()
@jellyfin_item()
def userdata(self, item, e_item):
''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks
@ -213,11 +213,11 @@ class MusicVideos(KodiDb):
self.remove_tag(*values(obj, QU.delete_tag_mvideo_obj))
self.add_playstate(*values(obj, QU.add_bookmark_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("USERDATA mvideo [%s/%s] %s: %s", obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title'])
@stop()
@emby_item()
@jellyfin_item()
def remove(self, item_id, e_item):
''' Remove mvideoid, fileid, pathid, jellyfin reference.
@ -237,5 +237,5 @@ class MusicVideos(KodiDb):
if self.direct_path:
self.remove_path(*values(obj, QU.delete_path_obj))
self.emby_db.remove_item(*values(obj, QUEM.delete_item_obj))
self.jellyfin_db.remove_item(*values(obj, QUEM.delete_item_obj))
LOG.info("DELETE musicvideo %s [%s/%s] %s", obj['MvideoId'], obj['PathId'], obj['FileId'], obj['Id'])

View file

@ -11,8 +11,8 @@ from ntpath import dirname
from obj import Objects
from kodi import TVShows as KodiDb, queries as QU
import downloader as server
from database import emby_db, queries as QUEM
from helper import api, catch, stop, validate, emby_item, library_check, settings, values, Local
from database import jellyfin_db, queries as QUEM
from helper import api, catch, stop, validate, jellyfin_item, library_check, settings, values, Local
##################################################################################################
@ -23,15 +23,15 @@ LOG = logging.getLogger("JELLYFIN."+__name__)
class TVShows(KodiDb):
def __init__(self, server, embydb, videodb, direct_path, update_library=False):
def __init__(self, server, jellyfindb, videodb, direct_path, update_library=False):
self.server = server
self.emby = embydb
self.jellyfin = jellyfindb
self.video = videodb
self.direct_path = direct_path
self.update_library = update_library
self.emby_db = emby_db.EmbyDatabase(embydb.cursor)
self.jellyfin_db = jellyfin_db.JellyfinDatabase(jellyfindb.cursor)
self.objects = Objects()
self.item_ids = []
@ -51,7 +51,7 @@ class TVShows(KodiDb):
return self.remove
@stop()
@emby_item()
@jellyfin_item()
@library_check()
def tvshow(self, item, e_item, library):
@ -143,18 +143,18 @@ class TVShows(KodiDb):
self.item_ids.append(season['SeriesId'])
try:
self.emby_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))[0]
self.jellyfin_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))[0]
if self.update_library:
season_episodes[season['Id']] = season['SeriesId']
except TypeError:
self.emby_db.add_reference(*values(obj, QUEM.add_reference_pool_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_pool_obj))
LOG.info("POOL %s [%s/%s]", obj['Title'], obj['Id'], obj['SeriesId'])
season_episodes[season['Id']] = season['SeriesId']
try:
self.emby_db.get_item_by_id(season['Id'])[0]
self.jellyfin_db.get_item_by_id(season['Id'])[0]
self.item_ids.append(season['Id'])
except TypeError:
self.season(season, obj['ShowId'])
@ -184,7 +184,7 @@ class TVShows(KodiDb):
obj['PathId'] = self.add_path(*values(obj, QU.get_path_obj))
self.add(*values(obj, QU.add_tvshow_obj))
self.emby_db.add_reference(*values(obj, QUEM.add_reference_tvshow_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_tvshow_obj))
LOG.info("ADD tvshow [%s/%s/%s] %s: %s", obj['TopPathId'], obj['PathId'], obj['ShowId'], obj['Title'], obj['Id'])
def tvshow_update(self, obj):
@ -198,7 +198,7 @@ class TVShows(KodiDb):
self.update_unique_id(*values(obj, QU.update_unique_id_tvshow_obj))
self.update(*values(obj, QU.update_tvshow_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE tvshow [%s/%s] %s: %s", obj['PathId'], obj['ShowId'], obj['Title'], obj['Id'])
def get_path_filename(self, obj):
@ -237,7 +237,7 @@ class TVShows(KodiDb):
if obj['ShowId'] is None:
try:
obj['ShowId'] = self.emby_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))[0]
obj['ShowId'] = self.jellyfin_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))[0]
except (KeyError, TypeError):
LOG.error("Unable to add series %s", obj['SeriesId'])
@ -247,7 +247,7 @@ class TVShows(KodiDb):
obj['Artwork'] = API.get_all_artwork(self.objects.map(item, 'Artwork'))
if obj['Location'] != "Virtual":
self.emby_db.add_reference(*values(obj, QUEM.add_reference_season_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_season_obj))
self.item_ids.append(obj['Id'])
self.artwork.add(obj['Artwork'], obj['SeasonId'], "season")
@ -255,7 +255,7 @@ class TVShows(KodiDb):
@stop()
@emby_item()
@jellyfin_item()
def episode(self, item, e_item):
''' If item does not exist, entry will be added.
@ -384,7 +384,7 @@ class TVShows(KodiDb):
return self.episode_add(obj)
self.emby_db.add_reference(*values(obj, QUEM.add_reference_episode_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_episode_obj))
LOG.debug("ADD episode [%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['Id'], obj['Title'])
def episode_update(self, obj):
@ -399,8 +399,8 @@ class TVShows(KodiDb):
self.update_episode(*values(obj, QU.update_episode_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.emby_db.update_parent_id(*values(obj, QUEM.update_parent_episode_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_parent_id(*values(obj, QUEM.update_parent_episode_obj))
LOG.debug("UPDATE episode [%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['Id'], obj['Title'])
def get_episode_path_filename(self, obj):
@ -429,13 +429,13 @@ class TVShows(KodiDb):
obj['Filename'] = "%s?%s" % (obj['Path'], urllib.urlencode(params))
def get_show_id(self, obj):
obj['ShowId'] = self.emby_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))
obj['ShowId'] = self.jellyfin_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))
if obj['ShowId'] is None:
try:
self.tvshow(self.server['api'].get_item(obj['SeriesId']), library=None)
obj['ShowId'] = self.emby_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))[0]
obj['ShowId'] = self.jellyfin_db.get_item_by_id(*values(obj, QUEM.get_item_series_obj))[0]
except (TypeError, KeyError):
LOG.error("Unable to add series %s", obj['SeriesId'])
@ -449,7 +449,7 @@ class TVShows(KodiDb):
@stop()
@emby_item()
@jellyfin_item()
def userdata(self, item, e_item):
''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks
@ -505,11 +505,11 @@ class TVShows(KodiDb):
self.update_file(*values(temp_obj, QU.update_file_obj))
self.add_playstate(*values(temp_obj, QU.add_bookmark_obj))
self.emby_db.update_reference(*values(obj, QUEM.update_reference_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("USERDATA %s [%s/%s] %s: %s", obj['Media'], obj['FileId'], obj['KodiId'], obj['Id'], obj['Title'])
@stop()
@emby_item()
@jellyfin_item()
def remove(self, item_id, e_item):
''' Remove showid, fileid, pathid, jellyfin reference.
@ -529,7 +529,7 @@ class TVShows(KodiDb):
temp_obj = dict(obj)
self.remove_episode(obj['KodiId'], obj['FileId'], obj['Id'])
season = self.emby_db.get_full_item_by_kodi_id(*values(obj, QUEM.delete_item_by_parent_season_obj))
season = self.jellyfin_db.get_full_item_by_kodi_id(*values(obj, QUEM.delete_item_by_parent_season_obj))
try:
temp_obj['Id'] = season[0]
@ -537,61 +537,61 @@ class TVShows(KodiDb):
except TypeError:
return
if not self.emby_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_episode_obj)):
if not self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_episode_obj)):
self.remove_season(obj['ParentId'], obj['Id'])
self.emby_db.remove_item(*values(temp_obj, QUEM.delete_item_obj))
self.jellyfin_db.remove_item(*values(temp_obj, QUEM.delete_item_obj))
temp_obj['Id'] = self.emby_db.get_item_by_kodi_id(*values(temp_obj, QUEM.get_item_by_parent_tvshow_obj))
temp_obj['Id'] = self.jellyfin_db.get_item_by_kodi_id(*values(temp_obj, QUEM.get_item_by_parent_tvshow_obj))
if not self.get_total_episodes(*values(temp_obj, QU.get_total_episodes_obj)):
for season in self.emby_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_season_obj)):
for season in self.jellyfin_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_season_obj)):
self.remove_season(season[1], obj['Id'])
else:
self.emby_db.remove_items_by_parent_id(*values(temp_obj, QUEM.delete_item_by_parent_season_obj))
self.jellyfin_db.remove_items_by_parent_id(*values(temp_obj, QUEM.delete_item_by_parent_season_obj))
self.remove_tvshow(temp_obj['ParentId'], obj['Id'])
self.emby_db.remove_item(*values(temp_obj, QUEM.delete_item_obj))
self.jellyfin_db.remove_item(*values(temp_obj, QUEM.delete_item_obj))
elif obj['Media'] == 'tvshow':
obj['ParentId'] = obj['KodiId']
for season in self.emby_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_season_obj)):
for season in self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_season_obj)):
temp_obj = dict(obj)
temp_obj['ParentId'] = season[1]
for episode in self.emby_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_episode_obj)):
for episode in self.jellyfin_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_episode_obj)):
self.remove_episode(episode[1], episode[2], obj['Id'])
else:
self.emby_db.remove_items_by_parent_id(*values(temp_obj, QUEM.delete_item_by_parent_episode_obj))
self.jellyfin_db.remove_items_by_parent_id(*values(temp_obj, QUEM.delete_item_by_parent_episode_obj))
else:
self.emby_db.remove_items_by_parent_id(*values(obj, QUEM.delete_item_by_parent_season_obj))
self.jellyfin_db.remove_items_by_parent_id(*values(obj, QUEM.delete_item_by_parent_season_obj))
self.remove_tvshow(obj['KodiId'], obj['Id'])
elif obj['Media'] == 'season':
for episode in self.emby_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_episode_obj)):
for episode in self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_episode_obj)):
self.remove_episode(episode[1], episode[2], obj['Id'])
else:
self.emby_db.remove_items_by_parent_id(*values(obj, QUEM.delete_item_by_parent_episode_obj))
self.jellyfin_db.remove_items_by_parent_id(*values(obj, QUEM.delete_item_by_parent_episode_obj))
self.remove_season(obj['KodiId'], obj['Id'])
if not self.emby_db.get_item_by_parent_id(*values(obj, QUEM.delete_item_by_parent_season_obj)):
if not self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.delete_item_by_parent_season_obj)):
self.remove_tvshow(obj['ParentId'], obj['Id'])
self.emby_db.remove_item_by_kodi_id(*values(obj, QUEM.delete_item_by_parent_tvshow_obj))
self.jellyfin_db.remove_item_by_kodi_id(*values(obj, QUEM.delete_item_by_parent_tvshow_obj))
# Remove any series pooling episodes
for episode in self.emby_db.get_media_by_parent_id(obj['Id']):
for episode in self.jellyfin_db.get_media_by_parent_id(obj['Id']):
self.remove_episode(episode[2], episode[3], obj['Id'])
else:
self.emby_db.remove_media_by_parent_id(obj['Id'])
self.jellyfin_db.remove_media_by_parent_id(obj['Id'])
self.emby_db.remove_item(*values(obj, QUEM.delete_item_obj))
self.jellyfin_db.remove_item(*values(obj, QUEM.delete_item_obj))
def remove_tvshow(self, kodi_id, item_id):
@ -611,7 +611,7 @@ class TVShows(KodiDb):
self.delete_episode(kodi_id, file_id)
LOG.info("DELETE episode [%s/%s] %s", file_id, kodi_id, item_id)
@emby_item()
@jellyfin_item()
def get_child(self, item_id, e_item):
''' Get all child elements from tv show jellyfin id.
@ -629,16 +629,16 @@ class TVShows(KodiDb):
obj['ParentId'] = obj['KodiId']
for season in self.emby_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_season_obj)):
for season in self.jellyfin_db.get_item_by_parent_id(*values(obj, QUEM.get_item_by_parent_season_obj)):
temp_obj = dict(obj)
temp_obj['ParentId'] = season[1]
child.append(season[0])
for episode in self.emby_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_episode_obj)):
for episode in self.jellyfin_db.get_item_by_parent_id(*values(temp_obj, QUEM.get_item_by_parent_episode_obj)):
child.append(episode[0])
for episode in self.emby_db.get_media_by_parent_id(obj['Id']):
for episode in self.jellyfin_db.get_media_by_parent_id(obj['Id']):
child.append(episode[0])
return child