this repo has no description
1import spacepack from "@moonlight-mod/wp/spacepack_spacepack";
2import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores";
3import Notices from "@moonlight-mod/wp/notices_notices";
4import { MoonlightBranch } from "@moonlight-mod/types";
5import React from "@moonlight-mod/wp/react";
6import * as Components from "@moonlight-mod/wp/discord/components/common/index";
7
8// FIXME: not indexed as importable
9const Constants = spacepack.require("discord/Constants");
10const UserSettingsSections = spacepack.findObjectFromKey(Constants, "APPEARANCE_THEME_PICKER");
11
12const { ThemeDarkIcon } = Components;
13
14function plural(str: string, num: number) {
15 return `${str}${num > 1 ? "s" : ""}`;
16}
17
18function listener() {
19 if (
20 MoonbaseSettingsStore.shouldShowNotice &&
21 MoonbaseSettingsStore.getExtensionConfigRaw("moonbase", "updateBanner", true)
22 ) {
23 MoonbaseSettingsStore.removeChangeListener(listener);
24
25 const version = MoonbaseSettingsStore.newVersion;
26 const extensionUpdateCount = Object.keys(MoonbaseSettingsStore.updates).length;
27 const hasExtensionUpdates = extensionUpdateCount > 0;
28
29 let message;
30
31 if (version != null) {
32 message =
33 moonlightNode.branch === MoonlightBranch.NIGHTLY
34 ? `A new version of moonlight is available`
35 : `moonlight ${version} is available`;
36 }
37
38 if (hasExtensionUpdates) {
39 let concat = false;
40 if (message == null) {
41 message = "";
42 } else {
43 concat = true;
44 message += ", and ";
45 }
46 message += `${extensionUpdateCount} ${concat ? "" : "moonlight "}${plural(
47 "extension",
48 extensionUpdateCount
49 )} can be updated`;
50 }
51
52 if (message != null) message += ".";
53
54 Notices.addNotice({
55 element: (
56 <div className="moonbase-updates-notice_text-wrapper">
57 <ThemeDarkIcon size="sm" color="currentColor" />
58 {message}
59 </div>
60 ),
61 color: "moonbase-updates-notice",
62 buttons: [
63 {
64 name: "Open Moonbase",
65 onClick: () => {
66 const { open } = spacepack.findByExports("setSection", "clearSubsection")[0].exports.Z;
67
68 // settings is lazy loaded thus lazily patched
69 // FIXME: figure out a way to detect if settings has been opened
70 // alreadyjust so the transition isnt as jarring
71 open(UserSettingsSections.ACCOUNT);
72 setTimeout(() => {
73 if (MoonbaseSettingsStore.getExtensionConfigRaw<boolean>("moonbase", "sections", false)) {
74 open("moonbase-extensions");
75 } else {
76 open("moonbase", 0);
77 }
78 }, 0);
79 return true;
80 }
81 }
82 ]
83 });
84 }
85}
86
87MoonbaseSettingsStore.addChangeListener(listener);