diff --git a/src/base/AppSession.ts b/src/base/AppSession.ts new file mode 100644 index 00000000..c233fafc --- /dev/null +++ b/src/base/AppSession.ts @@ -0,0 +1,26 @@ +/* + * Copyright (C) Contributors to the Suwayomi project + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +import { BrowserUtil } from '@/lib/BrowserUtil.ts'; +import { AppStorage } from '@/lib/storage/AppStorage.ts'; + +const STARTUP_TIMESTAMP_KEY = 'webUIStartupTimestamp'; + +class AppSessionClass { + constructor() { + if (BrowserUtil.isActualPageLoad()) { + AppStorage.session.setItem(STARTUP_TIMESTAMP_KEY, Date.now()); + } + } + + get STARTUP_TIMESTAMP(): number { + return AppStorage.session.getItemParsed(STARTUP_TIMESTAMP_KEY, Date.now()); + } +} + +export const AppSession = new AppSessionClass(); diff --git a/src/features/app-updates/components/WebUIUpdateChecker.tsx b/src/features/app-updates/components/WebUIUpdateChecker.tsx index 4dd7af4f..7162cea0 100644 --- a/src/features/app-updates/components/WebUIUpdateChecker.tsx +++ b/src/features/app-updates/components/WebUIUpdateChecker.tsx @@ -17,7 +17,7 @@ import { useLingui } from '@lingui/react/macro'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import type { WebUiUpdateStatus } from '@/lib/graphql/generated/graphql-base.types.ts'; import { UpdateState, WebUiChannel } from '@/lib/graphql/generated/graphql-base.types.ts'; -import { useLocalStorage, useSessionStorage } from '@/base/hooks/useStorage.tsx'; +import { useLocalStorage } from '@/base/hooks/useStorage.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { ABOUT_WEBUI, WEBUI_UPDATE_CHECK } from '@/lib/graphql/server/InfoFragments.ts'; @@ -25,23 +25,15 @@ import { VersionUpdateInfoDialog } from '@/features/app-updates/components/Versi import { useUpdateChecker } from '@/features/app-updates/hooks/useUpdateChecker.tsx'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { getErrorMessage, noOp } from '@/lib/HelperFunctions.ts'; -import { AppStorage } from '@/lib/storage/AppStorage.ts'; -import { BrowserUtil } from '@/lib/BrowserUtil.ts'; import { STABLE_EMPTY_OBJECT } from '@/base/Base.constants.ts'; +import { AppSession } from '@/base/AppSession.ts'; const disabledUpdateCheck = () => Promise.resolve(); -const INITIAL_LOAD_TIMESTAMP_KEY = 'webUIInitialLoadTimestamp'; - -if (BrowserUtil.isActualPageLoad()) { - AppStorage.session.setItem(INITIAL_LOAD_TIMESTAMP_KEY, Date.now()); -} - export const WebUIUpdateChecker = () => { const { t } = useLingui(); const [webUIVersion, setWebUIVersion] = useLocalStorage('webUIVersion'); - const [initialLoadTimestamp] = useSessionStorage(INITIAL_LOAD_TIMESTAMP_KEY, Date.now()); const [open, setOpen] = useState(false); const { @@ -81,7 +73,7 @@ export const WebUIUpdateChecker = () => { const newVersion = aboutWebUI?.tag; const isSameAsCurrent = !newVersion || !webUIVersion || webUIVersion === newVersion; - const shouldForceRefresh = initialLoadTimestamp < Number(aboutWebUI?.updateTimestamp); + const shouldForceRefresh = AppSession.STARTUP_TIMESTAMP < Number(aboutWebUI?.updateTimestamp); const saveInitialVersion = !webUIVersion && !!newVersion; if (saveInitialVersion) { diff --git a/src/i18n/locales/en.po b/src/i18n/locales/en.po index b58ac21b..a95c2c44 100644 --- a/src/i18n/locales/en.po +++ b/src/i18n/locales/en.po @@ -698,6 +698,10 @@ msgstr "By upload date" msgid "Call timeout" msgstr "Call timeout" +#: src/features/migration/MangaMigration.ts +msgid "Can't migrate an entry to itself" +msgstr "Can't migrate an entry to itself" + #: src/base/collection/components/SelectableCollectionSelectMode.tsx #: src/base/components/inputs/LanguageSelect.tsx #: src/base/components/modals/ConfirmDialog.tsx diff --git a/src/index.tsx b/src/index.tsx index 65b93640..73d4a21a 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -9,6 +9,7 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; +import '@/base/AppSession.ts'; import '@/index.css'; import '@/polyfill.manual'; import { initializeLocalization } from '@/i18n';