diff options
author | Miguel Ángel Moreno <mail@migalmoreno.com> | 2022-11-21 17:55:28 +0100 |
---|---|---|
committer | Miguel Ángel Moreno <mail@migalmoreno.com> | 2022-12-20 00:54:46 +0100 |
commit | 452ccfd567f79126e108f69bb7ebca07b5993bdd (patch) | |
tree | 4bc2688977dcd461259683bc89ea7eb94848f627 /src/backend/tau/api/search.clj |
feat: Initial commit
Diffstat (limited to 'src/backend/tau/api/search.clj')
-rw-r--r-- | src/backend/tau/api/search.clj | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/backend/tau/api/search.clj b/src/backend/tau/api/search.clj new file mode 100644 index 0000000..4969f10 --- /dev/null +++ b/src/backend/tau/api/search.clj @@ -0,0 +1,49 @@ +(ns tau.api.search + (:require + [tau.api.stream :as stream] + [tau.api.channel :as channel] + [tau.api.playlist :as playlist] + [clojure.java.data :as j] + [ring.util.codec :refer [url-encode url-decode]]) + (:import + org.schabi.newpipe.extractor.search.SearchInfo + org.schabi.newpipe.extractor.InfoItem + org.schabi.newpipe.extractor.NewPipe + org.schabi.newpipe.extractor.Page)) + +(defrecord SearchResult + [items next-page search-suggestion corrected-search?]) + +(defrecord SearchResultPage + [items next-page]) + +(defn get-search-results + [items] + (map #(case (.name (.getInfoType %)) + "STREAM" (stream/get-stream-result %) + "CHANNEL" (channel/get-channel-result %) + "PLAYLIST" (playlist/get-playlist-result %)) + items)) + +(defn get-search-info + ([service-id query content-filters sort-filter] + (let [service (NewPipe/getService service-id) + query-handler (.. service + (getSearchQHFactory) + (fromQuery query (or content-filters '()) (or sort-filter ""))) + info (SearchInfo/getInfo service query-handler)] + (map->SearchResult + {:items (get-search-results (.getRelatedItems info)) + :next-page (j/from-java (.getNextPage info)) + :search-suggestion (.getSearchSuggestion info) + :corrected-search? (.isCorrectedSearch info)}))) + ([service-id query content-filters sort-filter page-url] + (let [service (NewPipe/getService service-id) + url (url-decode page-url) + query-handler (.. service + (getSearchQHFactory) + (fromQuery query (or content-filters '()) (or sort-filter ""))) + info (SearchInfo/getMoreItems service query-handler (Page. url))] + (map->SearchResultPage + {:items (get-search-results (.getItems info)) + :next-page (j/from-java (.getNextPage info))})))) |