diff --git a/wowup-electron/app/stores.ts b/wowup-electron/app/stores.ts
index 932ac87d..f3b335a8 100644
--- a/wowup-electron/app/stores.ts
+++ b/wowup-electron/app/stores.ts
@@ -8,14 +8,17 @@ import {
IPC_STORE_REMOVE_OBJECT,
IPC_STORE_SET_OBJECT,
PREFERENCE_STORE_NAME,
+ SENSITIVE_STORE_NAME,
} from "../src/common/constants";
export const addonStore = new Store({ name: ADDON_STORE_NAME });
export const preferenceStore = new Store({ name: PREFERENCE_STORE_NAME });
+export const sensitiveStore = new Store({ name: SENSITIVE_STORE_NAME });
const stores: { [storeName: string]: Store } = {
[ADDON_STORE_NAME]: addonStore,
[PREFERENCE_STORE_NAME]: preferenceStore,
+ [SENSITIVE_STORE_NAME]: sensitiveStore,
};
export function initializeStoreIpcHandlers(): void {
diff --git a/wowup-electron/src/app/addon-providers/curse-addon-v2-provider.ts b/wowup-electron/src/app/addon-providers/curse-addon-v2-provider.ts
index 0be1f1ee..d00e677e 100644
--- a/wowup-electron/src/app/addon-providers/curse-addon-v2-provider.ts
+++ b/wowup-electron/src/app/addon-providers/curse-addon-v2-provider.ts
@@ -50,7 +50,7 @@ import { AddonProvider, GetAllBatchResult, GetAllResult, SearchByUrlResult } fro
import { strictFilter } from "../utils/array.utils";
import { TocService } from "../services/toc/toc.service";
import { WarcraftService } from "../services/warcraft/warcraft.service";
-import { PreferenceStorageService } from "../services/storage/preference-storage.service";
+import { SensitiveStorageService } from "../services/storage/sensitive-storage.service";
interface ProtocolData {
addonId: number;
@@ -99,7 +99,7 @@ export class CurseAddonV2Provider extends AddonProvider {
private _wowupApiService: WowUpApiService,
private _warcraftService: WarcraftService,
private _tocService: TocService,
- private _preferenceStorageService: PreferenceStorageService,
+ private _sensitiveStorageService: SensitiveStorageService,
_networkService: NetworkService
) {
super();
@@ -1045,7 +1045,7 @@ export class CurseAddonV2Provider extends AddonProvider {
return this._cfClient;
}
- const apiKey = await this._preferenceStorageService.getAsync(PREF_CF2_API_KEY);
+ const apiKey = await this._sensitiveStorageService.getAsync(PREF_CF2_API_KEY);
if (typeof apiKey !== "string" || apiKey.length === 0) {
return undefined;
}
diff --git a/wowup-electron/src/app/components/options/options-addon-section/options-addon-section.component.ts b/wowup-electron/src/app/components/options/options-addon-section/options-addon-section.component.ts
index b495602a..bbf9c676 100644
--- a/wowup-electron/src/app/components/options/options-addon-section/options-addon-section.component.ts
+++ b/wowup-electron/src/app/components/options/options-addon-section/options-addon-section.component.ts
@@ -4,7 +4,7 @@ import { MatSelectionListChange } from "@angular/material/list";
import { AddonProviderFactory } from "../../../services/addons/addon.provider.factory";
import { AddonProviderType } from "../../../addon-providers/addon-provider";
import { BehaviorSubject, catchError, debounceTime, first, from, map, of, Subject, switchMap, takeUntil } from "rxjs";
-import { PreferenceStorageService } from "../../../services/storage/preference-storage.service";
+import { SensitiveStorageService } from "../../../services/storage/sensitive-storage.service";
import { PREF_CF2_API_KEY } from "../../../../common/constants";
import { FormControl, FormGroup } from "@angular/forms";
@@ -29,7 +29,7 @@ export class OptionsAddonSectionComponent implements OnInit, OnDestroy {
public constructor(
private _addonProviderService: AddonProviderFactory,
- private _preferenceStorageService: PreferenceStorageService
+ private _sensitiveStorageService: SensitiveStorageService
) {
this._addonProviderService.addonProviderChange$.subscribe(() => {
this.loadProviderStates();
@@ -41,7 +41,7 @@ export class OptionsAddonSectionComponent implements OnInit, OnDestroy {
debounceTime(300),
switchMap((ch) => {
if (ch.cfV2ApiKey) {
- return from(this._preferenceStorageService.setAsync(PREF_CF2_API_KEY, ch.cfV2ApiKey));
+ return from(this._sensitiveStorageService.setAsync(PREF_CF2_API_KEY, ch.cfV2ApiKey));
}
return of(undefined);
}),
@@ -71,7 +71,7 @@ export class OptionsAddonSectionComponent implements OnInit, OnDestroy {
}
private loadCfV2ApiKey() {
- from(this._preferenceStorageService.getAsync(PREF_CF2_API_KEY))
+ from(this._sensitiveStorageService.getAsync(PREF_CF2_API_KEY))
.pipe(
first(),
map((apiKey) => {
diff --git a/wowup-electron/src/app/components/options/options-debug-section/options-debug-section.component.html b/wowup-electron/src/app/components/options/options-debug-section/options-debug-section.component.html
index 2a6446a0..d8fc3d1d 100644
--- a/wowup-electron/src/app/components/options/options-debug-section/options-debug-section.component.html
+++ b/wowup-electron/src/app/components/options/options-debug-section/options-debug-section.component.html
@@ -16,6 +16,20 @@
+
+
diff --git a/wowup-electron/src/app/components/options/options-debug-section/options-debug-section.component.ts b/wowup-electron/src/app/components/options/options-debug-section/options-debug-section.component.ts
index cf73af94..7f5d53cb 100644
--- a/wowup-electron/src/app/components/options/options-debug-section/options-debug-section.component.ts
+++ b/wowup-electron/src/app/components/options/options-debug-section/options-debug-section.component.ts
@@ -22,6 +22,10 @@ export class OptionsDebugSectionComponent {
await this._wowupService.showLogsFolder();
}
+ public async onShowConfig(): Promise {
+ await this._wowupService.showConfigFolder();
+ }
+
public async onLogDebugData(): Promise {
try {
this.dumpingDebugData = true;
diff --git a/wowup-electron/src/app/services/addons/addon.provider.factory.ts b/wowup-electron/src/app/services/addons/addon.provider.factory.ts
index a93ad6b2..a2b1fcf3 100644
--- a/wowup-electron/src/app/services/addons/addon.provider.factory.ts
+++ b/wowup-electron/src/app/services/addons/addon.provider.factory.ts
@@ -23,6 +23,7 @@ import { Subject } from "rxjs";
import { PreferenceStorageService } from "../storage/preference-storage.service";
import { CurseAddonV2Provider } from "../../addon-providers/curse-addon-v2-provider";
import { CurseAddonProvider } from "../../addon-providers/curse-addon-provider";
+import { SensitiveStorageService } from "../storage/sensitive-storage.service";
@Injectable({
providedIn: "root",
@@ -44,7 +45,8 @@ export class AddonProviderFactory {
private _tocService: TocService,
private _warcraftService: WarcraftService,
private _wowupApiService: WowUpApiService,
- private _preferenceStorageService: PreferenceStorageService
+ private _preferenceStorageService: PreferenceStorageService,
+ private _sensitiveStorageService: SensitiveStorageService,
) {}
/** This is part of the APP_INITIALIZER and called before the app is bootstrapped */
@@ -134,7 +136,7 @@ export class AddonProviderFactory {
this._wowupApiService,
this._warcraftService,
this._tocService,
- this._preferenceStorageService,
+ this._sensitiveStorageService,
this._networkService
);
}
diff --git a/wowup-electron/src/app/services/storage/preference-storage.service.ts b/wowup-electron/src/app/services/storage/preference-storage.service.ts
index 1f640bc3..4f8176a5 100644
--- a/wowup-electron/src/app/services/storage/preference-storage.service.ts
+++ b/wowup-electron/src/app/services/storage/preference-storage.service.ts
@@ -1,38 +1,17 @@
import { Injectable } from "@angular/core";
-import {
- IPC_STORE_GET_OBJECT,
- IPC_STORE_GET_OBJECT_SYNC,
- IPC_STORE_SET_OBJECT,
- PREFERENCE_STORE_NAME,
- TRUE_STR,
-} from "../../../common/constants";
+import { PREFERENCE_STORE_NAME } from "../../../common/constants";
+import { StorageService } from "./storage.service";
import { ElectronService } from "../electron/electron.service";
@Injectable({
providedIn: "root",
})
-export class PreferenceStorageService {
- public constructor(private _electronService: ElectronService) {}
+export class PreferenceStorageService extends StorageService {
+ protected readonly storageName = PREFERENCE_STORE_NAME;
- public async getBool(key: string): Promise {
- const val = await this.getAsync(key);
- return val === TRUE_STR;
- }
-
- public getAsync(key: string): Promise {
- return this._electronService.invoke(IPC_STORE_GET_OBJECT, PREFERENCE_STORE_NAME, key);
- }
-
- public getSync(key: string): T {
- return this._electronService.sendSync(IPC_STORE_GET_OBJECT_SYNC, PREFERENCE_STORE_NAME, key);
- }
-
- public async setAsync(key: string, value: unknown): Promise {
- return await this._electronService.invoke(IPC_STORE_SET_OBJECT, PREFERENCE_STORE_NAME, key, value);
- }
-
- public getObjectAsync(key: string): Promise {
- return this._electronService.invoke(IPC_STORE_GET_OBJECT, PREFERENCE_STORE_NAME, key);
+ public constructor(electronService: ElectronService) {
+ super(electronService);
}
}
+
diff --git a/wowup-electron/src/app/services/storage/sensitive-storage.service.ts b/wowup-electron/src/app/services/storage/sensitive-storage.service.ts
new file mode 100644
index 00000000..b30dbddd
--- /dev/null
+++ b/wowup-electron/src/app/services/storage/sensitive-storage.service.ts
@@ -0,0 +1,16 @@
+import { Injectable } from "@angular/core";
+
+import { SENSITIVE_STORE_NAME } from "../../../common/constants";
+import { StorageService } from "./storage.service";
+import { ElectronService } from "../electron/electron.service";
+
+@Injectable({
+ providedIn: "root",
+})
+export class SensitiveStorageService extends StorageService {
+ protected readonly storageName = SENSITIVE_STORE_NAME;
+
+ public constructor(electronService: ElectronService) {
+ super(electronService);
+ }
+}
diff --git a/wowup-electron/src/app/services/storage/storage.service.ts b/wowup-electron/src/app/services/storage/storage.service.ts
new file mode 100644
index 00000000..0e6481a3
--- /dev/null
+++ b/wowup-electron/src/app/services/storage/storage.service.ts
@@ -0,0 +1,34 @@
+import {
+ IPC_STORE_GET_OBJECT,
+ IPC_STORE_GET_OBJECT_SYNC,
+ IPC_STORE_SET_OBJECT,
+ TRUE_STR,
+} from "../../../common/constants";
+import { ElectronService } from "../electron/electron.service";
+
+export abstract class StorageService {
+ protected abstract readonly storageName: string;
+
+ protected constructor(private _electronService: ElectronService) {}
+
+ public async getBool(key: string): Promise {
+ const val = await this.getAsync(key);
+ return val === TRUE_STR;
+ }
+
+ public getAsync(key: string): Promise {
+ return this._electronService.invoke(IPC_STORE_GET_OBJECT, this.storageName, key);
+ }
+
+ public getSync(key: string): T {
+ return this._electronService.sendSync(IPC_STORE_GET_OBJECT_SYNC, this.storageName, key);
+ }
+
+ public async setAsync(key: string, value: unknown): Promise {
+ return await this._electronService.invoke(IPC_STORE_SET_OBJECT, this.storageName, key, value);
+ }
+
+ public getObjectAsync(key: string): Promise {
+ return this._electronService.invoke(IPC_STORE_GET_OBJECT, this.storageName, key);
+ }
+}
diff --git a/wowup-electron/src/app/services/wowup/wowup.service.ts b/wowup-electron/src/app/services/wowup/wowup.service.ts
index 70f918d4..914df19c 100644
--- a/wowup-electron/src/app/services/wowup/wowup.service.ts
+++ b/wowup-electron/src/app/services/wowup/wowup.service.ts
@@ -328,6 +328,10 @@ export class WowUpService {
await this._fileService.showDirectory(this.applicationLogsFolderPath);
}
+ public async showConfigFolder(): Promise {
+ await this._fileService.showDirectory(this.applicationFolderPath);
+ }
+
public checkForAppUpdate(): void {
this._electronService.send(IPC_APP_CHECK_UPDATE);
}
diff --git a/wowup-electron/src/assets/i18n/cs.json b/wowup-electron/src/assets/i18n/cs.json
index 8cb7bba1..e05a78a0 100644
--- a/wowup-electron/src/assets/i18n/cs.json
+++ b/wowup-electron/src/assets/i18n/cs.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Allow WowUp to scan symlink folders in your addon folder. Warning: they will be replaced when updating/installing."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Uložit debugovací data",
"DEBUG_DATA_DESCRIPTION": "Zaloguje debugovací data do logovacího souboru pro případnou diagnostiku problémů s aplikací. Pro zvědavce: Tato data naleznete v nejnovějším logovacím souboru.",
"DEBUG_DATA_LABEL": "Debug data",
diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json
index c35ffad4..f4395a8c 100644
--- a/wowup-electron/src/assets/i18n/de.json
+++ b/wowup-electron/src/assets/i18n/de.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Erlaubt WowUp Symlink-Ordner in deinem Addon-Ordner zu scannen. Warnung: Diese werden beim Aktualisieren/Installieren ersetzt."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Debug-Daten speichern",
"DEBUG_DATA_DESCRIPTION": "Protokolliere Debug-Daten, um mögliche Probleme zu diagnostizieren. Dies findest Du in Deiner aktuellen Protokolldatei (für Neugierige).",
"DEBUG_DATA_LABEL": "Debug-Daten",
diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json
index ae92d188..bdc0ec02 100644
--- a/wowup-electron/src/assets/i18n/en.json
+++ b/wowup-electron/src/assets/i18n/en.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Allow WowUp to scan symlink folders in your addon folder. Warning: they will be replaced when updating/installing."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Dump Debug Data",
"DEBUG_DATA_DESCRIPTION": "Log debug data to help with diagnosing potential issues. This can be found in your latest log file for the curious.",
"DEBUG_DATA_LABEL": "Debug Data",
diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json
index c41280c6..e37da80f 100644
--- a/wowup-electron/src/assets/i18n/es.json
+++ b/wowup-electron/src/assets/i18n/es.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Permite a WowUp escanear enlaces simbólicos en la carpeta de addons.\nAdvertecia: Los enlaces serán reemplazados al actualizar/instalar los addons."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Eliminar datos de depuración",
"DEBUG_DATA_DESCRIPTION": "Registra datos de depuración y ayuda a diagnosticar problemas potenciales. Puede curiosearlo abriendo el último archivo de registro.",
"DEBUG_DATA_LABEL": "Datos de depuración",
diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json
index 7d71789b..248279ea 100644
--- a/wowup-electron/src/assets/i18n/fr.json
+++ b/wowup-electron/src/assets/i18n/fr.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Allow WowUp to scan symlink folders in your addon folder. Warning: they will be replaced when updating/installing."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Dump des données de débogage",
"DEBUG_DATA_DESCRIPTION": "Log les données de débogage pour aider à diagnostiquer les problèmes potentiels. Cela peut être trouvé dans votre dernier fichier journal pour les curieux.",
"DEBUG_DATA_LABEL": "Déboguer les données",
diff --git a/wowup-electron/src/assets/i18n/it.json b/wowup-electron/src/assets/i18n/it.json
index 990eedae..05d2d8d8 100644
--- a/wowup-electron/src/assets/i18n/it.json
+++ b/wowup-electron/src/assets/i18n/it.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Consenti a WowUp di scansionare le cartelle dei symlinks nella cartella dell'addon. Attenzione: verranno sostituiti durante l'aggiornamento/installazione."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Dump Dati Di Debug",
"DEBUG_DATA_DESCRIPTION": "Registra i dati di debug per aiutare a diagnosticare potenziali problemi. Questi dati possono essere trovati nei tuoi ultimi file di log.",
"DEBUG_DATA_LABEL": "Dati di Debug",
diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json
index f27d063f..89a1d62a 100644
--- a/wowup-electron/src/assets/i18n/ko.json
+++ b/wowup-electron/src/assets/i18n/ko.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Allow WowUp to scan symlink folders in your addon folder. Warning: they will be replaced when updating/installing."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "디버그 데이터 덤프",
"DEBUG_DATA_DESCRIPTION": "잠재적인 문제를 진단하는데 도움을 주기 위해 디버그 데이터를 기록합니다. 궁금하시다면 최신 로그 파일에서 확인하실 수 있습니다.",
"DEBUG_DATA_LABEL": "디버그 데이터",
diff --git a/wowup-electron/src/assets/i18n/nb.json b/wowup-electron/src/assets/i18n/nb.json
index c8fa4e44..4423adab 100644
--- a/wowup-electron/src/assets/i18n/nb.json
+++ b/wowup-electron/src/assets/i18n/nb.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Allow WowUp to scan symlink folders in your addon folder. Warning: they will be replaced when updating/installing."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Dump Debugdata",
"DEBUG_DATA_DESCRIPTION": "Loggfør debugdata for å hjelpe til med å diagnotisere eventuelle problemer. Hvis du er nyskgjerrig kan du finne dette i din siste loggfil.",
"DEBUG_DATA_LABEL": "Debugdata",
diff --git a/wowup-electron/src/assets/i18n/pl.json b/wowup-electron/src/assets/i18n/pl.json
index 4200b8c3..e5a44bba 100644
--- a/wowup-electron/src/assets/i18n/pl.json
+++ b/wowup-electron/src/assets/i18n/pl.json
@@ -149,6 +149,8 @@
"IGNORED": "Zignorowany",
"INSTALL": "Zainstaluj",
"PENDING": "W toku",
+ "UNAVAILABLE": "Unavailable",
+ "UNAVAILABLE_TOOLTIP": "This author or provider has made this addon unavailable",
"UNINSTALL": "Odinstaluj",
"UNKNOWN": "",
"UPDATE": "Aktualizacja",
@@ -469,6 +471,11 @@
"OPTIONS": {
"ADDON": {
"AD_REQUIRED_HINT": "Reklama wymagana",
+ "CURSE_FORGE_V2": {
+ "API_KEY_DESCRIPTION": "If you have requested a CurseForge API key you can input it here to connect to their API.",
+ "API_KEY_TITLE": "CurseForge API Key",
+ "PROVIDER_NOTE": "API Key Required"
+ },
"ENABLED_PROVIDERS": {
"DESCRIPTION": "Wybierz, którzy dostawcy mogą być używani do wyszukiwania i instalowania nowych addonów",
"FIELD_LABEL": "Włączone addony dostawców",
@@ -524,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Pozwól WowUp na skanowanie folderów z symlinkami w folderze addonów. Ostrzeżenie: zostaną one zastąpione podczas aktualizacji/instalacji."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Zrzut danych debugowania",
"DEBUG_DATA_DESCRIPTION": "Rejestruj dane debugowania, aby pomóc w diagnozowaniu potencjalnych problemów. Można je znaleźć w najnowszym pliku dziennika dla ciekawskich.",
"DEBUG_DATA_LABEL": "Dane debugowania",
diff --git a/wowup-electron/src/assets/i18n/pt.json b/wowup-electron/src/assets/i18n/pt.json
index 37d39378..5d942d64 100644
--- a/wowup-electron/src/assets/i18n/pt.json
+++ b/wowup-electron/src/assets/i18n/pt.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Permitir ao WowUp escanear pastas symlink na sua pasta de Addons. Aviso: elas serão substituidas quando atualizar/instalar."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Esvaziar log de depuração de dados",
"DEBUG_DATA_DESCRIPTION": "Registra os dados de depuração e ajuda a diagnosticar problemas potenciais. Apenas por o curiosidade, isso pode ser encontrado em seu último arquivo de registro.",
"DEBUG_DATA_LABEL": "Depurar Dados",
diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json
index 80f2ad5f..1a9b2086 100644
--- a/wowup-electron/src/assets/i18n/ru.json
+++ b/wowup-electron/src/assets/i18n/ru.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "Разрешает WowUp сканировать папки символических ссылок в папке вашей модификации. Предупреждение: они будут заменены при обновлении/установке."
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "Дамп отладочных данных",
"DEBUG_DATA_DESCRIPTION": "Записывать отладочные данные, чтобы помочь в диагностике потенциальных проблем. Его можно найти в последнем лог-файле, если необходимо.",
"DEBUG_DATA_LABEL": "Отладка данных",
diff --git a/wowup-electron/src/assets/i18n/zh-TW.json b/wowup-electron/src/assets/i18n/zh-TW.json
index a75c4b6b..e7337fdf 100644
--- a/wowup-electron/src/assets/i18n/zh-TW.json
+++ b/wowup-electron/src/assets/i18n/zh-TW.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "允許 WowUp 掃描插件所在路徑下的符號連結。警告:符號連結在安裝或更新插件時會被替換。"
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "轉儲除錯資料",
"DEBUG_DATA_DESCRIPTION": "記錄除錯資料以幫助診斷潛在的問題。除錯資料可以在最新的日誌檔案中找到。",
"DEBUG_DATA_LABEL": "除錯資料",
diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json
index 5b4669f8..133a40ab 100644
--- a/wowup-electron/src/assets/i18n/zh.json
+++ b/wowup-electron/src/assets/i18n/zh.json
@@ -531,6 +531,9 @@
"USE_SYMLINK_SUPPORT_DESCRIPTION": "允许 WowUp 扫描插件所在路径下的符号链接。警告:符号链接在安装或更新插件时会被替换。"
},
"DEBUG": {
+ "CONFIG_FILES_BUTTON": "Show Config Files",
+ "CONFIG_FILES_DESCRIPTION": "Open the folder where for example your addons.json and preferences.json are stored.",
+ "CONFIG_FILES_LABEL": "Config Files",
"DEBUG_DATA_BUTTON": "转储调试数据",
"DEBUG_DATA_DESCRIPTION": "记录调试数据以帮助诊断潜在的问题。调试数据可以在最新的日志文件中找到。",
"DEBUG_DATA_LABEL": "调试数据",
diff --git a/wowup-electron/src/common/constants.ts b/wowup-electron/src/common/constants.ts
index c6f11056..a2fa0a49 100644
--- a/wowup-electron/src/common/constants.ts
+++ b/wowup-electron/src/common/constants.ts
@@ -109,6 +109,7 @@ export const IPC_STORE_REMOVE_OBJECT = "store-remove-object";
// STORES
export const ADDON_STORE_NAME = "addons";
export const PREFERENCE_STORE_NAME = "preferences";
+export const SENSITIVE_STORE_NAME = "sensitive";
export const STORAGE_WOWUP_AUTH_TOKEN = "wowup-auth-token";
// PREFERENCES