diff --git a/default.py b/default.py index 110ae76d..3912b4f5 100644 --- a/default.py +++ b/default.py @@ -130,7 +130,7 @@ class Main(): elif mode == "texturecache": import artwork - artwork.Artwork().FullTextureCacheSync() + artwork.Artwork().fullTextureCacheSync() else: entrypoint.doMainListing() diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml index 9c6d4ad2..ee2dc385 100644 --- a/resources/language/English/strings.xml +++ b/resources/language/English/strings.xml @@ -6,56 +6,23 @@ Primary Server Address Play from HTTP instead of SMB Log level + Device Name + Advanced Username Port Number + Number of recent Music Albums to show: + Number of recent Movies to show: + Number of recent TV episodes to show: - - - - - - Network Username: - Network Password: - Transcode: - - Emby - Network - Device Name - - Advanced - - Number of recent Movies to show: - Number of recent TV episodes to show: - Number of recent Music Albums to show: - Mark watched at start of playback: - Set Season poster for episodes - - Genre Filter ... - Play All from Here Refresh Delete - Add Movie to CouchPotato - Incorrect Username/Password Username not found - Deleting Waiting for server to delete - Server Default - Title - Year - Premiere Date - Date Created - Critic Rating - Community Rating - Play Count - Budget - - Sort By - None Action Adventure @@ -80,69 +47,40 @@ Genre Filter Confirm file deletion - Delete this item? This action will delete media and associated data files. - Mark Watched - Mark Unwatched - Add to Favorites - Remove from Favorites - Sort By ... + Mark watched + Mark unwatched + + Sort by Sort Order Descending Sort Order Ascending - Show People Resume Resume from Start from beginning - Interface - Include Stream Info - Include People - Include Overview Offer delete after playback For Episodes For Movies - Background Art Refresh Rate (seconds) + Add Resume Percent Add Episode Number Show Load Progress Loading Content Retrieving Data + Done - Processing Item : - Play Error - This item is not playable - Local path detected - Your MB3 Server contains local paths. Please change server paths to UNC or change XBMB3C setting 'Play from Stream' to true. Path: - Warning - Debug logging enabled. - This will affect performance. + Warning Error - Monitoring service is not running - If you have just installed please restart Kodi Search - Enable Theme Music (Requires Restart) - - Loop Theme Music - Enable Background Image (Requires Restart) - Services - - Skin does not support setting views - Select item action (Requires Restart) - - Sort NextUp by Show Title Enable Enhanced Images (eg CoverArt) Metadata Artwork Video Quality - Enable Suggested Loader (Requires Restart) - Add Season Number - Flatten Seasons - - Direct Play - HTTP - Direct Play + Direct Play Transcoding Server Detection Succeeded Found server @@ -176,39 +114,24 @@ TV Genres TV Networks TV Actors - Playlists - Search - Set Views - - Select User + Playlists - Profiling enabled. - Please remember to turn off when finished testing. - Error in ArtworkRotationThread + Set Views + Select User Unable to connect to server - Error in LoadMenuOptionsThread - - Enable Playlists Loader (Requires Restart) Songs Albums Album Artists Artists Music Genres - - Enable Theme Videos (Requires Restart) - - Loop Theme Videos - - AutoPlay remaining episodes in a season - Compress Artwork - Latest - In Progress - NextUp + + Latest + In Progress + NextUp User Views Report Metrics - Use Kodi Sorting - Runtime - + Random Movies Random Episodes Random Items @@ -220,15 +143,9 @@ Sync Movie BoxSets Reset local Kodi database - Enable watched/resume status sync - DB Sync Indication: - Play Count Sync Indication: Enable HTTPS Force Transcoding Codecs - Enable Netflix style next up notification - - The number of seconds before the end to show the notification - Show Emby Info dialog on play/select action Enable server connection message on startup Recently added Home Videos @@ -267,12 +184,6 @@ Set custom song rating (0-5) - Primary Server Address - Play from HTTP instead of SMB - Log level - Username - Port Number - Verify Host SSL Certificate Client SSL certificate Use alternate address @@ -357,5 +268,52 @@ Disable Emby music library? Direct stream the music library? Select this option if the music library will be remotely accessed. Delete file(s) from Emby Server? This will also delete the file(s) from disk! + Running the caching process may take some time. Continue anyway? + Artwork cache sync + Reset existing artwork cache? + Updating artwork cache: + Waiting for all threads to exit: + Kodi can't locate file: + You may need to verify your network credentials in the add-on settings or use the Emby path substitution to format your path correctly (Emby dashboard > library). Stop syncing? + Added: + If you fail to log in too many times, the Emby server might lock your account. Proceed anyway? + Live TV Channels (experimental) + Live TV Recordings (experimental) + Settings + Add user to session + Refresh Emby playlists/Video nodes + Perform manual sync + Repair local database (force update all content) + Perform local database reset + Cache all artwork + Sync Emby Theme Media to Kodi + Add/Remove user from the session + Add user + Remove user + Remove user from the session + Success! + Removed from viewing session: + Added to viewing session: + Unable to add/remove user from the session. + The task succeeded + The task failed + Direct Stream + Playback method for your themes + The settings file does not exist in TV Tunes. Change a setting and run the task again. + Are you sure you want to reset your local Kodi database? + Modify/Remove network credentials + Modify + Remove + Removed: + Enter the network username + Enter the network password + Added network credentials for: + Input the server name or IP address as indicated in your emby library paths. For example, the server name: \\\\SERVER-PC\\path\\ is "SERVER-PC" + Modify the server name or IP address + Enter the server name or IP address + Could not reset the database. Try again. + Remove all cached artwork? + Reset all Emby add-on settings? + Database reset has completed, Kodi will now restart to apply the changes. - + \ No newline at end of file diff --git a/resources/lib/entrypoint.py b/resources/lib/entrypoint.py index 942a0d78..ea63add0 100644 --- a/resources/lib/entrypoint.py +++ b/resources/lib/entrypoint.py @@ -30,21 +30,19 @@ log = Logging('Entrypoint').log ################################################################################################# -def doPlayback(itemid, dbid): +def doPlayback(itemId, dbId): emby = embyserver.Read_EmbyServer() - item = emby.getItem(itemid) - pbutils.PlaybackUtils(item).play(itemid, dbid) + item = emby.getItem(itemId) + pbutils.PlaybackUtils(item).play(itemId, dbId) ##### DO RESET AUTH ##### def resetAuth(): # User tried login and failed too many times resp = xbmcgui.Dialog().yesno( - heading="Warning", - line1=( - "Emby might lock your account if you fail to log in too many times. " - "Proceed anyway?")) - if resp == 1: + heading=lang(30132), + line1=lang(33050)) + if resp: log("Reset login attempts.", 1) window('emby_serverStatus', value="Auth") else: @@ -58,6 +56,7 @@ def addDirectoryItem(label, path, folder=True): xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=path, listitem=li, isFolder=folder) def doMainListing(): + xbmcplugin.setContent(int(sys.argv[1]), 'files') # Get emby nodes from the window props embyprops = window('Emby.nodes.total') @@ -68,39 +67,54 @@ def doMainListing(): if not path: path = window('Emby.nodes.%s.content' % i) label = window('Emby.nodes.%s.title' % i) - node_type = window('Emby.nodes.%s.type' % i) - #because we do not use seperate entrypoints for each content type, we need to figure out which items to show in each listing. - #for now we just only show picture nodes in the picture library video nodes in the video library and all nodes in any other window - if path and xbmc.getCondVisibility("Window.IsActive(Pictures)") and node_type == "photos": - addDirectoryItem(label, path) - elif path and xbmc.getCondVisibility("Window.IsActive(VideoLibrary)") and node_type != "photos": - addDirectoryItem(label, path) - elif path and not xbmc.getCondVisibility("Window.IsActive(VideoLibrary) | Window.IsActive(Pictures) | Window.IsActive(MusicLibrary)"): - addDirectoryItem(label, path) + node = window('Emby.nodes.%s.type' % i) + + ''' because we do not use seperate entrypoints for each content type, + we need to figure out which items to show in each listing. + for now we just only show picture nodes in the picture library + video nodes in the video library and all nodes in any other window ''' - #experimental live tv nodes - addDirectoryItem("Live Tv Channels (experimental)", "plugin://plugin.video.emby/?mode=browsecontent&type=tvchannels&folderid=root") - addDirectoryItem("Live Tv Recordings (experimental)", "plugin://plugin.video.emby/?mode=browsecontent&type=recordings&folderid=root") + '''if path and xbmc.getCondVisibility("Window.IsActive(Pictures)") and node == "photos": + addDirectoryItem(label, path) + elif path and xbmc.getCondVisibility("Window.IsActive(VideoLibrary)") + and node != "photos": + addDirectoryItem(label, path) + elif path and not xbmc.getCondVisibility("Window.IsActive(VideoLibrary) | + Window.IsActive(Pictures) | Window.IsActive(MusicLibrary)"): + addDirectoryItem(label, path)''' + + if path: + if xbmc.getCondVisibility("Window.IsActive(Pictures)") and node == "photos": + addDirectoryItem(label, path) + elif xbmc.getCondVisibility("Window.IsActive(VideoLibrary)") and node != "photos": + addDirectoryItem(label, path) + else: + addDirectoryItem(label, path) + + # experimental live tv nodes + if not xbmc.getCondVisibility("Window.IsActive(Pictures)"): + addDirectoryItem(lang(33051), + "plugin://plugin.video.emby/?mode=browsecontent&type=tvchannels&folderid=root") + addDirectoryItem(lang(33052), + "plugin://plugin.video.emby/?mode=browsecontent&type=recordings&folderid=root") # some extra entries for settings and stuff. TODO --> localize the labels - addDirectoryItem("Network credentials", "plugin://plugin.video.emby/?mode=passwords") - addDirectoryItem("Settings", "plugin://plugin.video.emby/?mode=settings") - addDirectoryItem("Add user to session", "plugin://plugin.video.emby/?mode=adduser") - addDirectoryItem("Refresh Emby playlists/nodes", "plugin://plugin.video.emby/?mode=refreshplaylist") - addDirectoryItem("Perform manual sync", "plugin://plugin.video.emby/?mode=manualsync") - addDirectoryItem("Repair local database (force update all content)", "plugin://plugin.video.emby/?mode=repair") - addDirectoryItem("Perform local database reset (full resync)", "plugin://plugin.video.emby/?mode=reset") - addDirectoryItem("Cache all images to Kodi texture cache", "plugin://plugin.video.emby/?mode=texturecache") - addDirectoryItem("Sync Emby Theme Media to Kodi", "plugin://plugin.video.emby/?mode=thememedia") + addDirectoryItem(lang(30517), "plugin://plugin.video.emby/?mode=passwords") + addDirectoryItem(lang(33053), "plugin://plugin.video.emby/?mode=settings") + addDirectoryItem(lang(33054), "plugin://plugin.video.emby/?mode=adduser") + addDirectoryItem(lang(33055), "plugin://plugin.video.emby/?mode=refreshplaylist") + addDirectoryItem(lang(33056), "plugin://plugin.video.emby/?mode=manualsync") + addDirectoryItem(lang(33057), "plugin://plugin.video.emby/?mode=repair") + addDirectoryItem(lang(33058), "plugin://plugin.video.emby/?mode=reset") + addDirectoryItem(lang(33059), "plugin://plugin.video.emby/?mode=texturecache") + addDirectoryItem(lang(33060), "plugin://plugin.video.emby/?mode=thememedia") xbmcplugin.endOfDirectory(int(sys.argv[1])) - ##### Generate a new deviceId def resetDeviceId(): dialog = xbmcgui.Dialog() - language = utils.language deviceId_old = window('emby_deviceId') try: @@ -109,8 +123,8 @@ def resetDeviceId(): except Exception as e: log("Failed to generate a new device Id: %s" % e, 1) dialog.ok( - heading="Emby for Kodi", - line1=language(33032)) + heading=lang(29999), + line1=lang(33032)) else: log("Successfully removed old deviceId: %s New deviceId: %s" % (deviceId_old, deviceId), 1) dialog.ok( @@ -123,21 +137,21 @@ def deleteItem(): # Serves as a keymap action if xbmc.getInfoLabel('ListItem.Property(embyid)'): # If we already have the embyid - embyid = xbmc.getInfoLabel('ListItem.Property(embyid)') + itemId = xbmc.getInfoLabel('ListItem.Property(embyid)') else: - dbid = xbmc.getInfoLabel('ListItem.DBID') - itemtype = xbmc.getInfoLabel('ListItem.DBTYPE') + dbId = xbmc.getInfoLabel('ListItem.DBID') + itemType = xbmc.getInfoLabel('ListItem.DBTYPE') - if not itemtype: + if not itemType: if xbmc.getCondVisibility('Container.Content(albums)'): - itemtype = "album" + itemType = "album" elif xbmc.getCondVisibility('Container.Content(artists)'): - itemtype = "artist" + itemType = "artist" elif xbmc.getCondVisibility('Container.Content(songs)'): - itemtype = "song" + itemType = "song" elif xbmc.getCondVisibility('Container.Content(pictures)'): - itemtype = "picture" + itemType = "picture" else: log("Unknown type, unable to proceed.", 1) return @@ -145,7 +159,7 @@ def deleteItem(): embyconn = utils.kodiSQL('emby') embycursor = embyconn.cursor() emby_db = embydb.Embydb_Functions(embycursor) - item = emby_db.getItem_byKodiId(dbid, itemtype) + item = emby_db.getItem_byKodiId(dbId, itemType) embycursor.close() try: @@ -156,17 +170,13 @@ def deleteItem(): if settings('skipContextMenu') != "true": resp = xbmcgui.Dialog().yesno( - heading="Confirm delete", - line1=("Delete file from Emby Server? This will " - "also delete the file(s) from disk!")) + heading=lang(29999), + line1=lang(33041)) if not resp: - log("User skipped deletion for: %s." % embyid, 1) + log("User skipped deletion for: %s." % itemId, 1) return - doUtils = downloadutils.DownloadUtils() - url = "{server}/emby/Items/%s?format=json" % embyid - log("Deleting request: %s" % embyid, 0) - doUtils.downloadUrl(url, action_type="DELETE") + embyserver.Read_EmbyServer().deleteItem(itemId) ##### ADD ADDITIONAL USERS ##### def addUser(): @@ -203,7 +213,7 @@ def addUser(): # Display dialog if there's additional users if additionalUsers: - option = dialog.select("Add/Remove user from the session", ["Add user", "Remove user"]) + option = dialog.select(lang(33061), [lang(33062), lang(33063)]) # Users currently in the session additionalUserlist = {} additionalUsername = [] @@ -216,15 +226,15 @@ def addUser(): if option == 1: # User selected Remove user - resp = dialog.select("Remove user from the session", additionalUsername) + resp = dialog.select(lang(33064), additionalUsername) if resp > -1: selected = additionalUsername[resp] selected_userId = additionalUserlist[selected] url = "{server}/emby/Sessions/%s/Users/%s" % (sessionId, selected_userId) doUtils.downloadUrl(url, postBody={}, action_type="DELETE") dialog.notification( - heading="Success!", - message="%s removed from viewing session" % selected, + heading=lang(29999), + message="%s %s" % (lang(33066), selected), icon="special://home/addons/plugin.video.emby/icon.png", time=1000) @@ -256,16 +266,16 @@ def addUser(): url = "{server}/emby/Sessions/%s/Users/%s" % (sessionId, selected_userId) doUtils.downloadUrl(url, postBody={}, action_type="POST") dialog.notification( - heading="Success!", - message="%s added to viewing session" % selected, + heading=lang(29999), + message="%s %s" % (lang(33067), selected), icon="special://home/addons/plugin.video.emby/icon.png", time=1000) except: log("Failed to add user to session.") dialog.notification( - heading="Error", - message="Unable to add/remove user from the session.", + heading=lang(29999), + message=lang(33068), icon=xbmcgui.NOTIFICATION_ERROR) # Add additional user images @@ -297,7 +307,7 @@ def getThemeMedia(): playback = None # Choose playback method - resp = dialog.select("Playback method for your themes", ["Direct Play", "Direct Stream"]) + resp = dialog.select(lang(33072), [lang(30165), lang(33071)]) if resp == 0: playback = "DirectPlay" elif resp == 1: @@ -322,11 +332,7 @@ def getThemeMedia(): else: # if it does not exist this will not work so warn user # often they need to edit the settings first for it to be created. - dialog.ok( - heading="Warning", - line1=( - "The settings file does not exist in tvtunes. ", - "Go to the tvtunes addon and change a setting, then come back and re-run.")) + dialog.ok(heading=lang(29999), line1=lang(33073))0 xbmc.executebuiltin('Addon.OpenSettings(script.tvtunes)') return @@ -442,8 +448,8 @@ def getThemeMedia(): nfo_file.close() dialog.notification( - heading="Emby for Kodi", - message="Themes added!", + heading=lang(29999), + message=lang(33069), icon="special://home/addons/plugin.video.emby/icon.png", time=1000, sound=False) @@ -461,8 +467,8 @@ def refreshPlaylist(): # Refresh views lib.refreshViews() dialog.notification( - heading="Emby for Kodi", - message="Emby playlists/nodes refreshed", + heading=lang(29999), + message=lang(33069), icon="special://home/addons/plugin.video.emby/icon.png", time=1000, sound=False) @@ -470,8 +476,8 @@ def refreshPlaylist(): except Exception as e: log("Refresh playlists/nodes failed: %s" % e, 1) dialog.notification( - heading="Emby for Kodi", - message="Emby playlists/nodes refresh failed", + heading=lang(29999), + message=lang(33070), icon=xbmcgui.NOTIFICATION_ERROR, time=1000, sound=False) diff --git a/resources/lib/itemtypes.py b/resources/lib/itemtypes.py index 197b71c5..934efcee 100644 --- a/resources/lib/itemtypes.py +++ b/resources/lib/itemtypes.py @@ -212,13 +212,8 @@ class Items(object): # Verify if direct path is accessible or not if window('emby_pathverified') != "true" and not xbmcvfs.exists(path): resp = xbmcgui.Dialog().yesno( - heading="Can't validate path", - line1=( - "Kodi can't locate file: %s. " - "You may need to verify your network credentials in the " - "add-on settings or use the Emby path substitution " - "to format your path correctly (Emby dashboard > library). " - "Stop syncing?" % path)) + heading=lang(29999), + line1="%s %s. %s" % (lang(33047), path, lang(33048))) if resp: window('emby_shouldStop', value="true") return False @@ -230,8 +225,8 @@ class Items(object): if time: # It's possible for the time to be 0. It should be considered disabled in this case. xbmcgui.Dialog().notification( - heading="Emby for Kodi", - message="Added: %s" % name, + heading=lang(29999), + message="%s %s" % (lang(33049), name), icon="special://home/addons/plugin.video.emby/icon.png", time=time, sound=False) @@ -571,9 +566,7 @@ class Movies(Items): try: movieid = emby_dbitem[0] fileid = emby_dbitem[1] - log( - "Update playstate for movie: %s fileid: %s" - % (item['Name'], fileid), 1) + log("Update playstate for movie: %s fileid: %s" % (item['Name'], fileid), 1) except TypeError: return @@ -2373,19 +2366,19 @@ class Music(Items): log("Deleted %s: %s from kodi database" % (mediatype, itemid), 1) - def removeSong(self, kodiid): + def removeSong(self, kodiId): kodicursor = self.kodicursor - self.artwork.deleteArtwork(kodiid, "song", self.kodicursor) - self.kodicursor.execute("DELETE FROM song WHERE idSong = ?", (kodiid,)) + self.artwork.deleteArtwork(kodiId, "song", self.kodicursor) + self.kodicursor.execute("DELETE FROM song WHERE idSong = ?", (kodiId,)) - def removeAlbum(self, kodiid): + def removeAlbum(self, kodiId): - self.artwork.deleteArtwork(kodiid, "album", self.kodicursor) - self.kodicursor.execute("DELETE FROM album WHERE idAlbum = ?", (kodiid,)) + self.artwork.deleteArtwork(kodiId, "album", self.kodicursor) + self.kodicursor.execute("DELETE FROM album WHERE idAlbum = ?", (kodiId,)) - def removeArtist(self, kodiid): + def removeArtist(self, kodiId): - self.artwork.deleteArtwork(kodiid, "artist", self.kodicursor) - self.kodicursor.execute("DELETE FROM artist WHERE idArtist = ?", (kodiid,)) + self.artwork.deleteArtwork(kodiId, "artist", self.kodicursor) + self.kodicursor.execute("DELETE FROM artist WHERE idArtist = ?", (kodiId,)) \ No newline at end of file diff --git a/resources/lib/kodimonitor.py b/resources/lib/kodimonitor.py index cc217de9..16baa487 100644 --- a/resources/lib/kodimonitor.py +++ b/resources/lib/kodimonitor.py @@ -94,7 +94,7 @@ class KodiMonitor(xbmc.Monitor): try: itemid = emby_dbitem[0] except TypeError: - log("No kodiid returned.", 1) + log("No kodiId returned.", 1) else: url = "{server}/emby/Users/{UserId}/Items/%s?format=json" % itemid result = doUtils.downloadUrl(url) diff --git a/resources/lib/librarysync.py b/resources/lib/librarysync.py index 6d047148..e31a83cb 100644 --- a/resources/lib/librarysync.py +++ b/resources/lib/librarysync.py @@ -320,7 +320,7 @@ class LibrarySync(threading.Thread): window('emby_initialScan', clear=True) if forceddialog: xbmcgui.Dialog().notification( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s %s" % (message, lang(33025), str(elapsedtotal).split('.')[0]), icon="special://home/addons/plugin.video.emby/icon.png", @@ -541,7 +541,7 @@ class LibrarySync(threading.Thread): self.vnodes.singleNode(totalnodes, "channels", "movies", "channels") totalnodes += 1 # Save total - utils.window('Emby.nodes.total', str(totalnodes)) + window('Emby.nodes.total', str(totalnodes)) # Remove any old referenced views log("Removing views: %s" % current_views, 1) @@ -567,7 +567,7 @@ class LibrarySync(threading.Thread): # Get items per view if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33017), view['name'])) # Initial or repair sync @@ -596,7 +596,7 @@ class LibrarySync(threading.Thread): ##### PROCESS BOXSETS ##### if pdialog: - pdialog.update(heading="Emby for Kodi", message=lang(33018)) + pdialog.update(heading=lang(29999), message=lang(33018)) boxsets = self.emby.getBoxset(dialog=pdialog) total = boxsets['TotalRecordCount'] @@ -642,7 +642,7 @@ class LibrarySync(threading.Thread): if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33019), viewName)) # Initial or repair sync @@ -688,7 +688,7 @@ class LibrarySync(threading.Thread): # Get items per view if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33020), view['name'])) all_embytvshows = self.emby.getShows(view['id'], dialog=pdialog) @@ -743,7 +743,7 @@ class LibrarySync(threading.Thread): if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33021), itemtype)) all_embyitems = process[itemtype][0](dialog=pdialog) @@ -900,13 +900,13 @@ class LibrarySync(threading.Thread): except Exception as e: window('emby_dbScan', clear=True) xbmcgui.Dialog().ok( - heading="Emby for Kodi", + heading=lang(29999), line1=( "Library sync thread has exited! " "You should restart Kodi now. " "Please report this on the forum.")) raise - + @utils.profiling() def run_internal(self): dialog = xbmcgui.Dialog() @@ -934,10 +934,10 @@ class LibrarySync(threading.Thread): log("Database version out of date: %s minimum version required: %s" % (currentVersion, minVersion), 0) - resp = dialog.yesno("Emby for Kodi", lang(33022)) + resp = dialog.yesno(lang(29999), lang(33022)) if not resp: log("Database version is out of date! USER IGNORED!", 0) - dialog.ok("Emby for Kodi", lang(33023)) + dialog.ok(lang(29999), lang(33023)) else: utils.reset() @@ -958,7 +958,7 @@ class LibrarySync(threading.Thread): "to know which Kodi versions are supported.", 0) dialog.ok( - heading="Emby for Kodi", + heading=lang(29999), line1=lang(33024)) break @@ -1060,7 +1060,7 @@ class ManualSync(LibrarySync): if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33026), viewName)) all_embymovies = self.emby.getMovies(viewId, basic=True, dialog=pdialog) @@ -1104,7 +1104,7 @@ class ManualSync(LibrarySync): embyboxsets = [] if pdialog: - pdialog.update(heading="Emby for Kodi", message=lang(33027)) + pdialog.update(heading=lang(29999), message=lang(33027)) for boxset in boxsets['Items']: @@ -1183,7 +1183,7 @@ class ManualSync(LibrarySync): if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33028), viewName)) all_embymvideos = self.emby.getMusicVideos(viewId, basic=True, dialog=pdialog) @@ -1269,7 +1269,7 @@ class ManualSync(LibrarySync): if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33029), viewName)) all_embytvshows = self.emby.getShows(viewId, basic=True, dialog=pdialog) @@ -1314,7 +1314,7 @@ class ManualSync(LibrarySync): # Get all episodes in view if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33030), viewName)) all_embyepisodes = self.emby.getEpisodes(viewId, basic=True, dialog=pdialog) @@ -1402,7 +1402,7 @@ class ManualSync(LibrarySync): for data_type in ['artists', 'albums', 'songs']: if pdialog: pdialog.update( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s..." % (lang(33031), data_type)) if data_type != "artists": all_embyitems = process[data_type][0](basic=True, dialog=pdialog) diff --git a/resources/lib/playutils.py b/resources/lib/playutils.py index 8e3c9a08..d364bbb3 100644 --- a/resources/lib/playutils.py +++ b/resources/lib/playutils.py @@ -135,7 +135,7 @@ class PlayUtils(): # Let the user know that direct play failed settings('failCount', value=str(count+1)) dialog.notification( - heading="Emby for Kodi", + heading=lang(29999), message=lang(33011), icon="special://home/addons/plugin.video.emby/icon.png", sound=False) @@ -144,7 +144,7 @@ class PlayUtils(): settings('playFromStream', value="true") settings('failCount', value="0") dialog.notification( - heading="Emby for Kodi", + heading=lang(29999), message=lang(33012), icon="special://home/addons/plugin.video.emby/icon.png", sound=False) diff --git a/resources/lib/userclient.py b/resources/lib/userclient.py index ce985647..c5d9caeb 100644 --- a/resources/lib/userclient.py +++ b/resources/lib/userclient.py @@ -221,7 +221,7 @@ class UserClient(threading.Thread): log("Access is granted.", 1) self.HasAccess = True window('emby_serverStatus', clear=True) - xbmcgui.Dialog().notification("Emby for Kodi", lang(33007)) + xbmcgui.Dialog().notification(lang(29999), lang(33007)) def loadCurrUser(self, authenticated=False): @@ -350,7 +350,7 @@ class UserClient(threading.Thread): if accessToken is not None: self.currUser = username - dialog.notification("Emby for Kodi", + dialog.notification(lang(29999), "%s %s!" % (lang(33000), self.currUser.decode('utf-8'))) settings('accessToken', value=accessToken) settings('userId%s' % username, value=result['User']['Id']) diff --git a/resources/lib/utils.py b/resources/lib/utils.py index 77220304..74f216a7 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -260,7 +260,7 @@ def reset(): dialog = xbmcgui.Dialog() - if not dialog.yesno("Warning", "Are you sure you want to reset your local Kodi database?"): + if not dialog.yesno(language(29999), language(33074)): return # first stop any db sync @@ -270,7 +270,7 @@ def reset(): log("Sync is running, will retry: %s..." % count) count -= 1 if count == 0: - dialog.ok("Warning", "Could not stop the database from running. Try again.") + dialog.ok(language(29999), language(33085)) return xbmc.sleep(1000) @@ -322,7 +322,7 @@ def reset(): cursor.close() # Offer to wipe cached thumbnails - resp = dialog.yesno("Warning", "Remove all cached artwork?") + resp = dialog.yesno(language(29999), language(33086)) if resp: log("Resetting all cached artwork.", 0) # Remove all existing textures first @@ -353,7 +353,7 @@ def reset(): settings('SyncInstallRunDone', value="false") # Remove emby info - resp = dialog.yesno("Warning", "Reset all Emby Addon settings?") + resp = dialog.yesno(language(29999), language(33087)) if resp: # Delete the settings addon = xbmcaddon.Addon() @@ -362,9 +362,7 @@ def reset(): xbmcvfs.delete(dataPath) log("Deleting: settings.xml", 1) - dialog.ok( - heading="Emby for Kodi", - line1="Database reset has completed, Kodi will now restart to apply the changes.") + dialog.ok(heading=language(29999), line1=language(33088)) xbmc.executebuiltin('RestartApp') def sourcesXML(): @@ -424,7 +422,7 @@ def passwordsXML(): credentials = settings('networkCreds') if credentials: # Present user with options - option = dialog.select("Modify/Remove network credentials", ["Modify", "Remove"]) + option = dialog.select(language(33075), [language(33076), language(33077)]) if option < 0: # User cancelled dialog @@ -444,8 +442,8 @@ def passwordsXML(): settings('networkCreds', value="") xbmcgui.Dialog().notification( - heading="Emby for Kodi", - message="%s removed from passwords.xml" % credentials, + heading=language(29999), + message="%s %s" % (language(33078), credentials), icon="special://home/addons/plugin.video.emby/icon.png", time=1000, sound=False) @@ -453,28 +451,22 @@ def passwordsXML(): elif option == 0: # User selected to modify - server = dialog.input("Modify the computer name or ip address", credentials) + server = dialog.input(language(33083), credentials) if not server: return else: # No credentials added - dialog.ok( - heading="Network credentials", - line1= ( - "Input the server name or IP address as indicated in your emby library paths. " - 'For example, the server name: \\\\SERVER-PC\\path\\ is "SERVER-PC".')) - server = dialog.input("Enter the server name or IP address") + dialog.ok(heading=language(29999), line1=language(33082)) + server = dialog.input(language(33084)) if not server: return # Network username - user = dialog.input("Enter the network username") + user = dialog.input(language(33079)) if not user: return # Network password - password = dialog.input( - heading="Enter the network password", - option=xbmcgui.ALPHANUM_HIDE_INPUT) + password = dialog.input(heading=language(33080), option=xbmcgui.ALPHANUM_HIDE_INPUT) if not password: return @@ -503,8 +495,8 @@ def passwordsXML(): etree.ElementTree(root).write(xmlpath) dialog.notification( - heading="Emby for Kodi", - message="%s added to passwords.xml" % server, + heading=language(29999), + message="%s %s" % (language(33081), server), icon="special://home/addons/plugin.video.emby/icon.png", time=1000, sound=False) diff --git a/resources/lib/websocket_client.py b/resources/lib/websocket_client.py index 90e9499e..87d1e012 100644 --- a/resources/lib/websocket_client.py +++ b/resources/lib/websocket_client.py @@ -80,7 +80,7 @@ class WebSocket_Client(threading.Thread): if command == "PlayNow": dialog.notification( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s" % (len(itemIds), lang(33004)), icon="special://home/addons/plugin.video.emby/icon.png", sound=False) @@ -89,7 +89,7 @@ class WebSocket_Client(threading.Thread): elif command == "PlayNext": dialog.notification( - heading="Emby for Kodi", + heading=lang(29999), message="%s %s" % (len(itemIds), lang(33005)), icon="special://home/addons/plugin.video.emby/icon.png", sound=False) @@ -244,7 +244,7 @@ class WebSocket_Client(threading.Thread): elif messageType == "ServerRestarting": if settings('supressRestartMsg') == "true": dialog.notification( - heading="Emby for Kodi", + heading=lang(29999), message=lang(33006), icon="special://home/addons/plugin.video.emby/icon.png")