Skip to content

Commit 3e4e2f9

Browse files
committed
refactor: Move settings validation into PluginSettings class
1 parent 210d58d commit 3e4e2f9

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

src/settings.ts

+46-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import { isUndefined } from "@/helpers";
12
import type GithubStarsPlugin from "@/main";
3+
import { confirm } from "@/modals";
24
import {
35
type App,
46
type Debouncer,
@@ -7,7 +9,6 @@ import {
79
debounce,
810
normalizePath,
911
} from "obsidian";
10-
import { isUndefined } from "./helpers";
1112

1213
export interface PluginSettings {
1314
pageSize: number;
@@ -47,6 +48,48 @@ export class SettingsTab extends PluginSettingTab {
4748
this.initSettings();
4849
}
4950

51+
async validateSettings(settings: Partial<PluginSettings>) {
52+
const validSettings: Partial<PluginSettings> = {};
53+
if (
54+
!isUndefined(settings.accessToken) &&
55+
this.plugin.settings.accessToken !== settings.accessToken
56+
) {
57+
validSettings.accessToken = settings.accessToken;
58+
}
59+
60+
if (
61+
!isUndefined(settings.pageSize) &&
62+
this.plugin.settings.pageSize !== settings.pageSize
63+
) {
64+
validSettings.pageSize = settings.pageSize;
65+
if (validSettings.pageSize < 1) {
66+
validSettings.pageSize = 1;
67+
}
68+
if (validSettings.pageSize > 100) {
69+
validSettings.pageSize = 100;
70+
}
71+
}
72+
73+
if (
74+
!isUndefined(settings.destinationFolder) &&
75+
this.plugin.settings.destinationFolder !==
76+
settings.destinationFolder
77+
) {
78+
const isRenameConfirmed = await confirm({
79+
app: this.app,
80+
title: "Rename destination folder?",
81+
message: `Destination folder will be renamed from <pre>${this.plugin.settings.destinationFolder}</pre> to <pre>${settings.destinationFolder}</pre>`,
82+
okButtonText: "Yes",
83+
cancelButtonText: "No",
84+
});
85+
if (isRenameConfirmed) {
86+
validSettings.destinationFolder = settings.destinationFolder;
87+
}
88+
}
89+
90+
return validSettings;
91+
}
92+
5093
async updateSettings(newSettings: Partial<PluginSettings>) {
5194
if (isUndefined(this.debouncedUpdateSettings)) {
5295
this.debouncedUpdateSettings = debounce(
@@ -56,7 +99,8 @@ export class SettingsTab extends PluginSettingTab {
5699
this.pageSizeSetting?.setDisabled(true);
57100
this.destinationFolderSetting?.setDisabled(true);
58101

59-
await this.plugin.updateSettings(settings);
102+
const validSettings = await this.validateSettings(settings);
103+
await this.plugin.updateSettings(validSettings);
60104

61105
this.accessTokenSetting?.setDisabled(false);
62106
this.pageSizeSetting?.setDisabled(false);

0 commit comments

Comments
 (0)