mirror of
https://git.unlock-music.dev/um/web.git
synced 2025-11-05 13:31:24 +00:00
feat: add basic joox support
(cherry picked from commit 699333ca06526d747a7eb4a188e896de81e9f014)
This commit is contained in:
14
src/utils/storage/BaseStorage.ts
Normal file
14
src/utils/storage/BaseStorage.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
const KEY_JOOX_UUID = 'joox.uuid';
|
||||
|
||||
export default abstract class BaseStorage {
|
||||
protected abstract save<T>(name: string, value: T): Promise<void>;
|
||||
protected abstract load<T>(name: string, defaultValue: T): Promise<T>;
|
||||
|
||||
public saveJooxUUID(uuid: string): Promise<void> {
|
||||
return this.save(KEY_JOOX_UUID, uuid);
|
||||
}
|
||||
|
||||
public loadJooxUUID(defaultValue: string = ''): Promise<string> {
|
||||
return this.load(KEY_JOOX_UUID, defaultValue);
|
||||
}
|
||||
}
|
||||
15
src/utils/storage/BrowserNativeStorage.ts
Normal file
15
src/utils/storage/BrowserNativeStorage.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import BaseStorage from './BaseStorage';
|
||||
|
||||
export default class BrowserNativeStorage extends BaseStorage {
|
||||
protected async load<T>(name: string, defaultValue: T): Promise<T> {
|
||||
const result = localStorage.getItem(name);
|
||||
if (result === null) {
|
||||
return defaultValue;
|
||||
}
|
||||
return JSON.parse(result);
|
||||
}
|
||||
|
||||
protected async save<T>(name: string, value: T): Promise<void> {
|
||||
localStorage.setItem(name, JSON.stringify(value));
|
||||
}
|
||||
}
|
||||
21
src/utils/storage/ChromeExtensionStorage.ts
Normal file
21
src/utils/storage/ChromeExtensionStorage.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import BaseStorage from './BaseStorage';
|
||||
|
||||
declare var chrome: any;
|
||||
|
||||
export default class ChromeExtensionStorage extends BaseStorage {
|
||||
static get works(): boolean {
|
||||
return Boolean(chrome?.storage?.local?.set);
|
||||
}
|
||||
|
||||
protected async load<T>(name: string, defaultValue: T): Promise<T> {
|
||||
const result = await chrome.storage.local.get({ [name]: defaultValue });
|
||||
if (Object.prototype.hasOwnProperty.call(result, name)) {
|
||||
return result[name];
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
protected async save<T>(name: string, value: T): Promise<void> {
|
||||
return chrome.storage.local.set({ [name]: value });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user