2021-03-18 01:56:24 +01:00
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
from bebop.fs import get_user_data_path
|
|
|
|
|
|
|
|
|
|
|
|
TEMPLATE = """\
|
|
|
|
# Bookmarks
|
|
|
|
|
|
|
|
Welcome to your bookmark page! This file has been created in "{original_path}" \
|
|
|
|
and you can edit it as you wish. New bookmarks will be added on a new \
|
2021-03-28 18:57:23 +02:00
|
|
|
line at the end, so always keep an empty line there!
|
2021-03-18 01:56:24 +01:00
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
def get_bookmarks_path() -> Path:
|
|
|
|
"""Return the path to the bookmarks file."""
|
|
|
|
return get_user_data_path() / "bookmarks.gmi"
|
|
|
|
|
|
|
|
|
|
|
|
def init_bookmarks(filepath):
|
|
|
|
"""Create the bookmarks file and return its initial content.
|
|
|
|
|
|
|
|
Raises OSError if the file could not be written.
|
|
|
|
"""
|
|
|
|
content = TEMPLATE.format(original_path=filepath)
|
|
|
|
with open(filepath, "wt") as bookmark_file:
|
|
|
|
bookmark_file.write(content)
|
|
|
|
return content
|
|
|
|
|
|
|
|
|
|
|
|
def get_bookmarks_document():
|
|
|
|
"""Return the bookmarks content, or None or failure.
|
|
|
|
|
|
|
|
If no bookmarks file exist yet, it is created. If accessing or creating the
|
|
|
|
file fails, or if it is unreadable, return None.
|
|
|
|
"""
|
|
|
|
filepath = get_bookmarks_path()
|
|
|
|
try:
|
|
|
|
if not filepath.exists():
|
|
|
|
content = init_bookmarks(filepath)
|
|
|
|
else:
|
|
|
|
with open(filepath, "rt") as bookmark_file:
|
|
|
|
content = bookmark_file.read()
|
|
|
|
except OSError:
|
|
|
|
return None
|
|
|
|
return content
|
|
|
|
|
|
|
|
|
|
|
|
def save_bookmark(url, title):
|
|
|
|
"""Append this URL/title pair to the bookmarks, return True on success."""
|
|
|
|
filepath = get_bookmarks_path()
|
|
|
|
try:
|
|
|
|
if not filepath.exists():
|
|
|
|
init_bookmarks(filepath)
|
|
|
|
with open(filepath, "at") as bookmark_file:
|
|
|
|
bookmark_file.write(f"=> {url} {title}\n")
|
|
|
|
except OSError:
|
|
|
|
return False
|
|
|
|
return True
|