-
Notifications
You must be signed in to change notification settings - Fork 0
/
fzf-raindrop
executable file
·84 lines (76 loc) · 2.46 KB
/
fzf-raindrop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/env bash
set -eu
DATA_DIR="${FZF_RAINDROP_DATA_DIR:-$HOME/.local/share/fzf-raindrop}"
DATA_FILE="$DATA_DIR/latest.csv"
DATA_FILE_TEMP="$DATA_DIR/latest-temp.csv"
FZF_BOOKMARKS_HISTORY="$DATA_DIR/fzf-picker-history"
MODIFIED=$(stat -c %y "$DATA_FILE" | cut -d'.' -f1)
# Allow users to define a custom OPENER, fallback to auto-detection if not defined
OPENER=${OPENER:-$(command -v xdg-open || command -v open)}
# Download all bookmarks from Raindrop
download_bookmarks() {
echo "Pulling latest bookmarks from Raindrop"
curl 'https://api.raindrop.io/v1/raindrops/0/export.csv' \
-H "Cookie: $FZF_RAINDROP_COOKIE" \
-o "$DATA_FILE_TEMP"
mv "$DATA_FILE_TEMP" "$DATA_FILE"
echo "Saved to $DATA_FILE"
}
mkdir -p "$DATA_DIR"
# Pull latest bookmarks
set +u
IS_UPDATE=false
if [[ "$1" == "update" ]]; then
IS_UPDATE=true
fi
set -u
if [[ ! -f "$DATA_FILE" ]]; then
echo "No data file found at $DATA_FILE"
download_bookmarks
fi
if [[ "$IS_UPDATE" == true ]]; then
download_bookmarks
exit 0
fi
# Create id column if it doesn't exist
if ! head -n 1 "$DATA_FILE" | grep --quiet "id_2,"; then
echo "Adding id_2 column. Formatting tags column"
duckdb -c "
COPY (
SELECT
ROW_NUMBER() OVER () AS id_2,
* REPLACE(
CASE
WHEN tags IS NOT NULL
AND tags != '' THEN concat('#', REPLACE(tags, ', ', ', #'))
ELSE NULL
END AS tags,
regexp_replace(highlights, '\n', '', 'g') AS highlights,
regexp_replace(excerpt, '\n', '', 'g') AS excerpt
)
FROM
'$DATA_FILE'
) TO '$DATA_FILE' WITH (FORMAT CSV, HEADER)
"
fi
# Note: column alignment changes as input changes, since fzf attempts to fit the matched words on the screen.
duckdb -c "
COPY (
SELECT
printf('%05d', id_2) AS id_2,
printf('%03d', date_sub('day', created, today())) || 'd' AS 'age(days)',
rpad(COALESCE(tags, '') || ',', 75, ' ') AS tags,
left(rpad(',' || url || ',', 80, ' '), 80) AS url,
left(rpad(',' || title || ',', 100, ' '), 100) AS title,
note,
highlights,
excerpt
FROM
'$DATA_FILE'
) TO '/dev/stdout' WITH (FORMAT CSV, HEADER)
" |
# xsv table --width=2 --condense=75 |
fzf --multi --layout=reverse --header "Updated: $MODIFIED" --history="$FZF_BOOKMARKS_HISTORY" |
awk --field-separator=, '{print $1}' |
xargs -I {} duckdb -c "COPY(SELECT url FROM '$DATA_FILE' WHERE id_2 = {}) TO '/dev/stdout'" |
xargs -I {} "$OPENER" "{}"