diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index 7ebb2fa9ef..179b472bc3 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -225,10 +225,6 @@ function onRecordChange(e) { } } -function sendToast(msg) { - toast(msg); -} - function onRecordSeriesChange(e) { this.changed = true; @@ -252,7 +248,7 @@ function onRecordSeriesChange(e) { } else { if (this.SeriesTimerId) { apiClient.cancelLiveTvSeriesTimer(this.SeriesTimerId).then(function () { - sendToast(globalize.translate('RecordingCancelled')); + toast(globalize.translate('RecordingCancelled')); fetchData(self); }); } diff --git a/src/components/recordingcreator/recordinghelper.js b/src/components/recordingcreator/recordinghelper.js index e837fa1f27..1780668afd 100644 --- a/src/components/recordingcreator/recordinghelper.js +++ b/src/components/recordingcreator/recordinghelper.js @@ -16,7 +16,7 @@ function changeRecordingToSeries(apiClient, timerId, programId, confirmTimerCanc return apiClient.getNewLiveTvTimerDefaults({ programId: programId }).then(function (timerDefaults) { return apiClient.createLiveTvSeriesTimer(timerDefaults).then(function () { loading.hide(); - sendToast(globalize.translate('SeriesRecordingScheduled')); + toast(globalize.translate('SeriesRecordingScheduled')); }); }); } else { @@ -76,7 +76,7 @@ function cancelTimer(apiClient, timerId, hideLoading) { return apiClient.cancelLiveTvTimer(timerId).then(function () { if (hideLoading !== false) { loading.hide(); - sendToast(globalize.translate('RecordingCancelled')); + toast(globalize.translate('RecordingCancelled')); } }); } @@ -90,15 +90,11 @@ function createRecording(apiClient, programId, isSeries) { return promise.then(function () { loading.hide(); - sendToast(globalize.translate('RecordingScheduled')); + toast(globalize.translate('RecordingScheduled')); }); }); } -function sendToast(msg) { - toast(msg); -} - function showMultiCancellationPrompt(serverId, programId, timerId, timerStatus, seriesTimerId) { return new Promise(function (resolve, reject) { const items = []; diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index f38a92b293..3c1c8175ca 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -865,7 +865,7 @@ export default function () { }, currentPlayer); form.querySelector('input').value = ''; - toast('Message sent.'); + toast(globalize.translate('MessageSent')); e.preventDefault(); e.stopPropagation(); @@ -882,7 +882,7 @@ export default function () { }, currentPlayer); form.querySelector('input').value = ''; - toast('Text sent.'); + toast(globalize.translate('TextSent')); e.preventDefault(); e.stopPropagation(); diff --git a/src/components/shortcuts.js b/src/components/shortcuts.js index b3d82c4988..cd1f957d29 100644 --- a/src/components/shortcuts.js +++ b/src/components/shortcuts.js @@ -167,10 +167,6 @@ import toast from './toast/toast'; }); } - function sendToast(text) { - toast(text); - } - function executeAction(card, target, action) { target = target || card; @@ -222,7 +218,7 @@ import toast from './toast/toast'; ids: [playableItemId], serverId: serverId }); - sendToast(globalize.translate('MediaQueued')); + toast(globalize.translate('MediaQueued')); } else { playbackManager.queue({ ids: [playableItemId], diff --git a/src/components/syncPlay/core/Helper.js b/src/components/syncPlay/core/Helper.js index 53b47c47dd..95d34b7b1b 100644 --- a/src/components/syncPlay/core/Helper.js +++ b/src/components/syncPlay/core/Helper.js @@ -72,19 +72,6 @@ export function stringToGuid(input) { return input.replace(/([0-z]{8})([0-z]{4})([0-z]{4})([0-z]{4})([0-z]{12})/, '$1-$2-$3-$4-$5'); } -/** - * Triggers a show-message event. - * @param {Object} syncPlayManager The SyncPlay manager. - * @param {string} message The message name. - * @param {Array} args Extra data needed for the message, optional. - */ -export function showMessage(syncPlayManager, message, args = []) { - Events.trigger(syncPlayManager, 'show-message', [{ - message: message, - args: args - }]); -} - export function getItemsForPlayback(apiClient, query) { if (query.Ids && query.Ids.split(',').length === 1) { const itemId = query.Ids.split(','); diff --git a/src/components/syncPlay/core/Manager.js b/src/components/syncPlay/core/Manager.js index f792fee094..70513b3b35 100644 --- a/src/components/syncPlay/core/Manager.js +++ b/src/components/syncPlay/core/Manager.js @@ -9,6 +9,8 @@ import TimeSyncCore from './timeSync/TimeSyncCore'; import PlaybackCore from './PlaybackCore'; import QueueCore from './QueueCore'; import Controller from './Controller'; +import toast from '../../toast/toast'; +import globalize from '../../../scripts/globalize'; /** * Class that manages the SyncPlay feature. @@ -183,17 +185,17 @@ class Manager { this.queueCore.updatePlayQueue(apiClient, cmd.Data); break; case 'UserJoined': - Helper.showMessage(this, 'MessageSyncPlayUserJoined', [cmd.Data]); + toast(globalize.translate('MessageSyncPlayUserJoined', cmd.Data)); break; case 'UserLeft': - Helper.showMessage(this, 'MessageSyncPlayUserLeft', [cmd.Data]); + toast(globalize.translate('MessageSyncPlayUserLeft', cmd.Data)); break; case 'GroupJoined': cmd.Data.LastUpdatedAt = new Date(cmd.Data.LastUpdatedAt); this.enableSyncPlay(apiClient, cmd.Data, true); break; case 'SyncPlayIsDisabled': - Helper.showMessage(this, 'MessageSyncPlayIsDisabled'); + toast(globalize.translate('MessageSyncPlayIsDisabled')); break; case 'NotInGroup': case 'GroupLeft': @@ -208,16 +210,16 @@ class Manager { console.debug(`SyncPlay processGroupUpdate: state changed to ${cmd.Data.State} because ${cmd.Data.Reason}.`); break; case 'GroupDoesNotExist': - Helper.showMessage(this, 'MessageSyncPlayGroupDoesNotExist'); + toast(globalize.translate('MessageSyncPlayGroupDoesNotExist')); break; case 'CreateGroupDenied': - Helper.showMessage(this, 'MessageSyncPlayCreateGroupDenied'); + toast(globalize.translate('MessageSyncPlayCreateGroupDenied')); break; case 'JoinGroupDenied': - Helper.showMessage(this, 'MessageSyncPlayJoinGroupDenied'); + toast(globalize.translate('MessageSyncPlayJoinGroupDenied')); break; case 'LibraryAccessDenied': - Helper.showMessage(this, 'MessageSyncPlayLibraryAccessDenied'); + toast(globalize.translate('MessageSyncPlayLibraryAccessDenied')); break; default: console.error(`SyncPlay processGroupUpdate: command ${cmd.Type} not recognised.`); @@ -371,7 +373,7 @@ class Manager { this.timeSyncCore.forceUpdate(); if (showMessage) { - Helper.showMessage(this, 'MessageSyncPlayEnabled'); + toast(globalize.translate('MessageSyncPlayEnabled')); } } @@ -390,7 +392,7 @@ class Manager { this.playerWrapper.unbindFromPlayer(); if (showMessage) { - Helper.showMessage(this, 'MessageSyncPlayDisabled'); + toast(globalize.translate('MessageSyncPlayDisabled')); } } diff --git a/src/components/syncPlay/core/QueueCore.js b/src/components/syncPlay/core/QueueCore.js index ba9bb754fe..30fddf5f26 100644 --- a/src/components/syncPlay/core/QueueCore.js +++ b/src/components/syncPlay/core/QueueCore.js @@ -3,6 +3,8 @@ * @module components/syncPlay/core/QueueCore */ +import globalize from '../../../scripts/globalize'; +import toast from '../../toast/toast'; import * as Helper from './Helper'; /** @@ -185,7 +187,7 @@ class QueueCore { }).catch((error) => { console.error('Error while waiting for `playbackstart` event!', origin, error); if (!this.manager.isSyncPlayEnabled()) { - Helper.showMessage(this.manager, 'MessageSyncPlayErrorMedia'); + toast(globalize.translate('MessageSyncPlayErrorMedia')); } this.manager.haltGroupPlayback(apiClient); @@ -234,7 +236,7 @@ class QueueCore { this.scheduleReadyRequestOnPlaybackStart(apiClient, 'startPlayback'); }).catch((error) => { console.error(error); - Helper.showMessage(this.manager, 'MessageSyncPlayErrorMedia'); + toast(globalize.translate('MessageSyncPlayErrorMedia')); }); } diff --git a/src/components/syncPlay/ui/syncPlayToasts.js b/src/components/syncPlay/ui/syncPlayToasts.js deleted file mode 100644 index 8c8d4c0859..0000000000 --- a/src/components/syncPlay/ui/syncPlayToasts.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Module that notifies user about SyncPlay messages using toasts. - * @module components/syncPlay/syncPlayToasts - */ - -import { Events } from 'jellyfin-apiclient'; -import toast from '../../toast/toast'; -import globalize from '../../../scripts/globalize'; -import SyncPlay from '../core'; - -/** - * Class that notifies user about SyncPlay messages using toasts. - */ -class SyncPlayToasts { - constructor() { - // Do nothing. - } - - /** - * Listens for messages to show. - */ - init() { - Events.on(SyncPlay.Manager, 'show-message', (event, data) => { - const { message, args = [] } = data; - toast({ - text: globalize.translate(message, ...args) - }); - }); - } -} - -/** SyncPlayToasts singleton. */ -const syncPlayToasts = new SyncPlayToasts(); -export default syncPlayToasts; diff --git a/src/controllers/dashboard/dlna/profile.js b/src/controllers/dashboard/dlna/profile.js index 7498cc39dd..e54e1e3fc7 100644 --- a/src/controllers/dashboard/dlna/profile.js +++ b/src/controllers/dashboard/dlna/profile.js @@ -635,7 +635,7 @@ import toast from '../../../components/toast/toast'; data: JSON.stringify(profile), contentType: 'application/json' }).then(function () { - toast('Settings saved.'); + toast(globalize.translate('SettingsSaved')); }, Dashboard.processErrorResponse); } else { ApiClient.ajax({ diff --git a/src/scripts/clientUtils.js b/src/scripts/clientUtils.js index c9d1b3b4b1..4de4d9113e 100644 --- a/src/scripts/clientUtils.js +++ b/src/scripts/clientUtils.js @@ -122,9 +122,9 @@ export function processErrorResponse(response) { status = response.statusText; } - alert({ + baseAlert({ title: status, - message: response.headers ? response.headers.get('X-Application-Error-Code') : null + text: response.headers ? response.headers.get('X-Application-Error-Code') : null }); } diff --git a/src/scripts/site.js b/src/scripts/site.js index ba11ef33d7..2b8e110d32 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -33,7 +33,6 @@ import '../legacy/focusPreventScroll'; import '../legacy/vendorStyles'; import SyncPlay from '../components/syncPlay/core'; import { playbackManager } from '../components/playback/playbackmanager'; -import SyncPlayToasts from '../components/syncPlay/ui/syncPlayToasts'; import SyncPlayNoActivePlayer from '../components/syncPlay/ui/players/NoActivePlayer'; import SyncPlayHtmlVideoPlayer from '../components/syncPlay/ui/players/HtmlVideoPlayer'; import SyncPlayHtmlAudioPlayer from '../components/syncPlay/ui/players/HtmlAudioPlayer'; @@ -169,7 +168,6 @@ function initSyncPlay() { // Start SyncPlay. const apiClient = ServerConnections.currentApiClient(); if (apiClient) SyncPlay.Manager.init(apiClient); - SyncPlayToasts.init(); // FIXME: Multiple apiClients? Events.on(ServerConnections, 'apiclientcreated', (e, newApiClient) => SyncPlay.Manager.init(newApiClient)); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 54d4a8ca75..0915ec57a0 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1025,6 +1025,7 @@ "MessagePluginInstalled": "The plugin has been successfully installed. The server will need to be restarted for changes to take effect.", "MessagePluginInstallError": "An error occured while installing the plugin.", "MessageReenableUser": "See below to reenable", + "MessageSent": "Message sent.", "MessageSyncPlayCreateGroupDenied": "Permission required to create a group.", "MessageSyncPlayDisabled": "SyncPlay disabled.", "MessageSyncPlayEnabled": "SyncPlay enabled.", @@ -1394,6 +1395,7 @@ "Tags": "Tags", "TagsValue": "Tags: {0}", "TellUsAboutYourself": "Tell us about yourself", + "TextSent": "Text sent.", "ThemeSongs": "Theme songs", "ThemeVideos": "Theme videos", "TheseSettingsAffectSubtitlesOnThisDevice": "These settings affect subtitles on this device",