chore: add ignore version upgrade setting (#1491)

This commit is contained in:
boojack 2023-04-08 18:13:51 +08:00 committed by GitHub
parent ab867b68d3
commit 3eac19d258
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 43 additions and 4 deletions

View File

@ -10,6 +10,8 @@ type SystemStatus struct {
// System settings
// Allow sign up.
AllowSignUp bool `json:"allowSignUp"`
// Ignore upgrade
IgnoreUpgrade bool `json:"ignoreUpgrade"`
// Disable public memos.
DisablePublicMemos bool `json:"disablePublicMemos"`
// Additional style.

View File

@ -17,6 +17,8 @@ const (
SystemSettingSecretSessionName SystemSettingName = "secret-session"
// SystemSettingAllowSignUpName is the name of allow signup setting.
SystemSettingAllowSignUpName SystemSettingName = "allow-signup"
// SystemSettingIgnoreUpgradeName is the name of ignore upgrade.
SystemSettingIgnoreUpgradeName SystemSettingName = "ignore-upgrade"
// SystemSettingDisablePublicMemosName is the name of disable public memos setting.
SystemSettingDisablePublicMemosName SystemSettingName = "disable-public-memos"
// SystemSettingAdditionalStyleName is the name of additional style.
@ -62,6 +64,8 @@ func (key SystemSettingName) String() string {
return "secret-session"
case SystemSettingAllowSignUpName:
return "allow-signup"
case SystemSettingIgnoreUpgradeName:
return "ignore-upgrade"
case SystemSettingDisablePublicMemosName:
return "disable-public-memos"
case SystemSettingAdditionalStyleName:
@ -102,6 +106,12 @@ func (upsert SystemSettingUpsert) Validate() error {
if err != nil {
return fmt.Errorf("failed to unmarshal system setting allow signup value")
}
} else if upsert.Name == SystemSettingIgnoreUpgradeName {
value := false
err := json.Unmarshal([]byte(upsert.Value), &value)
if err != nil {
return fmt.Errorf("failed to unmarshal system setting ignore upgrade value")
}
} else if upsert.Name == SystemSettingDisablePublicMemosName {
value := false
err := json.Unmarshal([]byte(upsert.Value), &value)

View File

@ -42,6 +42,7 @@ func (s *Server) registerSystemRoutes(g *echo.Group) {
Profile: *s.Profile,
DBSize: 0,
AllowSignUp: false,
IgnoreUpgrade: false,
DisablePublicMemos: false,
AdditionalStyle: "",
AdditionalScript: "",
@ -75,6 +76,8 @@ func (s *Server) registerSystemRoutes(g *echo.Group) {
if systemSetting.Name == api.SystemSettingAllowSignUpName {
systemStatus.AllowSignUp = baseValue.(bool)
} else if systemSetting.Name == api.SystemSettingIgnoreUpgradeName {
systemStatus.IgnoreUpgrade = baseValue.(bool)
} else if systemSetting.Name == api.SystemSettingDisablePublicMemosName {
systemStatus.DisablePublicMemos = baseValue.(bool)
} else if systemSetting.Name == api.SystemSettingAdditionalStyleName {

View File

@ -10,6 +10,7 @@ import "@/less/settings/system-section.less";
interface State {
dbSize: number;
allowSignUp: boolean;
ignoreUpgrade: boolean;
disablePublicMemos: boolean;
additionalStyle: string;
additionalScript: string;
@ -31,6 +32,7 @@ const SystemSection = () => {
const [state, setState] = useState<State>({
dbSize: systemStatus.dbSize,
allowSignUp: systemStatus.allowSignUp,
ignoreUpgrade: systemStatus.ignoreUpgrade,
additionalStyle: systemStatus.additionalStyle,
additionalScript: systemStatus.additionalScript,
disablePublicMemos: systemStatus.disablePublicMemos,
@ -75,6 +77,17 @@ const SystemSection = () => {
});
};
const handleIgnoreUpgradeChanged = async (value: boolean) => {
setState({
...state,
ignoreUpgrade: value,
});
await api.upsertSystemSetting({
name: "ignore-upgrade",
value: JSON.stringify(value),
});
};
const handleUpdateCustomizedProfileButtonClick = () => {
showUpdateCustomizedProfileDialog();
};
@ -189,6 +202,10 @@ const SystemSection = () => {
<span className="normal-text">{t("setting.system-section.allow-user-signup")}</span>
<Switch checked={state.allowSignUp} onChange={(event) => handleAllowSignUpChanged(event.target.checked)} />
</div>
<div className="form-label">
<span className="normal-text">Ignore version upgrade</span>
<Switch checked={state.ignoreUpgrade} onChange={(event) => handleIgnoreUpgradeChanged(event.target.checked)} />
</div>
<div className="form-label">
<span className="normal-text">{t("setting.system-section.disable-public-memos")}</span>
<Switch checked={state.disablePublicMemos} onChange={(event) => handleDisablePublicMemosChanged(event.target.checked)} />

View File

@ -10,7 +10,7 @@ interface State {
show: boolean;
}
const UpdateVersionBanner: React.FC = () => {
const UpgradeVersionBanner: React.FC = () => {
const globalStore = useGlobalStore();
const profile = globalStore.state.systemStatus.profile;
const [state, setState] = useState<State>({
@ -19,6 +19,10 @@ const UpdateVersionBanner: React.FC = () => {
});
useEffect(() => {
if (globalStore.state.systemStatus.ignoreUpgrade) {
return;
}
api.getRepoLatestTag().then((latestTag) => {
const { skippedVersion } = storage.get(["skippedVersion"]);
const latestVersion = latestTag.slice(1) || "0.0.0";
@ -58,4 +62,4 @@ const UpdateVersionBanner: React.FC = () => {
);
};
export default UpdateVersionBanner;
export default UpgradeVersionBanner;

View File

@ -1,12 +1,12 @@
import { Outlet } from "react-router-dom";
import Header from "@/components/Header";
import UpdateVersionBanner from "@/components/UpdateVersionBanner";
import UpgradeVersionBanner from "@/components/UpgradeVersionBanner";
function Root() {
return (
<div className="w-full min-h-full bg-zinc-100 dark:bg-zinc-800">
<div className="w-full h-auto flex flex-col justify-start items-center">
<UpdateVersionBanner />
<UpgradeVersionBanner />
</div>
<div className="w-full max-w-6xl mx-auto flex flex-row justify-center items-start">
<Header />

View File

@ -11,6 +11,7 @@ export const initialGlobalState = async () => {
appearance: "system" as Appearance,
systemStatus: {
allowSignUp: false,
ignoreUpgrade: false,
disablePublicMemos: false,
additionalStyle: "",
additionalScript: "",

View File

@ -19,6 +19,7 @@ const globalSlice = createSlice({
},
dbSize: 0,
allowSignUp: false,
ignoreUpgrade: false,
disablePublicMemos: false,
additionalStyle: "",
additionalScript: "",

View File

@ -23,6 +23,7 @@ interface SystemStatus {
dbSize: number;
// System settings
allowSignUp: boolean;
ignoreUpgrade: boolean;
disablePublicMemos: boolean;
additionalStyle: string;
additionalScript: string;