aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tau/api/comment.clj
blob: 18881cb3fbdc523511b923d28d92a3308f20eece (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
(ns tau.api.comment
  (:require
   [clojure.java.data :as j]
   [ring.util.codec :refer [url-decode]])
  (:import
   org.schabi.newpipe.extractor.NewPipe
   org.schabi.newpipe.extractor.Page
   org.schabi.newpipe.extractor.comments.CommentsInfoItem
   org.schabi.newpipe.extractor.comments.CommentsInfo))

(defrecord CommentsPage
    [next-page disabled? comments])

(defrecord Comment
    [id text upload-name upload-avatar upload-date upload-url
     upload-verified? like-count hearted-by-upload? pinned? replies])

(defn get-comment-result
  [comment]
  (map->Comment
   {:id (.getCommentId comment)
    :text (.getCommentText comment)
    :upload-name (.getUploaderName comment)
    :upload-avatar (.getUploaderAvatarUrl comment)
    :upload-date (.getTextualUploadDate comment)
    :upload-url (.getUploaderUrl comment)
    :upload-verified? (.isUploaderVerified comment)
    :like-count (.getLikeCount comment)
    :hearted-by-upload? (.isHeartedByUploader comment)
    :pinned? (.isPinned comment)
    :replies (when (.getReplies comment)
               (j/from-java (.getReplies comment)))}))

(defn get-comments-info
  ([url]
   (let [info (CommentsInfo/getInfo (url-decode url))]
     (map->CommentsPage
      {:comments (map #(get-comment-result %) (.getRelatedItems info))
       :next-page (j/from-java (.getNextPage info))
       :disabled? (.isCommentsDisabled info)})))
  ([url page-url]
   (let [service (NewPipe/getServiceByUrl (url-decode url))
         info (CommentsInfo/getMoreItems service url (Page. (url-decode page-url)))]
     (map->CommentsPage
      {:comments (map #(get-comment-result %) (.getItems info))
       :next-page (j/from-java (.getNextPage info))
       :disabled? false}))))