jellyfish-web/src/scripts/clientUtils.js

234 lines
6 KiB
JavaScript
Raw Normal View History

2020-08-14 05:48:59 +02:00
2020-08-08 15:26:03 +02:00
export function getCurrentUser() {
return window.ApiClient.getCurrentUser(false);
}
//TODO: investigate url prefix support for serverAddress function
export function serverAddress() {
if (AppInfo.isNativeApp) {
2020-08-14 05:48:59 +02:00
const apiClient = window.ApiClient;
2020-08-08 15:26:03 +02:00
if (apiClient) {
return apiClient.serverAddress();
}
return null;
}
2020-08-14 05:48:59 +02:00
const urlLower = window.location.href.toLowerCase();
const index = urlLower.lastIndexOf('/web');
2020-08-08 15:26:03 +02:00
if (index != -1) {
return urlLower.substring(0, index);
}
2020-08-14 05:48:59 +02:00
const loc = window.location;
let address = loc.protocol + '//' + loc.hostname;
2020-08-08 15:26:03 +02:00
if (loc.port) {
address += ':' + loc.port;
}
return address;
}
export function getCurrentUserId() {
2020-08-14 05:48:59 +02:00
const apiClient = window.ApiClient;
2020-08-08 15:26:03 +02:00
if (apiClient) {
return apiClient.getCurrentUserId();
}
return null;
}
export function onServerChanged(userId, accessToken, apiClient) {
apiClient = apiClient || window.ApiClient;
window.ApiClient = apiClient;
}
export function logout() {
ConnectionManager.logout().then(function () {
2020-08-14 05:48:59 +02:00
let loginPage;
2020-08-08 15:26:03 +02:00
if (AppInfo.isNativeApp) {
loginPage = 'selectserver.html';
window.ApiClient = null;
} else {
loginPage = 'login.html';
}
navigate(loginPage);
});
}
export function getConfigurationPageUrl(name) {
return 'configurationpage?name=' + encodeURIComponent(name);
}
export function getConfigurationResourceUrl(name) {
if (AppInfo.isNativeApp) {
return ApiClient.getUrl('web/ConfigurationPage', {
name: name
});
}
return getConfigurationPageUrl(name);
}
export function navigate(url, preserveQueryString) {
if (!url) {
throw new Error('url cannot be null or empty');
}
2020-08-14 05:48:59 +02:00
const queryString = getWindowLocationSearch();
2020-08-08 15:26:03 +02:00
if (preserveQueryString && queryString) {
url += queryString;
}
return new Promise(function (resolve, reject) {
2020-08-14 05:48:59 +02:00
import('appRouter').then(({default: appRouter}) => {
2020-08-08 15:26:03 +02:00
return appRouter.show(url).then(resolve, reject);
});
});
}
export function processPluginConfigurationUpdateResult() {
2020-08-14 05:48:59 +02:00
Promise.all([
import('loading'),
import('toast')
])
.then(([{default: loading}, {default: toast}]) => {
loading.hide();
2020-08-17 20:42:26 +09:00
toast(Globalize.translate('SettingsSaved'));
2020-08-14 05:48:59 +02:00
});
2020-08-08 15:26:03 +02:00
}
export function processServerConfigurationUpdateResult(result) {
2020-08-14 05:48:59 +02:00
Promise.all([
import('loading'),
import('toast')
])
.then(([{default: loading}, {default: toast}]) => {
loading.hide();
2020-08-17 20:42:26 +09:00
toast(Globalize.translate('SettingsSaved'));
2020-08-14 05:48:59 +02:00
});
2020-08-08 15:26:03 +02:00
}
export function processErrorResponse(response) {
2020-08-14 05:48:59 +02:00
import('loading').then(({default: loading}) => {
2020-08-08 15:26:03 +02:00
loading.hide();
});
2020-08-14 05:48:59 +02:00
let status = '' + response.status;
2020-08-08 15:26:03 +02:00
if (response.statusText) {
status = response.statusText;
}
alert({
title: status,
message: response.headers ? response.headers.get('X-Application-Error-Code') : null
});
}
export function alert(options) {
if (typeof options == 'string') {
2020-08-14 05:48:59 +02:00
return void import('toast').then(({default: toast}) => {
toast({
2020-08-08 15:26:03 +02:00
text: options
});
});
}
2020-08-14 05:48:59 +02:00
import('alert').then(({default: alert}) => {
alert({
2020-08-08 15:26:03 +02:00
title: options.title || Globalize.translate('HeaderAlert'),
text: options.message
}).then(options.callback || function () {});
});
}
export function capabilities(appHost) {
2020-08-14 05:48:59 +02:00
let capabilities = {
2020-08-08 15:26:03 +02:00
PlayableMediaTypes: ['Audio', 'Video'],
SupportedCommands: ['MoveUp', 'MoveDown', 'MoveLeft', 'MoveRight', 'PageUp', 'PageDown', 'PreviousLetter', 'NextLetter', 'ToggleOsd', 'ToggleContextMenu', 'Select', 'Back', 'SendKey', 'SendString', 'GoHome', 'GoToSettings', 'VolumeUp', 'VolumeDown', 'Mute', 'Unmute', 'ToggleMute', 'SetVolume', 'SetAudioStreamIndex', 'SetSubtitleStreamIndex', 'DisplayContent', 'GoToSearch', 'DisplayMessage', 'SetRepeatMode', 'SetShuffleQueue', 'ChannelUp', 'ChannelDown', 'PlayMediaSource', 'PlayTrailers'],
SupportsPersistentIdentifier: self.appMode === 'cordova' || self.appMode === 'android',
SupportsMediaControl: true
};
return Object.assign(capabilities, appHost.getPushTokenInfo());
2020-08-08 15:26:03 +02:00
}
export function selectServer() {
if (window.NativeShell && typeof window.NativeShell.selectServer === 'function') {
window.NativeShell.selectServer();
} else {
navigate('selectserver.html');
}
}
export function hideLoadingMsg() {
2020-08-14 05:48:59 +02:00
import('loading').then(({default: loading}) => {
2020-08-08 15:26:03 +02:00
loading.hide();
});
}
export function showLoadingMsg() {
2020-08-14 05:48:59 +02:00
import('loading').then(({default: loading}) => {
2020-08-08 15:26:03 +02:00
loading.show();
});
}
export function confirm(message, title, callback) {
2020-08-14 05:48:59 +02:00
import('confirm').then(({default: confirm}) => {
2020-08-08 15:26:03 +02:00
confirm(message, title).then(function() {
callback(!0);
}).catch(function() {
callback(!1);
});
});
}
// This is used in plugins and templates, so keep it defined for now.
// TODO: Remove once plugins don't need it
window.Dashboard = {
alert,
capabilities,
confirm,
getConfigurationPageUrl,
getConfigurationResourceUrl,
getCurrentUser,
getCurrentUserId,
hideLoadingMsg,
logout,
navigate,
onServerChanged,
processErrorResponse,
processPluginConfigurationUpdateResult,
processServerConfigurationUpdateResult,
selectServer,
serverAddress,
showLoadingMsg
};
export default {
alert,
capabilities,
confirm,
getConfigurationPageUrl,
getConfigurationResourceUrl,
getCurrentUser,
getCurrentUserId,
hideLoadingMsg,
logout,
navigate,
onServerChanged,
processErrorResponse,
processPluginConfigurationUpdateResult,
processServerConfigurationUpdateResult,
selectServer,
serverAddress,
showLoadingMsg
};