feat: add basic joox support

(cherry picked from commit 699333ca06526d747a7eb4a188e896de81e9f014)
This commit is contained in:
鲁树人
2021-12-19 23:03:46 +00:00
parent 9add76c060
commit 1e7116a3a9
13 changed files with 207 additions and 16 deletions

View 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
View 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;

View 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);
}
}

View 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));
}
}

View 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 });
}
}