From a52b5e24d05d601c395169a311df8299eb963123 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 16 Aug 2016 14:54:08 -0400 Subject: [PATCH 1/5] update sync display --- .../emby-apiclient/.bower.json | 8 +-- .../emby-apiclient/appstorage-cache.js | 47 ++++++++++++ .../emby-webcomponents/.bower.json | 8 +-- .../emby-webcomponents/strings/de.json | 34 ++++----- .../emby-webcomponents/strings/fr.json | 16 ++--- .../emby-webcomponents/strings/kk.json | 8 +-- .../emby-webcomponents/strings/pt-BR.json | 12 ++-- .../emby-webcomponents/strings/ru.json | 8 +-- .../subtitleeditor/subtitleeditor.js | 9 ++- .../bower_components/iron-icon/.bower.json | 6 +- .../bower_components/polymer/.bower.json | 2 +- dashboard-ui/css/librarymenu.css | 8 +-- dashboard-ui/edititemmetadata.html | 2 +- dashboard-ui/index.html | 2 +- dashboard-ui/scripts/librarymenu.js | 56 ++++++--------- dashboard-ui/scripts/localsync.js | 16 +---- dashboard-ui/scripts/mysync.js | 71 ++++++++++--------- dashboard-ui/scripts/sync.js | 4 +- dashboard-ui/scripts/syncjob.js | 2 +- dashboard-ui/strings/en-US.json | 9 +-- 20 files changed, 181 insertions(+), 147 deletions(-) create mode 100644 dashboard-ui/bower_components/emby-apiclient/appstorage-cache.js diff --git a/dashboard-ui/bower_components/emby-apiclient/.bower.json b/dashboard-ui/bower_components/emby-apiclient/.bower.json index faead7072e..8641f7e643 100644 --- a/dashboard-ui/bower_components/emby-apiclient/.bower.json +++ b/dashboard-ui/bower_components/emby-apiclient/.bower.json @@ -16,12 +16,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.1.75", - "_release": "1.1.75", + "version": "1.1.76", + "_release": "1.1.76", "_resolution": { "type": "version", - "tag": "1.1.75", - "commit": "5518536e19fe1efdb8cb149833320017c051e751" + "tag": "1.1.76", + "commit": "1096ffc66e3df8d63e305889dd7fb5b769095082" }, "_source": "https://github.com/MediaBrowser/Emby.ApiClient.Javascript.git", "_target": "^1.1.51", diff --git a/dashboard-ui/bower_components/emby-apiclient/appstorage-cache.js b/dashboard-ui/bower_components/emby-apiclient/appstorage-cache.js new file mode 100644 index 0000000000..bc39d2914d --- /dev/null +++ b/dashboard-ui/bower_components/emby-apiclient/appstorage-cache.js @@ -0,0 +1,47 @@ +define([], function () { + + var myStore = {}; + var cache; + var localData; + + function updateCache() { + cache.put('data', new Response(JSON.stringify(localData))); + } + + myStore.setItem = function (name, value) { + + if (localData) { + var changed = localData[name] != value; + + if (changed) { + localData[name] = value; + updateCache(); + } + } + }; + + myStore.getItem = function (name) { + + if (localData) { + return localData[name]; + } + }; + + myStore.removeItem = function (name) { + + if (localData) { + localData[name] = null; + delete localData[name]; + updateCache(); + } + }; + + myStore.init = function () { + return caches.open('embydata').then(function (result) { + cache = result; + localData = {}; + }); + }; + + return myStore; +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 2d823638ed..f8e8780ad3 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -14,12 +14,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.4.171", - "_release": "1.4.171", + "version": "1.4.172", + "_release": "1.4.172", "_resolution": { "type": "version", - "tag": "1.4.171", - "commit": "388435c54b3b15c417b8d76701cf09b42b968a08" + "tag": "1.4.172", + "commit": "044948fa660671caa6d1ce4951ccf0d4c6e211e2" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.1", diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/de.json b/dashboard-ui/bower_components/emby-webcomponents/strings/de.json index e13cda8198..10f181c718 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/de.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/de.json @@ -2,8 +2,8 @@ "ValueSpecialEpisodeName": "Special - {0}", "Share": "Teilen", "Add": "Hinzuf\u00fcgen", - "ServerUpdateNeeded": "Dieser Emby Server muss aktualisiert werden. Um die neueste Version herunterzuladen, besuchen sie bitte {0}", - "LiveTvGuideRequiresUnlock": "Ihr TV-Guide ist begrenzt auf {0} Kan\u00e4le. Klicken Sie auf die Freischalten Schaltfl\u00e4che um weitere Informationen zu erhalten.", + "ServerUpdateNeeded": "Dieser Emby Server muss aktualisiert werden. Um die neueste Version herunterzuladen, besuche bitte {0}", + "LiveTvGuideRequiresUnlock": "Dein TV-Guide ist derzeit begrenzt auf {0} Kan\u00e4le. Klicke auf die \"Freischalten\" Schaltfl\u00e4che um weitere Informationen zu erhalten.", "AttributeNew": "Neu", "AttributePremiere": "Premiere", "AttributeLive": "Live", @@ -24,7 +24,7 @@ "ButtonOk": "Ok", "ButtonCancel": "Abbrechen", "ButtonGotIt": "Verstanden", - "ButtonRestart": "Restart", + "ButtonRestart": "Neustart", "RecordingCancelled": "Aufzeichnung abgebrochen.", "RecordingScheduled": "Aufnahme geplant.", "SeriesRecordingScheduled": "Serien-Aufnahme geplant.", @@ -43,8 +43,8 @@ "RecordOnAllChannels": "Auf allen Kan\u00e4len aufzeichnen", "RecordAnytime": "Zu jeder Zeit aufzeichnen", "RecordOnlyNewEpisodes": "Nehme nur neue Episoden auf", - "HeaderBecomeProjectSupporter": "Holen Sie Emby Premium", - "HeaderEnjoyDayTrial": "Genie\u00dfen Sie eine 14 Tage Testversion", + "HeaderBecomeProjectSupporter": "Hol dir Emby Premiere", + "HeaderEnjoyDayTrial": "Genie\u00dfe eine 14-t\u00e4gige Testversion", "MessageActiveSubscriptionRequiredSeriesRecordings": "Ein aktives Emby Premium Abo wird benn\u00f6tigt um automatische Serienaufnahmen zu erstellen.", "OptionConvertRecordingsToStreamingFormat": "Konvertiere Aufnahmen automatisch in ein streaming freundliches Format.", "OptionConvertRecordingsToStreamingFormatHelp": "Aufnahmen werden als MP4 konvertiert um eine bessere Wiedergabe auf Ihren Ger\u00e4ten zu gew\u00e4hrleisten.", @@ -56,7 +56,7 @@ "Advanced": "Erweitert", "Delete": "L\u00f6schen", "HeaderDeleteItem": "L\u00f6sche Element", - "ConfirmDeleteItem": "L\u00f6schen dieses Eintrages bedeutet das L\u00f6schen der Datei und das Entfernen aus der Medien-Bibliothek. M\u00f6chten Sie wirklich fortfahren?", + "ConfirmDeleteItem": "L\u00f6schen dieses Eintrages bedeutet das L\u00f6schen der Datei und das Entfernen aus der Medien-Bibliothek. M\u00f6chtest du wirklich fortfahren?", "Refresh": "Aktualisieren", "RefreshQueued": "Warteschlange aktualisieren.", "AddToCollection": "Zur Sammlung hinzuf\u00fcgen", @@ -64,7 +64,7 @@ "NewCollection": "Neue Collection", "LabelCollection": "Sammlung:", "Help": "Hilfe", - "NewCollectionHelp": "Sammlungen erm\u00f6glichen personallisierte Gruppen von Filmen oder anderen Medien.", + "NewCollectionHelp": "Sammlungen erm\u00f6glichen personalisierte Gruppen von Filmen oder anderen Medien.", "SearchForCollectionInternetMetadata": "Suche im Internet nach Bildmaterial und Metadaten", "LabelName": "Name:", "NewCollectionNameExample": "Beispiel: Star Wars Collection", @@ -91,11 +91,11 @@ "SearchForMissingMetadata": "Suche nach fehlenden Metadaten", "LabelRefreshMode": "Aktualisierungsmodus:", "NoItemsFound": "Keine Eintr\u00e4ge gefunden.", - "HeaderSaySomethingLike": "Sagen Sie etwas wie...", + "HeaderSaySomethingLike": "Sage etwas wie...", "ButtonTryAgain": "Erneut versuchen", - "HeaderYouSaid": "Sie sagten....", + "HeaderYouSaid": "Du sagtest....", "MessageWeDidntRecognizeCommand": "Entschuldigung, dieses Kommando konnten wir nicht erkennen.", - "MessageIfYouBlockedVoice": "Wenn Sie die Sprachsteuerung f\u00fcr die App nicht erlaubt haben so m\u00fcssen Sie dies zuvor \u00e4ndern bevor Sie es erneut probieren.", + "MessageIfYouBlockedVoice": "Wenn du die Sprachsteuerung f\u00fcr die App nicht erlaubt hast, musst du dies vor einem erneuten Versuch \u00e4ndern.", "ValueDiscNumber": "Disc {0}", "Unrated": "Nicht bewertet", "Favorite": "Favorit", @@ -124,9 +124,9 @@ "MarkUnplayed": "Markiere \"als ungesehen\"", "GroupVersions": "Gruppiere Versionen", "PleaseSelectTwoItems": "Bitte w\u00e4hle mindestens zwei Optionen aus.", - "TheSelectedItemsWillBeGrouped": "Die ausgew\u00e4hlten Videos werden in einem virtuellen Element gruppiert. Emby Anwendungen w\u00e4hlen automatisch die beste Version anhand des Ger\u00e4tes und der Netzwerkgeschwindigkeit. Sind Sie sich sicher, dass Sie fortfahren m\u00f6chten?", + "TheSelectedItemsWillBeGrouped": "Die ausgew\u00e4hlten Videos werden in einem virtuellen Element gruppiert. Emby Anwendungen w\u00e4hlen automatisch die beste Version anhand des Ger\u00e4tes und der Netzwerkgeschwindigkeit. Bist du sicher, dass du fortfahren m\u00f6chtest?", "TryMultiSelect": "Versuche Mehrfachauswahl", - "TryMultiSelectMessage": "F\u00fcr eine Mehrfachauswahl klicken und halten Sie ein Poster. W\u00e4hlen Sie die Eintr\u00e4ge die Sie bearbeiten m\u00f6chten. Versuchen SIe es!", + "TryMultiSelectMessage": "F\u00fcr eine Mehrfachauswahl klicke und halte ein Poster. W\u00e4hle die Eintr\u00e4ge die du bearbeiten m\u00f6chten. Versuch es!", "HeaderConfirmRecordingCancellation": "Best\u00e4tige Aufzeichnungsabbruch", "MessageConfirmRecordingCancellation": "Bis du dir sicher, diese Aufzeichnung abzubrechen?", "Error": "Fehler", @@ -137,7 +137,7 @@ "LabelOriginalTitle": "Original Titel:", "LabelSortTitle": "Sortierungs Titel:", "LabelDateAdded": "Hinzugef\u00fcgt am:", - "ConfigureDateAdded": "Bestimmen Sie in den Bibliotheks-Einstellungen des Emby Server Dashboards, wie das Feld \"Hinzugef\u00fcgt am\" interpretiert werden soll.", + "ConfigureDateAdded": "Bestimme in den Bibliotheks-Einstellungen des Emby Server Dashboards, wie das Feld \"Hinzugef\u00fcgt am\" interpretiert werden soll.", "LabelStatus": "Status:", "LabelArtists": "Interpreten:", "LabelArtistsHelp": "Trenne mehrere Eintr\u00e4ge durch ;", @@ -205,7 +205,7 @@ "Continuing": "Fortdauernd", "Ended": "Beendent", "HeaderEnabledFields": "Aktiviere Felder", - "HeaderEnabledFieldsHelp": "W\u00e4hlen Sie Felder ab um das \u00c4ndern von Daten zu verhindern.", + "HeaderEnabledFieldsHelp": "W\u00e4hle Felder ab um das \u00c4ndern von Daten zu verhindern.", "Backdrops": "Hintergr\u00fcnde", "Images": "Bilder", "Keywords": "Stichworte", @@ -250,7 +250,7 @@ "SearchResults": "Suchergebnisse", "SyncToOtherDevice": "Mit einem anderen Ger\u00e4t synchronisieren", "MakeAvailableOffline": "Offline verf\u00fcgbar machen", - "ServerNameIsRestarting": "Emby Server - {0} is restarting.", - "ServerNameIsShuttingDown": "Emby Server - {0} is shutting down.", - "PleaseRestartServerName": "Please restart Emby Server - {0}." + "ServerNameIsRestarting": "Emby Server - {0} startet neu.", + "ServerNameIsShuttingDown": "Emby Server - {0} f\u00e4hrt herunter.", + "PleaseRestartServerName": "Bitte starte Emby Server - {0} neu." } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/fr.json b/dashboard-ui/bower_components/emby-webcomponents/strings/fr.json index 0d1c782c9f..1c46787bf3 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/fr.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/fr.json @@ -24,7 +24,7 @@ "ButtonOk": "OK", "ButtonCancel": "Annuler", "ButtonGotIt": "Vu", - "ButtonRestart": "Restart", + "ButtonRestart": "Red\u00e9marrer", "RecordingCancelled": "Enregistrement annul\u00e9.", "RecordingScheduled": "Enregistrement planifi\u00e9.", "SeriesRecordingScheduled": "Enregistrement de la s\u00e9rie pr\u00e9vue.", @@ -108,7 +108,7 @@ "Shuffle": "M\u00e9langer", "Identify": "Identifier", "EditImages": "Modifier les images", - "EditInfo": "Modifier les informations", + "EditInfo": "Modifier infos", "Sync": "Sync", "InstantMix": "Instantan\u00e9", "ViewAlbum": "Voir l'album", @@ -122,7 +122,7 @@ "Trailer": "Bande-annonce", "MarkPlayed": "Marquer comme lu", "MarkUnplayed": "Marquer comme non lu", - "GroupVersions": "Versions des groupes", + "GroupVersions": "Versions de groupe", "PleaseSelectTwoItems": "Veuillez s\u00e9lectionner au moins deux items.", "TheSelectedItemsWillBeGrouped": "Les vid\u00e9os s\u00e9lectionn\u00e9es seront regroup\u00e9es dans un objet virtuel. L'application Emby choisira automatiquement quelle version jouer d'apr\u00e8s le p\u00e9riph\u00e9rique et la performance du r\u00e9seau. \u00cates-vous s\u00fbre de vouloir continuer ?", "TryMultiSelect": "Essayer la s\u00e9lection multiple", @@ -248,9 +248,9 @@ "PleaseEnterNameOrId": "Veuillez saisir un nom ou un identifiant externe.", "MessageItemSaved": "Item sauvegard\u00e9.", "SearchResults": "R\u00e9sultats de la recherche", - "SyncToOtherDevice": "Sync to other device", - "MakeAvailableOffline": "Make available offline", - "ServerNameIsRestarting": "Emby Server - {0} is restarting.", - "ServerNameIsShuttingDown": "Emby Server - {0} is shutting down.", - "PleaseRestartServerName": "Please restart Emby Server - {0}." + "SyncToOtherDevice": "Sync vers un autre appareil", + "MakeAvailableOffline": "Rendre disponible hors connexion", + "ServerNameIsRestarting": "Emby Server - {0} est red\u00e9marr\u00e9.", + "ServerNameIsShuttingDown": "Emby Server - {0} est arr\u00eater.", + "PleaseRestartServerName": "S'il vous pla\u00eet red\u00e9marrer Emby server - {0}." } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json b/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json index a20fd85ec4..6c8980a2a2 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json @@ -24,7 +24,7 @@ "ButtonOk": "\u0416\u0430\u0440\u0430\u0439\u0434\u044b", "ButtonCancel": "\u0411\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443", "ButtonGotIt": "\u0422\u04af\u0441\u0456\u043d\u0456\u043a\u0442\u0456", - "ButtonRestart": "Restart", + "ButtonRestart": "\u049a\u0430\u0439\u0442\u0430 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u0443", "RecordingCancelled": "\u0416\u0430\u0437\u0431\u0430 \u0431\u043e\u043b\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0434\u044b.", "RecordingScheduled": "\u0416\u0430\u0437\u0443 \u0436\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u0430\u043d.", "SeriesRecordingScheduled": "\u0422\u0435\u043b\u0435\u0445\u0438\u043a\u0430\u044f \u0436\u0430\u0437\u0443\u044b \u0436\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u0430\u043d.", @@ -250,7 +250,7 @@ "SearchResults": "\u0406\u0437\u0434\u0435\u0443 \u043d\u04d9\u0442\u0438\u0436\u0435\u043b\u0435\u0440\u0456", "SyncToOtherDevice": "\u0411\u0430\u0441\u049b\u0430 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043c\u0435\u043d \u04af\u043d\u0434\u0435\u0441\u0442\u0456\u0440\u0443", "MakeAvailableOffline": "\u0414\u0435\u0440\u0431\u0435\u0441 \u049b\u043e\u043b\u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0435\u0442\u0443", - "ServerNameIsRestarting": "Emby Server - {0} is restarting.", - "ServerNameIsShuttingDown": "Emby Server - {0} is shutting down.", - "PleaseRestartServerName": "Please restart Emby Server - {0}." + "ServerNameIsRestarting": "Emby Server - {0} \u049b\u0430\u0439\u0442\u0430 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u043b\u0443\u0434\u0430.", + "ServerNameIsShuttingDown": "Emby Server - {0} \u0436\u04b1\u043c\u044b\u0441\u0442\u044b \u0430\u044f\u049b\u0442\u0430\u0443\u0434\u0430.", + "PleaseRestartServerName": "Emby Server \u04af\u0448\u0456\u043d \u049b\u0430\u0439\u0442\u0430 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u04a3\u044b\u0437 - {0}." } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/pt-BR.json b/dashboard-ui/bower_components/emby-webcomponents/strings/pt-BR.json index 9f80fb945a..cbbc019a8a 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/pt-BR.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/pt-BR.json @@ -24,7 +24,7 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancelar", "ButtonGotIt": "Feito", - "ButtonRestart": "Restart", + "ButtonRestart": "Reiniciar", "RecordingCancelled": "Grava\u00e7\u00e3o cancelada.", "RecordingScheduled": "Grava\u00e7\u00e3o agendada.", "SeriesRecordingScheduled": "Grava\u00e7\u00e3o de s\u00e9rie agendada.", @@ -248,9 +248,9 @@ "PleaseEnterNameOrId": "Por favor, digite um nome ou um id externo.", "MessageItemSaved": "Item salvo.", "SearchResults": "Resultados da Busca", - "SyncToOtherDevice": "Sync to other device", - "MakeAvailableOffline": "Make available offline", - "ServerNameIsRestarting": "Emby Server - {0} is restarting.", - "ServerNameIsShuttingDown": "Emby Server - {0} is shutting down.", - "PleaseRestartServerName": "Please restart Emby Server - {0}." + "SyncToOtherDevice": "Sincronizar para outro dispositivo", + "MakeAvailableOffline": "Disponibilizar offline", + "ServerNameIsRestarting": "Servidor Emby - {0} est\u00e1 reiniciando.", + "ServerNameIsShuttingDown": "Servidor Emby - {0} est\u00e1 desligando.", + "PleaseRestartServerName": "Por favor reinicie o Servidor Emby - {0}." } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json b/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json index 4ebf7c3f47..0962634744 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json @@ -24,7 +24,7 @@ "ButtonOk": "\u041e\u041a", "ButtonCancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c", "ButtonGotIt": "\u041f\u043e\u043d\u044f\u0442\u043d\u043e", - "ButtonRestart": "Restart", + "ButtonRestart": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c", "RecordingCancelled": "\u0417\u0430\u043f\u0438\u0441\u044c \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430.", "RecordingScheduled": "\u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430.", "SeriesRecordingScheduled": "\u0417\u0430\u043f\u0438\u0441\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430.", @@ -250,7 +250,7 @@ "SearchResults": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430", "SyncToOtherDevice": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c", "MakeAvailableOffline": "\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e", - "ServerNameIsRestarting": "Emby Server - {0} is restarting.", - "ServerNameIsShuttingDown": "Emby Server - {0} is shutting down.", - "PleaseRestartServerName": "Please restart Emby Server - {0}." + "ServerNameIsRestarting": "Emby Server - {0} \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f.", + "ServerNameIsShuttingDown": "Emby Server - {0} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f.", + "PleaseRestartServerName": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Emby Server - {0}." } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js b/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js index 82a6703e9b..899981232e 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js @@ -117,7 +117,11 @@ var itemHtml = ''; var tagName = layoutManager.tv ? 'button' : 'div'; - var className = layoutManager.tv && s.Path ? 'listItem listItem-focusscale btnDelete' : 'listItem'; + var className = layoutManager.tv && s.Path ? 'listItem btnDelete' : 'listItem'; + + if (layoutManager.tv) { + className += ' listItem-focusscale listItem-button'; + } className += ' listItem-noborder'; @@ -236,6 +240,9 @@ var tagName = layoutManager.tv ? 'button' : 'div'; var className = layoutManager.tv ? 'listItem btnOptions' : 'listItem'; + if (layoutManager.tv) { + className += ' listItem-focusscale listItem-button'; + } html += '<' + tagName + ' class="' + className + '" data-subid="' + result.Id + '">'; diff --git a/dashboard-ui/bower_components/iron-icon/.bower.json b/dashboard-ui/bower_components/iron-icon/.bower.json index f76855b27a..87e3dad5d3 100644 --- a/dashboard-ui/bower_components/iron-icon/.bower.json +++ b/dashboard-ui/bower_components/iron-icon/.bower.json @@ -32,14 +32,14 @@ "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "homepage": "https://github.com/PolymerElements/iron-icon", + "homepage": "https://github.com/polymerelements/iron-icon", "_release": "1.0.10", "_resolution": { "type": "version", "tag": "v1.0.10", "commit": "f4e146da4982ff96bb25db85290c09e8de4ec734" }, - "_source": "git://github.com/PolymerElements/iron-icon.git", + "_source": "git://github.com/polymerelements/iron-icon.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/iron-icon" + "_originalSource": "polymerelements/iron-icon" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/polymer/.bower.json b/dashboard-ui/bower_components/polymer/.bower.json index a96f0f050e..15bb248747 100644 --- a/dashboard-ui/bower_components/polymer/.bower.json +++ b/dashboard-ui/bower_components/polymer/.bower.json @@ -40,6 +40,6 @@ "commit": "1f197d9d7874b1e5808b2a5c26f34446a7d912fc" }, "_source": "git://github.com/Polymer/polymer.git", - "_target": "^1.1.0", + "_target": "^1.0.0", "_originalSource": "Polymer/polymer" } \ No newline at end of file diff --git a/dashboard-ui/css/librarymenu.css b/dashboard-ui/css/librarymenu.css index 86240a33b2..c6af9a4996 100644 --- a/dashboard-ui/css/librarymenu.css +++ b/dashboard-ui/css/librarymenu.css @@ -56,10 +56,6 @@ vertical-align: middle; } -.drawerContent { - padding-bottom: 100px; -} - .headerButton { margin: 0 5px; background-color: transparent; @@ -299,6 +295,10 @@ body:not(.dashboardDocument) .headerAppsButton { display: none; } +.mainDrawer-scrollContainer { + padding-bottom: 10vh; +} + @media all and (min-width: 640px) { .mainDrawerPanel .viewMenuBarTabs { diff --git a/dashboard-ui/edititemmetadata.html b/dashboard-ui/edititemmetadata.html index ab30e97ff2..f3905adfa0 100644 --- a/dashboard-ui/edititemmetadata.html +++ b/dashboard-ui/edititemmetadata.html @@ -1,4 +1,4 @@ -
+
- "; - - // card - html += "
"; - - return html; - } - - var lastDataLoad = 0; - - function loadData(page, jobs) { - - if ((new Date().getTime() - lastDataLoad) < 60000) { - refreshData(page, jobs); - return; - } - - lastDataLoad = new Date().getTime(); - - var html = ''; - var lastTargetName = ''; - - var cardBoxCssClass = 'cardBox visualCardBox'; - - var syncJobPage = 'syncjob.html'; - var showTargetName = true; - - if ($(page).hasClass('mySyncPage')) { - syncJobPage = 'mysyncjob.html'; - - showTargetName = !hasLocalSync(); - } - - var hasOpenSection = false; - - for (var i = 0, length = jobs.length; i < length; i++) { - - var job = jobs[i]; - if (showTargetName) { - var targetName = job.TargetName || 'Unknown'; - - if (targetName != lastTargetName) { - - if (lastTargetName) { - html += '
'; - html += '
'; - html += '
'; - html += '
'; - hasOpenSection = false; - } - - lastTargetName = targetName; - - html += '
'; - - html += '
' + targetName + '
'; - - html += '
'; - html += '
'; - hasOpenSection = true; - } - } - - html += getSyncJobHtml(page, job, cardBoxCssClass, syncJobPage); - } - - if (hasOpenSection) { - html += '
'; - } - - var elem = $('.syncActivity', page).html(html).lazyChildren(); - - $('.btnJobMenu', elem).on('click', function () { - showJobMenu(page, this); - }); - - if (!jobs.length) { - - elem.html('
' + Globalize.translate('MessageNoSyncJobsFound') + '
'); - } - } - - $.fn.lazyChildren = function () { - - for (var i = 0, length = this.length; i < length; i++) { - ImageLoader.lazyChildren(this[i]); - } - return this; - }; - - function refreshData(page, jobs) { - - for (var i = 0, length = jobs.length; i < length; i++) { - - var job = jobs[i]; - refreshJob(page, job); - } - } - - function refreshJob(page, job) { - - var card = page.querySelector('.card[data-id=\'' + job.Id + '\']'); - - if (!card) { - return; - } - - var banner = card.querySelector('.syncStatusBanner'); - - if (banner.getAttribute('data-status') == job.Status) { - var elem = document.createElement('div'); - elem.innerHTML = getSyncStatusBanner(job); - elem = elem.querySelector('.syncStatusBanner'); - elem.parentNode.removeChild(elem); - - banner.parentNode.replaceChild(elem, banner); - } - - var progress = job.Progress || 0; - var cardFooter = card.querySelector('.cardFooter'); - - if (progress == 0 || progress >= 100) { - cardFooter.classList.add('hide'); - } - else { - cardFooter.classList.remove('hide'); - cardFooter.querySelector('.itemProgressBar').value = progress; - } - } - - function showJobMenu(page, elem) { - - var card = $(elem).parents('.card'); - var jobId = card.attr('data-id'); - var status = card.attr('data-status'); - - var menuItems = []; - - if (status == 'Cancelled') { - menuItems.push({ - name: Globalize.translate('ButtonDelete'), - id: 'delete' - }); - } else { - menuItems.push({ - name: Globalize.translate('ButtonCancelSyncJob'), - id: 'cancel' - }); - } - - require(['actionsheet'], function (actionsheet) { - - actionsheet.show({ - items: menuItems, - positionTo: elem, - callback: function (id) { - - switch (id) { - - case 'delete': - cancelJob(page, jobId); - break; - case 'cancel': - cancelJob(page, jobId); - break; - default: - break; - } - } - }); - - }); - } - - function hasLocalSync() { - return Dashboard.capabilities().SupportsSync; - } - - function reloadData(page) { - - lastDataLoad = 0; - Dashboard.showLoadingMsg(); - - var options = {}; - - Dashboard.getCurrentUser().then(function (user) { - - if ($(page).hasClass('mySyncPage')) { - options.UserId = Dashboard.getCurrentUserId(); - - if (hasLocalSync()) { - options.TargetId = ApiClient.deviceId(); - } - } - - ApiClient.getJSON(ApiClient.getUrl('Sync/Jobs', options)).then(function (response) { - - loadData(page, response.Items); - Dashboard.hideLoadingMsg(); - - }); - }); - } - - function onWebSocketMessage(e, msg) { - - var page = $($.mobile.activePage)[0]; - - if (msg.MessageType == "SyncJobs") { - - var data = msg.Data; - - if (hasLocalSync()) { - var targetId = ApiClient.deviceId(); - data = data.filter(function (j) { - return j.TargetId == targetId; - }); - } - loadData(page, data); - } - } - - function startListening(page) { - - var startParams = "0,1500"; - - if ($(page).hasClass('mySyncPage')) { - startParams += "," + Dashboard.getCurrentUserId(); - } - - if (ApiClient.isWebSocketOpen()) { - ApiClient.sendWebSocketMessage("SyncJobsStart", startParams); - } - - } - - function stopListening() { - - if (ApiClient.isWebSocketOpen()) { - ApiClient.sendWebSocketMessage("SyncJobsStop", ""); - } - - } +define(['loading', 'apphost', 'globalize', 'syncJobList', 'events', 'localsync', 'emby-button', 'paper-icon-button-light'], function (loading, appHost, globalize, syncJobList, events) { function getTabs() { return [ @@ -410,57 +20,49 @@ }]; } - $(document).on('pageinit', "#syncActivityPage", function () { + function initSupporterInfo(view, params) { - var page = this; + view.querySelector('.supporterPromotion .mainText').innerHTML = globalize.translate('HeaderSyncRequiresSupporterMembership'); - $('.btnSyncSupporter', page).on('click', function () { + var apiClient = ApiClient; + apiClient.getPluginSecurityInfo().then(function (regInfo) { - requirejs(["registrationservices"], function (registrationServices) { - registrationServices.validateFeature('sync'); - }); - }); - $('.supporterPromotion .mainText', page).html(Globalize.translate('HeaderSyncRequiresSupporterMembership')); - - }).on('pageshow', "#syncActivityPage", function () { - - if (this.id == 'syncActivityPage') { - LibraryMenu.setTabs('syncadmin', 0, getTabs); - } - var page = this; - - Dashboard.getPluginSecurityInfo().then(function (pluginSecurityInfo) { - - if (pluginSecurityInfo.IsMBSupporter) { - $('.supporterPromotionContainer', page).hide(); + if (regInfo.IsMBSupporter) { + view.querySelector('.supporterPromotionContainer').classList.add('hide'); } else { - $('.supporterPromotionContainer', page).show(); + view.querySelector('.supporterPromotionContainer').classList.remove('hide'); } + + }, function () { + + view.querySelector('.supporterPromotionContainer').classList.remove('hide'); + }); + } + + return function (view, params) { + + initSupporterInfo(view, params); + var mySyncJobList = new syncJobList({ + isLocalSync: params.mode === 'offline', + serverId: ApiClient.serverId(), + userId: params.mode === 'offline' ? null : ApiClient.getCurrentUserId(), + element: view.querySelector('.syncActivity') }); - reloadData(page); + events.on(mySyncJobList, 'jobedit', function (e, jobId, serverId) { - // on here - $('.btnSync', page).taskButton({ - mode: 'on', - progressElem: page.querySelector('.syncProgress'), - taskKey: 'SyncPrepare' + Dashboard.navigate('syncjob.html?id=' + jobId); }); - startListening(page); - Events.on(ApiClient, "websocketmessage", onWebSocketMessage); + view.addEventListener('viewshow', function () { - }).on('pagebeforehide', "#syncActivityPage", function () { - - var page = this; - - // off here - $('.btnSync', page).taskButton({ - mode: 'off' + LibraryMenu.setTabs('syncadmin', 0, getTabs); }); - stopListening(); - Events.off(ApiClient, "websocketmessage", onWebSocketMessage); - }); + view.addEventListener('viewdestroy', function () { + + mySyncJobList.destroy(); + }); + }; }); \ No newline at end of file diff --git a/dashboard-ui/syncactivity.html b/dashboard-ui/syncactivity.html index 5624f02c1b..aadb63fd2e 100644 --- a/dashboard-ui/syncactivity.html +++ b/dashboard-ui/syncactivity.html @@ -1,4 +1,4 @@ -
+