1
0
Fork 0
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:
dkanada 2020-01-31 01:05:15 +09:00 committed by GitHub
commit 1a3037229d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 67 additions and 14 deletions

View file

@ -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();

View file

@ -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) {

View file

@ -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;

View file

@ -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",

View file

@ -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?",

View file

@ -890,6 +890,7 @@
"MessageAlreadyInstalled": "Данная версия уже установлена.", "MessageAlreadyInstalled": "Данная версия уже установлена.",
"MessageAreYouSureDeleteSubtitles": "Вы действительно хотите удалить данный файл субитров?", "MessageAreYouSureDeleteSubtitles": "Вы действительно хотите удалить данный файл субитров?",
"MessageAreYouSureYouWishToRemoveMediaFolder": "Вы действительно хотите изъять данную медиапапку?", "MessageAreYouSureYouWishToRemoveMediaFolder": "Вы действительно хотите изъять данную медиапапку?",
"MessageConfirmAppExit": "Вы хотите выйти?",
"MessageConfirmDeleteGuideProvider": "Вы действительно хотите удалить данного поставщика телегида?", "MessageConfirmDeleteGuideProvider": "Вы действительно хотите удалить данного поставщика телегида?",
"MessageConfirmDeleteTunerDevice": "Вы действительно хотите удалить данное устройство?", "MessageConfirmDeleteTunerDevice": "Вы действительно хотите удалить данное устройство?",
"MessageConfirmProfileDeletion": "Вы действительно хотите удалить данный профиль?", "MessageConfirmProfileDeletion": "Вы действительно хотите удалить данный профиль?",