Skip to content

Commit

Permalink
使用Resource来将Json结构持久化
Browse files Browse the repository at this point in the history
  • Loading branch information
xeden3 committed Sep 2, 2022
1 parent fb441e3 commit 701022a
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 33 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "joplin-plugin-kity-minder",
"version": "1.0.2",
"version": "1.0.3",
"scripts": {
"dist": "webpack --joplin-plugin-config buildMain && webpack --joplin-plugin-config buildExtraScripts && webpack --joplin-plugin-config createArchive",
"prepare": "npm run dist",
Expand Down
10 changes: 5 additions & 5 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ joplin.plugins.register({
case 'edit':
let diagramResource = await getDiagramResource(request.diagramId);
let data_json = diagramResource.data_json;
await open_edit_dlg(data_json, request.diagramId, diagramResource.options, "edit");
await open_edit_dlg(data_json, request.diagramId, "edit");
return
case 'check':
return { isValid: await isDiagramResource(request.diagramId) }
Expand All @@ -57,7 +57,7 @@ joplin.plugins.register({
}
})

async function open_edit_dlg(data_json:string, diagramId:string, options:object, type:string="addnew"){
async function open_edit_dlg(data_json:string, diagramId:string, type:string="addnew"){
let dialogs = joplin.views.dialogs;
let handle_dlg = await dialogs.create(`myDialog2-${uuidv4()}`);

Expand All @@ -77,12 +77,12 @@ joplin.plugins.register({
console.log(dialogResult.formData.main.mindmap_diagram_json);
console.log(dialogResult.formData.main.mindmap_diagram_png);
if(type==="addnew"){
let diagramId_new = await createDiagramResource(dialogResult.formData.main.mindmap_diagram_png, { sketch: false }, dialogResult.formData.main.mindmap_diagram_json)
let diagramId_new = await createDiagramResource(dialogResult.formData.main.mindmap_diagram_png, dialogResult.formData.main.mindmap_diagram_json)
await joplin.commands.execute('insertText', diagramMarkdown(diagramId_new))
let diagramResource = await getDiagramResource(diagramId_new)
console.log(diagramResource.body);
}else{
let newDiagramId = await updateDiagramResource(diagramId, dialogResult.formData.main.mindmap_diagram_png, options, dialogResult.formData.main.mindmap_diagram_json)
let newDiagramId = await updateDiagramResource(diagramId, dialogResult.formData.main.mindmap_diagram_png, dialogResult.formData.main.mindmap_diagram_json)
let note = await joplin.workspace.selectedNote();
if (note) {
let newBody = (note.body as string).replace(new RegExp(`!\\[mindmap\\]\\(:\\/${diagramId}\\)`, 'gi'), diagramMarkdown(newDiagramId))
Expand All @@ -99,7 +99,7 @@ joplin.plugins.register({
label: '新增思维导图',
iconName: 'fas fa-brain',
execute: async () => {
await open_edit_dlg('{"root":{"data":{"id":"cmhllt94xb40","created":1661683403686,"text":"主题"},"children":[]},"template":"default","theme":"fresh-blue","version":"1.4.33"}', null, null);
await open_edit_dlg('{"root":{"data":{"id":"cmhllt94xb40","created":1661683403686,"text":"主题"},"children":[]},"template":"default","theme":"fresh-blue","version":"1.4.33"}', null);
},
});
await joplin.views.toolbarButtons.create('addnewMindmap', 'addnewMindmap', ToolbarButtonLocation.NoteToolbar);
Expand Down
2 changes: 1 addition & 1 deletion src/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"manifest_version": 1,
"id": "com.sctmes.kity-minder",
"app_min_version": "2.8",
"version": "1.0.2",
"version": "1.0.3",
"name": "Kity Minder",
"description": "Kity Minder Mindmap Tools 思维导图(脑图插件) ",
"author": "James Chan",
Expand Down
54 changes: 28 additions & 26 deletions src/resources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ function generateId() {
return uuidv4().replace(/-/g, '')
}

function buildTitle(options: any): string {
return Config.TitlePrefix + JSON.stringify(options)
function buildTitle(json_resource_id: string): string {
return Config.TitlePrefix + json_resource_id
}
function parseTitle(title: string): any {
return JSON.parse(title.replace(Config.TitlePrefix, ''))
return title.replace(Config.TitlePrefix, '')
}

export function clearDiskCache(): void {
Expand Down Expand Up @@ -58,51 +58,53 @@ async function readJsonFile(name: string): Promise<string> {
return data
}

export async function getDiagramResource(diagramId: string): Promise<{ body: string, options: IDiagramOptions, data_json:string }> {
export async function getDiagramResource(diagramId: string): Promise<{ body: string, data_json:string }> {
let resourceProperties = await joplin.data.get(['resources', diagramId])
let resourceData = await joplin.data.get(['resources', diagramId, 'file'])
let resourceData_json = await readJsonFile(diagramId)
// let resourceData_json = await joplin.data.get(['notes', diagramId], { fields: ['id', 'title', 'body'] })

console.log('getDiagramResource', resourceProperties, resourceData)

if (!resourceData.contentType.startsWith('image')) {
throw new Error('Invalid resource content type. The resource must be an image')
}

let options: IDiagramOptions = {}
let data_json = ""
let json_resource_id: string = ""
try {
options = parseTitle(resourceProperties.title)
json_resource_id = parseTitle(resourceProperties.title)
} catch (e) {
console.warn('getDiagramResource - Option parsing failed:', e)
console.warn('getDiagramResource - json resource ID parsing failed:', e)
}

let resourceData_json = await joplin.data.get(['resources', json_resource_id, 'file'])
let data_json = new TextDecoder().decode(resourceData_json.body);
console.log('getDiagramResource', resourceProperties, resourceData)
if (!resourceData.contentType.startsWith('image')) {
throw new Error('Invalid resource content type. The resource must be an image')
}
console.log('getDiagramResource diagramId', diagramId);
console.log('getDiagramResource json', resourceData_json);
console.log('getDiagramResource json', data_json);
return {
body: `data:${resourceData.contentType};base64,${Buffer.from(resourceData.body).toString('base64')}`,
options: options,
data_json: resourceData_json
data_json: data_json
}
}

export async function createDiagramResource(data: string, options: IDiagramOptions, data_json:string): Promise<string> {
export async function createDiagramResource(data: string, data_json:string): Promise<string> {
let diagramId = generateId()
let json_resource_id = generateId()

let filePath = await writeTempFile(diagramId, data)
let filePath_json = await writeJsonFile(diagramId, data_json)
let createdResource = await joplin.data.post(['resources'], null, { id: diagramId, title: buildTitle(options) }, [{ path: filePath }])
// let createdResource_json = await joplin.data.post(['notes'], null, { id: diagramId, body: data_json })
let filePath_json = await writeJsonFile(json_resource_id, data_json)
let createdResource = await joplin.data.post(['resources'], null, { id: diagramId, title: buildTitle(json_resource_id) }, [{ path: filePath }])
let createdResource_json = await joplin.data.post(['resources'], null, { id: json_resource_id, title: "mindmap-data-json"}, [{path: filePath_json}])

console.log('createResource diagramId', diagramId);
console.log('createResource json', data_json);
return diagramId
}

export async function updateDiagramResource(diagramId: string, data: string, options: IDiagramOptions, data_json:string ): Promise<string> {
export async function updateDiagramResource(diagramId: string, data: string, data_json:string ): Promise<string> {
let newDiagramId = generateId()
let new_json_resource_id = generateId()

let filePath = await writeTempFile(newDiagramId, data)
let filePath_json = await writeJsonFile(newDiagramId, data_json)
let createdResource = await joplin.data.post(['resources'], null, { id: newDiagramId, title: buildTitle(options) }, [{ path: filePath }])
let filePath_json = await writeJsonFile(new_json_resource_id, data_json)
let createdResource = await joplin.data.post(['resources'], null, { id: newDiagramId, title: buildTitle(new_json_resource_id) }, [{ path: filePath }])
let createdResource_json = await joplin.data.post(['resources'], null, { id: new_json_resource_id, title: "mindmap-data-json"}, [{path: filePath_json}])
// let createdResource_json = await joplin.data.post(['notes'], null, { id: newDiagramId, body: data_json })
// I will not delete the previous resource just in case it has been copied in another note
// await joplin.data.delete(['resources', diagramId])
Expand Down

0 comments on commit 701022a

Please sign in to comment.