diff --git a/src/RestreamerUI.js b/src/RestreamerUI.js index 1a2d0c6..73c95bb 100644 --- a/src/RestreamerUI.js +++ b/src/RestreamerUI.js @@ -14,6 +14,7 @@ import ChannelList from './misc/ChannelList'; import Footer from './Footer'; import I18n from './I18n'; import Header from './Header'; +import * as M from './utils/metadata'; import Restreamer from './utils/restreamer'; import Router from './Router'; import Views from './views'; @@ -51,7 +52,6 @@ export default function RestreamerUI(props) { password: false, updates: false, service: false, - changelog: false, }); const [$ready, setReady] = React.useState(false); const [$snack, setSnack] = React.useState({ @@ -160,26 +160,49 @@ export default function RestreamerUI(props) { }; const checkChangelog = async () => { - let showChangelog = false; + let showChangelog = true; if (restreamer.current.IsConnected() === true) { - let metadata = await restreamer.current.GetMetadata(); + let metadata = await restreamer.current.GetMetadata(false); + const channels = await restreamer.current.ListChannels(); let current = Version.replace('restreamer-', ''); let previous = ''; - if ('version' in metadata.ui) { - if (SemverValid(metadata.ui.version) !== null) { - previous = metadata.ui.version; - } else { - showChangelog = true; - } - } else { - showChangelog = true; + if (SemverValid(current) === null) { + showChangelog = false; } - if (showChangelog === false) { - if (SemverGt(current, previous)) { - showChangelog = true; + if (metadata === null) { + if (channels.length === 0) { + // assume fresh installation + await restreamer.current.SetMetadata({ + ...metadata, + bundle: { + ...metadata.bundle, + version: current, + }, + }); + return false; + } + } + + metadata = M.initMetadata(metadata); + + if ('version' in metadata.bundle) { + if (SemverValid(metadata.bundle.version) !== null) { + previous = metadata.bundle.version; + } + } + + if (showChangelog === true) { + if (SemverValid(previous) === null) { + previous = ''; + } + + if (previous.length !== 0) { + if (!SemverGt(current, previous)) { + showChangelog = false; + } } } @@ -199,6 +222,21 @@ export default function RestreamerUI(props) { return showChangelog; }; + const handleCloseChangelog = async () => { + await restreamer.current.SetMetadata({ + ...$metadata, + bundle: { + ...$metadata.bundle, + version: $changelog.current, + }, + }); + + setChangelog({ + ...$changelog, + open: false, + }); + }; + const handleLogin = async (username, password) => { const connected = await restreamer.current.Login(username, password); @@ -388,21 +426,6 @@ export default function RestreamerUI(props) { }); }; - const handleCloseChangelog = async () => { - await restreamer.current.SetMetadata({ - ...$metadata, - ui: { - ...$metadata.ui, - version: $changelog.current, - }, - }); - - setChangelog({ - ...$changelog, - open: false, - }); - }; - const handleResources = async () => { return await restreamer.current.Resources(); }; diff --git a/src/misc/Changelog.js b/src/misc/Changelog.js index 7cd5678..695e0c6 100644 --- a/src/misc/Changelog.js +++ b/src/misc/Changelog.js @@ -7,6 +7,7 @@ import Grid from '@mui/material/Grid'; import ReactMarkdown from 'react-markdown'; import SemverGt from 'semver/functions/gt'; import SemverLte from 'semver/functions/lte'; +import SemverEq from 'semver/functions/eq'; import SemverValid from 'semver/functions/valid'; import BoxText from './BoxText'; @@ -110,10 +111,18 @@ export default function Changelog(props) { previous = version; } - if (SemverLte(version, current) && SemverGt(version, previous)) { - copy = true; + if (SemverEq(current, previous)) { + if (SemverEq(version, current)) { + copy = true; + } else { + copy = false; + } } else { - copy = false; + if (SemverLte(version, current) && SemverGt(version, previous)) { + copy = true; + } else { + copy = false; + } } } diff --git a/src/utils/metadata.js b/src/utils/metadata.js index 29564c0..0662a3a 100644 --- a/src/utils/metadata.js +++ b/src/utils/metadata.js @@ -250,7 +250,7 @@ import * as version from '../version'; const defaultMetadata = { version: version.Version, playersite: {}, - ui: {}, + bundle: {}, }; const defaultIngestMetadata = { @@ -360,9 +360,9 @@ const mergeMetadata = (metadata, base) => { ...metadata.playersite, }; - metadata.ui = { - ...base.ui, - ...metadata.ui, + metadata.bundle = { + ...base.bundle, + ...metadata.bundle, }; metadata = transformMetadata(metadata, defaultMetadata.version, transformers); diff --git a/src/utils/restreamer.js b/src/utils/restreamer.js index 2afd5d3..133c1a4 100644 --- a/src/utils/restreamer.js +++ b/src/utils/restreamer.js @@ -944,9 +944,13 @@ class Restreamer { } // Get system metadata - async GetMetadata() { + async GetMetadata(defaults = true) { let metadata = await this._getMetadata(); + if (defaults === false) { + return metadata; + } + return M.initMetadata(metadata); }