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/playlist.clj |
feat: Initial commit
Diffstat (limited to 'src/backend/tau/api/playlist.clj')
-rw-r--r-- | src/backend/tau/api/playlist.clj | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/backend/tau/api/playlist.clj b/src/backend/tau/api/playlist.clj new file mode 100644 index 0000000..ccc0d6a --- /dev/null +++ b/src/backend/tau/api/playlist.clj @@ -0,0 +1,51 @@ +(ns tau.api.playlist + (:require + [clojure.java.data :as j] + [tau.api.stream :as stream] + [ring.util.codec :refer [url-decode]]) + (:import + org.schabi.newpipe.extractor.playlist.PlaylistInfo + org.schabi.newpipe.extractor.Page + org.schabi.newpipe.extractor.NewPipe)) + +(defrecord Playlist + [id name playlist-type thumbnail-url uploader-name uploader-url + uploader-avatar banner-url next-page stream-count related-streams]) + +(defrecord PlaylistResult + [name thumbnail-url url upload-author stream-count]) + +(defrecord PlaylistPage + [next-page related-streams]) + +(defn get-playlist-result + [playlist] + (map->PlaylistResult + {:name (.getName playlist) + :thumbnail-url (.getThumbnailUrl playlist) + :url (.getUrl playlist) + :upload-author (.getUploaderName playlist) + :stream-count (.getStreamCount playlist)})) + +(defn get-playlist-info + ([url] + (let [service (NewPipe/getServiceByUrl (url-decode url)) + info (PlaylistInfo/getInfo service (url-decode url))] + (map->Playlist + {:id (.getId info) + :name (.getName info) + :playlist-type (j/from-java (.getPlaylistType info)) + :thumbnail-url (.getThumbnailUrl info) + :banner-url (.getBannerUrl info) + :uploader-name (.getUploaderName info) + :uploader-url (.getUploaderUrl info) + :uploader-avatar (.getUploaderAvatarUrl info) + :stream-count (.getStreamCount 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 (PlaylistInfo/getMoreItems service url (Page. (url-decode page-url)))] + (map->PlaylistPage + {:next-page (j/from-java (.getNextPage info)) + :related-streams (map #(stream/get-stream-result %) (.getItems info))})))) |