From a4597f9a63f83f879ed3cd3f4ffe6f57ad034fe7 Mon Sep 17 00:00:00 2001 From: Lena Brueder Date: Sun, 29 Jan 2023 09:36:00 +0100 Subject: [PATCH] moved to using a yaml lib instead of manually mangling the yaml --- package-lock.json | 4 +-- package.json | 3 +- src/apiclient.ts | 3 ++ src/import.ts | 54 ++++++++++++++++++----------- test-vault/.obsidian/workspace.json | 30 ++++++++++------ 5 files changed, 59 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a525b6..a210b42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "epub-cfi-resolver": "^1.0.1" + "epub-cfi-resolver": "^1.0.1", + "yaml": "^2.2.1" }, "devDependencies": { "@types/node": "^16.11.6", @@ -5030,7 +5031,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", - "dev": true, "engines": { "node": ">= 14" } diff --git a/package.json b/package.json index 40435ac..f820b03 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "typescript": "4.7.4" }, "dependencies": { - "epub-cfi-resolver": "^1.0.1" + "epub-cfi-resolver": "^1.0.1", + "yaml": "^2.2.1" } } diff --git a/src/apiclient.ts b/src/apiclient.ts index e6ea7f7..8dee1dd 100644 --- a/src/apiclient.ts +++ b/src/apiclient.ts @@ -19,6 +19,9 @@ export interface PocketbookCloudBook { fast_hash: string; path: string; link: string; + created_at: Date; + read_status: string; + collections: string; metadata: PocketbookCloudBookMetadata; } export interface PocketbookCloudNoteInfo { diff --git a/src/import.ts b/src/import.ts index a55a5af..d22f94c 100644 --- a/src/import.ts +++ b/src/import.ts @@ -1,6 +1,7 @@ import { App, Notice, TFile } from 'obsidian'; import { PocketbookCloudApiClient, PocketbookCloudLoginClient } from './apiclient'; import { PocketbookCloudHighlightsImporterPluginSettings } from './settings'; +import { parse, stringify } from 'yaml'; var CFI = require('epub-cfi-resolver'); @@ -34,17 +35,23 @@ export class PocketbookCloudHighlightsImporter { //await this.writeFileBinary(cover_filename, await this.api_client.getBookCover(book)); // write metadata file, which should be used to get all highlights together + const book_yaml_frontmatter = { + title: book.title, + authors: book.metadata.authors, + isbn: book.metadata.isbn, + year: book.metadata.year, + id: book.id, + fast_hash: book.fast_hash, + collections: book.collections, + uploaded_at: book.created_at, + read_status: book.read_status, + type: 'book', + plugin: 'pocketbook-cloud-highlights-importer', + }; await this.writeFile( metadata_filename, `--- -title: ${book.title} -authors: ${book.metadata.authors} -isbn: ${book.metadata.isbn} -year: ${book.metadata.year} -id: ${book.id} -fast_hash: ${book.fast_hash} -type: book -plugin: pocketbook-cloud-highlights-importer +${stringify(book_yaml_frontmatter)} --- \`\`\`dataview @@ -55,6 +62,7 @@ SORT sort_order ` ); + //TODO: only create the CFI object once m) try { // if sorting works, fine. if not, also fine, using date then. highlights.sort((a, b) => CFI.compare(this.cfi(a.quotation.begin), this.cfi(b.quotation.begin))); @@ -66,20 +74,24 @@ SORT sort_order for (const highlight of highlights) { i++; const file_name = `${folder}/highlights/${highlight.uuid}.md`; + const highlight_yaml_frontmatter = { + id: highlight.uuid, + book_id: book.id, + book_fast_hash: book.fast_hash, + color: highlight.color?.value ?? 'unknown', + note: highlight.note?.text ?? '', + text: highlight.quotation?.text ?? '', + pointer: { + begin: highlight.quotation?.begin ?? '', + end: highlight.quotation?.end ?? '', + }, + updated: highlight.quotation.updated, + type: 'highlight', + plugin: 'pocketbook-cloud-highlights-importer', + sort_order: i, + }; const content = `--- -id: ${highlight.uuid} -book_id: ${book.id} -book_fast_hash: ${book.fast_hash} -color: ${highlight.color?.value ?? 'unknown'} -note: ${highlight.note?.text ?? ''} -text: ${highlight.quotation?.text ?? ''} -pointer: - begin: ${highlight.quotation?.begin ?? ''} - end: ${highlight.quotation?.end ?? ''} -updated: ${highlight.quotation.updated} -type: highlight -plugin: pocketbook-cloud-highlights-importer -sort_order: ${i} +${stringify(highlight_yaml_frontmatter)} --- ${highlight.quotation?.text ?? ''} diff --git a/test-vault/.obsidian/workspace.json b/test-vault/.obsidian/workspace.json index a04368f..c552772 100644 --- a/test-vault/.obsidian/workspace.json +++ b/test-vault/.obsidian/workspace.json @@ -11,8 +11,12 @@ "id": "5a8f7af4213cc25f", "type": "leaf", "state": { - "type": "empty", - "state": {} + "type": "markdown", + "state": { + "file": "Highlights/From Conflict to Community/highlights/45cdb958-6059-48df-a76f-376046d03fe5.md", + "mode": "source", + "source": false + } } } ] @@ -81,6 +85,7 @@ "state": { "type": "backlink", "state": { + "file": "Highlights/From Conflict to Community/highlights/45cdb958-6059-48df-a76f-376046d03fe5.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -97,6 +102,7 @@ "state": { "type": "outgoing-link", "state": { + "file": "Highlights/From Conflict to Community/highlights/45cdb958-6059-48df-a76f-376046d03fe5.md", "linksCollapsed": false, "unlinkedCollapsed": true } @@ -118,7 +124,9 @@ "type": "leaf", "state": { "type": "outline", - "state": {} + "state": { + "file": "Highlights/From Conflict to Community/highlights/45cdb958-6059-48df-a76f-376046d03fe5.md" + } } } ] @@ -138,17 +146,17 @@ "command-palette:Open command palette": false } }, - "active": "d252e907b82daee6", + "active": "5a8f7af4213cc25f", "lastOpenFiles": [ + "Highlights/From Conflict to Community/highlights/4213c9e0-2f8d-46e0-8ae0-e2fdb45cd590.md", + "Highlights/From Conflict to Community/highlights/218a7270-d3da-4eeb-ab10-019a80f46f8f.md", + "Highlights/From Conflict to Community/highlights/45cdb958-6059-48df-a76f-376046d03fe5.md", + "Highlights/Datenintensive Anwendungen designen/metadata.md", + "Highlights/From Conflict to Community/metadata.md", "Pocketbook Cloud Highlights API.md", + "Testnote.md", "Highlights/Reinventing Organizations A Guide to Creating Organizations Inspired by the Next Stage of Human Consciousness/metadata.md", "Highlights/No Rules Rules/metadata.md", - "Highlights/Good StrategyBad Strategy/metadata.md", - "Highlights/Getting Things Done The Art of Stress-free Productivity/metadata.md", - "Highlights/Escaping the Build Trap/metadata.md", - "Highlights/Befriend Your Brain/metadata.md", - "Highlights/Escaping the Build Trap/highlights/6C527597-BECA-5EE3-9F72-ACFBBBCA7FE2.md", - "Highlights/Befriend Your Brain/highlights/FA4CBDE2-C8C7-5700-B4BA-4BBB1E7557D2.md", - "Highlights/Befriend Your Brain/highlights/C7A84480-2246-5AF0-B6AA-2218FD312B38.md" + "Highlights/Good StrategyBad Strategy/metadata.md" ] } \ No newline at end of file