mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge pull request #720 from dmitrylyzo/exit_on_back
Add app exit on "Go back"
This commit is contained in:
commit
1a3037229d
6 changed files with 67 additions and 14 deletions
|
@ -545,13 +545,18 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
||||||
page.back();
|
page.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pages of "no return" (when "Go back" should behave differently, probably quitting the application).
|
||||||
|
*/
|
||||||
|
var startPages = ['home', 'login', 'selectserver'];
|
||||||
|
|
||||||
function canGoBack() {
|
function canGoBack() {
|
||||||
var curr = current();
|
var curr = current();
|
||||||
if (!curr) {
|
if (!curr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (curr.type === 'home') {
|
if (!document.querySelector('.dialogContainer') && startPages.indexOf(curr.type) !== -1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return page.canGoBack();
|
return page.canGoBack();
|
||||||
|
|
|
@ -299,6 +299,52 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
|
||||||
return features;
|
return features;
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do exit according to platform
|
||||||
|
*/
|
||||||
|
function doExit() {
|
||||||
|
try {
|
||||||
|
if (window.NativeShell) {
|
||||||
|
window.NativeShell.AppHost.exit();
|
||||||
|
} else if (browser.tizen) {
|
||||||
|
tizen.application.getCurrentApplication().exit();
|
||||||
|
} else if (browser.web0s) {
|
||||||
|
webOS.platformBack();
|
||||||
|
} else {
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log("error closing application: " + err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var exitPromise;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ask user for exit
|
||||||
|
*/
|
||||||
|
function askForExit() {
|
||||||
|
if (!!exitPromise) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require(["actionsheet"], function (actionsheet) {
|
||||||
|
exitPromise = actionsheet.show({
|
||||||
|
title: Globalize.translate("MessageConfirmAppExit"),
|
||||||
|
items: [
|
||||||
|
{id: "yes", name: Globalize.translate("Yes")},
|
||||||
|
{id: "no", name: Globalize.translate("No")}
|
||||||
|
]
|
||||||
|
}).then(function (value) {
|
||||||
|
if (value === "yes") {
|
||||||
|
doExit();
|
||||||
|
}
|
||||||
|
}).finally(function () {
|
||||||
|
exitPromise = null;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var deviceId;
|
var deviceId;
|
||||||
var deviceName;
|
var deviceName;
|
||||||
var appName = "Jellyfin Web";
|
var appName = "Jellyfin Web";
|
||||||
|
@ -314,16 +360,10 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
|
||||||
alert("setWindowState is not supported and should not be called");
|
alert("setWindowState is not supported and should not be called");
|
||||||
},
|
},
|
||||||
exit: function () {
|
exit: function () {
|
||||||
if (window.NativeShell) {
|
if (!!window.appMode && browser.tizen) {
|
||||||
window.NativeShell.AppHost.exit();
|
askForExit();
|
||||||
} else if (browser.tizen) {
|
|
||||||
try {
|
|
||||||
tizen.application.getCurrentApplication().exit();
|
|
||||||
} catch (err) {
|
|
||||||
console.log("error closing application: " + err);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
window.close();
|
doExit();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
supports: function (command) {
|
supports: function (command) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['playbackManager', 'focusManager', 'appRouter', 'dom'], function (playbackManager, focusManager, appRouter, dom) {
|
define(['playbackManager', 'focusManager', 'appRouter', 'dom', 'apphost'], function (playbackManager, focusManager, appRouter, dom, appHost) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var lastInputTime = new Date().getTime();
|
var lastInputTime = new Date().getTime();
|
||||||
|
@ -96,7 +96,11 @@ define(['playbackManager', 'focusManager', 'appRouter', 'dom'], function (playba
|
||||||
appRouter.showSettings();
|
appRouter.showSettings();
|
||||||
break;
|
break;
|
||||||
case 'back':
|
case 'back':
|
||||||
appRouter.back();
|
if (appRouter.canGoBack()) {
|
||||||
|
appRouter.back();
|
||||||
|
} else if (appHost.supports('exit')) {
|
||||||
|
appHost.exit();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'forward':
|
case 'forward':
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -226,7 +226,8 @@ define([
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
anonymous: true,
|
anonymous: true,
|
||||||
startup: true,
|
startup: true,
|
||||||
controller: "auth/login"
|
controller: "auth/login",
|
||||||
|
type: "login"
|
||||||
});
|
});
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: "/metadataimages.html",
|
path: "/metadataimages.html",
|
||||||
|
@ -312,7 +313,8 @@ define([
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
anonymous: true,
|
anonymous: true,
|
||||||
startup: true,
|
startup: true,
|
||||||
controller: "auth/selectserver"
|
controller: "auth/selectserver",
|
||||||
|
type: "selectserver"
|
||||||
});
|
});
|
||||||
defineRoute({
|
defineRoute({
|
||||||
path: "/serveractivity.html",
|
path: "/serveractivity.html",
|
||||||
|
|
|
@ -946,6 +946,7 @@
|
||||||
"MessageAlreadyInstalled": "This version is already installed.",
|
"MessageAlreadyInstalled": "This version is already installed.",
|
||||||
"MessageAreYouSureDeleteSubtitles": "Are you sure you wish to delete this subtitle file?",
|
"MessageAreYouSureDeleteSubtitles": "Are you sure you wish to delete this subtitle file?",
|
||||||
"MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?",
|
"MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?",
|
||||||
|
"MessageConfirmAppExit": "Do you want to exit?",
|
||||||
"MessageConfirmDeleteGuideProvider": "Are you sure you wish to delete this guide provider?",
|
"MessageConfirmDeleteGuideProvider": "Are you sure you wish to delete this guide provider?",
|
||||||
"MessageConfirmDeleteTunerDevice": "Are you sure you wish to delete this device?",
|
"MessageConfirmDeleteTunerDevice": "Are you sure you wish to delete this device?",
|
||||||
"MessageConfirmProfileDeletion": "Are you sure you wish to delete this profile?",
|
"MessageConfirmProfileDeletion": "Are you sure you wish to delete this profile?",
|
||||||
|
|
|
@ -890,6 +890,7 @@
|
||||||
"MessageAlreadyInstalled": "Данная версия уже установлена.",
|
"MessageAlreadyInstalled": "Данная версия уже установлена.",
|
||||||
"MessageAreYouSureDeleteSubtitles": "Вы действительно хотите удалить данный файл субитров?",
|
"MessageAreYouSureDeleteSubtitles": "Вы действительно хотите удалить данный файл субитров?",
|
||||||
"MessageAreYouSureYouWishToRemoveMediaFolder": "Вы действительно хотите изъять данную медиапапку?",
|
"MessageAreYouSureYouWishToRemoveMediaFolder": "Вы действительно хотите изъять данную медиапапку?",
|
||||||
|
"MessageConfirmAppExit": "Вы хотите выйти?",
|
||||||
"MessageConfirmDeleteGuideProvider": "Вы действительно хотите удалить данного поставщика телегида?",
|
"MessageConfirmDeleteGuideProvider": "Вы действительно хотите удалить данного поставщика телегида?",
|
||||||
"MessageConfirmDeleteTunerDevice": "Вы действительно хотите удалить данное устройство?",
|
"MessageConfirmDeleteTunerDevice": "Вы действительно хотите удалить данное устройство?",
|
||||||
"MessageConfirmProfileDeletion": "Вы действительно хотите удалить данный профиль?",
|
"MessageConfirmProfileDeletion": "Вы действительно хотите удалить данный профиль?",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue