mirror of
https://github.com/yattee/yattee.git
synced 2026-02-20 09:49:46 +00:00
Yattee v2 rewrite
This commit is contained in:
66
Yattee/Services/API/InstanceAPI.swift
Normal file
66
Yattee/Services/API/InstanceAPI.swift
Normal file
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// InstanceAPI.swift
|
||||
// Yattee
|
||||
//
|
||||
// Protocol defining the API interface that each backend must implement.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
/// Protocol that each backend API (Invidious, Piped, PeerTube) must implement.
|
||||
protocol InstanceAPI: Sendable {
|
||||
func trending(instance: Instance) async throws -> [Video]
|
||||
func popular(instance: Instance) async throws -> [Video]
|
||||
func search(query: String, instance: Instance, page: Int, filters: SearchFilters) async throws -> SearchResult
|
||||
func searchSuggestions(query: String, instance: Instance) async throws -> [String]
|
||||
func video(id: String, instance: Instance) async throws -> Video
|
||||
func channel(id: String, instance: Instance) async throws -> Channel
|
||||
func channelVideos(id: String, instance: Instance, continuation: String?) async throws -> ChannelVideosPage
|
||||
func channelPlaylists(id: String, instance: Instance, continuation: String?) async throws -> ChannelPlaylistsPage
|
||||
func channelShorts(id: String, instance: Instance, continuation: String?) async throws -> ChannelVideosPage
|
||||
func channelStreams(id: String, instance: Instance, continuation: String?) async throws -> ChannelVideosPage
|
||||
func playlist(id: String, instance: Instance) async throws -> Playlist
|
||||
func comments(videoID: String, instance: Instance, continuation: String?) async throws -> CommentsPage
|
||||
func streams(videoID: String, instance: Instance) async throws -> [Stream]
|
||||
func captions(videoID: String, instance: Instance) async throws -> [Caption]
|
||||
func channelSearch(id: String, query: String, instance: Instance, page: Int) async throws -> ChannelSearchPage
|
||||
}
|
||||
|
||||
// MARK: - Default Implementations
|
||||
|
||||
extension InstanceAPI {
|
||||
/// Default implementation for backends that don't distinguish popular from trending.
|
||||
func popular(instance: Instance) async throws -> [Video] {
|
||||
try await trending(instance: instance)
|
||||
}
|
||||
|
||||
/// Default implementation for backends that don't support search suggestions.
|
||||
func searchSuggestions(query: String, instance: Instance) async throws -> [String] {
|
||||
[]
|
||||
}
|
||||
|
||||
/// Default implementation for backends that don't support captions.
|
||||
func captions(videoID: String, instance: Instance) async throws -> [Caption] {
|
||||
[]
|
||||
}
|
||||
|
||||
/// Default implementation for backends that don't support channel playlists tab.
|
||||
func channelPlaylists(id: String, instance: Instance, continuation: String?) async throws -> ChannelPlaylistsPage {
|
||||
ChannelPlaylistsPage(playlists: [], continuation: nil)
|
||||
}
|
||||
|
||||
/// Default implementation for backends that don't support channel shorts tab.
|
||||
func channelShorts(id: String, instance: Instance, continuation: String?) async throws -> ChannelVideosPage {
|
||||
ChannelVideosPage(videos: [], continuation: nil)
|
||||
}
|
||||
|
||||
/// Default implementation for backends that don't support channel streams tab.
|
||||
func channelStreams(id: String, instance: Instance, continuation: String?) async throws -> ChannelVideosPage {
|
||||
ChannelVideosPage(videos: [], continuation: nil)
|
||||
}
|
||||
|
||||
/// Default implementation for backends that don't support channel search.
|
||||
func channelSearch(id: String, query: String, instance: Instance, page: Int) async throws -> ChannelSearchPage {
|
||||
throw APIError.notSupported
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user