mirror of
https://git.unlock-music.dev/um/web.git
synced 2025-11-05 11:31:24 +00:00
feat: add basic joox support
(cherry picked from commit 699333ca06526d747a7eb4a188e896de81e9f014)
This commit is contained in:
15
src/utils/MergeUint8Array.ts
Normal file
15
src/utils/MergeUint8Array.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
export function MergeUint8Array(array: Uint8Array[]): Uint8Array {
|
||||
let length = 0;
|
||||
array.forEach((item) => {
|
||||
length += item.length;
|
||||
});
|
||||
|
||||
let mergedArray = new Uint8Array(length);
|
||||
let offset = 0;
|
||||
array.forEach((item) => {
|
||||
mergedArray.set(item, offset);
|
||||
offset += item.length;
|
||||
});
|
||||
|
||||
return mergedArray;
|
||||
}
|
||||
7
src/utils/storage.ts
Normal file
7
src/utils/storage.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import BaseStorage from './storage/BaseStorage';
|
||||
import BrowserNativeStorage from './storage/BrowserNativeStorage';
|
||||
import ChromeExtensionStorage from './storage/ChromeExtensionStorage';
|
||||
|
||||
const storage: BaseStorage = ChromeExtensionStorage.works ? new ChromeExtensionStorage() : new BrowserNativeStorage();
|
||||
|
||||
export default storage;
|
||||
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