76 lines
No EOL
2.4 KiB
Kotlin
76 lines
No EOL
2.4 KiB
Kotlin
package dev.jdtech.jellyfin.api
|
|
|
|
import android.content.Context
|
|
import dev.jdtech.jellyfin.BuildConfig
|
|
import org.jellyfin.sdk.Jellyfin
|
|
import org.jellyfin.sdk.android
|
|
import org.jellyfin.sdk.api.operations.*
|
|
import org.jellyfin.sdk.model.ClientInfo
|
|
import java.util.*
|
|
|
|
|
|
/**
|
|
* Jellyfin API class using org.jellyfin.sdk:jellyfin-platform-android
|
|
*
|
|
* @param context The context
|
|
* @param baseUrl The url of the server
|
|
* @constructor Creates a new [JellyfinApi] instance
|
|
*/
|
|
class JellyfinApi(context: Context, baseUrl: String) {
|
|
val jellyfin = Jellyfin {
|
|
clientInfo =
|
|
ClientInfo(name = context.applicationInfo.loadLabel(context.packageManager).toString(), version = BuildConfig.VERSION_NAME)
|
|
android(context)
|
|
}
|
|
val api = jellyfin.createApi(baseUrl = baseUrl)
|
|
var userId: UUID? = null
|
|
|
|
val systemApi = SystemApi(api)
|
|
val userApi = UserApi(api)
|
|
val viewsApi = UserViewsApi(api)
|
|
val itemsApi = ItemsApi(api)
|
|
val userLibraryApi = UserLibraryApi(api)
|
|
val showsApi = TvShowsApi(api)
|
|
val sessionApi = SessionApi(api)
|
|
val videosApi = VideosApi(api)
|
|
val mediaInfoApi = MediaInfoApi(api)
|
|
val playStateApi = PlayStateApi(api)
|
|
|
|
companion object {
|
|
@Volatile
|
|
private var INSTANCE: JellyfinApi? = null
|
|
|
|
/**
|
|
* Creates or gets a new instance of [JellyfinApi]
|
|
*
|
|
* If there already is an instance, it will return that instance and ignore the [baseUrl] parameter
|
|
*
|
|
* @param context The context
|
|
* @param baseUrl The url of the server
|
|
*/
|
|
fun getInstance(context: Context, baseUrl: String): JellyfinApi {
|
|
synchronized(this) {
|
|
var instance = INSTANCE
|
|
if (instance == null) {
|
|
instance = JellyfinApi(context.applicationContext, baseUrl)
|
|
INSTANCE = instance
|
|
}
|
|
return instance
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a new [JellyfinApi] instance
|
|
*
|
|
* @param context The context
|
|
* @param baseUrl The url of the server
|
|
*/
|
|
fun newInstance(context: Context, baseUrl: String): JellyfinApi {
|
|
synchronized(this) {
|
|
val instance = JellyfinApi(context.applicationContext, baseUrl)
|
|
INSTANCE = instance
|
|
return instance
|
|
}
|
|
}
|
|
}
|
|
} |