From 05e8a2eb5df2e7bf487e76b9e257834141fa8876 Mon Sep 17 00:00:00 2001
From: angelblue05 <angelblue.dev@gmail.com>
Date: Mon, 14 Jan 2019 17:51:18 -0600
Subject: [PATCH] Update Krypton objects

---
 resources/lib/objects/__init__.py     |  2 +-
 resources/lib/objects/actions.py      | 43 +++++++++++++++++----------
 resources/lib/objects/kodi/artwork.py |  2 +-
 resources/lib/objects/kodi/queries.py | 20 ++++++-------
 resources/lib/objects/movies.py       | 10 ++++---
 resources/lib/objects/music.py        |  8 ++---
 resources/lib/objects/musicvideos.py  | 10 +++----
 resources/lib/objects/obj_map.json    | 10 +++++--
 resources/lib/objects/tvshows.py      | 17 ++++++-----
 9 files changed, 71 insertions(+), 51 deletions(-)

diff --git a/resources/lib/objects/__init__.py b/resources/lib/objects/__init__.py
index 6cf757ac..abc0b318 100644
--- a/resources/lib/objects/__init__.py
+++ b/resources/lib/objects/__init__.py
@@ -1,4 +1,4 @@
-version = "171076022"
+version = "171076025"
 
 from movies import Movies
 from musicvideos import MusicVideos
