aboutsummaryrefslogtreecommitdiff
path: root/lib/app.js
diff options
context:
space:
mode:
authorcel <cel@f/6sQ6d2CMxRUhLpspgGIulDxDCwYD7DzFzPNr7u5AU=.ed25519>2017-04-27 11:18:19 -1000
committercel <cel@f/6sQ6d2CMxRUhLpspgGIulDxDCwYD7DzFzPNr7u5AU=.ed25519>2017-04-27 19:38:47 -1000
commit93db24ff8b6685f236e3f13031fb23602a4ada46 (patch)
tree70393b7ed21033d86ff4f9edb471e798f61a7d5c /lib/app.js
parent0373df4b547ca9bc2d07dab0c4d7720ee4cce69e (diff)
downloadpatchfoo-93db24ff8b6685f236e3f13031fb23602a4ada46.tar.gz
patchfoo-93db24ff8b6685f236e3f13031fb23602a4ada46.zip
Add advanced search
Diffstat (limited to 'lib/app.js')
-rw-r--r--lib/app.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/app.js b/lib/app.js
index b64ec2a..6653c1d 100644
--- a/lib/app.js
+++ b/lib/app.js
@@ -99,6 +99,49 @@ App.prototype.search = function (opts) {
return search(opts)
}
+App.prototype.advancedSearch = function (opts) {
+ return pull(
+ opts.dest ?
+ this.sbot.links({
+ values: true,
+ dest: opts.dest,
+ source: opts.source || undefined,
+ reverse: true,
+ })
+ : opts.source ?
+ this.sbot.createUserStream({
+ reverse: true,
+ id: opts.source
+ })
+ :
+ this.sbot.createFeedStream({
+ reverse: true,
+ }),
+ opts.text && pull.filter(filterByText(opts.text))
+ )
+}
+
+function forSome(each) {
+ return function some(obj) {
+ if (obj == null) return false
+ if (typeof obj === 'string') return each(obj)
+ if (Array.isArray(obj)) return obj.some(some)
+ if (typeof obj === 'object')
+ for (var k in obj) if (some(obj[k])) return true
+ return false
+ }
+}
+
+function filterByText(str) {
+ if (!str) return function () { return true }
+ var search = new RegExp(str, 'i')
+ var matches = forSome(search.test.bind(search))
+ return function (msg) {
+ var c = msg.value.content
+ return c && matches(c)
+ }
+}
+
App.prototype.getMsgDecrypted = function (key, cb) {
var self = this
this.getMsg(key, function (err, msg) {