ananas/data/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
2023-06-19 23:44:42 +02:00

88 lines
3.3 KiB
Kotlin

package dev.jdtech.jellyfin.api
import android.content.Context
import dev.jdtech.jellyfin.Constants
import dev.jdtech.jellyfin.data.BuildConfig
import org.jellyfin.sdk.api.client.HttpClientOptions
import org.jellyfin.sdk.api.client.extensions.devicesApi
import org.jellyfin.sdk.api.client.extensions.itemsApi
import org.jellyfin.sdk.api.client.extensions.mediaInfoApi
import org.jellyfin.sdk.api.client.extensions.playStateApi
import org.jellyfin.sdk.api.client.extensions.quickConnectApi
import org.jellyfin.sdk.api.client.extensions.sessionApi
import org.jellyfin.sdk.api.client.extensions.systemApi
import org.jellyfin.sdk.api.client.extensions.tvShowsApi
import org.jellyfin.sdk.api.client.extensions.userApi
import org.jellyfin.sdk.api.client.extensions.userLibraryApi
import org.jellyfin.sdk.api.client.extensions.userViewsApi
import org.jellyfin.sdk.api.client.extensions.videosApi
import org.jellyfin.sdk.createJellyfin
import org.jellyfin.sdk.model.ClientInfo
import java.util.UUID
/**
* Jellyfin API class using org.jellyfin.sdk:jellyfin-platform-android
*
* @param androidContext The context
* @param socketTimeout The socket timeout
* @constructor Creates a new [JellyfinApi] instance
*/
class JellyfinApi(
androidContext: Context,
requestTimeout: Long = Constants.NETWORK_DEFAULT_REQUEST_TIMEOUT,
connectTimeout: Long = Constants.NETWORK_DEFAULT_CONNECT_TIMEOUT,
socketTimeout: Long = Constants.NETWORK_DEFAULT_SOCKET_TIMEOUT,
) {
val jellyfin = createJellyfin {
clientInfo =
ClientInfo(name = androidContext.applicationInfo.loadLabel(androidContext.packageManager).toString(), version = BuildConfig.VERSION_NAME)
context = androidContext
}
val api = jellyfin.createApi(
httpClientOptions = HttpClientOptions(
requestTimeout = requestTimeout,
connectTimeout = connectTimeout,
socketTimeout = socketTimeout,
),
)
var userId: UUID? = null
val devicesApi = api.devicesApi
val systemApi = api.systemApi
val userApi = api.userApi
val viewsApi = api.userViewsApi
val itemsApi = api.itemsApi
val userLibraryApi = api.userLibraryApi
val showsApi = api.tvShowsApi
val sessionApi = api.sessionApi
val videosApi = api.videosApi
val mediaInfoApi = api.mediaInfoApi
val playStateApi = api.playStateApi
val quickConnectApi = api.quickConnectApi
companion object {
@Volatile
private var INSTANCE: JellyfinApi? = null
fun getInstance(
context: Context,
requestTimeout: Long = Constants.NETWORK_DEFAULT_REQUEST_TIMEOUT,
connectTimeout: Long = Constants.NETWORK_DEFAULT_CONNECT_TIMEOUT,
socketTimeout: Long = Constants.NETWORK_DEFAULT_SOCKET_TIMEOUT,
): JellyfinApi {
synchronized(this) {
var instance = INSTANCE
if (instance == null) {
instance = JellyfinApi(
androidContext = context.applicationContext,
requestTimeout = requestTimeout,
connectTimeout = connectTimeout,
socketTimeout = socketTimeout,
)
INSTANCE = instance
}
return instance
}
}
}
}