this repo has no description

moonbase: persist update state and hide advice is update is installed

Changed files
+33 -15
packages
core-extensions
src
moonbase
webpackModules
+28 -3
packages/core-extensions/src/moonbase/webpackModules/stores.ts
···
import { Config, ExtensionEnvironment, ExtensionLoadSource, ExtensionSettingsAdvice } from "@moonlight-mod/types";
-
import { ExtensionState, MoonbaseExtension, MoonbaseNatives, RepositoryManifest, RestartAdvice } from "../types";
+
import {
+
ExtensionState,
+
MoonbaseExtension,
+
MoonbaseNatives,
+
RepositoryManifest,
+
RestartAdvice,
+
UpdateState
+
} from "../types";
import { Store } from "@moonlight-mod/wp/discord/packages/flux";
import Dispatcher from "@moonlight-mod/wp/discord/Dispatcher";
import getNatives from "../native";
···
submitting: boolean;
installing: boolean;
+
#updateState = UpdateState.Ready;
+
get updateState() {
+
return this.#updateState;
+
}
newVersion: string | null;
shouldShowNotice: boolean;
···
}
async updateMoonlight() {
-
await natives.updateMoonlight();
+
this.#updateState = UpdateState.Working;
+
this.emitChange();
+
+
await natives
+
.updateMoonlight()
+
.then(() => (this.#updateState = UpdateState.Installed))
+
.catch((e) => {
+
logger.error(e);
+
this.#updateState = UpdateState.Failed;
+
});
+
+
this.emitChange();
}
getConfigOption<K extends keyof Config>(key: K): Config[K] {
···
}
#computeRestartAdvice() {
+
// If moonlight update needs a restart, always hide advice.
+
if (this.#updateState === UpdateState.Installed) return RestartAdvice.NotNeeded;
+
const i = this.initialConfig; // Initial config, from startup
const n = this.config; // New config about to be saved
···
this.modified = false;
this.emitChange();
-
if (modifiedRepos) this.checkUpdates();
+
if (modifiedRepos.length !== 0) this.checkUpdates();
}
reset() {
+5 -12
packages/core-extensions/src/moonbase/webpackModules/ui/update.tsx
···
} from "@moonlight-mod/wp/discord/components/common/index";
import MarkupClasses from "@moonlight-mod/wp/discord/modules/messages/web/Markup.css";
-
const logger = moonlight.getLogger("moonbase/ui/update");
-
const strings: Record<UpdateState, string> = {
[UpdateState.Ready]: "A new version of moonlight is available.",
[UpdateState.Working]: "Updating moonlight...",
···
}
export default function Update() {
-
const [state, setState] = React.useState(UpdateState.Ready);
-
const newVersion = useStateFromStores([MoonbaseSettingsStore], () => MoonbaseSettingsStore.newVersion);
+
const [newVersion, state] = useStateFromStores([MoonbaseSettingsStore], () => [
+
MoonbaseSettingsStore.newVersion,
+
MoonbaseSettingsStore.updateState
+
]);
if (newVersion == null) return null;
···
size={Button.Sizes.TINY}
disabled={state !== UpdateState.Ready}
onClick={() => {
-
setState(UpdateState.Working);
-
-
MoonbaseSettingsStore.updateMoonlight()
-
.then(() => setState(UpdateState.Installed))
-
.catch((e) => {
-
logger.error(e);
-
setState(UpdateState.Failed);
-
});
+
MoonbaseSettingsStore.updateMoonlight();
}}
>
Update