#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: archiveit archiveit -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message Grab all bookmarks from Firefox that contains tags and archive them with ArchiveBox. Examples: Just run it: $ archiveit EOF } for flag in "$@"; do case "$flag" in (--) break ;; (--help) usage help exit ;; (*) ;; esac done while getopts 'h' flag; do case "$flag" in (h) usage help exit ;; (*) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) # Derived from ArchiveBox: # https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 QUERY="$( cat <<-'EOF' SELECT json_object('timestamp', dateAdded, 'description', title, 'href', url) FROM ( SELECT b.dateAdded, b.title, p.url FROM moz_bookmarks AS b JOIN moz_places AS p ON b.fk = p.id WHERE b.fk IN ( SELECT DISTINCT(fk) FROM moz_bookmarks WHERE parent IN ( -- get all tags SELECT id FROM moz_bookmarks WHERE parent = 4 ) ) AND b.title IS NOT NULL ORDER BY b.dateAdded ASC, b.title ASC, p.url ) EOF )" # Copy the database because it is locked. DB="$(mkstemp)" trap 'rm -f "$DB"' EXIT cp ~/.mozilla/firefox/*.default/places.sqlite "$DB" cd ~/Documents/Archive/ sqlite3 "$DB" "$QUERY" | archivebox add archivebox update