aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tau/api/services.clj
diff options
context:
space:
mode:
authorMiguel Ángel Moreno <mail@migalmoreno.com>2022-12-29 01:53:08 +0100
committerMiguel Ángel Moreno <mail@migalmoreno.com>2022-12-29 01:53:08 +0100
commitdfcc61063822dfb0fe699896da312249e93d5439 (patch)
treec1dc29de45cfe4ae67f104510dc3c4b6d858aa46 /src/backend/tau/api/services.clj
parent6382ec24c5bbbf93ced1e587103a52b3a63e6045 (diff)
feat(backend): Remove records and simplify API
Diffstat (limited to 'src/backend/tau/api/services.clj')
-rw-r--r--src/backend/tau/api/services.clj79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/backend/tau/api/services.clj b/src/backend/tau/api/services.clj
new file mode 100644
index 0000000..8b9638f
--- /dev/null
+++ b/src/backend/tau/api/services.clj
@@ -0,0 +1,79 @@
+(ns tau.api.services
+ (:require
+ [clojure.java.data :as j]
+ [ring.util.codec :refer [url-encode url-decode]]
+ [tau.api.items :as items])
+ (:import
+ org.schabi.newpipe.extractor.kiosk.KioskInfo
+ org.schabi.newpipe.extractor.kiosk.KioskList
+ org.schabi.newpipe.extractor.InfoItem
+ org.schabi.newpipe.extractor.NewPipe
+ org.schabi.newpipe.extractor.Page
+ org.schabi.newpipe.extractor.StreamingService
+ org.schabi.newpipe.extractor.search.SearchInfo))
+
+(defn search
+ ([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)]
+ {:items (items/get-items (.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))]
+ {:items (items/get-items (.getItems info))
+ :next-page (j/from-java (.getNextPage info))})))
+
+(defn get-kiosk
+ ([service-id]
+ (let [service (NewPipe/getService service-id)
+ extractor (doto (.getDefaultKioskExtractor (.getKioskList service))
+ (.fetchPage))
+ info (KioskInfo/getInfo extractor)]
+ {:id (.getId info)
+ :url (.getUrl info)
+ :next-page (j/from-java (.getNextPage info))
+ :related-streams (items/get-items (.getRelatedItems info))}))
+ ([kiosk-id service-id]
+ (let [service (NewPipe/getService service-id)
+ extractor (doto (.getExtractorById (.getKioskList service) kiosk-id nil)
+ (.fetchPage))
+ info (KioskInfo/getInfo extractor)]
+ {:id (.getId info)
+ :url (.getUrl info)
+ :next-page (j/from-java (.getNextPage info))
+ :related-streams (items/get-items (.getRelatedItems info))}))
+ ([kiosk-id service-id page-url]
+ (let [service (NewPipe/getService service-id)
+ extractor (.getExtractorById (.getKioskList service) kiosk-id nil)
+ url (url-decode page-url)
+ kiosk-info (KioskInfo/getInfo extractor)
+ info (KioskInfo/getMoreItems service (.getUrl kiosk-info) (Page. url))]
+ {:next-page (j/from-java (.getNextPage info))
+ :related-streams (items/get-items (.getItems info))})))
+
+(defn get-kiosks
+ [service-id]
+ (let [service (NewPipe/getService service-id)
+ kiosks (.getKioskList service)]
+ {:default-kiosk (.getDefaultKioskId kiosks)
+ :available-kiosks (.getAvailableKiosks kiosks)}))
+
+(defn get-service
+ [service]
+ {:id (.getServiceId service)
+ :info (j/from-java (.getServiceInfo service))
+ :base-url (.getBaseUrl service)})
+
+(defn get-services
+ []
+ (map get-service (NewPipe/getServices)))