diff --git a/addon.xml b/addon.xml index d476ba59..962282c5 100644 --- a/addon.xml +++ b/addon.xml @@ -1,7 +1,7 @@ diff --git a/resources/lib/KodiMonitor.py b/resources/lib/KodiMonitor.py index 785b4be9..ab4a7b2b 100644 --- a/resources/lib/KodiMonitor.py +++ b/resources/lib/KodiMonitor.py @@ -98,22 +98,31 @@ class Kodi_Monitor(xbmc.Monitor): WriteKodiDB().updatePlayCountFromKodi(item, type, playcount) if method == "VideoLibrary.OnRemove": xbmc.log('Intercepted remove from sender: ' + sender + ' method: ' + method + ' data: ' + data) + WINDOW = xbmcgui.Window( 10000 ) + if WINDOW.getProperty("suspendDeletes") == "True": + #This is a handshake to not try to delete if the item was removed from the Kodi DB due to sync + xbmc.log('Item deleted by sync') + WINDOW.setProperty("suspendDeletes", "False") + return jsondata = json.loads(data) if jsondata != None: if jsondata.get("type") == "episode": episodeid = jsondata.get("id") - WINDOW = xbmcgui.Window( 10000 ) - #ignore if the item has just been deleted by the background sync - if not WINDOW.getProperty(episodeid,"deleted"): - MBlist = WINDOW.getProperty("episodeid" + str(episodeid)).split(";;") - url='http://' + server + '/mediabrowser/Items?Ids=' + MBlist[1] + '&format=json' - data = DownloadUtils().downloadUrl(url=url, suppress=True, popup=0) - if data != "": - return_value = xbmcgui.Dialog().yesno("Confirm Delete", "Delete: "+ MBlist[0] + "\n on Emby Server?\nEmbyID: " + MBlist[1]) - if return_value: - url='http://' + server + '/mediabrowser/Items/' + MBlist[1] - xbmc.log('Deleting via URL: ' + url) - DownloadUtils().downloadUrl(url, type="DELETE") + MBlist = WINDOW.getProperty("episodeid" + str(episodeid)).split(";;") + #MBlist[0] is the ID, and [1] the title + url='http://' + server + '/mediabrowser/Items?Ids=' + MBlist[1] + '&format=json' + #This is a check to see if the item exists on the server, if it doesn't it may have already been deleted by another client + data = DownloadUtils().downloadUrl(url=url, suppress=True, popup=0) + result = json.loads(data) + item = result.get("Items")[0] + if WINDOW.getProperty("embyid" + item.get("Id")) == "deleted": + xbmc.log('Item was already deleted: ' + str(MBlist)) + elif data != "": + return_value = xbmcgui.Dialog().yesno("Confirm Delete", "Delete: "+ MBlist[0] + "\n on Emby Server?") + if return_value: + url='http://' + server + '/mediabrowser/Items/' + MBlist[1] + xbmc.log('Deleting via URL: ' + url) + DownloadUtils().downloadUrl(url, type="DELETE") diff --git a/resources/lib/LibrarySync.py b/resources/lib/LibrarySync.py index 138718d0..c2f23b78 100644 --- a/resources/lib/LibrarySync.py +++ b/resources/lib/LibrarySync.py @@ -580,7 +580,7 @@ class LibrarySync(): allMB3EpisodeIds = set(allMB3EpisodeIds) for episode in allKodiEpisodeIds: if episode.get('episodeid') not in allMB3EpisodeIds: - WINDOW.setProperty(episode.get('episodeid'),"deleted") + WINDOW.setProperty("embyid" + str(episode.get('episodeid')),"deleted") WriteKodiDB().deleteEpisodeFromKodiLibrary(episode.get('episodeid'),episode.get('tvshowid')) cleanneeded = True totalItemsDeleted += 1 diff --git a/resources/lib/WriteKodiDB.py b/resources/lib/WriteKodiDB.py index 6bc8e7bd..dd486fc6 100644 --- a/resources/lib/WriteKodiDB.py +++ b/resources/lib/WriteKodiDB.py @@ -790,9 +790,13 @@ class WriteKodiDB(): if episode != None: strmfile = episode["file"] nfofile = strmfile.replace(".strm",".nfo") + WINDOW = xbmcgui.Window( 10000 ) + WINDOW.setProperty("suspendDeletes", "True") xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.RemoveEpisode", "params": { "episodeid": %i}, "id": 1 }' %(episode["episodeid"])) xbmcvfs.delete(strmfile) xbmcvfs.delete(nfofile) + while WINDOW.getProperty("suspendDeletes") == "True": + xbmc.sleep(100) def addTVShowToKodiLibrary( self, item ): itemPath = os.path.join(tvLibrary,item["Id"]) diff --git a/resources/settings.xml b/resources/settings.xml index 5124d2e8..0ee1b523 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -29,7 +29,7 @@ - + diff --git a/service.py b/service.py index 29983b70..7d81725d 100644 --- a/service.py +++ b/service.py @@ -79,7 +79,7 @@ class Service(): pass else: # background worker for database sync - if DownloadUtils().authenticate(retreive=False) != "": + if DownloadUtils().authenticate(retreive=True) != "": # Correctly launch the websocket, if user manually launches the add-on if (self.newWebSocketThread == None):