-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathfeedbin.ll
More file actions
executable file
·77 lines (67 loc) · 2.93 KB
/
Copy pathfeedbin.ll
File metadata and controls
executable file
·77 lines (67 loc) · 2.93 KB
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
#!/usr/bin/env vrsctl
# Feedbin index and search service backed by feedbinctl.
(defn! decode_feedbin_result (result)
(if (err? result)
'()
(if (eq? (get result :exit) 0)
(let ((decoded (try (decode :json (get result :stdout)))))
(if (ok? decoded) decoded '()))
'())))
(defn! feedbin_entries (count)
"(feedbin_entries COUNT) - Return the COUNT most recent indexed Feedbin entries"
(decode_feedbin_result
(try (exec "feedbinctl" "entries" "--limit" (display count)))))
(defn! feedbin_collections ()
"(feedbin_collections) - Return indexed Feedbin feeds and saved searches"
(decode_feedbin_result (try (exec "feedbinctl" "collections"))))
(defn! feedbin_entries_from (collection count)
"(feedbin_entries_from COLLECTION COUNT) - Return entries from feed:ID or saved-search:ID"
(decode_feedbin_result
(try (exec "feedbinctl" "entries"
"--collection" collection
"--limit" (display count)))))
(defn! feedbin_search (query count)
"(feedbin_search QUERY COUNT) - Return up to COUNT indexed Feedbin entries matching QUERY"
(decode_feedbin_result
(try (exec "feedbinctl" "search" query "--limit" (display count)))))
(defn! feedbin_search_in (collection query count)
"(feedbin_search_in COLLECTION QUERY COUNT) - Search within feed:ID or saved-search:ID"
(decode_feedbin_result
(try (exec "feedbinctl" "search" query
"--collection" collection
"--limit" (display count)))))
(defn! feedbin_saved_pages (count)
"(feedbin_saved_pages COUNT) - Return up to COUNT most recently saved Feedbin Pages"
(decode_feedbin_result
(try (exec "feedbinctl" "pages" "list" "--limit" (display count)))))
(defn! feedbin_save (url title)
"(feedbin_save URL TITLE) - Save a URL to Feedbin Pages and return its entry"
(decode_feedbin_result
(try (exec "feedbinctl" "pages" "add" url "--title" title))))
# Keep indexing outside the service process so long-running network activity
# cannot delay entries or search calls. Naming the indexer ensures re-evaluating
# this script replaces the previous loop instead of leaving an orphan behind.
(def parent (self))
(def indexer
(spawn
(fn ()
(try (kill (find_srv :feedbin_indexer)))
(register :feedbin_indexer :overwrite)
(send parent `(:feedbin_indexer_ready ,(self)))
(loop
(let ((result (try (exec "feedbinctl" "index"))))
(if (err? result)
(dbg `(:feedbin_index :error ,result))
(if (eq? (get result :exit) 0)
(dbg `(:feedbin_index :ok ,(get result :stdout)))
(dbg `(:feedbin_index :error ,(get result :stderr))))))
(sleep 900)))))
(recv `(:feedbin_indexer_ready ,indexer))
(spawn_srv! :feedbin
:interface '(feedbin_collections
feedbin_entries
feedbin_entries_from
feedbin_search
feedbin_search_in
feedbin_saved_pages
feedbin_save))