diff --git a/dashboard-ui/components/fileorganizer/fileorganizer.js b/dashboard-ui/components/fileorganizer/fileorganizer.js
index d51e75082b..c26690e5d6 100644
--- a/dashboard-ui/components/fileorganizer/fileorganizer.js
+++ b/dashboard-ui/components/fileorganizer/fileorganizer.js
@@ -12,6 +12,13 @@
function initEpisodeForm(context, item) {
+ if (!item.ExtractedName || item.ExtractedName.length < 4) {
+ context.querySelector('.fldRemember').classList.add('hide');
+ }
+ else {
+ context.querySelector('.fldRemember').classList.remove('hide');
+ }
+
$('.inputFile', context).html(item.OriginalFileName);
$('#txtSeason', context).val(item.ExtractedSeasonNumber);
diff --git a/dashboard-ui/components/fileorganizer/fileorganizer.template.html b/dashboard-ui/components/fileorganizer/fileorganizer.template.html
index b5e47c978e..5d96ddfd69 100644
--- a/dashboard-ui/components/fileorganizer/fileorganizer.template.html
+++ b/dashboard-ui/components/fileorganizer/fileorganizer.template.html
@@ -22,7 +22,7 @@
+
${OptionRememberOrganizeCorrection}
diff --git a/dashboard-ui/devices/windowsphone/wp.css b/dashboard-ui/devices/windowsphone/wp.css
index f3842e9d89..448821c8ba 100644
--- a/dashboard-ui/devices/windowsphone/wp.css
+++ b/dashboard-ui/devices/windowsphone/wp.css
@@ -7,10 +7,10 @@
}
.libraryViewNav, .libraryViewNav paper-tabs {
- background-color: transparent;
+ background-color: #161616;
box-shadow: none;
text-transform: lowercase;
- font-size: 240%;
+ font-size: 220%;
}
.libraryViewNav a, paper-tab {
@@ -20,3 +20,23 @@
.background-theme-b, paper-dialog.background-theme-b {
background: #161616;
}
+
+.libraryViewNav #selectionBar {
+ background-color: transparent !important;
+}
+
+.libraryViewNav .ui-btn-active, .libraryViewNav .iron-selected, .btnActiveCast {
+ color: #52B54B !important;
+}
+
+.libraryViewNav .ui-btn-active {
+ border-bottom-color: transparent;
+}
+
+.libraryPage:not(.noSecondaryNavPage) {
+ padding-top: 105px !important;
+}
+
+.pageWithAbsoluteTabs:not(.noSecondaryNavPage) {
+ padding-top: 108px !important;
+}
diff --git a/dashboard-ui/mypreferencesdisplay.html b/dashboard-ui/mypreferencesdisplay.html
index 22a9c679f0..5d54a35c60 100644
--- a/dashboard-ui/mypreferencesdisplay.html
+++ b/dashboard-ui/mypreferencesdisplay.html
@@ -1,6 +1,6 @@
-
+
Emby
diff --git a/dashboard-ui/mypreferenceshome.html b/dashboard-ui/mypreferenceshome.html
index df53cbaf98..8bc3b43093 100644
--- a/dashboard-ui/mypreferenceshome.html
+++ b/dashboard-ui/mypreferenceshome.html
@@ -1,6 +1,6 @@
-
+
Emby
diff --git a/dashboard-ui/mypreferenceslanguages.html b/dashboard-ui/mypreferenceslanguages.html
index bd17ad2eee..10d63d78e7 100644
--- a/dashboard-ui/mypreferenceslanguages.html
+++ b/dashboard-ui/mypreferenceslanguages.html
@@ -1,6 +1,6 @@
-
+
Emby
diff --git a/dashboard-ui/mypreferencesmenu.html b/dashboard-ui/mypreferencesmenu.html
index e1e33228ee..de5ad59e7a 100644
--- a/dashboard-ui/mypreferencesmenu.html
+++ b/dashboard-ui/mypreferencesmenu.html
@@ -1,6 +1,6 @@
-
+
Emby
@@ -73,6 +73,15 @@
+
+
+
+
+ ${ButtonEnterPinCode}
+ ${ButtonEnterPinCodeHelp}
+
+
+
diff --git a/dashboard-ui/mysyncsettings.html b/dashboard-ui/mysyncsettings.html
index 6736cb4022..39df8dca74 100644
--- a/dashboard-ui/mysyncsettings.html
+++ b/dashboard-ui/mysyncsettings.html
@@ -1,6 +1,6 @@
-
+
Emby
diff --git a/dashboard-ui/pin.html b/dashboard-ui/pin.html
new file mode 100644
index 0000000000..82e21b623d
--- /dev/null
+++ b/dashboard-ui/pin.html
@@ -0,0 +1,31 @@
+
+
+
+
+ Emby
+
+
+
+
+
\ No newline at end of file
diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js
index 211edb7ef8..82d98a07a5 100644
--- a/dashboard-ui/scripts/librarymenu.js
+++ b/dashboard-ui/scripts/librarymenu.js
@@ -546,7 +546,7 @@
}
function showUserAtTop() {
- return AppInfo.isNativeApp;
+ return false;
}
var requiresLibraryMenuRefresh = false;
diff --git a/dashboard-ui/scripts/pin.js b/dashboard-ui/scripts/pin.js
new file mode 100644
index 0000000000..436a93ccbc
--- /dev/null
+++ b/dashboard-ui/scripts/pin.js
@@ -0,0 +1,60 @@
+define([], function () {
+
+ function onSubmit(e) {
+
+ var form = e.target;
+
+ Dashboard.showLoadingMsg();
+
+ ApiClient.ajax({
+
+ type: "POST",
+ url: ApiClient.getUrl('Auth/Pin/Validate'),
+ data: JSON.stringify({
+ Pin: form.querySelector('#txtPin').value
+ }),
+ contentType: "application/json",
+ dataType: 'json'
+
+ }).then(function (result) {
+
+ Dashboard.hideLoadingMsg();
+ Dashboard.alert({
+ message: Globalize.translate('PinCodeConfirmedMessage', result.AppName),
+ title: Globalize.translate('HeaderThankYou'),
+ callback: function () {
+ Dashboard.navigate('index.html');
+ }
+ });
+
+ }, function () {
+
+ Dashboard.hideLoadingMsg();
+ Dashboard.alert({
+ message: Globalize.translate('PinCodeInvalidMessage'),
+ title: Globalize.translate('PinCodeInvalid')
+ });
+ });
+
+ // Disable default form submission
+ e.preventDefault();
+ return false;
+ }
+
+ pageIdOn('pageinit', 'pinEntryPage', function () {
+
+ var page = this;
+
+ page.querySelector('form').addEventListener('submit', onSubmit);
+
+ });
+
+ pageIdOn('pageshow', 'pinEntryPage', function () {
+
+ var page = this;
+
+ var txtPin = page.querySelector('#txtPin');
+ txtPin.focus();
+ txtPin.value = '';
+ });
+});
\ No newline at end of file
diff --git a/dashboard-ui/strings/html/en-US.json b/dashboard-ui/strings/html/en-US.json
index 3f6847205b..9b3cd26823 100644
--- a/dashboard-ui/strings/html/en-US.json
+++ b/dashboard-ui/strings/html/en-US.json
@@ -60,6 +60,8 @@
"LabelAddConnectSupporterHelp": "To add a user who isn't listed, you'll need to first link their account to Emby Connect from their user profile page.",
"LabelPinCode": "Pin code:",
"OptionHideWatchedContentFromLatestMedia": "Hide watched content from latest media",
+ "HeaderEnterPinCode": "Enter Pin Code",
+ "ButtonEnterPinCode": "Enter pin code",
"HeaderSync": "Sync",
"ButtonOk": "Ok",
"ButtonCancel": "Cancel",
@@ -1531,5 +1533,6 @@
"HeaderNewRecording": "New Recording",
"ButtonAdvanced": "Advanced",
"LabelCodecIntrosPath": "Codec intros path:",
- "LabelCodecIntrosPathHelp": "A folder containing video files. If an intro video file name matches the video codec, audio codec, audio profile, or a tag, then it will be played prior to the main feature."
+ "LabelCodecIntrosPathHelp": "A folder containing video files. If an intro video file name matches the video codec, audio codec, audio profile, or a tag, then it will be played prior to the main feature.",
+ "ButtonEnterPinCodeHelp": "Sign in to an Emby TV app by entering the on-screen pin code."
}
\ No newline at end of file
diff --git a/dashboard-ui/strings/html/server.json b/dashboard-ui/strings/html/server.json
index 04e698fca2..bc64e798d4 100644
--- a/dashboard-ui/strings/html/server.json
+++ b/dashboard-ui/strings/html/server.json
@@ -1368,6 +1368,8 @@
"TitleForgotPassword": "Forgot Password",
"TitlePasswordReset": "Password Reset",
"LabelPasswordRecoveryPinCode": "Pin code:",
+ "HeaderEnterPinCode": "Enter Pin Code",
+ "ButtonEnterPinCode": "Enter pin code",
"HeaderPasswordReset": "Password Reset",
"HeaderParentalRatings": "Parental Ratings",
"HeaderVideoTypes": "Video Types",
@@ -1539,5 +1541,6 @@
"LabelCodecIntrosPathHelp": "A folder containing video files. If an intro video file name matches the video codec, audio codec, audio profile, or a tag, then it will be played prior to the main feature.",
"OptionConvertRecordingsToStreamingFormat": "Automatically convert recordings to a streaming friendly format",
"OptionConvertRecordingsToStreamingFormatHelp": "Recordings will be converted on the fly to MP4 for easy playback on your devices.",
- "FeatureRequiresEmbyPremiere": "This feature requires an active Emby Premiere subscription."
+ "FeatureRequiresEmbyPremiere": "This feature requires an active Emby Premiere subscription.",
+ "ButtonEnterPinCodeHelp": "Sign in to an Emby TV app by entering the on-screen pin code."
}
diff --git a/dashboard-ui/strings/javascript/en-US.json b/dashboard-ui/strings/javascript/en-US.json
index 4a5dc502e7..2cdf53551c 100644
--- a/dashboard-ui/strings/javascript/en-US.json
+++ b/dashboard-ui/strings/javascript/en-US.json
@@ -958,5 +958,8 @@
"ButtonOff": "Off",
"TitleHardwareAcceleration": "Hardware Acceleration",
"HardwareAccelerationWarning": "Enabling hardware acceleration may cause instability in some environments. If you have difficulty playing video after enabling this, you'll need to change the setting back to Auto.",
- "HeaderSelectCodecIntrosPath": "Select Codec Intros Path"
+ "HeaderSelectCodecIntrosPath": "Select Codec Intros Path",
+ "PinCodeInvalid": "Pin Code Error",
+ "PinCodeInvalidMessage": "Invalid or expired pin code entered. Please try again.",
+ "PinCodeConfirmedMessage": "Pin code confirmed. {0} will automatically sign you in."
}
\ No newline at end of file
diff --git a/dashboard-ui/strings/javascript/javascript.json b/dashboard-ui/strings/javascript/javascript.json
index 4c35aaefab..c1fef12116 100644
--- a/dashboard-ui/strings/javascript/javascript.json
+++ b/dashboard-ui/strings/javascript/javascript.json
@@ -968,5 +968,8 @@
"HeaderSelectCodecIntrosPath": "Select Codec Intros Path",
"ButtonLocalRefresh": "Local refresh",
"ButtonAddMissingData": "Add missing data only",
- "ButtonFullRefresh": "Full refresh"
+ "ButtonFullRefresh": "Full refresh",
+ "PinCodeInvalid": "Pin Code Error",
+ "PinCodeInvalidMessage": "Invalid or expired pin code entered. Please try again.",
+ "PinCodeConfirmedMessage": "Pin code confirmed. {0} will automatically login."
}