diff --git a/src/components/quickconnectsettings/quickconnectsettings.js b/src/components/quickconnectsettings/quickconnectsettings.js
index ed7985dcfa..fc167802d8 100644
--- a/src/components/quickconnectsettings/quickconnectsettings.js
+++ b/src/components/quickconnectsettings/quickconnectsettings.js
@@ -1,11 +1,10 @@
-define(['require', 'apphost', 'layoutManager', 'focusManager', 'globalize', 'loading', 'connectionManager', 'homeSections', 'dom', 'events', 'listViewStyle', 'emby-select', 'emby-checkbox'], function (require, appHost, layoutManager, focusManager, globalize, loading, connectionManager, homeSections, dom, events) {
+define(['require', 'apphost', 'layoutManager', 'focusManager', 'globalize', 'loading', 'connectionManager', 'listViewStyle', 'emby-select', 'emby-checkbox'], function (require, appHost, layoutManager, focusManager, globalize, loading, connectionManager) {
"use strict";
function authorizeRequest(event) {
var lookup = event.data.lookup;
- var apiClient = event.data.apiClient;
var url = ApiClient.getUrl("/QuickConnect/Authorize");
- apiClient.ajax({
+ ApiClient.ajax({
type: "POST",
url: url,
data: {
@@ -13,46 +12,72 @@ define(['require', 'apphost', 'layoutManager', 'focusManager', 'globalize', 'loa
}
}, true);
}
-
- function list(apiClient) {
- console.debug("getting json");
- apiClient.getJSON("/QuickConnect/List").then(json => {
- var elem = $("#quickConnectIncoming");
+
+ QuickConnectSettings.prototype.list = function(argPage) {
+ ApiClient.getJSON("/QuickConnect/List").then(json => {
+ var elem = $(argPage.querySelector("#quickConnectIncoming"));
elem.html("");
- console.debug("raw json", json, "length is", json.length);
- for(var i = 0; i < json.length; i++) {
+ for (var i = 0; i < json.length; i++) {
var current = json[i];
- console.debug("current is", current);
var html = "
" + current.Code + " - " + current.FriendlyName + " - ";
-
- if(!current.Authenticated) {
+
+ if (!current.Authenticated) {
html += "authorize";
- }
- else {
+ } else {
html += " (already authorized)";
}
-
+
html += "";
elem.append(html);
- $("#qc" + current.Lookup).click({ lookup: current.Lookup, apiClient: apiClient}, authorizeRequest);
+ $("#qc" + current.Lookup).click({ lookup: current.Lookup }, authorizeRequest);
}
+
+ return true;
+ }).catch((e) => {
+ console.error("Unable to get quick connect login requests. error:", e);
});
- }
+ };
+
+ QuickConnectSettings.prototype.activate = function() {
+ var url = ApiClient.getUrl("/QuickConnect/Activate");
+ ApiClient.ajax({
+ type: "POST",
+ url: url,
+ contentType: "application/json",
+ dataType: "json"
+ }).then((json) => {
+ let message = json.Error;
+
+ console.log("message is \"" + message + "\"");
+ if (message && message !== "") {
+ console.error("Error activating quick connect. Error: ", json.Error);
+
+ Dashboard.alert({
+ title: "Unable to activate quick connect",
+ message: message
+ });
+
+ return false;
+ }
+
+ Dashboard.alert({
+ message: "Already active"
+ });
+
+ return true;
+ }).catch((e) => {
+ console.error("Error activating quick connect. Error:", e);
+ throw e;
+ });
+ };
function QuickConnectSettings(options) {
this.options = options;
}
QuickConnectSettings.prototype.loadData = function () {
- loading.show();
-
- var apiClient = connectionManager.getApiClient(this.options.serverId);
-
- list(apiClient);
-
- console.debug("request list finished");
-
- loading.hide();
+ this.options.interval = setInterval(this.list, 5000, this.options.page);
+ this.list(this.options.page);
};
QuickConnectSettings.prototype.submit = function () {
@@ -60,8 +85,14 @@ define(['require', 'apphost', 'layoutManager', 'focusManager', 'globalize', 'loa
};
QuickConnectSettings.prototype.destroy = function () {
+ console.debug("clearing refresh interval", this.options.interval);
+ clearInterval(this.options.interval);
this.options = null;
};
+ QuickConnectSettings.prototype.interval = function (interval) {
+ this.options.interval = interval;
+ };
+
return QuickConnectSettings;
});
diff --git a/src/controllers/auth/login.js b/src/controllers/auth/login.js
index 845ae9a38f..94fa15d412 100644
--- a/src/controllers/auth/login.js
+++ b/src/controllers/auth/login.js
@@ -152,51 +152,54 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
function loginQuickConnect() {
var apiClient = getApiClient();
- var friendlyName = "test";
-
+ var friendlyName = navigator.userAgent; // TODO: what should this be changed to?
+
var url = apiClient.getUrl("/QuickConnect/Initiate?FriendlyName=" + friendlyName);
apiClient.getJSON(url)
- .then(json => {
- if (!json.Secret || !json.Code) {
+ .then(json => {
+ if (!json.Secret || !json.Code) {
+ Dashboard.alert({
+ message: json.Error,
+ title: "Error"
+ });
+
+ return false;
+ }
+
Dashboard.alert({
- message: json.Error,
- title: "Error"
+ message: "Authorize request " + json.Code + " to continue",
+ title: "Quick Connect Code"
});
- return;
- }
- Dashboard.alert({
- message: "Authorize request " + json.Code + " to continue",
- title: "Quick Connect Code"
- });
+ loading.show();
- loading.show();
+ var interval = setInterval(async function() {
+ let connectUrl = apiClient.getUrl('/QuickConnect/Connect?Secret=' + json.Secret);
+ let data = await apiClient.getJSON(connectUrl);
+ if (data.Authenticated) {
+ let result = await apiClient.quickConnect(data.Authentication);
+ var user = result.User;
+ var serverId = getParameterByName("serverid");
+ var newUrl = "home.html";
- var interval = setInterval(() => {
- var url = apiClient.getUrl('/QuickConnect/Connect?Secret=' + json.Secret);
- apiClient.getJSON(url)
- .then(data => {
- if(data.Authenticated) {
- apiClient.quickConnect(data.Authentication).then((result) => {
- var user = result.User;
- var serverId = getParameterByName("serverid");
- var newUrl;
+ if (user.Policy.IsAdministrator && !serverId) {
+ newUrl = "dashboard.html";
+ }
- if (user.Policy.IsAdministrator && !serverId) {
- newUrl = "dashboard.html";
- } else {
- newUrl = "home.html";
- }
+ loading.hide();
+ Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
+ Dashboard.navigate(newUrl);
+ clearInterval(interval);
- loading.hide();
- Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
- Dashboard.navigate(newUrl);
- clearInterval(interval);
- });
+ return true;
}
- });
- }, 5000);
- });
+ return false;
+ }, 5000);
+
+ return true;
+ }).catch((e) => {
+ console.error("Unable to initiate quick connect login request. Error:", e);
+ });
}
view.querySelector("#divUsers").addEventListener("click", function (e) {
@@ -240,7 +243,7 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
view.querySelector(".btnSelectServer").addEventListener("click", function () {
Dashboard.selectServer();
});
- view.addEventListener("viewshow", function (e) {
+ view.addEventListener("viewshow", function () {
loading.show();
if (!appHost.supports('multiserver')) {
diff --git a/src/controllers/quickconnect.js b/src/controllers/quickconnect.js
index 5c3c8f9a18..a6ebc381ce 100644
--- a/src/controllers/quickconnect.js
+++ b/src/controllers/quickconnect.js
@@ -1,9 +1,8 @@
-define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading, libraryMenu) {
+define(["jQuery", "loading", "fnchecked"], function ($, loading) {
"use strict";
+ var page;
function loadPage(page, status) {
- console.debug("status is \"" + status + "\"");
-
var active = (status == "Active");
var available = (status == "Available") || active;
@@ -16,44 +15,53 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading,
function onSubmit() {
loading.show();
-
- var available = $("#chkQuickConnectAvailable").is(":checked") ? "Available" : "Unavailable";
+
+ var newStatus = page.querySelector("#chkQuickConnectAvailable").checked ? "Available" : "Unavailable";
+ if (newStatus && page.querySelector("#chkQuickConnectActive").checked) {
+ newStatus = "Active";
+ }
+
var url = ApiClient.getUrl("/QuickConnect/Available");
-
+
ApiClient.ajax({
type: "POST",
data: {
- "Status": available
+ "Status": newStatus
},
url: url
}, true).then(() => {
- if($("#chkQuickConnectActive").is(":checked")) {
- url = ApiClient.getUrl("/QuickConnect/Activate");
- ApiClient.ajax({
- type: "POST",
- url: url
- }, true);
- }
-
Dashboard.alert({
message: "Settings saved",
title: "Saved"
});
+
+ setTimeout(updatePage, 500);
+
+ return true;
+ }).catch((e) => {
+ console.error("Unable to set quick connect status. error:", e);
});
-
+
loading.hide();
return false;
}
- $(document).on("pageinit", "#quickConnectPage", function () {
- document.querySelector("#quickConnectPage").onsubmit = onSubmit;
- document.querySelector("#btnQuickConnectSubmit").onclick = onSubmit;
- }).on("pageshow", "#quickConnectPage", function () {
- loading.show();
- var page = this;
+ function updatePage() {
var promise1 = ApiClient.getQuickConnect("Status");
- Promise.all([promise1]).then(function (responses) {
+ Promise.all([promise1]).then((responses) => {
loadPage(page, responses[0]);
+ return true;
+ }).catch((e) => {
+ console.error("Unable to get quick connect status. error:", e);
});
+ }
+
+ $(document).on("pageshow", "#quickConnectPage", function () {
+ loading.show();
+ page = this;
+
+ page.querySelector("#btnQuickConnectSubmit").onclick = onSubmit;
+
+ updatePage();
});
});
diff --git a/src/controllers/user/quickconnect.js b/src/controllers/user/quickconnect.js
index 6e63bcdc08..fae5d49865 100644
--- a/src/controllers/user/quickconnect.js
+++ b/src/controllers/user/quickconnect.js
@@ -1,50 +1,55 @@
define(["quickConnectSettings", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (QuickConnectSettings, dom, globalize, loading, userSettings, autoFocuser) {
"use strict";
- return function (view, params) {
- function notImplemented() {
- Dashboard.alert({
- message: "This button is not implemented yet, you must check the checkbox labeled \"Always accept quick connect login requests\" in the dashboard",
- title: "Not implemented"
- });
- }
-
+ return function (view) {
var quickConnectSettingsInstance = null;
- var hasChanges;
- var userId = params.userId || ApiClient.getCurrentUserId();
- var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
+
view.addEventListener("viewshow", function () {
- console.debug("defining instance");
-
- $("#btnQuickConnectActivate").click(notImplemented);
-
quickConnectSettingsInstance = new QuickConnectSettings({
- serverId: ApiClient.serverId(),
- userId: userId,
- element: view.querySelector(".quickConnectSettingsContainer"),
- userSettings: currentSettings,
- enableSaveButton: false,
- enableSaveConfirmation: false,
- autoFocus: autoFocuser.isEnabled()
+ page: view,
+ interval: 0
});
-
+
+ view.querySelector("#btnQuickConnectActivate").addEventListener("click", () => {
+ quickConnectSettingsInstance.activate(quickConnectSettingsInstance);
+ });
+
quickConnectSettingsInstance.loadData();
- });
- view.addEventListener("change", function () {
- hasChanges = true;
+
+ ApiClient.getQuickConnect("Status").then((status) => {
+ let btn = view.querySelector("#btnQuickConnectActivate");
+
+ if (status === "Unavailable") {
+ btn.textContent = "Quick connect is not available on this server";
+ btn.disabled = true;
+ return false;
+ }
+
+ else if (status === "Available") {
+ return false;
+ }
+
+ btn.style.display = "none";
+ return true;
+ }).catch((e) => {
+ throw e;
+ });
});
view.addEventListener("viewbeforehide", function () {
- hasChanges = false;
-
if (quickConnectSettingsInstance) {
quickConnectSettingsInstance.submit();
}
+ onDestroy();
});
view.addEventListener("viewdestroy", function () {
+ onDestroy();
+ });
+
+ function onDestroy() {
if (quickConnectSettingsInstance) {
quickConnectSettingsInstance.destroy();
quickConnectSettingsInstance = null;
}
- });
+ }
};
});
diff --git a/src/mypreferencesmenu.html b/src/mypreferencesmenu.html
index c8db1d17f3..bfc5e793ef 100644
--- a/src/mypreferencesmenu.html
+++ b/src/mypreferencesmenu.html
@@ -51,13 +51,13 @@
-
+
diff --git a/src/mypreferencesquickconnect.html b/src/mypreferencesquickconnect.html
index b9ffdfaccd..d92e49a427 100644
--- a/src/mypreferencesquickconnect.html
+++ b/src/mypreferencesquickconnect.html
@@ -2,7 +2,7 @@
-
+
Incoming login requests:
diff --git a/src/quickconnect.html b/src/quickconnect.html
index 875716285c..9a7dfdfb3e 100644
--- a/src/quickconnect.html
+++ b/src/quickconnect.html
@@ -6,9 +6,9 @@
Quick Connect
-
+
Quick connect is: Failed to load status
-
+
-
+
diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js
index 930df8be49..2accf4948d 100644
--- a/src/scripts/librarymenu.js
+++ b/src/scripts/librarymenu.js
@@ -350,7 +350,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
pageIds: ["devicesPage", "devicePage"],
icon: "devices"
});
- links.push({
+ links.push({
name: "Quick Connect",
href: "quickconnect.html",
pageIds: ["quickConnectPage", "quickConnectPage"],
diff --git a/src/scripts/site.js b/src/scripts/site.js
index 311478c019..3b8abf2bfe 100644
--- a/src/scripts/site.js
+++ b/src/scripts/site.js
@@ -829,7 +829,7 @@ var AppInfo = {};
define("displaySettings", [componentsPath + "/displaysettings/displaysettings"], returnFirstDependency);
define("playbackSettings", [componentsPath + "/playbacksettings/playbacksettings"], returnFirstDependency);
define("homescreenSettings", [componentsPath + "/homescreensettings/homescreensettings"], returnFirstDependency);
- define("quickConnectSettings", [componentsPath + "/quickconnectsettings/quickconnectsettings"], returnFirstDependency);
+ define("quickConnectSettings", [componentsPath + "/quickconnectsettings/quickconnectsettings"], returnFirstDependency);
define("playbackManager", [componentsPath + "/playback/playbackmanager"], getPlaybackManager);
define("layoutManager", [componentsPath + "/layoutManager", "apphost"], getLayoutManager);
define("homeSections", [componentsPath + "/homesections/homesections"], returnFirstDependency);