summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/site.clj20
-rw-r--r--template/search_files.st29
2 files changed, 33 insertions, 16 deletions
diff --git a/src/site.clj b/src/site.clj
index 8596021..75980aa 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -795,22 +795,24 @@ FROM users u
favs (reduce (fn [m fav] (assoc m (str (fav :message_id)) (fav :content))) {} raw-favs)]
(str "RawFavs=" (json-str favs))))
-(defn ghetto-search-query []
+(defn ghetto-search-query [num-tokens]
(str "select
content from messages, rooms
where messages.room_id=rooms.room_id
- and content ilike ? and content like '%http://%'
+ and content ilike " (str-join " and content ilike " (take num-tokens (repeat "?"))) "
+ and content like '%http://%'
and admin_only = 'f'
order by message_id desc
limit 250;"))
-(def *ghetto-search-regex* #"^[A-Za-z0-9\-_]*$")
+(def *ghetto-search-regex* #"^[A-Za-z0-9\-_.+]*$")
-(defn json-ghetto-search [searchterm]
- ( if (re-matches *ghetto-search-regex* searchterm)
- (let [searchterm (str "%" searchterm "%")
- query (ghetto-search-query)
- rows (do-select [query searchterm])]
+(defn json-ghetto-search [undecoded-url-searchterms]
+ ( if (re-matches *ghetto-search-regex* undecoded-url-searchterms)
+ (let [tokens (map url-decode (re-split #"\+" undecoded-url-searchterms))
+ tokens (map #(str "%" %1 "%") tokens)
+ query (ghetto-search-query (count tokens))
+ rows (do-select (vec (concat [query] tokens)))]
(str "searchResult(" (json-str rows) ")"))
(str "searchError('sorry, no fancy characters')")))
@@ -1020,7 +1022,7 @@ FROM users u
(POST "/cancel-mute" (handle-cancel-mute! session params))
(GET "/profile-test/:t" (profile session "ryder" "0" (params :t)))
- (GET "/cmd/ghettosearch/:searchterm" (json-ghetto-search (params :searchterm)))
+ (GET "/cmd/ghettosearch/:searchterm" (json-ghetto-search (undecoded-url-piece (request-url request) 2)))
(GET "/search" (serve-template "search_files" session))
;; Footer pages
diff --git a/template/search_files.st b/template/search_files.st
index f726364..d3deea5 100644
--- a/template/search_files.st
+++ b/template/search_files.st
@@ -9,7 +9,7 @@
</head>
<body>
- <center>search dumps: <input type="text" name="search-query" id="search-query" /></center>
+ <center>search dumps: <input type="text" name="search-query" id="search-query" /></center><br><br>
<center><div id="message"></div><br><br></center>
<div id="content"></div>
@@ -72,8 +72,15 @@
var imageUrl = imageUrls[i];
if (imageUrl in alreadyGot) continue;
alreadyGot[imageUrl] = true
- if (imageUrl.indexOf(term) > -1)
- images.push(imageUrl)
+ var validImage = true;
+ for(var t = 0; t<tokens.length; t++){
+ if (imageUrl.toLowerCase().indexOf(tokens[t]) == -1) {
+ validImage = false;
+ break;
+ }
+ }
+ if (validImage)
+ images.push(imageUrl);
}
}
if (images.length == 0) {
@@ -83,13 +90,21 @@
}
}
+ var tokens = []
+
function doSearch(){
- term = jQuery("#search-query").val().trim()
- if (term.length < 3) {
+ term = jQuery("#search-query").val().trim().toLowerCase()
+ var rawTokens = term.split(" ")
+ tokens = []
+ for(var t = 0; t < rawTokens.length; t++) {
+ if (rawTokens[t].length > 2)
+ tokens.push(rawTokens[t])
+ }
+ if (tokens.length == 0) {
setMessage("search query too small")
} else {
- setMessage("searching for '"+term+"'")
- addScript(term)
+ setMessage("searching for '"+tokens.join(" and ")+"'")
+ addScript(tokens.join("+"))
}
}