aboutsummaryrefslogtreecommitdiff
path: root/bin/archiveit
diff options
context:
space:
mode:
Diffstat (limited to 'bin/archiveit')
-rwxr-xr-xbin/archiveit98
1 files changed, 98 insertions, 0 deletions
diff --git a/bin/archiveit b/bin/archiveit
new file mode 100755
index 0000000..da132d7
--- /dev/null
+++ b/bin/archiveit
@@ -0,0 +1,98 @@
+#!/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)"
+cp ~/.mozilla/firefox/*.default/places.sqlite "$DB"
+
+cd ~/Documents/Archive/
+
+sqlite3 "$DB" "$QUERY" | archivebox add
+archivebox update