initial commit
This commit is contained in:
commit
3d3e1f6fc9
1 changed files with 89 additions and 0 deletions
89
papis-marvin
Executable file
89
papis-marvin
Executable file
|
@ -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.")
|
Loading…
Reference in a new issue