Skip to content

Commit 1dabd07

Browse files
committed
refactor: decouple and abstract auth from media service logic
1 parent 0aa8ebb commit 1dabd07

29 files changed

Lines changed: 320 additions & 207 deletions

app/src/main/java/com/github/libretube/api/ExternalApi.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.libretube.api
22

33
import com.github.libretube.api.obj.DeArrowBody
4+
import com.github.libretube.api.obj.PipedConfig
45
import com.github.libretube.api.obj.PipedInstance
56
import com.github.libretube.api.obj.SubmitSegmentResponse
67
import com.github.libretube.api.obj.VoteInfo
@@ -20,6 +21,9 @@ interface ExternalApi {
2021
@GET
2122
suspend fun getInstances(@Url url: String): List<PipedInstance>
2223

24+
@GET("config")
25+
suspend fun getInstanceConfig(@Url url: String): PipedConfig
26+
2327
// fetch latest version info
2428
@GET(GITHUB_API_URL)
2529
suspend fun getLatestRelease(): UpdateInfo
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.github.libretube.api
2+
3+
import com.github.libretube.api.obj.Channel
4+
import com.github.libretube.api.obj.ChannelTabResponse
5+
import com.github.libretube.api.obj.CommentsPage
6+
import com.github.libretube.api.obj.DeArrowContent
7+
import com.github.libretube.api.obj.Playlist
8+
import com.github.libretube.api.obj.SearchResult
9+
import com.github.libretube.api.obj.SegmentData
10+
import com.github.libretube.api.obj.StreamItem
11+
import com.github.libretube.api.obj.Streams
12+
13+
interface MediaServiceRepository {
14+
suspend fun getTrending(region: String): List<StreamItem>
15+
suspend fun getStreams(videoId: String): Streams
16+
suspend fun getComments(videoId: String): CommentsPage
17+
suspend fun getSegments(videoId: String, category: String, actionType: String? = null): SegmentData
18+
suspend fun getDeArrowContent(videoIds: String): Map<String, DeArrowContent>
19+
suspend fun getCommentsNextPage(videoId: String, nextPage: String): CommentsPage
20+
suspend fun getSearchResults(searchQuery: String, filter: String): SearchResult
21+
suspend fun getSearchResultsNextPage(searchQuery: String, filter: String, nextPage: String): SearchResult
22+
suspend fun getSuggestions(query: String): List<String>
23+
suspend fun getChannel(channelId: String): Channel
24+
suspend fun getChannelTab(data: String, nextPage: String? = null): ChannelTabResponse
25+
suspend fun getChannelByName(channelName: String): Channel
26+
suspend fun getChannelNextPage(channelId: String, nextPage: String): Channel
27+
suspend fun getPlaylist(playlistId: String): Playlist
28+
suspend fun getPlaylistNextPage(playlistId: String, nextPage: String): Playlist
29+
30+
companion object {
31+
val instance by lazy {
32+
PipedMediaServiceRepository()
33+
}
34+
}
35+
}

app/src/main/java/com/github/libretube/api/PipedApi.kt

Lines changed: 0 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,16 @@ import com.github.libretube.api.obj.Channel
44
import com.github.libretube.api.obj.ChannelTabResponse
55
import com.github.libretube.api.obj.CommentsPage
66
import com.github.libretube.api.obj.DeArrowContent
7-
import com.github.libretube.api.obj.DeleteUserRequest
8-
import com.github.libretube.api.obj.EditPlaylistBody
9-
import com.github.libretube.api.obj.Login
10-
import com.github.libretube.api.obj.Message
11-
import com.github.libretube.api.obj.PipedConfig
127
import com.github.libretube.api.obj.Playlist
13-
import com.github.libretube.api.obj.Playlists
148
import com.github.libretube.api.obj.SearchResult
159
import com.github.libretube.api.obj.SegmentData
1610
import com.github.libretube.api.obj.StreamItem
1711
import com.github.libretube.api.obj.Streams
18-
import com.github.libretube.api.obj.Subscribe
19-
import com.github.libretube.api.obj.Subscribed
20-
import com.github.libretube.api.obj.Subscription
21-
import com.github.libretube.api.obj.Token
22-
import retrofit2.http.Body
2312
import retrofit2.http.GET
24-
import retrofit2.http.Header
25-
import retrofit2.http.PATCH
26-
import retrofit2.http.POST
2713
import retrofit2.http.Path
2814
import retrofit2.http.Query
2915

3016
interface PipedApi {
31-
@GET("config")
32-
suspend fun getConfig(): PipedConfig
33-
3417
@GET("trending")
3518
suspend fun getTrending(@Query("region") region: String): List<StreamItem>
3619

@@ -98,106 +81,4 @@ interface PipedApi {
9881
@Path("playlistId") playlistId: String,
9982
@Query("nextpage") nextPage: String
10083
): Playlist
101-
102-
@POST("login")
103-
suspend fun login(@Body login: Login): Token
104-
105-
@POST("register")
106-
suspend fun register(@Body login: Login): Token
107-
108-
@POST("user/delete")
109-
suspend fun deleteAccount(
110-
@Header("Authorization") token: String,
111-
@Body password: DeleteUserRequest
112-
)
113-
114-
@GET("feed")
115-
suspend fun getFeed(@Query("authToken") token: String?): List<StreamItem>
116-
117-
@GET("feed/unauthenticated")
118-
suspend fun getUnauthenticatedFeed(@Query("channels") channels: String): List<StreamItem>
119-
120-
@POST("feed/unauthenticated")
121-
suspend fun getUnauthenticatedFeed(@Body channels: List<String>): List<StreamItem>
122-
123-
@GET("subscribed")
124-
suspend fun isSubscribed(
125-
@Query("channelId") channelId: String,
126-
@Header("Authorization") token: String
127-
): Subscribed
128-
129-
@GET("subscriptions")
130-
suspend fun subscriptions(@Header("Authorization") token: String): List<Subscription>
131-
132-
@GET("subscriptions/unauthenticated")
133-
suspend fun unauthenticatedSubscriptions(
134-
@Query("channels") channels: String
135-
): List<Subscription>
136-
137-
@POST("subscriptions/unauthenticated")
138-
suspend fun unauthenticatedSubscriptions(@Body channels: List<String>): List<Subscription>
139-
140-
@POST("subscribe")
141-
suspend fun subscribe(
142-
@Header("Authorization") token: String,
143-
@Body subscribe: Subscribe
144-
): Message
145-
146-
@POST("unsubscribe")
147-
suspend fun unsubscribe(
148-
@Header("Authorization") token: String,
149-
@Body subscribe: Subscribe
150-
): Message
151-
152-
@POST("import")
153-
suspend fun importSubscriptions(
154-
@Query("override") override: Boolean,
155-
@Header("Authorization") token: String,
156-
@Body channels: List<String>
157-
): Message
158-
159-
@POST("import/playlist")
160-
suspend fun clonePlaylist(
161-
@Header("Authorization") token: String,
162-
@Body editPlaylistBody: EditPlaylistBody
163-
): EditPlaylistBody
164-
165-
@GET("user/playlists")
166-
suspend fun getUserPlaylists(@Header("Authorization") token: String): List<Playlists>
167-
168-
@POST("user/playlists/rename")
169-
suspend fun renamePlaylist(
170-
@Header("Authorization") token: String,
171-
@Body editPlaylistBody: EditPlaylistBody
172-
): Message
173-
174-
@PATCH("user/playlists/description")
175-
suspend fun changePlaylistDescription(
176-
@Header("Authorization") token: String,
177-
@Body editPlaylistBody: EditPlaylistBody
178-
): Message
179-
180-
@POST("user/playlists/delete")
181-
suspend fun deletePlaylist(
182-
@Header("Authorization") token: String,
183-
@Body editPlaylistBody: EditPlaylistBody
184-
): Message
185-
186-
@POST("user/playlists/create")
187-
suspend fun createPlaylist(
188-
@Header("Authorization") token: String,
189-
@Body name: Playlists
190-
): EditPlaylistBody
191-
192-
@POST("user/playlists/add")
193-
suspend fun addToPlaylist(
194-
@Header("Authorization") token: String,
195-
@Body editPlaylistBody: EditPlaylistBody
196-
): Message
197-
198-
@POST("user/playlists/remove")
199-
suspend fun removeFromPlaylist(
200-
@Header("Authorization") token: String,
201-
@Body editPlaylistBody: EditPlaylistBody
202-
): Message
20384
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package com.github.libretube.api
2+
3+
import com.github.libretube.api.obj.DeleteUserRequest
4+
import com.github.libretube.api.obj.EditPlaylistBody
5+
import com.github.libretube.api.obj.Login
6+
import com.github.libretube.api.obj.Message
7+
import com.github.libretube.api.obj.Playlist
8+
import com.github.libretube.api.obj.Playlists
9+
import com.github.libretube.api.obj.StreamItem
10+
import com.github.libretube.api.obj.Subscribe
11+
import com.github.libretube.api.obj.Subscribed
12+
import com.github.libretube.api.obj.Subscription
13+
import com.github.libretube.api.obj.Token
14+
import retrofit2.http.Body
15+
import retrofit2.http.GET
16+
import retrofit2.http.Header
17+
import retrofit2.http.PATCH
18+
import retrofit2.http.POST
19+
import retrofit2.http.Path
20+
import retrofit2.http.Query
21+
22+
interface PipedAuthApi {
23+
24+
@POST("login")
25+
suspend fun login(@Body login: Login): Token
26+
27+
@POST("register")
28+
suspend fun register(@Body login: Login): Token
29+
30+
@POST("user/delete")
31+
suspend fun deleteAccount(
32+
@Header("Authorization") token: String,
33+
@Body password: DeleteUserRequest
34+
)
35+
36+
@GET("feed")
37+
suspend fun getFeed(@Query("authToken") token: String?): List<StreamItem>
38+
39+
@GET("feed/unauthenticated")
40+
suspend fun getUnauthenticatedFeed(@Query("channels") channels: String): List<StreamItem>
41+
42+
@POST("feed/unauthenticated")
43+
suspend fun getUnauthenticatedFeed(@Body channels: List<String>): List<StreamItem>
44+
45+
@GET("subscribed")
46+
suspend fun isSubscribed(
47+
@Query("channelId") channelId: String,
48+
@Header("Authorization") token: String
49+
): Subscribed
50+
51+
@GET("subscriptions")
52+
suspend fun subscriptions(@Header("Authorization") token: String): List<Subscription>
53+
54+
@GET("subscriptions/unauthenticated")
55+
suspend fun unauthenticatedSubscriptions(
56+
@Query("channels") channels: String
57+
): List<Subscription>
58+
59+
@POST("subscriptions/unauthenticated")
60+
suspend fun unauthenticatedSubscriptions(@Body channels: List<String>): List<Subscription>
61+
62+
@POST("subscribe")
63+
suspend fun subscribe(
64+
@Header("Authorization") token: String,
65+
@Body subscribe: Subscribe
66+
): Message
67+
68+
@POST("unsubscribe")
69+
suspend fun unsubscribe(
70+
@Header("Authorization") token: String,
71+
@Body subscribe: Subscribe
72+
): Message
73+
74+
@POST("import")
75+
suspend fun importSubscriptions(
76+
@Query("override") override: Boolean,
77+
@Header("Authorization") token: String,
78+
@Body channels: List<String>
79+
): Message
80+
81+
@POST("import/playlist")
82+
suspend fun clonePlaylist(
83+
@Header("Authorization") token: String,
84+
@Body editPlaylistBody: EditPlaylistBody
85+
): EditPlaylistBody
86+
87+
@GET("user/playlists")
88+
suspend fun getUserPlaylists(@Header("Authorization") token: String): List<Playlists>
89+
90+
@POST("user/playlists/rename")
91+
suspend fun renamePlaylist(
92+
@Header("Authorization") token: String,
93+
@Body editPlaylistBody: EditPlaylistBody
94+
): Message
95+
96+
@PATCH("user/playlists/description")
97+
suspend fun changePlaylistDescription(
98+
@Header("Authorization") token: String,
99+
@Body editPlaylistBody: EditPlaylistBody
100+
): Message
101+
102+
@POST("user/playlists/delete")
103+
suspend fun deletePlaylist(
104+
@Header("Authorization") token: String,
105+
@Body editPlaylistBody: EditPlaylistBody
106+
): Message
107+
108+
@POST("user/playlists/create")
109+
suspend fun createPlaylist(
110+
@Header("Authorization") token: String,
111+
@Body name: Playlists
112+
): EditPlaylistBody
113+
114+
@POST("user/playlists/add")
115+
suspend fun addToPlaylist(
116+
@Header("Authorization") token: String,
117+
@Body editPlaylistBody: EditPlaylistBody
118+
): Message
119+
120+
@POST("user/playlists/remove")
121+
suspend fun removeFromPlaylist(
122+
@Header("Authorization") token: String,
123+
@Body editPlaylistBody: EditPlaylistBody
124+
): Message
125+
126+
@GET("playlists/{playlistId}")
127+
suspend fun getPlaylist(@Path("playlistId") playlistId: String): Playlist
128+
}

0 commit comments

Comments
 (0)