Skip to content

Commit

Permalink
refactor: use webview api to fetch/save icon
Browse files Browse the repository at this point in the history
  • Loading branch information
chenyulu.5 committed Apr 21, 2022
1 parent 639947c commit 57484cd
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 32 deletions.
24 changes: 23 additions & 1 deletion src/driver/db/joplinPlugin/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import joplin from 'api';
import { cloneDeep, get, set } from 'lodash';
import joplin from 'api';
import { Low } from 'lowdb/lib';
import { singleton } from 'tsyringe';
import fs from 'driver/fs/joplinPlugin';
import { JSONFile } from './adaptor';

@singleton()
Expand Down Expand Up @@ -41,4 +42,25 @@ export class Db {
return this.db!.write();
});
}

async fetchIcon() {
const dataDir = await joplin.plugins.dataDir();
const iconDir = `${dataDir}/favicon.ico`;
try {
return (await fs.promises.readFile(iconDir)) as unknown as Uint8Array;
} catch {
return null;
}
}

async saveIcon(icon: Uint8Array | null | undefined) {
const dataDir = await joplin.plugins.dataDir();
const iconPath = `${dataDir}/favicon.ico`;

if (!icon) {
return await fs.remove(iconPath);
}

return await fs.writeFile(iconPath, icon);
}
}
38 changes: 18 additions & 20 deletions src/driver/db/webviewApi.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,31 @@
import { container } from 'tsyringe';
import { pluginDataDbToken, PluginDataDb } from 'domain/repository/PluginDataRepository';
import fs from 'driver/fs/webviewApi';
import joplin from 'driver/joplin/webviewApi';

export interface DbReadRequest {
interface DbReadRequest {
event: 'dbFetch';
args: Parameters<PluginDataDb['fetch']>;
}

export interface DbWriteRequest {
interface DbWriteRequest {
event: 'dbSave';
args: Parameters<PluginDataDb['save']>;
}

interface FetchIconRequest {
event: 'fetchIcon';
}

interface SaveIconRequest {
event: 'saveIcon';
payload: {
icon: Uint8Array | undefined | null;
};
}

export type DbRequest = DbReadRequest | DbWriteRequest | FetchIconRequest | SaveIconRequest;

declare const webviewApi: {
postMessage: <T>(payload: DbReadRequest | DbWriteRequest) => Promise<T>;
postMessage: <T>(payload: DbRequest) => Promise<T>;
};

container.registerInstance(pluginDataDbToken, {
Expand All @@ -26,23 +37,10 @@ container.registerInstance(pluginDataDbToken, {
},

async fetchIcon() {
const dataDir = await joplin.getDataDir();
const iconDir = `${dataDir}/favicon.ico`;
try {
return (await fs.promises.readFile(iconDir)) as unknown as Uint8Array;
} catch {
return null;
}
return webviewApi.postMessage({ event: 'fetchIcon' });
},

async saveIcon(icon: Uint8Array | null | undefined) {
const dataDir = await joplin.getDataDir();
const iconPath = `${dataDir}/favicon.ico`;

if (!icon) {
return await fs.promises.remove(iconPath);
}

return await fs.promises.writeFile(iconPath, icon);
return webviewApi.postMessage({ event: 'saveIcon', payload: { icon } });
},
});
5 changes: 2 additions & 3 deletions src/driver/joplin/joplinPlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import { Db } from 'driver/db/joplinPlugin';
import webviewBridge from 'driver/webview/webviewBridge';

const OPEN_PAGES_PUBLISHER_COMMAND = 'openPagesPublisher';
const db = container.resolve(Db);
enum UIType {
Dialog,
Panel,
Expand Down Expand Up @@ -54,7 +53,7 @@ export async function fetchAllData<T>(...[path, query]: JoplinGetParams) {
export default class Joplin {
private windowHandler?: ViewHandle;
private uiType?: UIType;

readonly db = container.resolve(Db);
fetchData(...args: JoplinGetParams) {
return fetchData(...args);
}
Expand Down Expand Up @@ -131,7 +130,7 @@ export default class Joplin {
await this.ui.addScript(this.windowHandler, './driver/webview/index.js');
}

await db.init(true);
await this.db.init(true);

if (this.isUsingPanel()) {
await this.ui.show(this.windowHandler);
Expand Down
16 changes: 8 additions & 8 deletions src/driver/webview/webviewBridge.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { container } from 'tsyringe';
import { Db } from 'driver/db/joplinPlugin';
import type { DbReadRequest, DbWriteRequest } from 'driver/db/webviewApi';
import type { DbRequest } from 'driver/db/webviewApi';
import type {
JoplinAction,
JoplinDataRequest,
Expand All @@ -23,13 +21,11 @@ import { HttpServer } from 'driver/server/joplinPlugin';
import type Joplin from 'driver/joplin/joplinPlugin';

export default (joplin: Joplin) => {
const db = container.resolve(Db);
const httpServer = new HttpServer();

return (
request:
| DbReadRequest
| DbWriteRequest
| DbRequest
| JoplinDataRequest
| JoplinPluginSettingRequest
| ThemeConfigLoadRequest
Expand All @@ -42,9 +38,13 @@ export default (joplin: Joplin) => {
) => {
switch (request.event) {
case 'dbFetch':
return db.fetch(...request.args);
return joplin.db.fetch(...request.args);
case 'dbSave':
return db.save(...request.args);
return joplin.db.save(...request.args);
case 'fetchIcon':
return joplin.db.fetchIcon();
case 'saveIcon':
return joplin.db.saveIcon(request.payload.icon);
case 'getJoplinData':
return joplin.fetchData(...request.args);
case 'getJoplinDataAll':
Expand Down

0 comments on commit 57484cd

Please sign in to comment.