Skip to content

Commit

Permalink
refactor: mount HttpServer and Generator under Joplin
Browse files Browse the repository at this point in the history
  • Loading branch information
chenyulu.5 committed Apr 21, 2022
1 parent a212a3b commit 5abb773
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 30 deletions.
2 changes: 0 additions & 2 deletions src/driver/db/joplinPlugin/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
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()
export class Db {
private db: Low<Record<string, unknown>> | null = null;
private ready = this.init();
Expand Down
13 changes: 7 additions & 6 deletions src/driver/generator/joplinPlugin/PageRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import _, {
} from 'lodash';
import ejs from 'ejs';
import moment from 'moment';
import { container } from 'tsyringe';
import { Feed } from 'feed';
import Ajv from 'ajv';
import { loadFront } from 'yaml-front-matter';
Expand Down Expand Up @@ -40,7 +39,6 @@ import {

ejs.fileLoader = fs.readFileSync;

const db = container.resolve(Db);
const articleValidator = new Ajv().compile<Article>(ARTICLE_SCHEMA);
const validateArticle = getValidator(articleValidator, 'Invalid article');

Expand All @@ -59,6 +57,8 @@ export class PageRenderer {
generatedPages: 0,
};

constructor(private readonly db: Db) {}

async init() {
this.progress.totalPages = 0;
this.progress.generatedPages = 0;
Expand All @@ -79,8 +79,8 @@ export class PageRenderer {
}

private async getSite() {
const site = await db.fetch<Site>(['site']);
const githubInfo = await db.fetch<Github>(['github']);
const site = await this.db.fetch<Site>(['site']);
const githubInfo = await this.db.fetch<Github>(['github']);

this.cname = githubInfo?.cname;
this.site = defaultsDeep({ ...site, generatedAt: Date.now() }, DEFAULT_SITE) as Required<Site>;
Expand All @@ -96,7 +96,7 @@ export class PageRenderer {
}

const articlePageUrl = this.getPageUrl(ARTICLE_PAGE_NAME);
const articles = (await db.fetch<Article[]>(['articles'])) || [];
const articles = (await this.db.fetch<Article[]>(['articles'])) || [];

articles.forEach(validateArticle);
this.articles = sortBy(filter(articles, { published: true }), ['createdAt'])
Expand All @@ -123,7 +123,8 @@ export class PageRenderer {
throw new Error(`fail to load theme config: ${themeName}`);
}

const pagesValues = (await db.fetch<Record<string, unknown>>(['pagesValues', themeName])) || {};
const pagesValues =
(await this.db.fetch<Record<string, unknown>>(['pagesValues', themeName])) || {};
const defaultPagesValues = mapValues(themeConfig.pages, (fields, pageName) => {
const allFields = [...(fields || []), ...(PREDEFINED_FIELDS[pageName] || [])];
return allFields.reduce((values, field) => {
Expand Down
30 changes: 19 additions & 11 deletions src/driver/generator/joplinPlugin/index.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
import { PageRenderer } from './PageRenderer';
import type { Db } from 'driver/db/joplinPlugin';

const pageRenderer = new PageRenderer();
export async function generateSite() {
try {
await pageRenderer.init();
return await pageRenderer.outputPages();
} catch (error) {
console.warn(error);
throw error;
export class Generator {
private readonly pageRenderer: PageRenderer;

constructor(db: Db) {
this.pageRenderer = new PageRenderer(db);
}
}

export function getProgress() {
return pageRenderer.progress;
async generateSite() {
try {
await this.pageRenderer.init();
return await this.pageRenderer.outputPages();
} catch (error) {
console.warn(error);
throw error;
}
}

getProgress() {
return this.pageRenderer.progress;
}
}
8 changes: 6 additions & 2 deletions src/driver/joplin/joplinPlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ import joplinApi from 'api';
import { SettingItemType, ViewHandle } from 'api/types';
import type JoplinViewsPanels from 'api/JoplinViewsPanels';
import type JoplinViewsDialogs from 'api/JoplinViewsDialogs';
import { container } from 'tsyringe';
import { isNumber } from 'lodash';

import type { JoplinGetParams } from 'domain/service/AppService';
import { Db } from 'driver/db/joplinPlugin';
import { HttpServer } from 'driver/server/joplinPlugin';
import webviewBridge from 'driver/webview/webviewBridge';
import { Generator } from 'driver/generator/joplinPlugin';

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

fetchData(...args: JoplinGetParams) {
return fetchData(...args);
}
Expand Down
14 changes: 5 additions & 9 deletions src/driver/webview/webviewBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,14 @@ import type { GitRequest } from 'driver/git/webviewApi';
import type { FsRequest } from 'driver/fs/webviewApi';
import type { GeneratorRequest } from 'driver/generator/webviewApi';
import type { ThemeConfigRequest } from 'driver/themeLoader/webviewApi';
import type { ServerRequest } from 'driver/server/webviewApi';

import { loadTheme, loadThemes } from 'driver/themeLoader/joplinPlugin';
import { generateSite, getProgress } from 'driver/generator/joplinPlugin';
import { getOutputDir, getGitRepositoryDir } from 'driver/generator/joplinPlugin/pathHelper';
import { mockNodeFsCall } from 'driver/fs/joplinPlugin';
import type { ServerRequest } from 'driver/server/webviewApi';
import { HttpServer } from 'driver/server/joplinPlugin';
import type Joplin from 'driver/joplin/joplinPlugin';

export default (joplin: Joplin) => {
const httpServer = new HttpServer();

return (
request:
| DbRequest
Expand Down Expand Up @@ -56,9 +52,9 @@ export default (joplin: Joplin) => {
case 'setAsOldUser':
return joplin.setAsOldUser();
case 'generateSite':
return generateSite();
return joplin.generator.generateSite();
case 'getGeneratingProgress':
return getProgress();
return joplin.generator.getProgress();
case 'openNote':
return joplin.openNote(request.payload);
case 'getOutputDir':
Expand All @@ -70,9 +66,9 @@ export default (joplin: Joplin) => {
case 'getJoplinPluginSetting':
return joplin.getSettingOf(request.key);
case 'startServer':
return httpServer.start();
return joplin.httpServer.start();
case 'closeServer':
return httpServer.close();
return joplin.httpServer.close();
default:
throw new Error(`unknown bridge request: ${request}`);
}
Expand Down

0 comments on commit 5abb773

Please sign in to comment.