Incipient TypeScript
This commit is contained in:
121
app/assets/javascripts/web_device_interface.ts
Normal file
121
app/assets/javascripts/web_device_interface.ts
Normal file
@@ -0,0 +1,121 @@
|
||||
import { DeviceInterface, getGlobalScope, SNApplication } from 'snjs';
|
||||
import { Database } from '@/database';
|
||||
|
||||
const KEYCHAIN_STORAGE_KEY = 'keychain';
|
||||
|
||||
export class WebDeviceInterface extends DeviceInterface {
|
||||
|
||||
private database: Database
|
||||
|
||||
constructor(namespace: string, timeout: any) {
|
||||
super(
|
||||
namespace,
|
||||
timeout || setTimeout.bind(getGlobalScope()),
|
||||
setInterval.bind(getGlobalScope())
|
||||
);
|
||||
this.database = new Database();
|
||||
}
|
||||
|
||||
setApplication(application: SNApplication) {
|
||||
this.database.setApplication(application);
|
||||
}
|
||||
|
||||
deinit() {
|
||||
super.deinit();
|
||||
this.database.deinit();
|
||||
}
|
||||
|
||||
async getRawStorageValue(key: string) {
|
||||
return localStorage.getItem(key);
|
||||
}
|
||||
|
||||
async getAllRawStorageKeyValues() {
|
||||
const results = [];
|
||||
for (const key of Object.keys(localStorage)) {
|
||||
results.push({
|
||||
key: key,
|
||||
value: localStorage[key]
|
||||
});
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
async setRawStorageValue(key: string, value: any) {
|
||||
localStorage.setItem(key, value);
|
||||
}
|
||||
|
||||
async removeRawStorageValue(key: string) {
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
|
||||
async removeAllRawStorageValues() {
|
||||
localStorage.clear();
|
||||
}
|
||||
|
||||
async openDatabase() {
|
||||
this.database.unlock();
|
||||
return new Promise((resolve, reject) => {
|
||||
this.database.openDatabase(() => {
|
||||
resolve({ isNewDatabase: true });
|
||||
}).then(() => {
|
||||
resolve({ isNewDatabase: false });
|
||||
}).catch((error => {
|
||||
reject(error);
|
||||
}));
|
||||
}) as Promise<{ isNewDatabase?: boolean } | undefined>;
|
||||
}
|
||||
|
||||
private getDatabaseKeyPrefix() {
|
||||
if (this.namespace) {
|
||||
return `${this.namespace}-item-`;
|
||||
} else {
|
||||
return `item-`;
|
||||
}
|
||||
}
|
||||
|
||||
private keyForPayloadId(id: string) {
|
||||
return `${this.getDatabaseKeyPrefix()}${id}`;
|
||||
}
|
||||
|
||||
async getAllRawDatabasePayloads() {
|
||||
return this.database.getAllPayloads();
|
||||
}
|
||||
|
||||
async saveRawDatabasePayload(payload: any) {
|
||||
return this.database.savePayload(payload);
|
||||
}
|
||||
|
||||
async saveRawDatabasePayloads(payloads: any[]) {
|
||||
return this.database.savePayloads(payloads);
|
||||
}
|
||||
|
||||
async removeRawDatabasePayloadWithId(id: string) {
|
||||
return this.database.deletePayload(id);
|
||||
}
|
||||
|
||||
async removeAllRawDatabasePayloads() {
|
||||
return this.database.clearAllPayloads();
|
||||
}
|
||||
|
||||
async getKeychainValue() {
|
||||
const value = localStorage.getItem(KEYCHAIN_STORAGE_KEY);
|
||||
if (value) {
|
||||
return JSON.parse(value);
|
||||
}
|
||||
}
|
||||
|
||||
async setKeychainValue(value: any) {
|
||||
localStorage.setItem(KEYCHAIN_STORAGE_KEY, JSON.stringify(value));
|
||||
}
|
||||
|
||||
async clearKeychainValue() {
|
||||
localStorage.removeItem(KEYCHAIN_STORAGE_KEY);
|
||||
}
|
||||
|
||||
openUrl(url: string) {
|
||||
const win = window.open(url, '_blank');
|
||||
if (win) {
|
||||
win.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user