package com.github.libretube.api import com.github.libretube.api.obj.Channel import com.github.libretube.api.obj.ChannelTabResponse import com.github.libretube.api.obj.CommentsPage import com.github.libretube.api.obj.DeleteUserRequest import com.github.libretube.api.obj.Login import com.github.libretube.api.obj.Message import com.github.libretube.api.obj.Playlist import com.github.libretube.api.obj.PlaylistId import com.github.libretube.api.obj.Playlists import com.github.libretube.api.obj.SearchResult import com.github.libretube.api.obj.SegmentData import com.github.libretube.api.obj.StreamItem import com.github.libretube.api.obj.Streams import com.github.libretube.api.obj.Subscribe import com.github.libretube.api.obj.Subscription import com.github.libretube.api.obj.Token import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.Header import retrofit2.http.POST import retrofit2.http.Path import retrofit2.http.Query interface PipedApi { @GET("trending") suspend fun getTrending(@Query("region") region: String): List @GET("streams/{videoId}") suspend fun getStreams(@Path("videoId") videoId: String): Streams @GET("comments/{videoId}") suspend fun getComments(@Path("videoId") videoId: String): CommentsPage @GET("sponsors/{videoId}") suspend fun getSegments( @Path("videoId") videoId: String, @Query("category") category: String ): SegmentData @GET("nextpage/comments/{videoId}") suspend fun getCommentsNextPage( @Path("videoId") videoId: String, @Query("nextpage") nextPage: String ): CommentsPage @GET("search") suspend fun getSearchResults( @Query("q") searchQuery: String, @Query("filter") filter: String ): SearchResult @GET("nextpage/search") suspend fun getSearchResultsNextPage( @Query("q") searchQuery: String, @Query("filter") filter: String, @Query("nextpage") nextPage: String ): SearchResult @GET("suggestions") suspend fun getSuggestions(@Query("query") query: String): List @GET("channel/{channelId}") suspend fun getChannel(@Path("channelId") channelId: String): Channel @GET("channels/tabs") suspend fun getChannelTab( @Query("data") data: String, @Query("nextpage") nextPage: String? = null ): ChannelTabResponse @GET("user/{name}") suspend fun getChannelByName(@Path("name") channelName: String): Channel @GET("nextpage/channel/{channelId}") suspend fun getChannelNextPage( @Path("channelId") channelId: String, @Query("nextpage") nextPage: String ): Channel @GET("playlists/{playlistId}") suspend fun getPlaylist(@Path("playlistId") playlistId: String): Playlist @GET("nextpage/playlists/{playlistId}") suspend fun getPlaylistNextPage( @Path("playlistId") playlistId: String, @Query("nextpage") nextPage: String ): Playlist @POST("login") suspend fun login(@Body login: Login): Token @POST("register") suspend fun register(@Body login: Login): Token @POST("user/delete") suspend fun deleteAccount( @Header("Authorization") token: String, @Body password: DeleteUserRequest ) @GET("feed") suspend fun getFeed(@Query("authToken") token: String?): List @GET("feed/unauthenticated") suspend fun getUnauthenticatedFeed(@Query("channels") channels: String): List @GET("subscribed") suspend fun isSubscribed( @Query("channelId") channelId: String, @Header("Authorization") token: String ): com.github.libretube.api.obj.Subscribed @GET("subscriptions") suspend fun subscriptions(@Header("Authorization") token: String): List @GET("subscriptions/unauthenticated") suspend fun unauthenticatedSubscriptions(@Query("channels") channels: String): List @POST("subscribe") suspend fun subscribe( @Header("Authorization") token: String, @Body subscribe: Subscribe ): Message @POST("unsubscribe") suspend fun unsubscribe( @Header("Authorization") token: String, @Body subscribe: Subscribe ): Message @POST("import") suspend fun importSubscriptions( @Query("override") override: Boolean, @Header("Authorization") token: String, @Body channels: List ): Message @POST("import/playlist") suspend fun importPlaylist( @Header("Authorization") token: String, @Body playlistId: PlaylistId ): PlaylistId @GET("user/playlists") suspend fun getUserPlaylists(@Header("Authorization") token: String): List @POST("user/playlists/rename") suspend fun renamePlaylist( @Header("Authorization") token: String, @Body playlistId: PlaylistId ) @POST("user/playlists/delete") suspend fun deletePlaylist( @Header("Authorization") token: String, @Body playlistId: PlaylistId ): Message @POST("user/playlists/create") suspend fun createPlaylist( @Header("Authorization") token: String, @Body name: Playlists ): PlaylistId @POST("user/playlists/add") suspend fun addToPlaylist( @Header("Authorization") token: String, @Body playlistId: PlaylistId ): Message @POST("user/playlists/remove") suspend fun removeFromPlaylist( @Header("Authorization") token: String, @Body playlistId: PlaylistId ): Message }