Skip to content

Commit

Permalink
Merge pull request #369 from quickmic/next-gen-dev
Browse files Browse the repository at this point in the history
plugin.video.emby-next-gen-5.2.06-build 156 (ex26)
  • Loading branch information
quickmic authored Apr 9, 2021
2 parents 94dcb49 + ef16562 commit 90976e9
Show file tree
Hide file tree
Showing 36 changed files with 2,362 additions and 3,072 deletions.
2 changes: 1 addition & 1 deletion addon.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.emby-next-gen" name="Emby-next-gen" version="5.2.05" provider-name="quickmic, angelblue05, sualfred">
<addon id="plugin.video.emby-next-gen" name="Emby-next-gen" version="5.2.06" provider-name="quickmic, angelblue05, sualfred">
<requires>
<import addon="script.module.requests" version="2.22.0"/>
<import addon="script.module.dateutil" version="2.8.1"/>
Expand Down
19 changes: 4 additions & 15 deletions context.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,9 @@ def __init__(self, delete=False):
self.media = xbmc.getInfoLabel('ListItem.DBTYPE')
item_id = None






if not self.set_server():
return






if item_id:
self.item = self.EmbyServer[self.server_id].API.get_item(item_id)
else:
Expand Down Expand Up @@ -77,10 +67,9 @@ def set_server(self):
for _ in range(60):
if self.Utils.window('emby.server.%s.online.bool' % server_id):
ServerOnline = True
self.EmbyServer[server_id] = emby.main.Emby(server_id)
ServerData = self.Utils.window('emby.server.%s.state.json' % server_id)
self.EmbyServer[server_id].set_state(ServerData)
self.EmbyServerName[server_id] = ServerData['config']['auth.server-name']
self.EmbyServer[server_id] = emby.main.Emby(self.Utils, server_id)
self.EmbyServer[server_id].set_state()
self.EmbyServerName[server_id] = self.EmbyServer[server_id].Data['auth.server-name']
break

xbmc.sleep(500)
Expand Down Expand Up @@ -158,7 +147,7 @@ def delete_item(self):

if delete:
self.EmbyServer[self.server_id].API.delete_item(self.item['Id'])
self.Utils.event("LibraryChanged", {'ItemsRemoved': [self.item['Id']], 'ItemsVerify': [self.item['Id']], 'ItemsUpdated': [], 'ItemsAdded': []})
self.Utils.event("LibraryChanged", {'ServerId' : self.server_id, 'ItemsRemoved': [self.item['Id']], 'ItemsVerify': [self.item['Id']], 'ItemsUpdated': [], 'ItemsAdded': []})

if __name__ == "__main__":
Context()
51 changes: 26 additions & 25 deletions core/artwork.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,21 @@ def update(self, image_url, kodi_id, media, image):
if image == 'poster' and media in ('song', 'artist', 'album'):
return

try:
self.cursor.execute(queries_videos.get_art, (kodi_id, media, image,))
url = self.cursor.fetchone()[0]
except TypeError:
self.LOG.debug("ADD to kodi_id %s art: %s" % (kodi_id, image_url))
self.cursor.execute(queries_videos.add_art, (kodi_id, media, image, image_url))
else:
if url != image_url:
self.delete_cache(url)
self.cursor.execute(queries_videos.get_art, (kodi_id, media, image,))
result = self.cursor.fetchone()

if not image_url:
return
if result:
url = result[0]

self.LOG.info("UPDATE to kodi_id %s art: %s" % (kodi_id, image_url))
self.cursor.execute(queries_videos.update_art, (image_url, kodi_id, media, image))
if url != image_url:
self.delete_cache(url, False)

if image_url:
self.LOG.info("UPDATE to kodi_id %s art: %s" % (kodi_id, image_url))
self.cursor.execute(queries_videos.update_art, (image_url, kodi_id, media, image))
else:
self.LOG.debug("ADD to kodi_id %s art: %s" % (kodi_id, image_url))
self.cursor.execute(queries_videos.add_art, (kodi_id, media, image, image_url))

#Add all artworks
def add(self, artwork, *args):
Expand Down Expand Up @@ -88,29 +88,30 @@ def delete(self, *args):
self.cursor.execute(queries_videos.get_art_url, args)

for row in self.cursor.fetchall():
self.delete_cache(row[0])
self.delete_cache(row[0], True)

#Delete cached artwork
def delete_cache(self, url):
def delete_cache(self, url, CompleteRemove):
with database.database.Database(self.Utils, 'texture', True) as texturedb:
cursor = texturedb.cursor
cursor.execute(queries_texture.get_cache, (url,))
result = cursor.fetchone()

try:
cursor.execute(queries_texture.get_cache, (url,))
cached = cursor.fetchone()[0]
except TypeError:
self.LOG.debug("Could not find cached url: %s" % url)
else:
if result:
cached = result[0]
thumbnails = self.Utils.translatePath("special://thumbnails/%s" % cached)
xbmcvfs.delete(thumbnails)
cursor.execute(queries_texture.delete_cache, (url,))

