aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tau/api/channel.clj
blob: 26d3b34917ac9c8daa7ffd0933cfa46e521b1683 (plain)
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
(ns tau.api.channel
  (:require
   [tau.api.stream :as stream]
   [clojure.java.data :as j]
   [ring.util.codec :refer [url-decode]])
  (:import
   org.schabi.newpipe.extractor.channel.ChannelInfo
   org.schabi.newpipe.extractor.NewPipe
   org.schabi.newpipe.extractor.Page))

(defrecord Channel
    [id name description verified? banner avatar
     subscriber-count donation-links next-page
     related-streams])

(defrecord ChannelResult
    [name description verified? thumbnail-url url
     subscriber-count stream-count])

(defrecord ChannelPage
    [next-page related-streams])

(defn get-channel-result
  [channel]
  (map->ChannelResult
   {:name (.getName channel)
    :thumbnail-url (.getThumbnailUrl channel)
    :url (.getUrl channel)
    :description (.getDescription channel)
    :subscriber-count (.getSubscriberCount channel)
    :stream-count (.getStreamCount channel)
    :verified? (.isVerified channel)}))

(defn get-channel-info
  ([url]
   (let [info (ChannelInfo/getInfo (url-decode url))]
     (map->Channel
      {:id (.getId info)
       :name (.getName info)
       :verified? (.isVerified info)
       :banner (.getBannerUrl info)
       :avatar (.getAvatarUrl info)
       :subscriber-count (.getSubscriberCount info)
       :donation-links (.getDonationLinks info)
       :next-page (j/from-java (.getNextPage info))
       :related-streams (map #(stream/get-stream-result %) (.getRelatedItems info))})))
  ([url page-url]
   (let [service (NewPipe/getServiceByUrl (url-decode url))
         info (ChannelInfo/getMoreItems service url (Page. (url-decode page-url)))]
     (map->ChannelPage
      {:related-streams (map #(stream/get-stream-result %) (.getItems info))
       :next-page (j/from-java (.getNextPage info))}))))