88 lines
3.3 KiB
Kotlin
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
|
|
}
|
|
}
|
|
}
|
|
}
|