From 0a0e45d155f71345ec2e7c362261af10de370489 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 14 Oct 2022 10:53:16 -0400 Subject: [PATCH] Replace apiclient event bus with local version --- src/components/ServerConnections.js | 3 +- src/components/activitylog.js | 2 +- src/components/appRouter.js | 2 +- src/components/apphost.js | 2 +- .../displaySettings/displaySettings.js | 2 +- src/components/filterdialog/filterdialog.js | 2 +- src/components/guide/guide.js | 2 +- .../homeScreenSettings/homeScreenSettings.js | 2 +- src/components/htmlMediaHelper.js | 2 +- src/components/itemsrefresher.js | 2 +- src/components/layoutManager.js | 2 +- src/components/maintabsmanager.js | 2 +- src/components/notifications/notifications.js | 2 +- src/components/nowPlayingBar/nowPlayingBar.js | 2 +- src/components/playback/brightnessosd.js | 3 +- src/components/playback/mediasession.js | 2 +- src/components/playback/playbackmanager.js | 2 +- .../playback/playbackorientation.js | 2 +- .../playback/playerSelectionMenu.js | 2 +- .../playback/remotecontrolautoplay.js | 2 +- src/components/playback/volumeosd.js | 3 +- .../playbackSettings/playbackSettings.js | 2 +- src/components/playerstats/playerstats.js | 2 +- src/components/pluginManager.js | 2 +- .../recordingcreator/recordingcreator.js | 2 +- .../recordingcreator/recordingfields.js | 2 +- src/components/remotecontrol/remotecontrol.js | 2 +- src/components/search/LiveTVSearchResults.tsx | 2 +- src/components/search/SearchResults.tsx | 2 +- .../subtitlesettings/subtitlesettings.js | 2 +- src/components/themeMediaPlayer.js | 2 +- src/components/tvproviders/schedulesdirect.js | 2 +- src/components/tvproviders/xmltv.js | 2 +- src/components/upnextdialog/upnextdialog.js | 2 +- src/controllers/dashboard/dashboard.js | 2 +- .../scheduledtasks/scheduledtasks.js | 3 +- src/controllers/itemDetails/index.js | 2 +- src/controllers/livetv/livetvchannels.js | 3 +- src/controllers/livetvguideprovider.js | 2 +- src/controllers/movies/movies.js | 3 +- src/controllers/movies/moviesrecommended.js | 5 +- src/controllers/movies/movietrailers.js | 3 +- src/controllers/music/musicalbums.js | 3 +- src/controllers/music/musicartists.js | 3 +- src/controllers/music/songs.js | 7 +-- src/controllers/playback/video/index.js | 2 +- src/controllers/shows/episodes.js | 5 +- src/controllers/shows/tvrecommended.js | 2 +- src/controllers/shows/tvshows.js | 3 +- src/controllers/user/controls/index.js | 2 +- .../emby-itemrefreshindicator.js | 3 +- .../emby-itemscontainer.js | 2 +- .../emby-playstatebutton.js | 2 +- .../emby-ratingbutton/emby-ratingbutton.js | 2 +- src/index.jsx | 2 +- src/plugins/bookPlayer/plugin.js | 2 +- src/plugins/chromecastPlayer/plugin.js | 2 +- src/plugins/htmlAudioPlayer/plugin.js | 2 +- src/plugins/htmlVideoPlayer/plugin.js | 2 +- src/plugins/pdfPlayer/plugin.js | 3 +- src/plugins/sessionPlayer/plugin.js | 2 +- src/plugins/syncPlay/core/Helper.js | 2 +- src/plugins/syncPlay/core/Manager.js | 2 +- src/plugins/syncPlay/core/PlaybackCore.js | 2 +- .../syncPlay/core/players/GenericPlayer.js | 2 +- .../syncPlay/core/timeSync/TimeSync.js | 2 +- .../syncPlay/core/timeSync/TimeSyncCore.js | 2 +- src/plugins/syncPlay/plugin.ts | 3 +- src/plugins/syncPlay/ui/groupSelectionMenu.js | 3 +- .../syncPlay/ui/players/HtmlVideoPlayer.js | 2 +- .../syncPlay/ui/settings/SettingsEditor.js | 2 +- src/plugins/youtubePlayer/plugin.js | 2 +- src/scripts/autoThemes.js | 2 +- src/scripts/autocast.js | 2 +- src/scripts/globalize.js | 2 +- src/scripts/libraryMenu.js | 2 +- src/scripts/mouseManager.js | 6 +-- src/scripts/screensavermanager.js | 3 +- src/scripts/serverNotifications.js | 2 +- src/scripts/settings/appSettings.js | 3 +- src/scripts/settings/userSettings.js | 2 +- src/scripts/taskbutton.js | 5 +- src/scripts/touchHelper.js | 2 +- src/utils/events.ts | 50 +++++++++++++++++++ 84 files changed, 159 insertions(+), 91 deletions(-) create mode 100644 src/utils/events.ts diff --git a/src/components/ServerConnections.js b/src/components/ServerConnections.js index 744b364c65..5f7a7ef673 100644 --- a/src/components/ServerConnections.js +++ b/src/components/ServerConnections.js @@ -1,7 +1,8 @@ -import { ConnectionManager, Credentials, ApiClient, Events } from 'jellyfin-apiclient'; +import { ConnectionManager, Credentials, ApiClient } from 'jellyfin-apiclient'; import { appHost } from './apphost'; import Dashboard from '../utils/dashboard'; +import Events from '../utils/events.ts'; import { setUserInfo } from '../scripts/settings/userSettings'; import appSettings from '../scripts/settings/appSettings'; diff --git a/src/components/activitylog.js b/src/components/activitylog.js index 42a790280a..7054726266 100644 --- a/src/components/activitylog.js +++ b/src/components/activitylog.js @@ -1,5 +1,5 @@ import escapeHtml from 'escape-html'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; import globalize from '../scripts/globalize'; import dom from '../scripts/dom'; import * as datefns from 'date-fns'; diff --git a/src/components/appRouter.js b/src/components/appRouter.js index 9bfdc85707..b1267c5235 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -1,9 +1,9 @@ -import { Events } from 'jellyfin-apiclient'; import { Action, createHashHistory } from 'history'; import { appHost } from './apphost'; import { clearBackdrop, setBackdropTransparency } from './backdrop/backdrop'; import globalize from '../scripts/globalize'; +import Events from '../utils/events.ts'; import itemHelper from './itemHelper'; import loading from './loading/loading'; import viewManager from './viewManager/viewManager'; diff --git a/src/components/apphost.js b/src/components/apphost.js index 5276582154..d4ae5a79d4 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -1,7 +1,7 @@ import Package from '../../package.json'; import appSettings from '../scripts/settings/appSettings'; import browser from '../scripts/browser'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; import * as htmlMediaHelper from '../components/htmlMediaHelper'; import * as webSettings from '../scripts/settings/webSettings'; import globalize from '../scripts/globalize'; diff --git a/src/components/displaySettings/displaySettings.js b/src/components/displaySettings/displaySettings.js index 9b9df94131..f351368a9a 100644 --- a/src/components/displaySettings/displaySettings.js +++ b/src/components/displaySettings/displaySettings.js @@ -8,7 +8,7 @@ import datetime from '../../scripts/datetime'; import globalize from '../../scripts/globalize'; import loading from '../loading/loading'; import skinManager from '../../scripts/themeManager'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import '../../elements/emby-select/emby-select'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-button/emby-button'; diff --git a/src/components/filterdialog/filterdialog.js b/src/components/filterdialog/filterdialog.js index 1c12d5367c..c18e6d4a5f 100644 --- a/src/components/filterdialog/filterdialog.js +++ b/src/components/filterdialog/filterdialog.js @@ -1,7 +1,7 @@ import dom from '../../scripts/dom'; import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../scripts/globalize'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-collapse/emby-collapse'; import './style.scss'; diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index c9b5b108e0..ca0bd4208f 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -2,7 +2,7 @@ import escapeHtml from 'escape-html'; import inputManager from '../../scripts/inputManager'; import browser from '../../scripts/browser'; import globalize from '../../scripts/globalize'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import scrollHelper from '../../scripts/scrollHelper'; import serverNotifications from '../../scripts/serverNotifications'; import loading from '../loading/loading'; diff --git a/src/components/homeScreenSettings/homeScreenSettings.js b/src/components/homeScreenSettings/homeScreenSettings.js index 2adba2f6b8..a28a18438c 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.js +++ b/src/components/homeScreenSettings/homeScreenSettings.js @@ -4,7 +4,7 @@ import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; import globalize from '../../scripts/globalize'; import loading from '../loading/loading'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import homeSections from '../homesections/homesections'; import dom from '../../scripts/dom'; import '../listview/listview.scss'; diff --git a/src/components/htmlMediaHelper.js b/src/components/htmlMediaHelper.js index f5eab29b93..7f9d3f36d5 100644 --- a/src/components/htmlMediaHelper.js +++ b/src/components/htmlMediaHelper.js @@ -3,7 +3,7 @@ import appSettings from '../scripts/settings/appSettings' ; import browser from '../scripts/browser'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; export function getSavedVolume() { return appSettings.get('volume') || 1; diff --git a/src/components/itemsrefresher.js b/src/components/itemsrefresher.js index 8b71d9c926..4a784b91c9 100644 --- a/src/components/itemsrefresher.js +++ b/src/components/itemsrefresher.js @@ -1,6 +1,6 @@ import { playbackManager } from './playback/playbackmanager'; import serverNotifications from '../scripts/serverNotifications'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; function onUserDataChanged() { const instance = this; diff --git a/src/components/layoutManager.js b/src/components/layoutManager.js index bd0796b0d2..17dd259223 100644 --- a/src/components/layoutManager.js +++ b/src/components/layoutManager.js @@ -2,7 +2,7 @@ import { appHost } from './apphost'; import browser from '../scripts/browser'; import appSettings from '../scripts/settings/appSettings'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; function setLayout(instance, layout, selectedLayout) { if (layout === selectedLayout) { diff --git a/src/components/maintabsmanager.js b/src/components/maintabsmanager.js index 9f9db9ce26..807c604c27 100644 --- a/src/components/maintabsmanager.js +++ b/src/components/maintabsmanager.js @@ -1,6 +1,6 @@ import dom from '../scripts/dom'; import browser from '../scripts/browser'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; import '../elements/emby-tabs/emby-tabs'; import '../elements/emby-button/emby-button'; diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index b7a812ef2f..16c8312867 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -1,6 +1,6 @@ import serverNotifications from '../../scripts/serverNotifications'; import { playbackManager } from '../playback/playbackmanager'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import globalize from '../../scripts/globalize'; import NotificationIcon from './notificationicon.png'; diff --git a/src/components/nowPlayingBar/nowPlayingBar.js b/src/components/nowPlayingBar/nowPlayingBar.js index b39c8bff00..121a24db41 100644 --- a/src/components/nowPlayingBar/nowPlayingBar.js +++ b/src/components/nowPlayingBar/nowPlayingBar.js @@ -1,5 +1,5 @@ import datetime from '../../scripts/datetime'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import browser from '../../scripts/browser'; import imageLoader from '../images/imageLoader'; import layoutManager from '../layoutManager'; diff --git a/src/components/playback/brightnessosd.js b/src/components/playback/brightnessosd.js index d3678ac3f4..6b37d31f26 100644 --- a/src/components/playback/brightnessosd.js +++ b/src/components/playback/brightnessosd.js @@ -1,7 +1,8 @@ -import { Events } from 'jellyfin-apiclient'; import { playbackManager } from './playbackmanager'; import dom from '../../scripts/dom'; import browser from '../../scripts/browser'; +import Events from '../../utils/events.ts'; + import './iconosd.scss'; import 'material-design-icons-iconfont'; diff --git a/src/components/playback/mediasession.js b/src/components/playback/mediasession.js index 9cfb9f3b0b..089820fb47 100644 --- a/src/components/playback/mediasession.js +++ b/src/components/playback/mediasession.js @@ -1,6 +1,6 @@ import { playbackManager } from '../playback/playbackmanager'; import nowPlayingHelper from '../playback/nowplayinghelper'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import ServerConnections from '../ServerConnections'; import shell from '../../scripts/shell'; diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 761bb80556..e2780acb95 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1,4 +1,4 @@ -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import datetime from '../../scripts/datetime'; import appSettings from '../../scripts/settings/appSettings'; import itemHelper from '../itemHelper'; diff --git a/src/components/playback/playbackorientation.js b/src/components/playback/playbackorientation.js index 66b461738d..a4bd8324c6 100644 --- a/src/components/playback/playbackorientation.js +++ b/src/components/playback/playbackorientation.js @@ -1,7 +1,7 @@ import { playbackManager } from './playbackmanager'; import layoutManager from '../layoutManager'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; let orientationLocked; diff --git a/src/components/playback/playerSelectionMenu.js b/src/components/playback/playerSelectionMenu.js index 94c3c4b439..17dcb06819 100644 --- a/src/components/playback/playerSelectionMenu.js +++ b/src/components/playback/playerSelectionMenu.js @@ -1,5 +1,5 @@ import appSettings from '../../scripts/settings/appSettings'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import browser from '../../scripts/browser'; import loading from '../loading/loading'; import { playbackManager } from '../playback/playbackmanager'; diff --git a/src/components/playback/remotecontrolautoplay.js b/src/components/playback/remotecontrolautoplay.js index 6d862a5491..5010f61a30 100644 --- a/src/components/playback/remotecontrolautoplay.js +++ b/src/components/playback/remotecontrolautoplay.js @@ -1,5 +1,5 @@ -import { Events } from 'jellyfin-apiclient'; import { playbackManager } from '../playback/playbackmanager'; +import Events from '../../utils/events.ts'; function transferPlayback(oldPlayer, newPlayer) { const state = playbackManager.getPlayerState(oldPlayer); diff --git a/src/components/playback/volumeosd.js b/src/components/playback/volumeosd.js index 1c958a4225..aec36c0f46 100644 --- a/src/components/playback/volumeosd.js +++ b/src/components/playback/volumeosd.js @@ -1,8 +1,9 @@ -import { Events } from 'jellyfin-apiclient'; import { playbackManager } from './playbackmanager'; import dom from '../../scripts/dom'; import browser from '../../scripts/browser'; +import Events from '../../utils/events.ts'; + import './iconosd.scss'; import 'material-design-icons-iconfont'; diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index 7c959c0a44..1969d478c1 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -5,7 +5,7 @@ import focusManager from '../focusManager'; import qualityoptions from '../qualityOptions'; import globalize from '../../scripts/globalize'; import loading from '../loading/loading'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import '../../elements/emby-select/emby-select'; import '../../elements/emby-checkbox/emby-checkbox'; import ServerConnections from '../ServerConnections'; diff --git a/src/components/playerstats/playerstats.js b/src/components/playerstats/playerstats.js index 225b0650c7..e8054e5fb3 100644 --- a/src/components/playerstats/playerstats.js +++ b/src/components/playerstats/playerstats.js @@ -1,6 +1,6 @@ -import { Events } from 'jellyfin-apiclient'; import '../../elements/emby-button/paper-icon-button-light'; import globalize from '../../scripts/globalize'; +import Events from '../../utils/events.ts'; import layoutManager from '../layoutManager'; import { playbackManager } from '../playback/playbackmanager'; import playMethodHelper from '../playback/playmethodhelper'; diff --git a/src/components/pluginManager.js b/src/components/pluginManager.js index 998e839739..80899d8bed 100644 --- a/src/components/pluginManager.js +++ b/src/components/pluginManager.js @@ -1,4 +1,4 @@ -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; import globalize from '../scripts/globalize'; import loading from './loading/loading'; import appSettings from '../scripts/settings/appSettings'; diff --git a/src/components/recordingcreator/recordingcreator.js b/src/components/recordingcreator/recordingcreator.js index 6720a43475..ac07e200b5 100644 --- a/src/components/recordingcreator/recordingcreator.js +++ b/src/components/recordingcreator/recordingcreator.js @@ -7,7 +7,7 @@ import scrollHelper from '../../scripts/scrollHelper'; import datetime from '../../scripts/datetime'; import imageLoader from '../images/imageLoader'; import recordingFields from './recordingfields'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-button/paper-icon-button-light'; import '../../elements/emby-checkbox/emby-checkbox'; diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index 64d58e9045..4b912392ad 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -1,5 +1,5 @@ import globalize from '../../scripts/globalize'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import serverNotifications from '../../scripts/serverNotifications'; import loading from '../loading/loading'; import dom from '../../scripts/dom'; diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 56c9ecb010..b7f6e05327 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -5,7 +5,7 @@ import listView from '../listview/listview'; import imageLoader from '../images/imageLoader'; import { playbackManager } from '../playback/playbackmanager'; import nowPlayingHelper from '../playback/nowplayinghelper'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import { appHost } from '../apphost'; import globalize from '../../scripts/globalize'; import layoutManager from '../layoutManager'; diff --git a/src/components/search/LiveTVSearchResults.tsx b/src/components/search/LiveTVSearchResults.tsx index 93abec9853..4fb0af1ee3 100644 --- a/src/components/search/LiveTVSearchResults.tsx +++ b/src/components/search/LiveTVSearchResults.tsx @@ -1,6 +1,6 @@ import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client'; +import type { ApiClient } from 'jellyfin-apiclient'; import classNames from 'classnames'; -import { ApiClient } from 'jellyfin-apiclient'; import React, { FunctionComponent, useEffect, useState } from 'react'; import globalize from '../../scripts/globalize'; diff --git a/src/components/search/SearchResults.tsx b/src/components/search/SearchResults.tsx index 1bdef37ac9..bc3528261d 100644 --- a/src/components/search/SearchResults.tsx +++ b/src/components/search/SearchResults.tsx @@ -1,6 +1,6 @@ import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client'; +import type { ApiClient } from 'jellyfin-apiclient'; import classNames from 'classnames'; -import { ApiClient } from 'jellyfin-apiclient'; import React, { FunctionComponent, useEffect, useState } from 'react'; import globalize from '../../scripts/globalize'; diff --git a/src/components/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js index 1aef935bc8..6cbced92d2 100644 --- a/src/components/subtitlesettings/subtitlesettings.js +++ b/src/components/subtitlesettings/subtitlesettings.js @@ -7,7 +7,7 @@ import loading from '../loading/loading'; import subtitleAppearanceHelper from './subtitleappearancehelper'; import settingsHelper from '../settingshelper'; import dom from '../../scripts/dom'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import '../listview/listview.scss'; import '../../elements/emby-select/emby-select'; import '../../elements/emby-slider/emby-slider'; diff --git a/src/components/themeMediaPlayer.js b/src/components/themeMediaPlayer.js index 073f891c30..9dea2a7770 100644 --- a/src/components/themeMediaPlayer.js +++ b/src/components/themeMediaPlayer.js @@ -1,6 +1,6 @@ import { playbackManager } from './playback/playbackmanager'; import * as userSettings from '../scripts/settings/userSettings'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; import ServerConnections from './ServerConnections'; let currentOwnerId; diff --git a/src/components/tvproviders/schedulesdirect.js b/src/components/tvproviders/schedulesdirect.js index 509c8145a3..91ab7275e8 100644 --- a/src/components/tvproviders/schedulesdirect.js +++ b/src/components/tvproviders/schedulesdirect.js @@ -9,7 +9,7 @@ import '../../elements/emby-select/emby-select'; import '../../elements/emby-button/emby-button'; import '../../assets/css/flexstyles.scss'; import Dashboard from '../../utils/dashboard'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; export default function (page, providerId, options) { function reload() { diff --git a/src/components/tvproviders/xmltv.js b/src/components/tvproviders/xmltv.js index 5a4e44db6d..4cc5f871fc 100644 --- a/src/components/tvproviders/xmltv.js +++ b/src/components/tvproviders/xmltv.js @@ -6,7 +6,7 @@ import '../../elements/emby-input/emby-input'; import '../listview/listview.scss'; import '../../elements/emby-button/paper-icon-button-light'; import Dashboard from '../../utils/dashboard'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; export default function (page, providerId, options) { function getListingProvider(config, id) { diff --git a/src/components/upnextdialog/upnextdialog.js b/src/components/upnextdialog/upnextdialog.js index 4eac3eae60..31bb695f3e 100644 --- a/src/components/upnextdialog/upnextdialog.js +++ b/src/components/upnextdialog/upnextdialog.js @@ -1,6 +1,6 @@ import dom from '../../scripts/dom'; import { playbackManager } from '../playback/playbackmanager'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import mediaInfo from '../mediainfo/mediainfo'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; diff --git a/src/controllers/dashboard/dashboard.js b/src/controllers/dashboard/dashboard.js index ef4baa8be3..481f6d1948 100644 --- a/src/controllers/dashboard/dashboard.js +++ b/src/controllers/dashboard/dashboard.js @@ -1,6 +1,6 @@ import escapeHtml from 'escape-html'; import datetime from '../../scripts/datetime'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import itemHelper from '../../components/itemHelper'; import serverNotifications from '../../scripts/serverNotifications'; import dom from '../../scripts/dom'; diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtasks.js b/src/controllers/dashboard/scheduledtasks/scheduledtasks.js index b11a561f59..d4df7d89e0 100644 --- a/src/controllers/dashboard/scheduledtasks/scheduledtasks.js +++ b/src/controllers/dashboard/scheduledtasks/scheduledtasks.js @@ -1,10 +1,11 @@ import 'jquery'; import loading from '../../../components/loading/loading'; -import { Events } from 'jellyfin-apiclient'; import globalize from '../../../scripts/globalize'; import serverNotifications from '../../../scripts/serverNotifications'; import { formatDistance, formatDistanceToNow } from 'date-fns'; import { getLocale, getLocaleWithSuffix } from '../../../scripts/dfnshelper'; +import Events from '../../../utils/events.ts'; + import '../../../components/listview/listview.scss'; import '../../../elements/emby-button/emby-button'; diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index c0e6dc809a..192198f141 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -7,7 +7,7 @@ import { appHost } from '../../components/apphost'; import loading from '../../components/loading/loading'; import { appRouter } from '../../components/appRouter'; import layoutManager from '../../components/layoutManager'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import * as userSettings from '../../scripts/settings/userSettings'; import cardBuilder from '../../components/cardbuilder/cardBuilder'; import datetime from '../../scripts/datetime'; diff --git a/src/controllers/livetv/livetvchannels.js b/src/controllers/livetv/livetvchannels.js index 9a82a3d532..90469c59f6 100644 --- a/src/controllers/livetv/livetvchannels.js +++ b/src/controllers/livetv/livetvchannels.js @@ -2,8 +2,9 @@ import cardBuilder from '../../components/cardbuilder/cardBuilder'; import imageLoader from '../../components/images/imageLoader'; import libraryBrowser from '../../scripts/libraryBrowser'; import loading from '../../components/loading/loading'; -import { Events } from 'jellyfin-apiclient'; import * as userSettings from '../../scripts/settings/userSettings'; +import Events from '../../utils/events.ts'; + import '../../elements/emby-itemscontainer/emby-itemscontainer'; export default function (view, params, tabContent) { diff --git a/src/controllers/livetvguideprovider.js b/src/controllers/livetvguideprovider.js index 1b8d9124ac..accdbe56bc 100644 --- a/src/controllers/livetvguideprovider.js +++ b/src/controllers/livetvguideprovider.js @@ -1,8 +1,8 @@ -import { Events } from 'jellyfin-apiclient'; import loading from '../components/loading/loading'; import globalize from '../scripts/globalize'; import Dashboard, { pageIdOn } from '../utils/dashboard'; import { getParameterByName } from '../utils/url.ts'; +import Events from '../utils/events.ts'; function onListingsSubmitted() { Dashboard.navigate('livetvstatus.html'); diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index b4e28d2f97..bf566dc45d 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -1,12 +1,13 @@ import loading from '../../components/loading/loading'; import * as userSettings from '../../scripts/settings/userSettings'; -import { Events } from 'jellyfin-apiclient'; import libraryBrowser from '../../scripts/libraryBrowser'; import { AlphaPicker } from '../../components/alphaPicker/alphaPicker'; import listView from '../../components/listview/listview'; import cardBuilder from '../../components/cardbuilder/cardBuilder'; import globalize from '../../scripts/globalize'; +import Events from '../../utils/events.ts'; import { playbackManager } from '../../components/playback/playbackmanager'; + import '../../elements/emby-itemscontainer/emby-itemscontainer'; /* eslint-disable indent */ diff --git a/src/controllers/movies/moviesrecommended.js b/src/controllers/movies/moviesrecommended.js index dc605ca45a..b1b0103311 100644 --- a/src/controllers/movies/moviesrecommended.js +++ b/src/controllers/movies/moviesrecommended.js @@ -1,5 +1,4 @@ import escapeHtml from 'escape-html'; -import { Events } from 'jellyfin-apiclient'; import layoutManager from '../../components/layoutManager'; import inputManager from '../../scripts/inputManager'; import * as userSettings from '../../scripts/settings/userSettings'; @@ -10,11 +9,13 @@ import dom from '../../scripts/dom'; import imageLoader from '../../components/images/imageLoader'; import { playbackManager } from '../../components/playback/playbackmanager'; import globalize from '../../scripts/globalize'; +import Dashboard from '../../utils/dashboard'; +import Events from '../../utils/events.ts'; + import '../../elements/emby-scroller/emby-scroller'; import '../../elements/emby-itemscontainer/emby-itemscontainer'; import '../../elements/emby-tabs/emby-tabs'; import '../../elements/emby-button/emby-button'; -import Dashboard from '../../utils/dashboard'; /* eslint-disable indent */ diff --git a/src/controllers/movies/movietrailers.js b/src/controllers/movies/movietrailers.js index fbf219ecf4..f6b93b44c6 100644 --- a/src/controllers/movies/movietrailers.js +++ b/src/controllers/movies/movietrailers.js @@ -1,5 +1,4 @@ import loading from '../../components/loading/loading'; -import { Events } from 'jellyfin-apiclient'; import libraryBrowser from '../../scripts/libraryBrowser'; import imageLoader from '../../components/images/imageLoader'; import { AlphaPicker } from '../../components/alphaPicker/alphaPicker'; @@ -7,6 +6,8 @@ import listView from '../../components/listview/listview'; import cardBuilder from '../../components/cardbuilder/cardBuilder'; import * as userSettings from '../../scripts/settings/userSettings'; import globalize from '../../scripts/globalize'; +import Events from '../../utils/events.ts'; + import '../../elements/emby-itemscontainer/emby-itemscontainer'; /* eslint-disable indent */ diff --git a/src/controllers/music/musicalbums.js b/src/controllers/music/musicalbums.js index 2e9e0f7978..b00c7db652 100644 --- a/src/controllers/music/musicalbums.js +++ b/src/controllers/music/musicalbums.js @@ -1,6 +1,5 @@ import { playbackManager } from '../../components/playback/playbackmanager'; import loading from '../../components/loading/loading'; -import { Events } from 'jellyfin-apiclient'; import libraryBrowser from '../../scripts/libraryBrowser'; import imageLoader from '../../components/images/imageLoader'; import AlphaPicker from '../../components/alphaPicker/alphaPicker'; @@ -8,6 +7,8 @@ import listView from '../../components/listview/listview'; import cardBuilder from '../../components/cardbuilder/cardBuilder'; import * as userSettings from '../../scripts/settings/userSettings'; import globalize from '../../scripts/globalize'; +import Events from '../../utils/events.ts'; + import '../../elements/emby-itemscontainer/emby-itemscontainer'; /* eslint-disable indent */ diff --git a/src/controllers/music/musicartists.js b/src/controllers/music/musicartists.js index ee43c3fc98..4283f62a7f 100644 --- a/src/controllers/music/musicartists.js +++ b/src/controllers/music/musicartists.js @@ -1,11 +1,12 @@ import loading from '../../components/loading/loading'; -import { Events } from 'jellyfin-apiclient'; import libraryBrowser from '../../scripts/libraryBrowser'; import imageLoader from '../../components/images/imageLoader'; import { AlphaPicker } from '../../components/alphaPicker/alphaPicker'; import listView from '../../components/listview/listview'; import cardBuilder from '../../components/cardbuilder/cardBuilder'; import * as userSettings from '../../scripts/settings/userSettings'; +import Events from '../../utils/events.ts'; + import '../../elements/emby-itemscontainer/emby-itemscontainer'; /* eslint-disable indent */ diff --git a/src/controllers/music/songs.js b/src/controllers/music/songs.js index 721787b75c..8b742d2bd4 100644 --- a/src/controllers/music/songs.js +++ b/src/controllers/music/songs.js @@ -1,14 +1,15 @@ -import { Events } from 'jellyfin-apiclient'; import libraryBrowser from '../../scripts/libraryBrowser'; import imageLoader from '../../components/images/imageLoader'; import listView from '../../components/listview/listview'; import loading from '../../components/loading/loading'; +import { playbackManager } from '../../components/playback/playbackmanager'; import * as userSettings from '../../scripts/settings/userSettings'; import globalize from '../../scripts/globalize'; -import '../../elements/emby-itemscontainer/emby-itemscontainer'; import Dashboard from '../../utils/dashboard'; -import {playbackManager} from '../../components/playback/playbackmanager'; +import Events from '../../utils/events.ts'; + +import '../../elements/emby-itemscontainer/emby-itemscontainer'; export default function (view, params, tabContent) { function getPageData(context) { diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index e65b056037..72edb80292 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -9,7 +9,7 @@ import datetime from '../../../scripts/datetime'; import itemHelper from '../../../components/itemHelper'; import mediaInfo from '../../../components/mediainfo/mediainfo'; import focusManager from '../../../components/focusManager'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../../utils/events.ts'; import globalize from '../../../scripts/globalize'; import { appHost } from '../../../components/apphost'; import layoutManager from '../../../components/layoutManager'; diff --git a/src/controllers/shows/episodes.js b/src/controllers/shows/episodes.js index e8943470bb..d0c7344ace 100644 --- a/src/controllers/shows/episodes.js +++ b/src/controllers/shows/episodes.js @@ -1,13 +1,14 @@ import loading from '../../components/loading/loading'; -import { Events } from 'jellyfin-apiclient'; import libraryBrowser from '../../scripts/libraryBrowser'; import imageLoader from '../../components/images/imageLoader'; import listView from '../../components/listview/listview'; import cardBuilder from '../../components/cardbuilder/cardBuilder'; import * as userSettings from '../../scripts/settings/userSettings'; import globalize from '../../scripts/globalize'; -import '../../elements/emby-itemscontainer/emby-itemscontainer'; import Dashboard from '../../utils/dashboard'; +import Events from '../../utils/events.ts'; + +import '../../elements/emby-itemscontainer/emby-itemscontainer'; /* eslint-disable indent */ diff --git a/src/controllers/shows/tvrecommended.js b/src/controllers/shows/tvrecommended.js index 671ddd12bc..1977b7cd4f 100644 --- a/src/controllers/shows/tvrecommended.js +++ b/src/controllers/shows/tvrecommended.js @@ -1,5 +1,4 @@ -import { Events } from 'jellyfin-apiclient'; import inputManager from '../../scripts/inputManager'; import libraryMenu from '../../scripts/libraryMenu'; import layoutManager from '../../components/layoutManager'; @@ -14,6 +13,7 @@ import '../../assets/css/scrollstyles.scss'; import '../../elements/emby-itemscontainer/emby-itemscontainer'; import '../../elements/emby-button/emby-button'; import Dashboard from '../../utils/dashboard'; +import Events from '../../utils/events.ts'; import autoFocuser from '../../components/autoFocuser'; /* eslint-disable indent */ diff --git a/src/controllers/shows/tvshows.js b/src/controllers/shows/tvshows.js index 6e982f7c9f..07a338bdc1 100644 --- a/src/controllers/shows/tvshows.js +++ b/src/controllers/shows/tvshows.js @@ -1,5 +1,4 @@ import loading from '../../components/loading/loading'; -import { Events } from 'jellyfin-apiclient'; import libraryBrowser from '../../scripts/libraryBrowser'; import imageLoader from '../../components/images/imageLoader'; import listView from '../../components/listview/listview'; @@ -7,6 +6,8 @@ import cardBuilder from '../../components/cardbuilder/cardBuilder'; import AlphaPicker from '../../components/alphaPicker/alphaPicker'; import * as userSettings from '../../scripts/settings/userSettings'; import globalize from '../../scripts/globalize'; +import Events from '../../utils/events.ts'; + import '../../elements/emby-itemscontainer/emby-itemscontainer'; /* eslint-disable indent */ diff --git a/src/controllers/user/controls/index.js b/src/controllers/user/controls/index.js index dadb35ea7c..066f5b1a42 100644 --- a/src/controllers/user/controls/index.js +++ b/src/controllers/user/controls/index.js @@ -1,7 +1,7 @@ -import { Events } from 'jellyfin-apiclient'; import toast from '../../../components/toast/toast'; import globalize from '../../../scripts/globalize'; import appSettings from '../../../scripts/settings/appSettings'; +import Events from '../../../utils/events.ts'; export default function (view) { function submit(e) { diff --git a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js index c3a15ce12e..68206960fd 100644 --- a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js +++ b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js @@ -1,7 +1,8 @@ import EmbyProgressRing from '../emby-progressring/emby-progressring'; import dom from '../../scripts/dom'; import serverNotifications from '../../scripts/serverNotifications'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; + import 'webcomponents.js/webcomponents-lite'; /* eslint-disable indent */ diff --git a/src/elements/emby-itemscontainer/emby-itemscontainer.js b/src/elements/emby-itemscontainer/emby-itemscontainer.js index b6d0f147b7..00e2e94d3a 100644 --- a/src/elements/emby-itemscontainer/emby-itemscontainer.js +++ b/src/elements/emby-itemscontainer/emby-itemscontainer.js @@ -8,7 +8,7 @@ import dom from '../../scripts/dom'; import loading from '../../components/loading/loading'; import focusManager from '../../components/focusManager'; import serverNotifications from '../../scripts/serverNotifications'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import 'webcomponents.js/webcomponents-lite'; import ServerConnections from '../../components/ServerConnections'; import Sortable from 'sortablejs'; diff --git a/src/elements/emby-playstatebutton/emby-playstatebutton.js b/src/elements/emby-playstatebutton/emby-playstatebutton.js index 63ab3fd660..79ceb56dd6 100644 --- a/src/elements/emby-playstatebutton/emby-playstatebutton.js +++ b/src/elements/emby-playstatebutton/emby-playstatebutton.js @@ -1,6 +1,6 @@ import serverNotifications from '../../scripts/serverNotifications'; -import { Events } from 'jellyfin-apiclient'; import globalize from '../../scripts/globalize'; +import Events from '../../utils/events.ts'; import EmbyButtonPrototype from '../../elements/emby-button/emby-button'; import ServerConnections from '../../components/ServerConnections'; diff --git a/src/elements/emby-ratingbutton/emby-ratingbutton.js b/src/elements/emby-ratingbutton/emby-ratingbutton.js index 91233cef42..0cc87df3c1 100644 --- a/src/elements/emby-ratingbutton/emby-ratingbutton.js +++ b/src/elements/emby-ratingbutton/emby-ratingbutton.js @@ -1,6 +1,6 @@ import serverNotifications from '../../scripts/serverNotifications'; -import { Events } from 'jellyfin-apiclient'; import globalize from '../../scripts/globalize'; +import Events from '../../utils/events.ts'; import EmbyButtonPrototype from '../emby-button/emby-button'; import ServerConnections from '../../components/ServerConnections'; diff --git a/src/index.jsx b/src/index.jsx index c15297288e..f9d6ef78ff 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -9,7 +9,7 @@ import 'resize-observer-polyfill'; import './assets/css/site.scss'; import React from 'react'; import * as ReactDOM from 'react-dom'; -import { Events } from 'jellyfin-apiclient'; +import Events from './utils/events.ts'; import ServerConnections from './components/ServerConnections'; import globalize from './scripts/globalize'; import browser from './scripts/browser'; diff --git a/src/plugins/bookPlayer/plugin.js b/src/plugins/bookPlayer/plugin.js index d0fcffa48a..e95c8657b1 100644 --- a/src/plugins/bookPlayer/plugin.js +++ b/src/plugins/bookPlayer/plugin.js @@ -1,4 +1,3 @@ -import { Events } from 'jellyfin-apiclient'; import 'material-design-icons-iconfont'; import loading from '../../components/loading/loading'; @@ -10,6 +9,7 @@ import TableOfContents from './tableOfContents'; import dom from '../../scripts/dom'; import { translateHtml } from '../../scripts/globalize'; import * as userSettings from '../../scripts/settings/userSettings'; +import Events from '../../utils/events.ts'; import '../../elements/emby-button/paper-icon-button-light'; diff --git a/src/plugins/chromecastPlayer/plugin.js b/src/plugins/chromecastPlayer/plugin.js index aeced81b8b..1cb48814f6 100644 --- a/src/plugins/chromecastPlayer/plugin.js +++ b/src/plugins/chromecastPlayer/plugin.js @@ -2,10 +2,10 @@ import appSettings from '../../scripts/settings/appSettings'; import * as userSettings from '../../scripts/settings/userSettings'; import { playbackManager } from '../../components/playback/playbackmanager'; import globalize from '../../scripts/globalize'; -import { Events } from 'jellyfin-apiclient'; import castSenderApiLoader from '../../components/castSenderApi'; import ServerConnections from '../../components/ServerConnections'; import alert from '../../components/alert'; +import Events from '../../utils/events.ts'; // Based on https://github.com/googlecast/CastVideos-chrome/blob/master/CastVideos.js diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 1873970e1b..b5d3c8bd02 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -1,9 +1,9 @@ -import { Events } from 'jellyfin-apiclient'; import browser from '../../scripts/browser'; import { appHost } from '../../components/apphost'; import * as htmlMediaHelper from '../../components/htmlMediaHelper'; import profileBuilder from '../../scripts/browserDeviceProfile'; import { getIncludeCorsCredentials } from '../../scripts/settings/webSettings'; +import Events from '../../utils/events.ts'; function getDefaultProfile() { return profileBuilder({}); diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 677f2c38f7..35dd2b797a 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1,5 +1,4 @@ import browser from '../../scripts/browser'; -import { Events } from 'jellyfin-apiclient'; import { appHost } from '../../components/apphost'; import loading from '../../components/loading/loading'; import dom from '../../scripts/dom'; @@ -31,6 +30,7 @@ import ServerConnections from '../../components/ServerConnections'; import profileBuilder from '../../scripts/browserDeviceProfile'; import { getIncludeCorsCredentials } from '../../scripts/settings/webSettings'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../components/backdrop/backdrop'; +import Events from '../../utils/events.ts'; /** * Returns resolved URL. diff --git a/src/plugins/pdfPlayer/plugin.js b/src/plugins/pdfPlayer/plugin.js index e1f59735d7..5f43d03fc9 100644 --- a/src/plugins/pdfPlayer/plugin.js +++ b/src/plugins/pdfPlayer/plugin.js @@ -4,9 +4,10 @@ import keyboardnavigation from '../../scripts/keyboardNavigation'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; import dom from '../../scripts/dom'; import { appRouter } from '../../components/appRouter'; +import Events from '../../utils/events.ts'; + import './style.scss'; import '../../elements/emby-button/paper-icon-button-light'; -import { Events } from 'jellyfin-apiclient'; export class PdfPlayer { constructor() { diff --git a/src/plugins/sessionPlayer/plugin.js b/src/plugins/sessionPlayer/plugin.js index 50c6dae8a6..a8ad32f791 100644 --- a/src/plugins/sessionPlayer/plugin.js +++ b/src/plugins/sessionPlayer/plugin.js @@ -1,7 +1,7 @@ import { playbackManager } from '../../components/playback/playbackmanager'; -import { Events } from 'jellyfin-apiclient'; import serverNotifications from '../../scripts/serverNotifications'; import ServerConnections from '../../components/ServerConnections'; +import Events from '../../utils/events.ts'; function getActivePlayerId() { const info = playbackManager.getPlayerInfo(); diff --git a/src/plugins/syncPlay/core/Helper.js b/src/plugins/syncPlay/core/Helper.js index 890f2485fb..38cdf179e8 100644 --- a/src/plugins/syncPlay/core/Helper.js +++ b/src/plugins/syncPlay/core/Helper.js @@ -3,7 +3,7 @@ * @module components/syncPlay/core/Helper */ -import { Events } from 'jellyfin-apiclient'; +import Events from '../../../utils/events.ts'; /** * Constants diff --git a/src/plugins/syncPlay/core/Manager.js b/src/plugins/syncPlay/core/Manager.js index c41fe14fb7..af39d422d4 100644 --- a/src/plugins/syncPlay/core/Manager.js +++ b/src/plugins/syncPlay/core/Manager.js @@ -3,7 +3,6 @@ * @module components/syncPlay/core/Manager */ -import { Events } from 'jellyfin-apiclient'; import * as Helper from './Helper'; import TimeSyncCore from './timeSync/TimeSyncCore'; import PlaybackCore from './PlaybackCore'; @@ -11,6 +10,7 @@ import QueueCore from './QueueCore'; import Controller from './Controller'; import toast from '../../../components/toast/toast'; import globalize from '../../../scripts/globalize'; +import Events from '../../../utils/events.ts'; /** * Class that manages the SyncPlay feature. diff --git a/src/plugins/syncPlay/core/PlaybackCore.js b/src/plugins/syncPlay/core/PlaybackCore.js index 91eb71c091..ceb5653c76 100644 --- a/src/plugins/syncPlay/core/PlaybackCore.js +++ b/src/plugins/syncPlay/core/PlaybackCore.js @@ -2,9 +2,9 @@ * Module that manages the playback of SyncPlay. * @module components/syncPlay/core/PlaybackCore */ -import { Events } from 'jellyfin-apiclient'; import browser from '../../../scripts/browser'; +import Events from '../../../utils/events.ts'; import { toBoolean, toFloat } from '../../../utils/string.ts'; import * as Helper from './Helper'; import { getSetting } from './Settings'; diff --git a/src/plugins/syncPlay/core/players/GenericPlayer.js b/src/plugins/syncPlay/core/players/GenericPlayer.js index bb4beda82f..2093191e62 100644 --- a/src/plugins/syncPlay/core/players/GenericPlayer.js +++ b/src/plugins/syncPlay/core/players/GenericPlayer.js @@ -3,7 +3,7 @@ * @module components/syncPlay/core/players/GenericPlayer */ -import { Events } from 'jellyfin-apiclient'; +import Events from '../../../../utils/events.ts'; /** * Class that translates events from a player to SyncPlay events. diff --git a/src/plugins/syncPlay/core/timeSync/TimeSync.js b/src/plugins/syncPlay/core/timeSync/TimeSync.js index 8c07986de1..fcde0227fa 100644 --- a/src/plugins/syncPlay/core/timeSync/TimeSync.js +++ b/src/plugins/syncPlay/core/timeSync/TimeSync.js @@ -3,7 +3,7 @@ * @module components/syncPlay/core/timeSync/TimeSync */ -import { Events } from 'jellyfin-apiclient'; +import Events from '../../../../utils/events.ts'; /** * Time estimation. diff --git a/src/plugins/syncPlay/core/timeSync/TimeSyncCore.js b/src/plugins/syncPlay/core/timeSync/TimeSyncCore.js index cf9d6f09d7..6cad4a48fb 100644 --- a/src/plugins/syncPlay/core/timeSync/TimeSyncCore.js +++ b/src/plugins/syncPlay/core/timeSync/TimeSyncCore.js @@ -3,8 +3,8 @@ * @module components/syncPlay/core/timeSync/TimeSyncCore */ -import { Events } from 'jellyfin-apiclient'; import appSettings from '../../../../scripts/settings/appSettings'; +import Events from '../../../../utils/events.ts'; import { toFloat } from '../../../../utils/string.ts'; import { getSetting } from '../Settings'; import TimeSyncServer from './TimeSyncServer'; diff --git a/src/plugins/syncPlay/plugin.ts b/src/plugins/syncPlay/plugin.ts index e1b7c29cd6..e4ef965a0d 100644 --- a/src/plugins/syncPlay/plugin.ts +++ b/src/plugins/syncPlay/plugin.ts @@ -1,7 +1,6 @@ -import { Events } from 'jellyfin-apiclient'; - import { playbackManager } from '../../components/playback/playbackmanager'; import ServerConnections from '../../components/ServerConnections'; +import Events from '../../utils/events'; import SyncPlay from './core'; import SyncPlayNoActivePlayer from './ui/players/NoActivePlayer'; import SyncPlayHtmlVideoPlayer from './ui/players/HtmlVideoPlayer'; diff --git a/src/plugins/syncPlay/ui/groupSelectionMenu.js b/src/plugins/syncPlay/ui/groupSelectionMenu.js index 106ee8e42d..383d893782 100644 --- a/src/plugins/syncPlay/ui/groupSelectionMenu.js +++ b/src/plugins/syncPlay/ui/groupSelectionMenu.js @@ -1,4 +1,3 @@ -import { Events } from 'jellyfin-apiclient'; import SyncPlay from '../core'; import SyncPlaySettingsEditor from './settings/SettingsEditor'; import loading from '../../../components/loading/loading'; @@ -7,6 +6,8 @@ import actionsheet from '../../../components/actionSheet/actionSheet'; import globalize from '../../../scripts/globalize'; import playbackPermissionManager from './playbackPermissionManager'; import ServerConnections from '../../../components/ServerConnections'; +import Events from '../../../utils/events.ts'; + import './groupSelectionMenu.scss'; /** diff --git a/src/plugins/syncPlay/ui/players/HtmlVideoPlayer.js b/src/plugins/syncPlay/ui/players/HtmlVideoPlayer.js index 16d26cd1c2..d40f140c23 100644 --- a/src/plugins/syncPlay/ui/players/HtmlVideoPlayer.js +++ b/src/plugins/syncPlay/ui/players/HtmlVideoPlayer.js @@ -3,8 +3,8 @@ * @module components/syncPlay/ui/players/HtmlVideoPlayer */ -import { Events } from 'jellyfin-apiclient'; import NoActivePlayer from './NoActivePlayer'; +import Events from '../../../../utils/events.ts'; /** * Class that manages the HtmlVideoPlayer for SyncPlay. diff --git a/src/plugins/syncPlay/ui/settings/SettingsEditor.js b/src/plugins/syncPlay/ui/settings/SettingsEditor.js index ede7e267a3..f782d0b91e 100644 --- a/src/plugins/syncPlay/ui/settings/SettingsEditor.js +++ b/src/plugins/syncPlay/ui/settings/SettingsEditor.js @@ -3,7 +3,6 @@ * @module components/syncPlay/settings/SettingsEditor */ -import { Events } from 'jellyfin-apiclient'; import SyncPlay from '../../core'; import { setSetting } from '../../core/Settings'; import dialogHelper from '../../../../components/dialogHelper/dialogHelper'; @@ -11,6 +10,7 @@ import layoutManager from '../../../../components/layoutManager'; import loading from '../../../../components/loading/loading'; import toast from '../../../../components/toast/toast'; import globalize from '../../../../scripts/globalize'; +import Events from '../../../../utils/events.ts'; import 'material-design-icons-iconfont'; import '../../../../elements/emby-input/emby-input'; diff --git a/src/plugins/youtubePlayer/plugin.js b/src/plugins/youtubePlayer/plugin.js index 788dbfcfb1..83eb430bad 100644 --- a/src/plugins/youtubePlayer/plugin.js +++ b/src/plugins/youtubePlayer/plugin.js @@ -1,8 +1,8 @@ -import { Events } from 'jellyfin-apiclient'; import browser from '../../scripts/browser'; import { appRouter } from '../../components/appRouter'; import loading from '../../components/loading/loading'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../components/backdrop/backdrop'; +import Events from '../../utils/events.ts'; /* globals YT */ diff --git a/src/scripts/autoThemes.js b/src/scripts/autoThemes.js index aab1ccef75..b7c2fdf0d8 100644 --- a/src/scripts/autoThemes.js +++ b/src/scripts/autoThemes.js @@ -1,8 +1,8 @@ import * as userSettings from './settings/userSettings'; import skinManager from './themeManager'; -import { Events } from 'jellyfin-apiclient'; import ServerConnections from '../components/ServerConnections'; import { pageClassOn } from '../utils/dashboard'; +import Events from '../utils/events.ts'; // Set the default theme when loading skinManager.setTheme(userSettings.theme()) diff --git a/src/scripts/autocast.js b/src/scripts/autocast.js index 00f8df5abc..a118022513 100644 --- a/src/scripts/autocast.js +++ b/src/scripts/autocast.js @@ -1,6 +1,6 @@ -import { Events } from 'jellyfin-apiclient'; import { playbackManager } from '../components/playback/playbackmanager'; import ServerConnections from '../components/ServerConnections'; +import Events from '../utils/events.ts'; export function supported() { return typeof(Storage) !== 'undefined'; diff --git a/src/scripts/globalize.js b/src/scripts/globalize.js index 3953ac9d50..128e3b16ef 100644 --- a/src/scripts/globalize.js +++ b/src/scripts/globalize.js @@ -1,7 +1,7 @@ -import { Events } from 'jellyfin-apiclient'; import isEmpty from 'lodash-es/isEmpty'; import { currentSettings as userSettings } from './settings/userSettings'; +import Events from '../utils/events.ts'; /* eslint-disable indent */ diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js index ce1918e196..6065d9a8d5 100644 --- a/src/scripts/libraryMenu.js +++ b/src/scripts/libraryMenu.js @@ -4,7 +4,6 @@ import Headroom from 'headroom.js'; import dom from './dom'; import layoutManager from '../components/layoutManager'; import inputManager from './inputManager'; -import { Events } from 'jellyfin-apiclient'; import viewManager from '../components/viewManager/viewManager'; import { appRouter } from '../components/appRouter'; import { appHost } from '../components/apphost'; @@ -17,6 +16,7 @@ import imageHelper from './imagehelper'; import { getMenuLinks } from '../scripts/settings/webSettings'; import Dashboard, { pageClassOn } from '../utils/dashboard'; import ServerConnections from '../components/ServerConnections'; +import Events from '../utils/events.ts'; import { getParameterByName } from '../utils/url.ts'; import '../elements/emby-button/paper-icon-button-light'; diff --git a/src/scripts/mouseManager.js b/src/scripts/mouseManager.js index b6ba2e3ca2..3c6cc02a3a 100644 --- a/src/scripts/mouseManager.js +++ b/src/scripts/mouseManager.js @@ -1,9 +1,9 @@ import inputManager from './inputManager'; import focusManager from '../components/focusManager'; -import browser from '../scripts/browser'; +import browser from './browser'; import layoutManager from '../components/layoutManager'; -import { Events } from 'jellyfin-apiclient'; -import dom from '../scripts/dom'; +import dom from './dom'; +import Events from '../utils/events.ts'; /* eslint-disable indent */ const self = {}; diff --git a/src/scripts/screensavermanager.js b/src/scripts/screensavermanager.js index d0732ca264..4b0eedaa51 100644 --- a/src/scripts/screensavermanager.js +++ b/src/scripts/screensavermanager.js @@ -1,9 +1,10 @@ -import { Events } from 'jellyfin-apiclient'; import { playbackManager } from '../components/playback/playbackmanager'; import { pluginManager } from '../components/pluginManager'; import inputManager from './inputManager'; import * as userSettings from './settings/userSettings'; import ServerConnections from '../components/ServerConnections'; +import Events from '../utils/events.ts'; + import './screensavermanager.scss'; function getMinIdleTime() { diff --git a/src/scripts/serverNotifications.js b/src/scripts/serverNotifications.js index 30d2171ae4..df902bb286 100644 --- a/src/scripts/serverNotifications.js +++ b/src/scripts/serverNotifications.js @@ -1,12 +1,12 @@ import { playbackManager } from '../components/playback/playbackmanager'; import SyncPlay from '../plugins/syncPlay/core'; -import { Events } from 'jellyfin-apiclient'; import inputManager from '../scripts/inputManager'; import focusManager from '../components/focusManager'; import { appRouter } from '../components/appRouter'; import ServerConnections from '../components/ServerConnections'; import toast from '../components/toast/toast'; import alert from '../components/alert'; +import Events from '../utils/events.ts'; const serverNotifications = {}; diff --git a/src/scripts/settings/appSettings.js b/src/scripts/settings/appSettings.js index 35fe28455b..d963a2c76b 100644 --- a/src/scripts/settings/appSettings.js +++ b/src/scripts/settings/appSettings.js @@ -1,4 +1,5 @@ -import { AppStorage, Events } from 'jellyfin-apiclient'; +import { AppStorage } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import { toBoolean } from '../../utils/string.ts'; class AppSettings { diff --git a/src/scripts/settings/userSettings.js b/src/scripts/settings/userSettings.js index c6d0441c9f..062749020c 100644 --- a/src/scripts/settings/userSettings.js +++ b/src/scripts/settings/userSettings.js @@ -1,5 +1,5 @@ import appSettings from './appSettings'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../../utils/events.ts'; import { toBoolean } from '../../utils/string.ts'; function onSaveTimeout() { diff --git a/src/scripts/taskbutton.js b/src/scripts/taskbutton.js index 7e80760898..444ee45ae4 100644 --- a/src/scripts/taskbutton.js +++ b/src/scripts/taskbutton.js @@ -1,9 +1,10 @@ -import { Events } from 'jellyfin-apiclient'; import serverNotifications from '../scripts/serverNotifications'; import globalize from '../scripts/globalize'; -import '../elements/emby-button/emby-button'; import ServerConnections from '../components/ServerConnections'; +import Events from '../utils/events.ts'; + +import '../elements/emby-button/emby-button'; function taskbutton(options) { function pollTasks() { diff --git a/src/scripts/touchHelper.js b/src/scripts/touchHelper.js index 4230ab3770..db0b2f09cf 100644 --- a/src/scripts/touchHelper.js +++ b/src/scripts/touchHelper.js @@ -1,5 +1,5 @@ import dom from '../scripts/dom'; -import { Events } from 'jellyfin-apiclient'; +import Events from '../utils/events.ts'; function getTouches(e) { return e.changedTouches || e.targetTouches || e.touches; diff --git a/src/utils/events.ts b/src/utils/events.ts new file mode 100644 index 0000000000..0144ce2270 --- /dev/null +++ b/src/utils/events.ts @@ -0,0 +1,50 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +interface Event { + type: string; +} + +type callback = (e: Event, ...args: any[]) => void; + +function getCallbacks(obj: any, type: string): callback[] { + if (!obj) { + throw new Error('obj cannot be null!'); + } + + obj._callbacks = obj._callbacks || {}; + + let callbacks = obj._callbacks[type]; + + if (!callbacks) { + obj._callbacks[type] = []; + callbacks = obj._callbacks[type]; + } + + return callbacks; +} + +export default { + on(obj: any, type: string, fn: callback): void { + const callbacks = getCallbacks(obj, type); + + callbacks.push(fn); + }, + + off(obj: any, type: string, fn: callback): void { + const callbacks = getCallbacks(obj, type); + + const i = callbacks.indexOf(fn); + if (i !== -1) { + callbacks.splice(i, 1); + } + }, + + trigger(obj: any, type: string, args: any[] = []) { + const eventArgs: [Event, ...any] = [{ type }, ...args]; + + getCallbacks(obj, type).slice(0) + .forEach(callback => { + callback.apply(obj, eventArgs); + }); + } +}; +/* eslint-enable @typescript-eslint/no-explicit-any */