diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-connect/connecthelper.js b/dashboard-ui/bower_components/emby-webcomponents/emby-connect/connecthelper.js new file mode 100644 index 0000000000..2a80fe5425 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-connect/connecthelper.js @@ -0,0 +1,180 @@ +define(['globalize', 'loading', 'alert'], function (globalize, loading, alert) { + 'use strict'; + + function showNewUserInviteMessage(result) { + + if (!result.IsNewUserInvitation && !result.IsPending) { + + // It was immediately approved + return Promise.resolve(); + } + + var message = result.IsNewUserInvitation ? + globalize.translate('MessageInvitationSentToNewUser', result.GuestDisplayName) : + globalize.translate('MessageInvitationSentToUser', result.GuestDisplayName); + + alert({ + text: message, + title: globalize.translate('HeaderInvitationSent') + }); + } + + function inviteGuest(options) { + + var apiClient = options.apiClient; + + loading.show(); + + // Add/Update connect info + return apiClient.ajax({ + + type: "POST", + url: apiClient.getUrl('Connect/Invite'), + dataType: 'json', + data: options.guestOptions || {} + + }).then(function (result) { + + loading.hide(); + return showNewUserInviteMessage(result); + + }, function (response) { + + loading.hide(); + + if (response.status == 404) { + // User doesn't exist + alert({ + text: globalize.translate('GuestUserNotFound') + }); + + } else if ((response.status || 0) >= 500) { + + // Unable to reach connect server ? + alert({ + text: globalize.translate('ErrorReachingEmbyConnect') + }); + + } else { + + // status 400 = account not activated + + // General error + showGuestGeneralErrorMessage(); + } + }); + } + + function showGuestGeneralErrorMessage() { + + var html = globalize.translate('ErrorAddingGuestAccount1', 'https://emby.media/connect'); + html += '

' + globalize.translate('ErrorAddingGuestAccount2', 'apps@emby.media'); + + var text = globalize.translate('ErrorAddingGuestAccount1', 'https://emby.media/connect'); + text += '\n\n' + globalize.translate('ErrorAddingGuestAccount2', 'apps@emby.media'); + + alert({ + text: text, + html: html + }); + } + + function showLinkUserMessage(username) { + + var html; + var text; + + if (username) { + + html = globalize.translate('ErrorAddingEmbyConnectAccount1', 'https://emby.media/connect'); + html += '

' + globalize.translate('ErrorAddingEmbyConnectAccount2', 'apps@emby.media'); + + text = globalize.translate('ErrorAddingEmbyConnectAccount1', 'https://emby.media/connect'); + text += '\n\n' + globalize.translate('ErrorAddingEmbyConnectAccount2', 'apps@emby.media'); + + } else { + html = text = globalize.translate('DefaultErrorMessage'); + } + + return alert({ + text: text, + html: html + }); + } + + function updateUserLink(apiClient, user, newConnectUsername) { + var currentConnectUsername = user.ConnectUserName || ''; + var enteredConnectUsername = newConnectUsername; + + var linkUrl = apiClient.getUrl('Users/' + user.Id + '/Connect/Link'); + + if (currentConnectUsername && !enteredConnectUsername) { + + // Remove connect info + // Add/Update connect info + return apiClient.ajax({ + + type: "DELETE", + url: linkUrl + + }).then(function () { + + return alert({ + text: globalize.translate('MessageEmbyAccontRemoved'), + title: globalize.translate('HeaderEmbyAccountRemoved'), + + }).catch(function () { + return Promise.resolve(); + }); + + }, function () { + + return alert({ + text: globalize.translate('ErrorRemovingEmbyConnectAccount') + + }).then(function () { + return Promise.reject(); + }); + }); + + } + else if (currentConnectUsername != enteredConnectUsername) { + + // Add/Update connect info + return apiClient.ajax({ + type: "POST", + url: linkUrl, + data: { + ConnectUsername: enteredConnectUsername + }, + dataType: 'json' + + }).then(function (result) { + + var msgKey = result.IsPending ? 'MessagePendingEmbyAccountAdded' : 'MessageEmbyAccountAdded'; + + return alert({ + text: globalize.translate(msgKey), + title: globalize.translate('HeaderEmbyAccountAdded'), + + }).catch(function () { + return Promise.resolve(); + }); + + }, function () { + + return showLinkUserMessage('.').then(function () { + return Promise.reject(); + }); + }); + + } else { + return Promise.reject(); + } + } + + return { + inviteGuest: inviteGuest, + updateUserLink: updateUserLink + }; +}); \ No newline at end of file diff --git a/dashboard-ui/components/guestinviter/connectlink.js b/dashboard-ui/components/guestinviter/connectlink.js index f4171d2534..4858e1baaf 100644 --- a/dashboard-ui/components/guestinviter/connectlink.js +++ b/dashboard-ui/components/guestinviter/connectlink.js @@ -1,101 +1,6 @@ -define(['dialogHelper', 'jQuery', 'emby-input', 'emby-button', 'emby-collapse', 'paper-icon-button-light', 'formDialogStyle'], function (dialogHelper, $) { +define(['dialogHelper', 'connectHelper', 'emby-input', 'emby-button', 'emby-collapse', 'paper-icon-button-light', 'formDialogStyle'], function (dialogHelper, connectHelper) { 'use strict'; - function updateUserInfo(user, newConnectUsername, actionCallback, noActionCallback) { - var currentConnectUsername = user.ConnectUserName || ''; - var enteredConnectUsername = newConnectUsername; - - var linkUrl = ApiClient.getUrl('Users/' + user.Id + '/Connect/Link'); - - if (currentConnectUsername && !enteredConnectUsername) { - - // Remove connect info - // Add/Update connect info - ApiClient.ajax({ - - type: "DELETE", - url: linkUrl - - }).then(function () { - - Dashboard.alert({ - - message: Globalize.translate('MessageEmbyAccontRemoved'), - title: Globalize.translate('HeaderEmbyAccountRemoved'), - - callback: actionCallback - - }); - }, function () { - - Dashboard.alert({ - - message: Globalize.translate('ErrorRemovingEmbyConnectAccount') - - }); - }); - - } - else if (currentConnectUsername != enteredConnectUsername) { - - // Add/Update connect info - ApiClient.ajax({ - type: "POST", - url: linkUrl, - data: { - ConnectUsername: enteredConnectUsername - }, - dataType: 'json' - - }).then(function (result) { - - var msgKey = result.IsPending ? 'MessagePendingEmbyAccountAdded' : 'MessageEmbyAccountAdded'; - - Dashboard.alert({ - message: Globalize.translate(msgKey), - title: Globalize.translate('HeaderEmbyAccountAdded'), - - callback: actionCallback - - }); - - }, function () { - - showEmbyConnectErrorMessage('.'); - }); - - } else { - if (noActionCallback) { - noActionCallback(); - } - } - } - - function showEmbyConnectErrorMessage(username) { - - var html; - var text; - - if (username) { - - html = Globalize.translate('ErrorAddingEmbyConnectAccount1', 'https://emby.media/connect'); - html += '

' + Globalize.translate('ErrorAddingEmbyConnectAccount2', 'apps@emby.media'); - - text = Globalize.translate('ErrorAddingEmbyConnectAccount1', 'https://emby.media/connect'); - text += '\n\n' + Globalize.translate('ErrorAddingEmbyConnectAccount2', 'apps@emby.media'); - - } else { - html = text = Globalize.translate('DefaultErrorMessage'); - } - - require(['alert'], function (alert) { - alert({ - text: text, - html: html - }); - }); - } - return { show: function () { return new Promise(function (resolve, reject) { @@ -141,7 +46,8 @@ dlg.querySelector('form').addEventListener('submit', function (e) { ApiClient.getCurrentUser().then(function (user) { - updateUserInfo(user, dlg.querySelector('#txtConnectUsername').value, function() { + + connectHelper.updateUserLink(ApiClient, user, dlg.querySelector('#txtConnectUsername').value).then(function () { dialogHelper.close(dlg); }, function () { dialogHelper.close(dlg); diff --git a/dashboard-ui/components/guestinviter/guestinviter.js b/dashboard-ui/components/guestinviter/guestinviter.js index 110fc9d852..405f2bd112 100644 --- a/dashboard-ui/components/guestinviter/guestinviter.js +++ b/dashboard-ui/components/guestinviter/guestinviter.js @@ -24,101 +24,30 @@ Dashboard.showLoadingMsg(); - ApiClient.getJSON(ApiClient.getUrl("Channels", {})).then(function (channelsResult) { + var shareExcludes = $(".chkShareFolder", dlg).get().filter(function (i) { - var shareExcludes = $(".chkShareFolder", dlg).get().filter(function (i) { + return i.checked; - return i.checked; + }).map(function (i) { - }).map(function (i) { + return i.getAttribute('data-folderid'); + }); - return i.getAttribute('data-folderid'); - }); + require(['connectHelper'], function (connectHelper) { - // Add/Update connect info - ApiClient.ajax({ - - type: "POST", - url: ApiClient.getUrl('Connect/Invite'), - dataType: 'json', - data: { + connectHelper.inviteGuest({ + apiClient: ApiClient, + guestOptions: { ConnectUsername: dlg.querySelector('#txtConnectUsername').value, EnabledLibraries: shareExcludes.join(','), SendingUserId: Dashboard.getCurrentUserId(), EnableLiveTv: false } - - }).then(function (result) { - + }).then(function() { + dlg.submitted = true; dialogHelper.close(dlg); - - Dashboard.hideLoadingMsg(); - - showNewUserInviteMessage(dlg, result); - - }, function (response) { - - Dashboard.hideLoadingMsg(); - - if (!response.status) { - // General error - require(['alert'], function (alert) { - alert({ - text: Globalize.translate('DefaultErrorMessage') - }); - }); - } else if (response.status == 404) { - // User doesn't exist - require(['alert'], function (alert) { - alert({ - text: Globalize.translate('GuestUserNotFound') - }); - }); - } else { - - // status 400 = account not activated - - // General error - showAccountErrorMessage(); - } - }); - }); - } - - function showAccountErrorMessage() { - - var html = Globalize.translate('ErrorAddingGuestAccount1', 'https://emby.media/connect'); - html += '

' + Globalize.translate('ErrorAddingGuestAccount2', 'apps@emby.media'); - - var text = Globalize.translate('ErrorAddingGuestAccount1', 'https://emby.media/connect'); - text += '\n\n' + Globalize.translate('ErrorAddingGuestAccount2', 'apps@emby.media'); - - require(['alert'], function (alert) { - alert({ - text: text, - html: html - }); - }); - } - - function showNewUserInviteMessage(page, result) { - - if (!result.IsNewUserInvitation && !result.IsPending) { - - // It was immediately approved - return; - } - - var message = result.IsNewUserInvitation ? - Globalize.translate('MessageInvitationSentToNewUser', result.GuestDisplayName) : - Globalize.translate('MessageInvitationSentToUser', result.GuestDisplayName); - - require(['alert'], function (alert) { - alert({ - text: message, - title: Globalize.translate('HeaderInvitationSent') }); }); } diff --git a/dashboard-ui/scripts/livetvrecordings.js b/dashboard-ui/scripts/livetvrecordings.js index f38052e298..dc8d76df00 100644 --- a/dashboard-ui/scripts/livetvrecordings.js +++ b/dashboard-ui/scripts/livetvrecordings.js @@ -132,7 +132,9 @@ promise.then(function (result) { renderRecordings(context.querySelector('#latestRecordings'), result.Items, { - shape: (enableScrollX() ? 'overflowBackdrop' : 'backdrop') + shape: (enableScrollX() ? 'overflowBackdrop' : 'backdrop'), + showYear: true, + lines: 2 }); Dashboard.hideLoadingMsg(); diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 20c506bdfc..c36dce77b9 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1252,6 +1252,8 @@ var AppInfo = {}; define("alphaPicker", [embyWebComponentsBowerPath + "/alphapicker/alphapicker"], returnFirstDependency); define("paper-icon-button-light", [embyWebComponentsBowerPath + "/emby-button/paper-icon-button-light"]); + define("connectHelper", [embyWebComponentsBowerPath + "/emby-connect/connecthelper"], returnFirstDependency); + define("emby-input", [embyWebComponentsBowerPath + "/emby-input/emby-input"], returnFirstDependency); define("emby-select", [embyWebComponentsBowerPath + "/emby-select/emby-select"], returnFirstDependency); define("emby-slider", [embyWebComponentsBowerPath + "/emby-slider/emby-slider"], returnFirstDependency); diff --git a/dashboard-ui/scripts/useredit.js b/dashboard-ui/scripts/useredit.js index 7d1ed677d2..08162da1f1 100644 --- a/dashboard-ui/scripts/useredit.js +++ b/dashboard-ui/scripts/useredit.js @@ -55,111 +55,6 @@ Dashboard.hideLoadingMsg(); } - function updateUserInfo(user, newConnectUsername, actionCallback, noActionCallback) { - var currentConnectUsername = user.ConnectUserName || ''; - var enteredConnectUsername = newConnectUsername; - - var linkUrl = ApiClient.getUrl('Users/' + user.Id + '/Connect/Link'); - - if (currentConnectUsername && !enteredConnectUsername) { - - // Remove connect info - // Add/Update connect info - ApiClient.ajax({ - - type: "DELETE", - url: linkUrl - - }).then(function () { - - Dashboard.alert({ - - message: Globalize.translate('MessageEmbyAccontRemoved'), - title: Globalize.translate('HeaderEmbyAccountRemoved'), - - callback: actionCallback - - }); - }, function () { - - Dashboard.alert({ - - message: Globalize.translate('ErrorRemovingEmbyConnectAccount') - - }); - }); - - } - else if (currentConnectUsername != enteredConnectUsername) { - - // Add/Update connect info - ApiClient.ajax({ - type: "POST", - url: linkUrl, - data: { - ConnectUsername: enteredConnectUsername - }, - dataType: 'json' - - }).then(function (result) { - - var msgKey = result.IsPending ? 'MessagePendingEmbyAccountAdded' : 'MessageEmbyAccountAdded'; - - Dashboard.alert({ - message: Globalize.translate(msgKey), - title: Globalize.translate('HeaderEmbyAccountAdded'), - - callback: actionCallback - - }); - - }, function (response) { - - if (response.status == 500) { - - Dashboard.alert({ - - message: Globalize.translate('ErrorAddingEmbyConnectAccount3') - - }); - - } else { - showEmbyConnectErrorMessage('.'); - } - }); - - } else { - if (noActionCallback) { - noActionCallback(); - } - } - } - - function showEmbyConnectErrorMessage(username) { - - var html; - var text; - - if (username) { - - html = Globalize.translate('ErrorAddingEmbyConnectAccount1', 'https://emby.media/connect'); - html += '

' + Globalize.translate('ErrorAddingEmbyConnectAccount2', 'apps@emby.media'); - - text = Globalize.translate('ErrorAddingEmbyConnectAccount1', 'https://emby.media/connect'); - text += '\n\n' + Globalize.translate('ErrorAddingEmbyConnectAccount2', 'apps@emby.media'); - - } else { - html = text = Globalize.translate('DefaultErrorMessage'); - } - - require(['alert'], function (alert) { - alert({ - text: text, - html: html - }); - }); - } - function onSaveComplete(page, user) { Dashboard.hideLoadingMsg(); @@ -173,9 +68,11 @@ }); } else { - updateUserInfo(user, $('#txtConnectUserName', page).val(), function () { + require(['connectHelper'], function (connectHelper) { + connectHelper.updateUserLink(ApiClient, user, $('#txtConnectUserName', page).val()).then(function () { - loadData(page); + loadData(page); + }); }); } }