diff --git a/resources/lib/objects/actions.py b/resources/lib/objects/actions.py
index e9ba96a0..c22335fb 100644
--- a/resources/lib/objects/actions.py
+++ b/resources/lib/objects/actions.py
@@ -176,9 +176,13 @@ class Actions(object):
         '''
         item = items[0]
         playlist = self.get_playlist(item)
+        player = xbmc.Player()
 
         if clear:
-            playlist.clear()
+            if player.isPlaying():
+                player.stop()
+
+            xbmc.executebuiltin('ActivateWindow(busydialognocancel)')
             index = 0
         else:
             index = max(playlist.getposition(), 0) + 1 # Can return -1
@@ -201,14 +205,16 @@ class Actions(object):
         index += 1
 
         if clear:
-            xbmc.Player().play(playlist)
+            xbmc.executebuiltin('Dialog.Close(busydialognocancel)')
+            player.play(playlist)
 
         for item in items[1:]:
             listitem = xbmcgui.ListItem()
             LOG.info("[ playlist/%s ]", item)
-            path = "plugin://plugin.video.emby/?mode=play&id=%s&playlist=true" % item
 
+            path = "plugin://plugin.video.emby/?mode=play&id=%s&playlist=true" % item
             listitem.setPath(path)
+    
             playlist.add(path, listitem, index)
             index += 1
 
@@ -334,15 +340,17 @@ class Actions(object):
             'dbid': obj['DbId']
         }
         listitem.setCast(API.get_actors())
-        listitem.setIconImage(obj['Artwork']['Thumb'])
-        listitem.setThumbnailImage(obj['Artwork']['Primary'])
-        self.set_artwork(obj['Artwork'], listitem, obj['Type'])
 
-        if obj['Artwork']['Primary']:
+        if obj['Type'] == 'Video':
+            listitem.setIconImage('DefaultVideo.png')
+            listitem.setThumbnailImage(obj['Artwork']['Primary'] or obj['Artwork']['Thumb'])
+        else:
+            listitem.setIconImage(obj['Artwork']['Thumb'])
             listitem.setThumbnailImage(obj['Artwork']['Primary'])
+            self.set_artwork(obj['Artwork'], listitem, obj['Type'])
 
-        if not obj['Artwork']['Backdrop']:
-            listitem.setArt({'fanart': obj['Artwork']['Primary']})
+            if not obj['Artwork']['Backdrop']:
+                listitem.setArt({'fanart': obj['Artwork']['Primary']})
 
         if obj['Premiere']:
             metadata['premieredate'] = obj['Premiere']
@@ -374,9 +382,14 @@ class Actions(object):
             listitem.setProperty('IsFolder', 'true')
 
         elif obj['Type'] == 'Series':
+
+            if obj['Status'] != 'Ended':
+                obj['Status'] = None
+
             metadata.update({
                 'mediatype': "tvshow",
-                'tvshowtitle': obj['Title']
+                'tvshowtitle': obj['Title'],
+                'status': obj['Status']
             })
             listitem.setProperty('TotalSeasons', str(obj['ChildCount']))
             listitem.setProperty('TotalEpisodes', str(obj['RecursiveCount']))
@@ -389,7 +402,8 @@ class Actions(object):
                 'mediatype': "movie",
                 'imdbnumber': obj['UniqueId'],
                 'lastplayed': obj['DatePlayed'],
-                'duration': obj['Runtime']
+                'duration': obj['Runtime'],
+                'userrating': obj['CriticRating']
             })
 
         elif obj['Type'] == 'MusicVideo':
@@ -550,8 +564,6 @@ class Actions(object):
         }
         listitem.setProperty('path', obj['Artwork']['Primary'])
         listitem.setThumbnailImage(obj['Artwork']['Primary'])
-        listitem.setIconImage(obj['Artwork']['Primary'] or "special://home/addons/plugin.video.emby/icon.png")
-        listitem.setArt({'fanart': obj['Artwork']['Primary'] or "special://home/addons/plugin.video.emby/fanart.jpg"})
 
         if obj['Type'] == 'Photo':
             metadata.update({
@@ -567,11 +579,10 @@ class Actions(object):
             })
             listitem.setProperty('plot', obj['Overview'])
             listitem.setProperty('IsFolder', 'false')
+            listitem.setIconImage('DefaultPicture.png')
         else:
-            if obj['Artwork']['Backdrop']:
-                listitem.setArt({'fanart': obj['Artwork']['Backdrop'][0]})
-
             listitem.setProperty('IsFolder', 'true')
+            listitem.setIconImage('DefaultFolder.png')
 
         listitem.setProperty('IsPlayable', 'false')
         listitem.setLabel(obj['Title'])
diff --git a/resources/lib/objects/kodi/artwork.py b/resources/lib/objects/kodi/artwork.py
index 4a2593fc..4553f712 100644
--- a/resources/lib/objects/kodi/artwork.py
+++ b/resources/lib/objects/kodi/artwork.py
@@ -151,7 +151,7 @@ class Artwork(object):
             if thread.is_done:
                 self.threads.remove(thread)
 
-        if self.queue.qsize() and len(self.threads) < 3:
+        if self.queue.qsize() and len(self.threads) < 2:
 
             new_thread = GetArtworkWorker(self.kodi, self.queue)
             new_thread.start()
diff --git a/resources/lib/objects/kodi/queries.py b/resources/lib/objects/kodi/queries.py
index cd040f91..759204b8 100644
--- a/resources/lib/objects/kodi/queries.py
+++ b/resources/lib/objects/kodi/queries.py
@@ -279,13 +279,13 @@ add_art =   			"""	INSERT INTO	art(media_id, media_type, type, url)
 							VALUES		(?, ?, ?, ?) 
 						"""
 add_movie =     		"""	INSERT INTO	movie(idMovie, idFile, c00, c01, c02, c03, c04, c05, c06, c07,
-                							  c09, c10, c11, c12, c14, c15, c16, c18, c19, c21, premiered) 
-                			VALUES 		(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
+                							  c09, c10, c11, c12, c14, c15, c16, c18, c19, c21, userrating, premiered) 
+                			VALUES 		(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
                 		"""
 add_movie_obj =             [   "{MovieId}","{FileId}","{Title}","{Plot}","{ShortPlot}","{Tagline}",
                                 "{Votes}","{RatingId}","{Writers}","{Year}","{Unique}","{SortTitle}",
                                 "{Runtime}","{Mpaa}","{Genre}","{Directors}","{Title}","{Studio}",
-                                "{Trailer}","{Country}","{Year}"
+                                "{Trailer}","{Country}","{CriticRating}","{Year}"
                             ]
 add_rating =    		"""	INSERT INTO rating(rating_id, media_id, media_type, rating_type, rating, votes) 
     						VALUES 		(?, ?, ?, ?, ?, ?) 
@@ -320,10 +320,10 @@ add_musicvideo =    	"""	INSERT INTO musicvideo(idMVideo,idFile, c00, c04, c05,
 add_musicvideo_obj =        [   "{MvideoId}","{FileId}","{Title}","{Runtime}","{Directors}","{Studio}","{Year}",
                                 "{Plot}","{Album}","{Artists}","{Genre}","{Index}","{Premiere}"
                             ]
-add_tvshow =    		""" INSERT INTO	tvshow(idShow, c00, c01, c04, c05, c08, c09, c12, c13, c14, c15) 
-            				VALUES 		(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
+add_tvshow =    		""" INSERT INTO	tvshow(idShow, c00, c01, c02, c04, c05, c08, c09, c12, c13, c14, c15) 
+            				VALUES 		(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
             			"""
-add_tvshow_obj =            [   "{ShowId}","{Title}","{Plot}","{RatingId}","{Premiere}","{Genre}","{Title}",
+add_tvshow_obj =            [   "{ShowId}","{Title}","{Plot}","{Status}","{RatingId}","{Premiere}","{Genre}","{Title}",
                                 "{Unique}","{Mpaa}","{Studio}","{SortTitle}"
                             ]
 add_season =    		"""	INSERT INTO seasons(idSeason, idShow, season) 
@@ -392,13 +392,13 @@ update_link =   		""" INSERT OR REPLACE INTO	{LinkType}(actor_id, media_id, medi
 update_movie =  		"""	UPDATE 	movie 
 							SET 	c00 = ?, c01 = ?, c02 = ?, c03 = ?, c04 = ?, c05 = ?, c06 = ?,
                 					c07 = ?, c09 = ?, c10 = ?, c11 = ?, c12 = ?, c14 = ?, c15 = ?,
-                					c16 = ?, c18 = ?, c19 = ?, c21 = ?, premiered = ? 
+                					c16 = ?, c18 = ?, c19 = ?, c21 = ?, userrating = ?, premiered = ? 
                 			WHERE 	idMovie = ? 
                 		"""
 update_movie_obj =          [   "{Title}","{Plot}","{ShortPlot}","{Tagline}","{Votes}","{RatingId}",
                                 "{Writers}","{Year}","{Unique}","{SortTitle}","{Runtime}",
                                 "{Mpaa}","{Genre}","{Directors}","{Title}","{Studio}","{Trailer}",
-                                "{Country}","{Year}","{MovieId}"
+                                "{Country}","{CriticRating}","{Year}","{MovieId}"
                             ]
 update_rating =     	"""	UPDATE 	rating 
     						SET 	media_id = ?, media_type = ?, rating_type = ?, rating = ?, votes = ? 
@@ -446,11 +446,11 @@ update_musicvideo_obj =     [   "{Title}","{Runtime}","{Directors}","{Studio}","
                                 "{Artists}","{Genre}","{Index}","{Premiere}","{MvideoId}"
                             ]
 update_tvshow =     	""" UPDATE 	tvshow 
-            				SET 	c00 = ?, c01 = ?, c04 = ?, c05 = ?, c08 = ?, c09 = ?, 
+            				SET 	c00 = ?, c01 = ?, c02 = ?, c04 = ?, c05 = ?, c08 = ?, c09 = ?, 
                 					c12 = ?, c13 = ?, c14 = ?, c15 = ? 
             				WHERE 	idShow = ? 
             			"""
-update_tvshow_obj =         [   "{Title}","{Plot}","{RatingId}","{Premiere}","{Genre}","{Title}",
+update_tvshow_obj =         [   "{Title}","{Plot}","{Status}","{RatingId}","{Premiere}","{Genre}","{Title}",
                                 "{Unique}","{Mpaa}","{Studio}","{SortTitle}","{ShowId}"
                             ]
 update_tvshow_link =   	"""	INSERT OR REPLACE INTO	tvshowlinkpath(idShow, idPath) 
diff --git a/resources/lib/objects/movies.py b/resources/lib/objects/movies.py
index 359b25ce..cf32699c 100644
--- a/resources/lib/objects/movies.py
+++ b/resources/lib/objects/movies.py
@@ -10,7 +10,7 @@ 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
+from helper import api, catch, stop, validate, emby_item, library_check, values, settings, Local
 
 ##################################################################################################
 
@@ -72,6 +72,8 @@ class Movies(KodiDb):
                 update = False
                 LOG.info("MovieId %s missing from kodi. repairing the entry.", obj['MovieId'])
 
+        if not settings('syncRottenTomatoes.bool'):
+            obj['CriticRating'] = None
 
         obj['Path'] = API.get_file_path(obj['Path'])
         obj['LibraryId'] = library['Id']
@@ -87,8 +89,8 @@ class Movies(KodiDb):
         obj['Resume'] = API.adjust_resume((obj['Resume'] or 0) / 10000000.0)
         obj['Runtime'] = round(float((obj['Runtime'] or 0) / 10000000.0), 6)
         obj['People'] = API.get_people_artwork(obj['People'])
-        obj['DateAdded'] = obj['DateAdded'].split('.')[0].replace('T', " ")
-        obj['DatePlayed'] = None if not obj['DatePlayed'] else obj['DatePlayed'].split('.')[0].replace('T', " ")
+        obj['DateAdded'] = Local(obj['DateAdded']).split('.')[0].replace('T', " ")
+        obj['DatePlayed'] = None if not obj['DatePlayed'] else Local(obj['DatePlayed']).split('.')[0].replace('T', " ")
         obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount'])
         obj['Artwork'] = API.get_all_artwork(self.objects.map(item, 'Artwork'))
         obj['Video'] = API.video_streams(obj['Video'] or [], obj['Container'])
@@ -302,7 +304,7 @@ class Movies(KodiDb):
         obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount'])
 
         if obj['DatePlayed']:
-            obj['DatePlayed'] = obj['DatePlayed'].split('.')[0].replace('T', " ")
+            obj['DatePlayed'] = Local(obj['DatePlayed']).split('.')[0].replace('T', " ")
 
         if obj['Favorite']:
             self.get_tag(*values(obj, QU.get_tag_movie_obj))
diff --git a/resources/lib/objects/music.py b/resources/lib/objects/music.py
index fbc43480..a80b0d33 100644
--- a/resources/lib/objects/music.py
+++ b/resources/lib/objects/music.py
@@ -10,7 +10,7 @@ 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
+from helper import api, catch, stop, validate, emby_item, values, library_check, settings, Local
 
 ##################################################################################################
 
@@ -268,10 +268,10 @@ class Music(KodiDb):
         obj['Artwork'] = API.get_all_artwork(self.objects.map(item, 'ArtworkMusic'), True)
 
         if obj['DateAdded']:
-            obj['DateAdded'] = obj['DateAdded'].split('.')[0].replace('T', " ")
+            obj['DateAdded'] = Local(obj['DateAdded']).split('.')[0].replace('T', " ")
 
         if obj['DatePlayed']:
-            obj['DatePlayed'] = obj['DatePlayed'].split('.')[0].replace('T', " ")
+            obj['DatePlayed'] = Local(obj['DatePlayed']).split('.')[0].replace('T', " ")
 
         if obj['Disc'] != 1:
             obj['Index'] = obj['Disc'] * 2 ** 16 + obj['Index']
@@ -442,7 +442,7 @@ class Music(KodiDb):
         if obj['Media'] == 'song':
 
             if obj['DatePlayed']:
-                obj['DatePlayed'] = obj['DatePlayed'].split('.')[0].replace('T', " ")
+                obj['DatePlayed'] = Local(obj['DatePlayed']).split('.')[0].replace('T', " ")
 
             self.rate_song(*values(obj, QU.update_song_rating_obj))
 
diff --git a/resources/lib/objects/musicvideos.py b/resources/lib/objects/musicvideos.py
index 98bae32a..1a528ba4 100644
--- a/resources/lib/objects/musicvideos.py
+++ b/resources/lib/objects/musicvideos.py
@@ -10,7 +10,7 @@ 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
+from helper import api, catch, stop, validate, library_check, emby_item, values, Local
 
 ##################################################################################################
 
@@ -80,12 +80,12 @@ class MusicVideos(KodiDb):
         obj['ArtistItems'] = obj['ArtistItems'] or []
         obj['Studios'] = [API.validate_studio(studio) for studio in (obj['Studios'] or [])]
         obj['Plot'] = API.get_overview(obj['Plot'])
-        obj['DateAdded'] = obj['DateAdded'].split('.')[0].replace('T', " ")
-        obj['DatePlayed'] = None if not obj['DatePlayed'] else obj['DatePlayed'].split('.')[0].replace('T', " ")
+        obj['DateAdded'] = Local(obj['DateAdded']).split('.')[0].replace('T', " ")
+        obj['DatePlayed'] = None if not obj['DatePlayed'] else Local(obj['DatePlayed']).split('.')[0].replace('T', " ")
         obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount'])
         obj['Resume'] = API.adjust_resume((obj['Resume'] or 0) / 10000000.0)
         obj['Runtime'] = round(float((obj['Runtime'] or 0) / 10000000.0), 6)
-        obj['Premiere'] = obj['Premiere'] or datetime.date(obj['Year'] or 2021, 1, 1)
+        obj['Premiere'] = Local(obj['Premiere']) if obj['Premiere'] else datetime.date(obj['Year'] or 2021, 1, 1)
         obj['Genre'] = " / ".join(obj['Genres'])
         obj['Studio'] = " / ".join(obj['Studios'])
         obj['Artists'] = " / ".join(obj['Artists'] or [])
@@ -205,7 +205,7 @@ class MusicVideos(KodiDb):
         obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount'])
 
         if obj['DatePlayed']:
-            obj['DatePlayed'] = obj['DatePlayed'].split('.')[0].replace('T', " ")
+            obj['DatePlayed'] = Local(obj['DatePlayed']).split('.')[0].replace('T', " ")
 
         if obj['Favorite']:
             self.get_tag(*values(obj, QU.get_tag_mvideo_obj))
diff --git a/resources/lib/objects/obj_map.json b/resources/lib/objects/obj_map.json
index d9d63e87..420c0120 100644
--- a/resources/lib/objects/obj_map.json
+++ b/resources/lib/objects/obj_map.json
@@ -40,7 +40,8 @@
 		"Audio": "MediaSources/0/MediaStreams:?Type=Audio",
 		"Video": "MediaSources/0/MediaStreams:?Type=Video",
 		"Container": "MediaSources/0/Container",
-		"EmbyParentId": "ParentId"
+		"EmbyParentId": "ParentId",
+		"CriticRating": "CriticRating"
 	},
 	"MovieUserData": {
 		"Id": "Id",
@@ -76,7 +77,8 @@
 		"Tags": "Tags",
 		"Favorite": "UserData/IsFavorite",
 		"RecursiveCount": "RecursiveItemCount",
-		"EmbyParentId": "ParentId"
+		"EmbyParentId": "ParentId",
+		"Status": "Status"
 	},
 	"Season": {
 		"Id": "Id",
@@ -299,7 +301,9 @@
 		"Unwatched": "UserData/UnplayedItemCount",
 		"ChildCount": "ChildCount",
 		"RecursiveCount": "RecursiveItemCount",
-		"MediaType": "MediaType"
+		"MediaType": "MediaType",
+		"CriticRating": "CriticRating",
+		"Status": "Status"
 	},
 	"BrowseAudio": {
 		"Id": "Id",
diff --git a/resources/lib/objects/tvshows.py b/resources/lib/objects/tvshows.py
index d55ef93e..5e8c4ec3 100644
--- a/resources/lib/objects/tvshows.py
+++ b/resources/lib/objects/tvshows.py
@@ -12,7 +12,7 @@ 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
+from helper import api, catch, stop, validate, emby_item, library_check, settings, values, Local
 
 ##################################################################################################
 
@@ -101,10 +101,13 @@ class TVShows(KodiDb):
         obj['Studio'] = " / ".join(obj['Studios'])
         obj['Artwork'] = API.get_all_artwork(self.objects.map(item, 'Artwork'))
 
+        if obj['Status'] != 'Ended':
+            obj['Status'] = None
+
         self.get_path_filename(obj)
 
         if obj['Premiere']:
-            obj['Premiere'] = str(obj['Premiere']).split('.')[0].replace('T', " ")
+            obj['Premiere'] = str(Local(obj['Premiere'])).split('.')[0].replace('T', " ")
 
         tags = []
         tags.extend(obj['Tags'] or [])
@@ -299,8 +302,8 @@ class TVShows(KodiDb):
         obj['Resume'] = API.adjust_resume((obj['Resume'] or 0) / 10000000.0)
         obj['Runtime'] = round(float((obj['Runtime'] or 0) / 10000000.0), 6)
         obj['People'] = API.get_people_artwork(obj['People'] or [])
-        obj['DateAdded'] = obj['DateAdded'].split('.')[0].replace('T', " ")
-        obj['DatePlayed'] = None if not obj['DatePlayed'] else obj['DatePlayed'].split('.')[0].replace('T', " ")
+        obj['DateAdded'] = Local(obj['DateAdded']).split('.')[0].replace('T', " ")
+        obj['DatePlayed'] = None if not obj['DatePlayed'] else Local(obj['DatePlayed']).split('.')[0].replace('T', " ")
         obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount'])
         obj['Artwork'] = API.get_all_artwork(self.objects.map(item, 'Artwork'))
         obj['Video'] = API.video_streams(obj['Video'] or [], obj['Container'])
@@ -310,7 +313,7 @@ class TVShows(KodiDb):
         self.get_episode_path_filename(obj)
 
         if obj['Premiere']:
-            obj['Premiere'] = obj['Premiere'].split('.')[0].replace('T', " ")
+            obj['Premiere'] = Local(obj['Premiere']).split('.')[0].replace('T', " ")
 
         if obj['Season'] is None:
             if obj['AbsoluteNumber']:
@@ -479,10 +482,10 @@ class TVShows(KodiDb):
             obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount'])
 
             if obj['DatePlayed']:
-                obj['DatePlayed'] = obj['DatePlayed'].split('.')[0].replace('T', " ")
+                obj['DatePlayed'] = Local(obj['DatePlayed']).split('.')[0].replace('T', " ")
 
             if obj['DateAdded']:
-                obj['DateAdded'] = obj['DateAdded'].split('.')[0].replace('T', " ")
+                obj['DateAdded'] = Local(obj['DateAdded']).split('.')[0].replace('T', " ")
 
             self.add_playstate(*values(obj, QU.add_bookmark_obj))