if self.is_music:
self.cursor.execute(queries_music.delete_artwork, (url,))
else:
self.cursor.execute(queries_videos.delete_artwork, (url,))
if CompleteRemove:
if self.is_music:
self.cursor.execute(queries_music.delete_artwork, (url,))
else:
self.cursor.execute(queries_videos.delete_artwork, (url,))

self.LOG.info("DELETE cached %s" % cached)
else:
self.LOG.debug("Could not find cached url: %s" % url)

#This method will sync all Kodi artwork to textures13.dband cache them locally. This takes diskspace!
def cache_textures(self):
Expand Down
47 changes: 22 additions & 25 deletions core/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,18 @@
import database.queries

class Common():
def __init__(self, emby_db, objects, Utils, direct_path, EmbyServer):
def __init__(self, emby_db, objects, EmbyServer):
self.LOG = helper.loghandler.LOG('EMBY.core.common.Common')
self.Utils = Utils
self.emby_db = emby_db
self.objects = objects
self.direct_path = direct_path
self.EmbyServer = EmbyServer

#Add streamdata
def Streamdata_add(self, obj, Update):
if Update:
self.emby_db.remove_item_streaminfos(obj['Id'])

if "3d" in self.Utils.StringMod(obj['Item']['MediaSources'][0]['Path']):
if "3d" in self.EmbyServer.Utils.StringMod(obj['Item']['MediaSources'][0]['Path']):
if len(obj['Item']['MediaSources']) >= 2:
Temp = obj['Item']['MediaSources'][1]
obj['Item']['MediaSources'][1] = obj['Item']['MediaSources'][0]
Expand All @@ -35,7 +33,7 @@ def Streamdata_add(self, obj, Update):
CountMediaSubtitle = 0
CountStreamSources = 0
DataSource = self.objects.MapMissingData(DataSource, 'MediaSources')
self.emby_db.add_mediasource(*self.Utils.values(DataSource, database.queries.add_mediasource_obj))
self.emby_db.add_mediasource(*self.EmbyServer.Utils.values(DataSource, database.queries.add_mediasource_obj))

for DataStream in DataSource['MediaStreams']:
DataStream['emby_id'] = obj['Item']['Id']
Expand All @@ -45,17 +43,17 @@ def Streamdata_add(self, obj, Update):
if DataStream['Type'] == "Video":
DataStream = self.objects.MapMissingData(DataStream, 'VideoStreams')
DataStream['VideoIndex'] = CountMediaStreamVideo
self.emby_db.add_videostreams(*self.Utils.values(DataStream, database.queries.add_videostreams_obj))
self.emby_db.add_videostreams(*self.EmbyServer.Utils.values(DataStream, database.queries.add_videostreams_obj))
CountMediaStreamVideo += 1
elif DataStream['Type'] == "Audio":
DataStream = self.objects.MapMissingData(DataStream, 'AudioStreams')
DataStream['AudioIndex'] = CountMediaStreamAudio
self.emby_db.add_audiostreams(*self.Utils.values(DataStream, database.queries.add_audiostreams_obj))
self.emby_db.add_audiostreams(*self.EmbyServer.Utils.values(DataStream, database.queries.add_audiostreams_obj))
CountMediaStreamAudio += 1
elif DataStream['Type'] == "Subtitle":
DataStream = self.objects.MapMissingData(DataStream, 'Subtitles')
DataStream['SubtitleIndex'] = CountMediaSubtitle
self.emby_db.add_subtitles(*self.Utils.values(DataStream, database.queries.add_subtitles_obj))
self.emby_db.add_subtitles(*self.EmbyServer.Utils.values(DataStream, database.queries.add_subtitles_obj))
CountMediaSubtitle += 1

CountStreamSources += 1
Expand All @@ -66,21 +64,22 @@ def Streamdata_add(self, obj, Update):

def get_path_filename(self, obj, MediaID):
#Native Kodi plugins starts with plugin:// -> If native Kodi plugin, drop the link directly in Kodi DB. Emby server cannot play Kodi-Plugins
KodiPluginPath = False
ForceNativeMode = False
Temp = obj['Path'].lower()

if obj['Path'].startswith("plugin://"):
KodiPluginPath = True
if Temp.startswith("plugin://") or Temp.endswith(".iso"):
ForceNativeMode = True

if self.direct_path or KodiPluginPath:
if KodiPluginPath:
if self.EmbyServer.Utils.direct_path or ForceNativeMode:
if ForceNativeMode:
obj['Filename'] = obj['Path']
else:
obj['Filename'] = obj['Path'].rsplit('\\', 1)[1] if '\\' in obj['Path'] else obj['Path'].rsplit('/', 1)[1]

obj['Path'] = self.Utils.StringDecode(obj['Path'])
obj['Filename'] = self.Utils.StringDecode(obj['Filename'])
obj['Path'] = self.EmbyServer.Utils.StringDecode(obj['Path'])
obj['Filename'] = self.EmbyServer.Utils.StringDecode(obj['Filename'])

