commit 3d3e1f6fc9a86efa61b0c51e0018bdfd355c28cf Author: Marty Oehme Date: Tue Feb 21 08:56:41 2023 +0100 initial commit diff --git a/papis-marvin b/papis-marvin new file mode 100755 index 0000000..4b20077 --- /dev/null +++ b/papis-marvin @@ -0,0 +1,89 @@ +#!/usr/bin/env python +# papis-short-help: Import iOS Marvin exported csv annotations +# +# This script can be used to import your highlights and notes from +# the iOS application 'Marvin Reader'. In the app, export your +# annotations as 'csv' format and then point the script to the +# resulting file. +import sys +import csv +import papis.api +import papis.commands.list +import papis.database +import re +import subprocess + +# use argument passed to command as file or default file here +fpath = ( + sys.argv[1] + if len(sys.argv) > 1 + else "/home/marty/Nextcloud/Personal/Backups/Journal.csv" +) +db = papis.database.get() + +notes = {} +with open(fpath) as f: + csv = csv.DictReader(f) + + title_strip_pattern = re.compile(r"([^\s\w]|_)+") + old_title = "" + highlights = [] + note_file = "" + for row in csv: + title_stripped = title_strip_pattern.sub("", row["Title"]) + + # switch to next book + if old_title != row["Title"]: + old_title = row["Title"] + + documents = db.query(f"author:({row['Author']}) title:({title_stripped})") + if not documents: + print( + f"No papis entry found for Marvin entry - {row['Author']}: {row['Title']}.\nPlease manually create." + ) + continue + note_file = papis.commands.list.run(notes=True, documents=documents) + if not note_file: + print(f"Found reference entry but no note file for - {row['Author']}: {row['Title']}.") + if ( + input( + f"Create note file now? [y/N] " + ) + == "y" + ): + output = subprocess.run( + ["papis", "edit", "-n"], capture_output=True, shell=True + ) + print(output) + # print("NOT IMPLEMENTED: Please create note file manually.") + continue + else: + continue + note_file = str(note_file[0]) + + text = f"> {row['HighlightText']}" + if row["EntryText"]: + if text: + text += "\n" + else: + text = "> " + text += f"{row['EntryText']}" + + if note_file and text: + if not note_file in notes.keys(): + notes[note_file] = [] + notes[note_file].append(text) + + +# write to notes +for f, entries in notes.items(): + if f: + with open(f, "a") as note: + print(f"Editing {f}...") + num_added = 0 + for entry in entries: + with open(f) as noteread: + if entry not in noteread.read(): + note.write(f"{entry}\n\n") + num_added += 1 + print(f"Added {num_added} entries to it.")