aboutsummaryrefslogtreecommitdiff
path: root/src/components/Updater.tsx
diff options
context:
space:
mode:
authormegumin <megumin.bakaretsurie@gmail.com>2022-11-25 22:38:55 +0000
committerGitHub <noreply@github.com>2022-11-25 22:38:55 +0000
commit6b55dee9fbba1a54cbe2ba1f2067e2d14190ab93 (patch)
tree4245702e4ae95647d344ba3b22893bdd0e3b1bb6 /src/components/Updater.tsx
parenta85ec594a77557e5f48c4cf1aa33680e0da94654 (diff)
downloadVencord-6b55dee9fbba1a54cbe2ba1f2067e2d14190ab93.tar.gz
Vencord-6b55dee9fbba1a54cbe2ba1f2067e2d14190ab93.tar.bz2
Vencord-6b55dee9fbba1a54cbe2ba1f2067e2d14190ab93.zip
feat(settings): new settings design (#261)
Diffstat (limited to 'src/components/Updater.tsx')
-rw-r--r--src/components/Updater.tsx216
1 files changed, 0 insertions, 216 deletions
diff --git a/src/components/Updater.tsx b/src/components/Updater.tsx
deleted file mode 100644
index 8abdf28..0000000
--- a/src/components/Updater.tsx
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Vencord, a modification for Discord's desktop app
- * Copyright (c) 2022 Vendicated and contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
-*/
-
-import gitHash from "~git-hash";
-
-import { classes, useAwaiter } from "../utils/misc";
-import { changes, checkForUpdates, getRepo, isNewer, rebuild, update, updateError, UpdateLogger } from "../utils/updater";
-import { Alerts, Button, Card, Forms, Margins, Parser, React, Toasts } from "../webpack/common";
-import ErrorBoundary from "./ErrorBoundary";
-import { ErrorCard } from "./ErrorCard";
-import { Flex } from "./Flex";
-import { handleComponentFailed } from "./handleComponentFailed";
-import { Link } from "./Link";
-
-function withDispatcher(dispatcher: React.Dispatch<React.SetStateAction<boolean>>, action: () => any) {
- return async () => {
- dispatcher(true);
- try {
- await action();
- } catch (e: any) {
- UpdateLogger.error("Failed to update", e);
- if (!e) {
- var err = "An unknown error occurred (error is undefined).\nPlease try again.";
- } else if (e.code && e.cmd) {
- const { code, path, cmd, stderr } = e;
-
- if (code === "ENOENT")
- var err = `Command \`${path}\` not found.\nPlease install it and try again`;
- else {
- var err = `An error occured while running \`${cmd}\`:\n`;
- err += stderr || `Code \`${code}\`. See the console for more info`;
- }
-
- } else {
- var err = "An unknown error occurred. See the console for more info.";
- }
- Alerts.show({
- title: "Oops!",
- body: (
- <ErrorCard>
- {err.split("\n").map(line => <div>{Parser.parse(line)}</div>)}
- </ErrorCard>
- )
- });
- }
- finally {
- dispatcher(false);
- }
- };
-}
-
-interface CommonProps {
- repo: string;
- repoPending: boolean;
-}
-
-function Changes({ updates, repo, repoPending }: CommonProps & { updates: typeof changes; }) {
- return (
- <Card style={{ padding: ".5em" }}>
- {updates.map(({ hash, author, message }) => (
- <div>
- <Link href={`${repo}/commit/${hash}`} disabled={repoPending}>
- <code>{hash}</code>
- </Link>
- <span style={{
- marginLeft: "0.5em",
- color: "var(--text-normal)"
- }}>{message} - {author}</span>
- </div>
- ))}
- </Card>
- );
-}
-
-function Updatable(props: CommonProps) {
- const [updates, setUpdates] = React.useState(changes);
- const [isChecking, setIsChecking] = React.useState(false);
- const [isUpdating, setIsUpdating] = React.useState(false);
-
- const isOutdated = (updates?.length ?? 0) > 0;
-
- return (
- <>
- {!updates && updateError ? (
- <>
- <Forms.FormText>Failed to check updates. Check the console for more info</Forms.FormText>
- <ErrorCard style={{ padding: "1em" }}>
- <p>{updateError.stderr || updateError.stdout || "An unknown error occurred"}</p>
- </ErrorCard>
- </>
- ) : (
- <Forms.FormText className={Margins.marginBottom8}>
- {isOutdated ? `There are ${updates.length} Updates` : "Up to Date!"}
- </Forms.FormText>
- )}
-
- {isOutdated && <Changes updates={updates} {...props} />}
-
- <Flex className={classes(Margins.marginBottom8, Margins.marginTop8)}>
- {isOutdated && <Button
- size={Button.Sizes.SMALL}
- disabled={isUpdating || isChecking}
- onClick={withDispatcher(setIsUpdating, async () => {
- if (await update()) {
- setUpdates([]);
- const needFullRestart = await rebuild();
- await new Promise<void>(r => {
- Alerts.show({
- title: "Update Success!",
- body: "Successfully updated. Restart now to apply the changes?",
- confirmText: "Restart",
- cancelText: "Not now!",
- onConfirm() {
- if (needFullRestart)
- window.DiscordNative.app.relaunch();
- else
- location.reload();
- r();
- },
- onCancel: r
- });
- });
- }
- })}
- >
- Update Now
- </Button>}
- <Button
- size={Button.Sizes.SMALL}
- disabled={isUpdating || isChecking}
- onClick={withDispatcher(setIsChecking, async () => {
- const outdated = await checkForUpdates();
- if (outdated) {
- setUpdates(changes);
- } else {
- setUpdates([]);
- Toasts.show({
- message: "No updates found!",
- id: Toasts.genId(),
- type: Toasts.Type.MESSAGE,
- options: {
- position: Toasts.Position.BOTTOM
- }
- });
- }
- })}
- >
- Check for Updates
- </Button>
- </Flex>
- </>
- );
-}
-
-function Newer(props: CommonProps) {
- return (
- <>
- <Forms.FormText className={Margins.marginBottom8}>
- Your local copy has more recent commits. Please stash or reset them.
- </Forms.FormText>
- <Changes {...props} updates={changes} />
- </>
- );
-}
-
-function Updater() {
- const [repo, err, repoPending] = useAwaiter(getRepo, "Loading...");
-
- React.useEffect(() => {
- if (err)
- UpdateLogger.error("Failed to retrieve repo", err);
- }, [err]);
-
- const commonProps: CommonProps = {
- repo,
- repoPending
- };
-
- return (
- <Forms.FormSection tag="h1" title="Vencord Updater">
- <Forms.FormTitle tag="h5">Repo</Forms.FormTitle>
-
- <Forms.FormText>{repoPending ? repo : err ? "Failed to retrieve - check console" : (
- <Link href={repo}>
- {repo.split("/").slice(-2).join("/")}
- </Link>
- )} ({gitHash})</Forms.FormText>
-
- <Forms.FormDivider />
-
- <Forms.FormTitle tag="h5">Updates</Forms.FormTitle>
-
- {isNewer ? <Newer {...commonProps} /> : <Updatable {...commonProps} />}
- </Forms.FormSection >
- );
-}
-
-export default IS_WEB ? null : ErrorBoundary.wrap(Updater, {
- message: "Failed to render the Updater. If this persists, try using the installer to reinstall!",
- onError: handleComponentFailed,
-});