if not self.Utils.validate(obj['Path']):
if not self.EmbyServer.Utils.validate(obj['Path']):
return False, obj

obj['Path'] = obj['Path'].replace(obj['Filename'], "")
Expand All @@ -97,15 +96,15 @@ def get_path_filename(self, obj, MediaID):

for AdditionalItem in AdditionalParts['Items']:
AdditionalItem = self.objects.MapMissingData(AdditionalItem, 'MediaSources')
Path = self.Utils.StringDecode(AdditionalItem['Path'])
Path = self.EmbyServer.Utils.StringDecode(AdditionalItem['Path'])
obj['Filename'] = obj['Filename'] + " , " + Path
RunTimePart = round(float((AdditionalItem['RunTimeTicks'] or 0) / 10000000.0), 6)
obj['Runtime'] = obj['Runtime'] + RunTimePart
obj['StackTimes'] = str(obj['StackTimes']) + "," + str(obj['Runtime'])

obj['Filename'] = "stack://" + obj['Filename']
else:
Filename = self.Utils.PathToFilenameReplaceSpecialCharecters(obj['Path'])
Filename = self.EmbyServer.Utils.PathToFilenameReplaceSpecialCharecters(obj['Path'])

if MediaID == "tvshows":
obj['Path'] = "http://127.0.0.1:57578/tvshows/%s/" % obj['SeriesId']
Expand All @@ -114,23 +113,23 @@ def get_path_filename(self, obj, MediaID):
obj['Filename'] = "%s-%s-%s-stream-%s" % (obj['Id'], obj['Item']['MediaSources'][0]['Id'], obj['Item']['MediaSources'][0]['MediaStreams'][0]['BitRate'], Filename)
except:
obj['Filename'] = "%s-%s-stream-%s" % (obj['Id'], obj['Item']['MediaSources'][0]['Id'], Filename)
self.LOG.warning("No video bitrate available %s" % self.Utils.StringMod(obj['Item']['Path']))
self.LOG.warning("No video bitrate available %s" % self.EmbyServer.Utils.StringMod(obj['Item']['Path']))
elif MediaID == "movies":
obj['Path'] = "http://127.0.0.1:57578/movies/%s/" % obj['LibraryId']

try:
obj['Filename'] = "%s-%s-%s-stream-%s" % (obj['Id'], obj['MediaSourceID'], obj['Item']['MediaSources'][0]['MediaStreams'][0]['BitRate'], Filename)
except:
obj['Filename'] = "%s-%s-stream-%s" % (obj['Id'], obj['MediaSourceID'], Filename)
self.LOG.warning("No video bitrate available %s" % self.Utils.StringMod(obj['Item']['Path']))
self.LOG.warning("No video bitrate available %s" % self.EmbyServer.Utils.StringMod(obj['Item']['Path']))
elif MediaID == "musicvideos":
obj['Path'] = "http://127.0.0.1:57578/musicvideos/%s/" % obj['LibraryId']

try:
obj['Filename'] = "%s-%s-%s-stream-%s" % (obj['Id'], obj['PresentationKey'], obj['Streams']['video'][0]['BitRate'], Filename)
except:
obj['Filename'] = "%s-%s-stream-%s" % (obj['Id'], obj['PresentationKey'], Filename)
self.LOG.warning("No video bitrate available %s" % self.Utils.StringMod(obj['Item']['Path']))
self.LOG.warning("No video bitrate available %s" % self.EmbyServer.Utils.StringMod(obj['Item']['Path']))
elif MediaID == "audio":
obj['Path'] = "http://127.0.0.1:57578/audio/%s/" % obj['Id']
obj['Filename'] = "%s-stream-%s" % (obj['Id'], Filename)
Expand All @@ -145,7 +144,7 @@ def get_path_filename(self, obj, MediaID):

for AdditionalItem in AdditionalParts['Items']:
AdditionalItem = self.objects.MapMissingData(AdditionalItem, 'MediaSources')
Filename = self.Utils.PathToFilenameReplaceSpecialCharecters(AdditionalItem['Path'])
Filename = self.EmbyServer.Utils.PathToFilenameReplaceSpecialCharecters(AdditionalItem['Path'])

try:
obj['Filename'] = obj['Filename'] + " , " + obj['Path'] + "%s--%s-stream-%s" % (AdditionalItem['Id'], AdditionalItem['MediaSources'][0]['MediaStreams'][0]['BitRate'], Filename)
Expand Down Expand Up @@ -195,12 +194,10 @@ def library_check(self, e_item, item, library):

break

sync = self.Utils.get_sync()

if not library:
library = {}

if view_id not in [x.replace('Mixed:', "") for x in sync['Whitelist'] + sync['Libraries']]:
if view_id not in [x.replace('Mixed:', "") for x in self.EmbyServer.Utils.SyncData['Whitelist'] + self.EmbyServer.Utils.SyncData['Libraries']]:
self.LOG.info("Library %s is not synced. Skip update." % view_id)
return False

Expand Down
Loading

0 comments on commit 90976e9

Please sign in to comment.