From 6ab0ff973aafc847489212e28de1115724c5796e Mon Sep 17 00:00:00 2001 From: tzugen Date: Wed, 9 Jun 2021 19:33:17 +0200 Subject: [PATCH] Fix version checking for freshly added servers --- .../api/subsonic/ApiVersionCheckWrapper.kt | 10 ++++++++-- .../api/subsonic/SubsonicAPIClient.kt | 8 +++++--- .../subsonic/SubsonicClientConfiguration.kt | 3 ++- .../moire/ultrasonic/di/MusicServiceModule.kt | 18 ++++++++++-------- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapper.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapper.kt index 20923b0b..a30623aa 100644 --- a/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapper.kt +++ b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapper.kt @@ -45,7 +45,8 @@ import retrofit2.Call @Suppress("TooManyFunctions") internal class ApiVersionCheckWrapper( val api: SubsonicAPIDefinition, - var currentApiVersion: SubsonicAPIVersions + var currentApiVersion: SubsonicAPIVersions?, + var isRealProtocolVersion: Boolean = false ) : SubsonicAPIDefinition by api { override fun getArtists(musicFolderId: String?): Call { checkVersion(V1_8_0) @@ -325,10 +326,15 @@ internal class ApiVersionCheckWrapper( } private fun checkVersion(expectedVersion: SubsonicAPIVersions) { - if (currentApiVersion < expectedVersion) throw ApiNotSupportedException(currentApiVersion) + // If it is true, it is probably the first call with this server + if (!isRealProtocolVersion) return + if (currentApiVersion!! < expectedVersion) + throw ApiNotSupportedException(currentApiVersion!!) } private fun checkParamVersion(param: Any?, expectedVersion: SubsonicAPIVersions) { + // If it is true, it is probably the first call with this server + if (!isRealProtocolVersion) return if (param != null) { checkVersion(expectedVersion) } diff --git a/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt index e51085a9..c50cc353 100644 --- a/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt +++ b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt @@ -57,6 +57,7 @@ class SubsonicAPIClient( field = value proxyPasswordInterceptor.apiVersion = field wrappedApi.currentApiVersion = field + wrappedApi.isRealProtocolVersion = true versionInterceptor.protocolVersion = field onProtocolChange(field) } @@ -88,8 +89,8 @@ class SubsonicAPIClient( .addConverterFactory( VersionAwareJacksonConverterFactory.create( { - // Only trigger update on change - if (protocolVersion != it) { + // Only trigger update on change, or if still using the default + if (protocolVersion != it || !config.isRealProtocolVersion) { protocolVersion = it } }, @@ -100,7 +101,8 @@ class SubsonicAPIClient( private val wrappedApi = ApiVersionCheckWrapper( retrofit.create(SubsonicAPIDefinition::class.java), - config.minimalProtocolVersion + config.minimalProtocolVersion, + config.isRealProtocolVersion ) val api: SubsonicAPIDefinition get() = wrappedApi diff --git a/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicClientConfiguration.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicClientConfiguration.kt index 732efe7a..ec0655ec 100644 --- a/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicClientConfiguration.kt +++ b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicClientConfiguration.kt @@ -11,5 +11,6 @@ data class SubsonicClientConfiguration( val clientID: String, val allowSelfSignedCertificate: Boolean = false, val enableLdapUserSupport: Boolean = false, - val debug: Boolean = false + val debug: Boolean = false, + val isRealProtocolVersion: Boolean = false ) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt index fb26fa50..c6d18ee5 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt @@ -49,19 +49,21 @@ val musicServiceModule = module { } single { + val server = get().getActiveServer() + return@single SubsonicClientConfiguration( - baseUrl = get().getActiveServer().url, - username = get().getActiveServer().userName, - password = get().getActiveServer().password, + baseUrl = server.url, + username = server.userName, + password = server.password, minimalProtocolVersion = SubsonicAPIVersions.getClosestKnownClientApiVersion( - get().getActiveServer().minimumApiVersion + server.minimumApiVersion ?: Constants.REST_PROTOCOL_VERSION ), clientID = Constants.REST_CLIENT_ID, - allowSelfSignedCertificate = get() - .getActiveServer().allowSelfSignedCertificate, - enableLdapUserSupport = get().getActiveServer().ldapSupport, - debug = BuildConfig.DEBUG + allowSelfSignedCertificate = server.allowSelfSignedCertificate, + enableLdapUserSupport = server.ldapSupport, + debug = BuildConfig.DEBUG, + isRealProtocolVersion = server.minimumApiVersion != null ) }