Commit 1c6eb8a5c747

Vincent Demeester <vincent@sbr.pm>
2024-06-17 16:50:49
go-org-readwise: implement updates on highlights
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 9eb67e6
Changed files (2)
tools
go-org-readwise
tools/go-org-readwise/internal/org/sync.go
@@ -8,6 +8,7 @@ import (
 	"path/filepath"
 	"regexp"
 	"strings"
+	"time"
 
 	"github.com/vdemeester/home/tools/go-org-readwise/internal/readwise"
 )
@@ -48,7 +49,14 @@ func Sync(ctx context.Context, target string, results []readwise.Result) error {
 		fmt.Println("file", filename)
 		if _, err := os.Stat(filename); err == nil {
 			// Append to the file
-			return errors.New("Not implemented")
+			p := createPartialOrgDocument(result)
+			content, err := convertPartialDocument(p)
+			if err != nil {
+				return err
+			}
+			if err := os.WriteFile(filename, content, 0o644); err != nil {
+				return err
+			}
 		} else if errors.Is(err, os.ErrNotExist) {
 			// Create the file
 			d := createNewOrgDocument(result)
@@ -76,7 +84,7 @@ func createNewOrgDocument(r readwise.Result) Document {
 			filetags[i] = sluggify(t.Name)
 		}
 	}
-	d := Document{
+	return Document{
 		Title:       r.Title,
 		Author:      r.Author,
 		ReadwiseURL: r.ReadwiseURL,
@@ -89,7 +97,13 @@ func createNewOrgDocument(r readwise.Result) Document {
 		Summary:     r.Summary,
 		Highlights:  transformHighlights(r.Highlights),
 	}
-	return d
+}
+
+func createPartialOrgDocument(r readwise.Result) PartialDocument {
+	return PartialDocument{
+		Date:       time.Now().Format(orgDateFormat),
+		Highlights: transformHighlights(r.Highlights),
+	}
 }
 
 func transformHighlights(highlights []readwise.Highlight) []Highlight {
@@ -134,7 +148,7 @@ func denoteFilename(result readwise.Result) string {
 	// to use them to establish sequential relations between files
 	// (e.g. 1, 1a, 1b, 1b1, 1b2, …).
 	// We use signature to mark files synced from readwise.
-	signature = "==" + result.Category
+	signature = "==" + result.Category + "@readwise"
 
 	// The TITLE field is the title of the note, as provided by
 	// the user. It automatically gets downcased by default and is
tools/go-org-readwise/internal/org/write.go
@@ -9,7 +9,12 @@ import (
 
 var (
 	additionnalTemplate = `* New Highlights on {{ .Date }}
-{{ range .Highlights }}
+{{ range $h := .Highlights -}}
+** [{{ $h.Date }}] Highlight [[{{ $h.URL }}][{{ $h.ID }}]]{{ if $h.Tags }} {{ orgtags $h.Tags }}{{ end }}
+{{ $h.Text }}
+{{ if $h.Note }}*** Note
+{{ $h.Note }}
+{{ end -}}
 {{ end }}`
 
 	mainTemplate = `#+title: {{ .Title }}
@@ -58,3 +63,21 @@ func convertDocument(d Document) ([]byte, error) {
 	}
 	return buff.Bytes(), nil
 }
+
+func convertPartialDocument(d PartialDocument) ([]byte, error) {
+	var err error
+
+	funcMap := template.FuncMap{
+		"orgtags": orgtags,
+	}
+
+	tmpl, err := template.New("org").Funcs(funcMap).Parse(additionnalTemplate)
+	if err != nil {
+		return []byte{}, err
+	}
+	var buff bytes.Buffer
+	if err := tmpl.Execute(&buff, d); err != nil {
+		return []byte{}, err
+	}
+	return buff.Bytes(), nil
+}