diff --git a/ui/v2.5/src/App.tsx b/ui/v2.5/src/App.tsx
index 31a6a400e..db81aeb98 100755
--- a/ui/v2.5/src/App.tsx
+++ b/ui/v2.5/src/App.tsx
@@ -9,7 +9,11 @@ import LightboxProvider from "src/hooks/Lightbox/context";
import { initPolyfills } from "src/polyfills";
import locales from "src/locales";
-import { useConfiguration, useSystemStatus } from "src/core/StashService";
+import {
+ useConfiguration,
+ useConfigureUI,
+ useSystemStatus,
+} from "src/core/StashService";
import { flattenMessages } from "src/utils";
import Mousetrap from "mousetrap";
import MousetrapPause from "mousetrap-pause";
@@ -22,6 +26,9 @@ import { LoadingIndicator, TITLE_SUFFIX } from "./components/Shared";
import { ConfigurationProvider } from "./hooks/Config";
import { ManualProvider } from "./components/Help/context";
import { InteractiveProvider } from "./hooks/Interactive/context";
+import { ReleaseNotesDialog } from "./components/Dialogs/ReleaseNotesDialog";
+import { IUIConfig } from "./core/config";
+import { releaseNotes } from "./docs/en/ReleaseNotes";
const Performers = lazy(() => import("./components/Performers/Performers"));
const FrontPage = lazy(() => import("./components/FrontPage/FrontPage"));
@@ -62,6 +69,8 @@ function languageMessageString(language: string) {
export const App: React.FC = () => {
const config = useConfiguration();
+ const [saveUI] = useConfigureUI();
+
const { data: systemStatusData } = useSystemStatus();
const language =
@@ -161,6 +170,32 @@ export const App: React.FC = () => {
);
}
+ function maybeRenderReleaseNotes() {
+ const lastNoteSeen = (config.data?.configuration.ui as IUIConfig)
+ ?.lastNoteSeen;
+ const notes = releaseNotes.filter((n) => {
+ return !lastNoteSeen || n.date > lastNoteSeen;
+ });
+
+ if (notes.length === 0) return;
+
+ return (
+ n.content)}
+ onClose={() => {
+ saveUI({
+ variables: {
+ input: {
+ ...config.data?.configuration.ui,
+ lastNoteSeen: notes[0].date,
+ },
+ },
+ });
+ }}
+ />
+ );
+ }
+
return (
{messages ? (
@@ -173,6 +208,7 @@ export const App: React.FC = () => {
configuration={config.data?.configuration}
loading={config.loading}
>
+ {maybeRenderReleaseNotes()}
}>
diff --git a/ui/v2.5/src/components/Changelog/Changelog.tsx b/ui/v2.5/src/components/Changelog/Changelog.tsx
index da38f5c7c..24e5cee5f 100644
--- a/ui/v2.5/src/components/Changelog/Changelog.tsx
+++ b/ui/v2.5/src/components/Changelog/Changelog.tsx
@@ -1,26 +1,27 @@
import React from "react";
import { useChangelogStorage } from "src/hooks";
import Version from "./Version";
-import V010 from "./versions/v010.md";
-import V011 from "./versions/v011.md";
-import V020 from "./versions/v020.md";
-import V021 from "./versions/v021.md";
-import V030 from "./versions/v030.md";
-import V040 from "./versions/v040.md";
-import V050 from "./versions/v050.md";
-import V060 from "./versions/v060.md";
-import V070 from "./versions/v070.md";
-import V080 from "./versions/v080.md";
-import V090 from "./versions/v090.md";
-import V0100 from "./versions/v0100.md";
-import V0110 from "./versions/v0110.md";
-import V0120 from "./versions/v0120.md";
-import V0130 from "./versions/v0130.md";
-import V0131 from "./versions/v0131.md";
-import V0140 from "./versions/v0140.md";
-import V0150 from "./versions/v0150.md";
-import V0160 from "./versions/v0160.md";
-import V0161 from "./versions/v0161.md";
+import V010 from "src/docs/en/Changelog/v010.md";
+import V011 from "src/docs/en/Changelog/v011.md";
+import V020 from "src/docs/en/Changelog/v020.md";
+import V021 from "src/docs/en/Changelog/v021.md";
+import V030 from "src/docs/en/Changelog/v030.md";
+import V040 from "src/docs/en/Changelog/v040.md";
+import V050 from "src/docs/en/Changelog/v050.md";
+import V060 from "src/docs/en/Changelog/v060.md";
+import V070 from "src/docs/en/Changelog/v070.md";
+import V080 from "src/docs/en/Changelog/v080.md";
+import V090 from "src/docs/en/Changelog/v090.md";
+import V0100 from "src/docs/en/Changelog/v0100.md";
+import V0110 from "src/docs/en/Changelog/v0110.md";
+import V0120 from "src/docs/en/Changelog/v0120.md";
+import V0130 from "src/docs/en/Changelog/v0130.md";
+import V0131 from "src/docs/en/Changelog/v0131.md";
+import V0140 from "src/docs/en/Changelog/v0140.md";
+import V0150 from "src/docs/en/Changelog/v0150.md";
+import V0160 from "src/docs/en/Changelog/v0160.md";
+import V0161 from "src/docs/en/Changelog/v0161.md";
+import V0170 from "src/docs/en/Changelog/v0170.md";
import { MarkdownPage } from "../Shared/MarkdownPage";
// to avoid use of explicit any
@@ -59,9 +60,9 @@ const Changelog: React.FC = () => {
// after new release:
// add entry to releases, using the current* fields
// then update the current fields.
- const currentVersion = stashVersion || "v0.16.1";
+ const currentVersion = stashVersion || "v0.17.0";
const currentDate = buildDate;
- const currentPage = V0161;
+ const currentPage = V0170;
const releases: IStashRelease[] = [
{
@@ -70,6 +71,11 @@ const Changelog: React.FC = () => {
page: currentPage,
defaultOpen: true,
},
+ {
+ version: "v0.16.1",
+ date: "2022-07-26",
+ page: V0161,
+ },
{
version: "v0.16.0",
date: "2022-07-05",
@@ -168,7 +174,7 @@ const Changelog: React.FC = () => {
];
return (
- <>
+
Changelog:
{releases.map((r) => (
{
))}
- >
+
);
};
diff --git a/ui/v2.5/src/components/Changelog/styles.scss b/ui/v2.5/src/components/Changelog/styles.scss
index abdf45545..07c88f698 100644
--- a/ui/v2.5/src/components/Changelog/styles.scss
+++ b/ui/v2.5/src/components/Changelog/styles.scss
@@ -1,6 +1,5 @@
.changelog {
margin-bottom: 4rem;
- margin-top: 4rem;
.btn {
color: inherit;
diff --git a/ui/v2.5/src/components/Dialogs/ReleaseNotesDialog.tsx b/ui/v2.5/src/components/Dialogs/ReleaseNotesDialog.tsx
new file mode 100644
index 000000000..fefc344be
--- /dev/null
+++ b/ui/v2.5/src/components/Dialogs/ReleaseNotesDialog.tsx
@@ -0,0 +1,39 @@
+import React from "react";
+import { Form } from "react-bootstrap";
+import { Modal } from "src/components/Shared";
+import { faCogs } from "@fortawesome/free-solid-svg-icons";
+import { useIntl } from "react-intl";
+import { MarkdownPage } from "../Shared/MarkdownPage";
+import { Module } from "src/docs/en/ReleaseNotes";
+
+interface IReleaseNotesDialog {
+ notes: Module[];
+ onClose: () => void;
+}
+
+export const ReleaseNotesDialog: React.FC = ({
+ notes,
+ onClose,
+}) => {
+ const intl = useIntl();
+
+ return (
+
+
+
+ );
+};
+
+export default ReleaseNotesDialog;
diff --git a/ui/v2.5/src/components/FrontPage/FrontPage.tsx b/ui/v2.5/src/components/FrontPage/FrontPage.tsx
index cddebca9d..d68e2ca00 100644
--- a/ui/v2.5/src/components/FrontPage/FrontPage.tsx
+++ b/ui/v2.5/src/components/FrontPage/FrontPage.tsx
@@ -36,6 +36,7 @@ const FrontPage: React.FC = () => {
await saveUI({
variables: {
input: {
+ ...configuration?.ui,
frontPageContent: content,
},
},
diff --git a/ui/v2.5/src/components/Help/Manual.tsx b/ui/v2.5/src/components/Help/Manual.tsx
index 83f787c2f..12faa3e26 100644
--- a/ui/v2.5/src/components/Help/Manual.tsx
+++ b/ui/v2.5/src/components/Help/Manual.tsx
@@ -1,27 +1,27 @@
import React, { useState, useEffect } from "react";
import { Modal, Container, Row, Col, Nav, Tab } from "react-bootstrap";
-import Introduction from "src/docs/en/Introduction.md";
-import Tasks from "src/docs/en/Tasks.md";
-import AutoTagging from "src/docs/en/AutoTagging.md";
-import JSONSpec from "src/docs/en/JSONSpec.md";
-import Configuration from "src/docs/en/Configuration.md";
-import Interface from "src/docs/en/Interface.md";
-import Galleries from "src/docs/en/Galleries.md";
-import Scraping from "src/docs/en/Scraping.md";
-import ScraperDevelopment from "src/docs/en/ScraperDevelopment.md";
-import Plugins from "src/docs/en/Plugins.md";
-import ExternalPlugins from "src/docs/en/ExternalPlugins.md";
-import EmbeddedPlugins from "src/docs/en/EmbeddedPlugins.md";
-import Tagger from "src/docs/en/Tagger.md";
-import Contributing from "src/docs/en/Contributing.md";
-import SceneFilenameParser from "src/docs/en/SceneFilenameParser.md";
-import KeyboardShortcuts from "src/docs/en/KeyboardShortcuts.md";
-import Help from "src/docs/en/Help.md";
-import Deduplication from "src/docs/en/Deduplication.md";
-import Interactive from "src/docs/en/Interactive.md";
-import Captions from "src/docs/en/Captions.md";
-import Identify from "src/docs/en/Identify.md";
-import Browsing from "src/docs/en/Browsing.md";
+import Introduction from "src/docs/en/Manual/Introduction.md";
+import Tasks from "src/docs/en/Manual/Tasks.md";
+import AutoTagging from "src/docs/en/Manual/AutoTagging.md";
+import JSONSpec from "src/docs/en/Manual/JSONSpec.md";
+import Configuration from "src/docs/en/Manual/Configuration.md";
+import Interface from "src/docs/en/Manual/Interface.md";
+import Galleries from "src/docs/en/Manual/Galleries.md";
+import Scraping from "src/docs/en/Manual/Scraping.md";
+import ScraperDevelopment from "src/docs/en/Manual/ScraperDevelopment.md";
+import Plugins from "src/docs/en/Manual/Plugins.md";
+import ExternalPlugins from "src/docs/en/Manual/ExternalPlugins.md";
+import EmbeddedPlugins from "src/docs/en/Manual/EmbeddedPlugins.md";
+import Tagger from "src/docs/en/Manual/Tagger.md";
+import Contributing from "src/docs/en/Manual/Contributing.md";
+import SceneFilenameParser from "src/docs/en/Manual/SceneFilenameParser.md";
+import KeyboardShortcuts from "src/docs/en/Manual/KeyboardShortcuts.md";
+import Help from "src/docs/en/Manual/Help.md";
+import Deduplication from "src/docs/en/Manual/Deduplication.md";
+import Interactive from "src/docs/en/Manual/Interactive.md";
+import Captions from "src/docs/en/Manual/Captions.md";
+import Identify from "src/docs/en/Manual/Identify.md";
+import Browsing from "src/docs/en/Manual/Browsing.md";
import { MarkdownPage } from "../Shared/MarkdownPage";
interface IManualProps {
diff --git a/ui/v2.5/src/components/Settings/Settings.tsx b/ui/v2.5/src/components/Settings/Settings.tsx
index 56d526bd7..1a408dcc1 100644
--- a/ui/v2.5/src/components/Settings/Settings.tsx
+++ b/ui/v2.5/src/components/Settings/Settings.tsx
@@ -17,6 +17,7 @@ import { SettingsServicesPanel } from "./SettingsServicesPanel";
import { SettingsContext } from "./context";
import { SettingsLibraryPanel } from "./SettingsLibraryPanel";
import { SettingsSecurityPanel } from "./SettingsSecurityPanel";
+import Changelog from "../Changelog/Changelog";
export const Settings: React.FC = () => {
const intl = useIntl();
@@ -92,6 +93,11 @@ export const Settings: React.FC = () => {
+
+
+
+
+
@@ -138,6 +144,9 @@ export const Settings: React.FC = () => {
+
+
+
diff --git a/ui/v2.5/src/components/Setup/Migrate.tsx b/ui/v2.5/src/components/Setup/Migrate.tsx
index 6dd6851ec..05f9efece 100644
--- a/ui/v2.5/src/components/Setup/Migrate.tsx
+++ b/ui/v2.5/src/components/Setup/Migrate.tsx
@@ -1,9 +1,11 @@
-import React, { useEffect, useState } from "react";
+import React, { useEffect, useMemo, useState } from "react";
import { Button, Card, Container, Form } from "react-bootstrap";
import { useIntl, FormattedMessage } from "react-intl";
import * as GQL from "src/core/generated-graphql";
import { useSystemStatus, mutateMigrate } from "src/core/StashService";
+import { migrationNotes } from "src/docs/en/MigrationNotes";
import { LoadingIndicator } from "../Shared";
+import { MarkdownPage } from "../Shared/MarkdownPage";
export const Migrate: React.FC = () => {
const { data: systemStatus, loading } = useSystemStatus();
@@ -45,8 +47,46 @@ export const Migrate: React.FC = () => {
}
}, [defaultBackupPath, backupPath]);
+ const status = systemStatus?.systemStatus;
+
+ const maybeMigrationNotes = useMemo(() => {
+ if (
+ !status ||
+ status.databaseSchema === undefined ||
+ status.databaseSchema === null ||
+ status.appSchema === undefined ||
+ status.appSchema === null
+ )
+ return;
+
+ const notes = [];
+ for (let i = status.databaseSchema; i <= status.appSchema; ++i) {
+ const note = migrationNotes[i];
+ if (note) {
+ notes.push(note);
+ }
+ }
+
+ if (notes.length === 0) return;
+
+ return (
+
+
+
+
+
+ {notes.map((n, i) => (
+
+
+
+ ))}
+
+
+ );
+ }, [status]);
+
// only display setup wizard if system is not setup
- if (loading || !systemStatus) {
+ if (loading || !systemStatus || !status) {
return ;
}
@@ -67,8 +107,6 @@ export const Migrate: React.FC = () => {
return ;
}
- const status = systemStatus.systemStatus;
-
async function onMigrate() {
try {
setMigrateLoading(true);
@@ -148,6 +186,8 @@ export const Migrate: React.FC = () => {
+ {maybeMigrationNotes}
+
diff --git a/ui/v2.5/src/components/Setup/styles.scss b/ui/v2.5/src/components/Setup/styles.scss
new file mode 100644
index 000000000..e10d67c62
--- /dev/null
+++ b/ui/v2.5/src/components/Setup/styles.scss
@@ -0,0 +1,9 @@
+.migration-notes {
+ margin: 1rem;
+
+ > div {
+ background-color: darken($color: $card-bg, $amount: 3);
+ border-radius: 3px;
+ padding: 16px;
+ }
+}
diff --git a/ui/v2.5/src/components/Stats.tsx b/ui/v2.5/src/components/Stats.tsx
index 69007f122..7cc17b59a 100644
--- a/ui/v2.5/src/components/Stats.tsx
+++ b/ui/v2.5/src/components/Stats.tsx
@@ -2,7 +2,6 @@ import React from "react";
import { useStats } from "src/core/StashService";
import { FormattedMessage, FormattedNumber } from "react-intl";
import { LoadingIndicator } from "src/components/Shared";
-import Changelog from "src/components/Changelog/Changelog";
import { TextUtils } from "src/utils";
export const Stats: React.FC = () => {
@@ -115,9 +114,6 @@ export const Stats: React.FC = () => {
-
-
-
);
};
diff --git a/ui/v2.5/src/core/config.ts b/ui/v2.5/src/core/config.ts
index 007d70e32..7d0840f60 100644
--- a/ui/v2.5/src/core/config.ts
+++ b/ui/v2.5/src/core/config.ts
@@ -27,6 +27,7 @@ export type FrontPageContent = ISavedFilterRow | ICustomFilter;
export interface IUIConfig {
frontPageContent?: FrontPageContent[];
+ lastNoteSeen?: number;
}
function recentlyReleased(
diff --git a/ui/v2.5/src/components/Changelog/versions/v010.md b/ui/v2.5/src/docs/en/Changelog/v010.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v010.md
rename to ui/v2.5/src/docs/en/Changelog/v010.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0100.md b/ui/v2.5/src/docs/en/Changelog/v0100.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0100.md
rename to ui/v2.5/src/docs/en/Changelog/v0100.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v011.md b/ui/v2.5/src/docs/en/Changelog/v011.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v011.md
rename to ui/v2.5/src/docs/en/Changelog/v011.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0110.md b/ui/v2.5/src/docs/en/Changelog/v0110.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0110.md
rename to ui/v2.5/src/docs/en/Changelog/v0110.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0120.md b/ui/v2.5/src/docs/en/Changelog/v0120.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0120.md
rename to ui/v2.5/src/docs/en/Changelog/v0120.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0130.md b/ui/v2.5/src/docs/en/Changelog/v0130.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0130.md
rename to ui/v2.5/src/docs/en/Changelog/v0130.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0131.md b/ui/v2.5/src/docs/en/Changelog/v0131.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0131.md
rename to ui/v2.5/src/docs/en/Changelog/v0131.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0140.md b/ui/v2.5/src/docs/en/Changelog/v0140.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0140.md
rename to ui/v2.5/src/docs/en/Changelog/v0140.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0150.md b/ui/v2.5/src/docs/en/Changelog/v0150.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0150.md
rename to ui/v2.5/src/docs/en/Changelog/v0150.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0160.md b/ui/v2.5/src/docs/en/Changelog/v0160.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0160.md
rename to ui/v2.5/src/docs/en/Changelog/v0160.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v0161.md b/ui/v2.5/src/docs/en/Changelog/v0161.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v0161.md
rename to ui/v2.5/src/docs/en/Changelog/v0161.md
diff --git a/ui/v2.5/src/docs/en/Changelog/v0170.md b/ui/v2.5/src/docs/en/Changelog/v0170.md
new file mode 100644
index 000000000..04d7d3eee
--- /dev/null
+++ b/ui/v2.5/src/docs/en/Changelog/v0170.md
@@ -0,0 +1,5 @@
+### ✨ New Features
+* Added release notes dialog. ([#](https://github.com/stashapp/stash/pull/))
+
+### 🎨 Improvements
+* Moved Changelogs to Settings page. ([#](https://github.com/stashapp/stash/pull/))
\ No newline at end of file
diff --git a/ui/v2.5/src/components/Changelog/versions/v020.md b/ui/v2.5/src/docs/en/Changelog/v020.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v020.md
rename to ui/v2.5/src/docs/en/Changelog/v020.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v021.md b/ui/v2.5/src/docs/en/Changelog/v021.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v021.md
rename to ui/v2.5/src/docs/en/Changelog/v021.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v030.md b/ui/v2.5/src/docs/en/Changelog/v030.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v030.md
rename to ui/v2.5/src/docs/en/Changelog/v030.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v040.md b/ui/v2.5/src/docs/en/Changelog/v040.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v040.md
rename to ui/v2.5/src/docs/en/Changelog/v040.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v050.md b/ui/v2.5/src/docs/en/Changelog/v050.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v050.md
rename to ui/v2.5/src/docs/en/Changelog/v050.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v060.md b/ui/v2.5/src/docs/en/Changelog/v060.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v060.md
rename to ui/v2.5/src/docs/en/Changelog/v060.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v070.md b/ui/v2.5/src/docs/en/Changelog/v070.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v070.md
rename to ui/v2.5/src/docs/en/Changelog/v070.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v080.md b/ui/v2.5/src/docs/en/Changelog/v080.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v080.md
rename to ui/v2.5/src/docs/en/Changelog/v080.md
diff --git a/ui/v2.5/src/components/Changelog/versions/v090.md b/ui/v2.5/src/docs/en/Changelog/v090.md
similarity index 100%
rename from ui/v2.5/src/components/Changelog/versions/v090.md
rename to ui/v2.5/src/docs/en/Changelog/v090.md
diff --git a/ui/v2.5/src/docs/en/AutoTagging.md b/ui/v2.5/src/docs/en/Manual/AutoTagging.md
similarity index 100%
rename from ui/v2.5/src/docs/en/AutoTagging.md
rename to ui/v2.5/src/docs/en/Manual/AutoTagging.md
diff --git a/ui/v2.5/src/docs/en/Browsing.md b/ui/v2.5/src/docs/en/Manual/Browsing.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Browsing.md
rename to ui/v2.5/src/docs/en/Manual/Browsing.md
diff --git a/ui/v2.5/src/docs/en/Captions.md b/ui/v2.5/src/docs/en/Manual/Captions.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Captions.md
rename to ui/v2.5/src/docs/en/Manual/Captions.md
diff --git a/ui/v2.5/src/docs/en/Configuration.md b/ui/v2.5/src/docs/en/Manual/Configuration.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Configuration.md
rename to ui/v2.5/src/docs/en/Manual/Configuration.md
diff --git a/ui/v2.5/src/docs/en/Contributing.md b/ui/v2.5/src/docs/en/Manual/Contributing.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Contributing.md
rename to ui/v2.5/src/docs/en/Manual/Contributing.md
diff --git a/ui/v2.5/src/docs/en/Deduplication.md b/ui/v2.5/src/docs/en/Manual/Deduplication.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Deduplication.md
rename to ui/v2.5/src/docs/en/Manual/Deduplication.md
diff --git a/ui/v2.5/src/docs/en/EmbeddedPlugins.md b/ui/v2.5/src/docs/en/Manual/EmbeddedPlugins.md
similarity index 100%
rename from ui/v2.5/src/docs/en/EmbeddedPlugins.md
rename to ui/v2.5/src/docs/en/Manual/EmbeddedPlugins.md
diff --git a/ui/v2.5/src/docs/en/ExternalPlugins.md b/ui/v2.5/src/docs/en/Manual/ExternalPlugins.md
similarity index 100%
rename from ui/v2.5/src/docs/en/ExternalPlugins.md
rename to ui/v2.5/src/docs/en/Manual/ExternalPlugins.md
diff --git a/ui/v2.5/src/docs/en/Galleries.md b/ui/v2.5/src/docs/en/Manual/Galleries.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Galleries.md
rename to ui/v2.5/src/docs/en/Manual/Galleries.md
diff --git a/ui/v2.5/src/docs/en/Help.md b/ui/v2.5/src/docs/en/Manual/Help.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Help.md
rename to ui/v2.5/src/docs/en/Manual/Help.md
diff --git a/ui/v2.5/src/docs/en/Identify.md b/ui/v2.5/src/docs/en/Manual/Identify.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Identify.md
rename to ui/v2.5/src/docs/en/Manual/Identify.md
diff --git a/ui/v2.5/src/docs/en/Interactive.md b/ui/v2.5/src/docs/en/Manual/Interactive.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Interactive.md
rename to ui/v2.5/src/docs/en/Manual/Interactive.md
diff --git a/ui/v2.5/src/docs/en/Interface.md b/ui/v2.5/src/docs/en/Manual/Interface.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Interface.md
rename to ui/v2.5/src/docs/en/Manual/Interface.md
diff --git a/ui/v2.5/src/docs/en/Introduction.md b/ui/v2.5/src/docs/en/Manual/Introduction.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Introduction.md
rename to ui/v2.5/src/docs/en/Manual/Introduction.md
diff --git a/ui/v2.5/src/docs/en/JSONSpec.md b/ui/v2.5/src/docs/en/Manual/JSONSpec.md
similarity index 100%
rename from ui/v2.5/src/docs/en/JSONSpec.md
rename to ui/v2.5/src/docs/en/Manual/JSONSpec.md
diff --git a/ui/v2.5/src/docs/en/KeyboardShortcuts.md b/ui/v2.5/src/docs/en/Manual/KeyboardShortcuts.md
similarity index 100%
rename from ui/v2.5/src/docs/en/KeyboardShortcuts.md
rename to ui/v2.5/src/docs/en/Manual/KeyboardShortcuts.md
diff --git a/ui/v2.5/src/docs/en/Plugins.md b/ui/v2.5/src/docs/en/Manual/Plugins.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Plugins.md
rename to ui/v2.5/src/docs/en/Manual/Plugins.md
diff --git a/ui/v2.5/src/docs/en/SceneFilenameParser.md b/ui/v2.5/src/docs/en/Manual/SceneFilenameParser.md
similarity index 100%
rename from ui/v2.5/src/docs/en/SceneFilenameParser.md
rename to ui/v2.5/src/docs/en/Manual/SceneFilenameParser.md
diff --git a/ui/v2.5/src/docs/en/ScraperDevelopment.md b/ui/v2.5/src/docs/en/Manual/ScraperDevelopment.md
similarity index 100%
rename from ui/v2.5/src/docs/en/ScraperDevelopment.md
rename to ui/v2.5/src/docs/en/Manual/ScraperDevelopment.md
diff --git a/ui/v2.5/src/docs/en/Scraping.md b/ui/v2.5/src/docs/en/Manual/Scraping.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Scraping.md
rename to ui/v2.5/src/docs/en/Manual/Scraping.md
diff --git a/ui/v2.5/src/docs/en/Tagger.md b/ui/v2.5/src/docs/en/Manual/Tagger.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Tagger.md
rename to ui/v2.5/src/docs/en/Manual/Tagger.md
diff --git a/ui/v2.5/src/docs/en/Tasks.md b/ui/v2.5/src/docs/en/Manual/Tasks.md
similarity index 100%
rename from ui/v2.5/src/docs/en/Tasks.md
rename to ui/v2.5/src/docs/en/Manual/Tasks.md
diff --git a/ui/v2.5/src/docs/en/MigrationNotes/index.ts b/ui/v2.5/src/docs/en/MigrationNotes/index.ts
new file mode 100644
index 000000000..1b6eebbe0
--- /dev/null
+++ b/ui/v2.5/src/docs/en/MigrationNotes/index.ts
@@ -0,0 +1,9 @@
+// import migration32 from "./32.md";
+
+// type Module = typeof migration32;
+
+// replace any with module once we add migration notes
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export const migrationNotes: Record = {
+ // 32: migration31,
+};
diff --git a/ui/v2.5/src/docs/en/ReleaseNotes/index.ts b/ui/v2.5/src/docs/en/ReleaseNotes/index.ts
new file mode 100644
index 000000000..97da03d2f
--- /dev/null
+++ b/ui/v2.5/src/docs/en/ReleaseNotes/index.ts
@@ -0,0 +1,16 @@
+import v0170 from "./v0170.md";
+
+export type Module = typeof v0170;
+
+interface IReleaseNotes {
+ // handle should be in the form of YYYYMMDD
+ date: number;
+ content: Module;
+}
+
+export const releaseNotes: IReleaseNotes[] = [
+ {
+ date: 20220707,
+ content: v0170,
+ },
+];
diff --git a/ui/v2.5/src/docs/en/ReleaseNotes/v0170.md b/ui/v2.5/src/docs/en/ReleaseNotes/v0170.md
new file mode 100644
index 000000000..5b461077d
--- /dev/null
+++ b/ui/v2.5/src/docs/en/ReleaseNotes/v0170.md
@@ -0,0 +1 @@
+* Changelog has been moved from the stats page to a section in the Settings page.
\ No newline at end of file
diff --git a/ui/v2.5/src/index.scss b/ui/v2.5/src/index.scss
index 1e122c07c..4735aa70b 100755
--- a/ui/v2.5/src/index.scss
+++ b/ui/v2.5/src/index.scss
@@ -14,6 +14,7 @@
@import "src/components/SceneFilenameParser/styles.scss";
@import "src/components/ScenePlayer/styles.scss";
@import "src/components/Settings/styles.scss";
+@import "src/components/Setup/styles.scss";
@import "src/components/Studios/styles.scss";
@import "src/components/Shared/styles.scss";
@import "src/components/Tags/styles.scss";
diff --git a/ui/v2.5/src/locales/en-GB.json b/ui/v2.5/src/locales/en-GB.json
index f3faa50cb..a74f4f996 100644
--- a/ui/v2.5/src/locales/en-GB.json
+++ b/ui/v2.5/src/locales/en-GB.json
@@ -189,6 +189,7 @@
},
"categories": {
"about": "About",
+ "changelog": "Changelog",
"interface": "Interface",
"logs": "Logs",
"metadata_providers": "Metadata Providers",
@@ -604,6 +605,7 @@
"edit_entity_title": "Edit {count, plural, one {{singularEntity}} other {{pluralEntity}}}",
"export_include_related_objects": "Include related objects in export",
"export_title": "Export",
+ "dont_show_until_updated": "Don't show until next update",
"lightbox": {
"delay": "Delay (Sec)",
"display_mode": {
@@ -870,6 +872,7 @@
"rating": "Rating",
"recently_added_objects": "Recently Added {objects}",
"recently_released_objects": "Recently Released {objects}",
+ "release_notes": "Release Notes",
"resolution": "Resolution",
"scene": "Scene",
"sceneTagger": "Scene Tagger",
@@ -919,9 +922,10 @@
"migration_failed_error": "The following error was encountered while migrating the database:",
"migration_failed_help": "Please make any necessary corrections and try again. Otherwise, raise a bug on the {githubLink} or seek help in the {discordLink}.",
"migration_irreversible_warning": "The schema migration process is not reversible. Once the migration is performed, your database will be incompatible with previous versions of stash.",
+ "migration_notes": "Migration Notes",
"migration_required": "Migration required",
"perform_schema_migration": "Perform schema migration",
- "schema_too_old": "Your current stash database is schema version {databaseSchema} and needs to be migrated to version {appSchema}. This version of Stash will not function without migrating the database."
+ "schema_too_old": "Your current stash database is schema version {databaseSchema} and needs to be migrated to version {appSchema}. This version of Stash will not function without migrating the database. If you do not wish to migrate, you will need to downgrade to a version that matches your database schema."
},
"paths": {
"database_filename_empty_for_default": "database filename (empty for default)",