mirror of
https://gitlab.com/ultrasonic/ultrasonic.git
synced 2025-04-24 12:50:58 +03:00
commit
f1041d247d
build.gradledependencies.gradle
gradle_scripts
subsonic-api
build.gradle
src
integrationTest/kotlin/org/moire/ultrasonic/api/subsonic
main/kotlin/org/moire/ultrasonic/api/subsonic
ultrasonic
@ -1,15 +1,17 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
apply from: 'dependencies.gradle'
|
||||
|
||||
buildscript {
|
||||
apply from: 'dependencies.gradle'
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
maven {
|
||||
url "https://plugins.gradle.org/m2/"
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath gradlePlugins.androidTools
|
||||
classpath gradlePlugins.kotlin
|
||||
classpath gradlePlugins.ktlintGradle
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,8 @@ ext.versions = [
|
||||
|
||||
buildTools : "25.0.3",
|
||||
androidTools : "2.3.3",
|
||||
ktlint : "0.9.0",
|
||||
ktlintGradle : "2.1.0",
|
||||
|
||||
androidSupport : "22.2.1",
|
||||
|
||||
@ -23,6 +25,7 @@ ext.versions = [
|
||||
ext.gradlePlugins = [
|
||||
androidTools : "com.android.tools.build:gradle:$versions.androidTools",
|
||||
kotlin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin",
|
||||
ktlintGradle : "gradle.plugin.org.jlleitschuh.gradle:ktlint-gradle:$versions.ktlintGradle",
|
||||
]
|
||||
|
||||
ext.androidSupport = [
|
||||
|
10
gradle_scripts/code_quality.gradle
Normal file
10
gradle_scripts/code_quality.gradle
Normal file
@ -0,0 +1,10 @@
|
||||
// Applies code quality plugins when -Pqc is passed to the gradle
|
||||
def isCodeQualityEnabled = project.hasProperty('qc')
|
||||
|
||||
if (isCodeQualityEnabled) {
|
||||
apply plugin: "org.jlleitschuh.gradle.ktlint"
|
||||
|
||||
ktlint {
|
||||
version = versions.ktlint
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
apply plugin: 'kotlin'
|
||||
apply from: '../gradle_scripts/code_quality.gradle'
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
|
4
subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClientTest.kt
4
subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClientTest.kt
@ -23,7 +23,9 @@ import retrofit2.Response
|
||||
import java.nio.charset.Charset
|
||||
import java.security.MessageDigest
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import java.util.Calendar
|
||||
import java.util.Locale
|
||||
import java.util.TimeZone
|
||||
|
||||
/**
|
||||
* Integration test for [SubsonicAPIClient] class.
|
||||
|
4
subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/rules/MockWebServerRule.kt
4
subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/rules/MockWebServerRule.kt
@ -8,11 +8,11 @@ import org.junit.runners.model.Statement
|
||||
/**
|
||||
* Starts mock web server for test and shut it down after.
|
||||
*/
|
||||
class MockWebServerRule: TestRule {
|
||||
class MockWebServerRule : TestRule {
|
||||
val mockWebServer = MockWebServer()
|
||||
|
||||
override fun apply(base: Statement?, description: Description?): Statement {
|
||||
val ruleStatement = object: Statement() {
|
||||
val ruleStatement = object : Statement() {
|
||||
override fun evaluate() {
|
||||
try {
|
||||
mockWebServer.start()
|
||||
|
@ -52,9 +52,9 @@ enum class SubsonicAPIVersions(val subsonicVersions: String, val restApiVersion:
|
||||
throw IllegalArgumentException("Unknown api version $apiVersion")
|
||||
}
|
||||
|
||||
class SubsonicAPIVersionsDeserializer: JsonDeserializer<SubsonicAPIVersions>() {
|
||||
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): SubsonicAPIVersions {
|
||||
if (p!!.currentName != "version") {
|
||||
class SubsonicAPIVersionsDeserializer : JsonDeserializer<SubsonicAPIVersions>() {
|
||||
override fun deserialize(p: JsonParser, ctxt: DeserializationContext?): SubsonicAPIVersions {
|
||||
if (p.currentName != "version") {
|
||||
throw JsonParseException(p, "Not valid token for API version!")
|
||||
}
|
||||
return fromApiVersion(p.text)
|
||||
|
@ -25,9 +25,9 @@ enum class SubsonicError(val code: Int) {
|
||||
.filter { it.code == jsonErrorCode }.firstOrNull()
|
||||
?: throw IllegalArgumentException("Unknown code $jsonErrorCode")
|
||||
|
||||
class SubsonicErrorDeserializer: JsonDeserializer<SubsonicError>() {
|
||||
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): SubsonicError {
|
||||
p!!.nextToken() // "code"
|
||||
class SubsonicErrorDeserializer : JsonDeserializer<SubsonicError>() {
|
||||
override fun deserialize(p: JsonParser, ctxt: DeserializationContext?): SubsonicError {
|
||||
p.nextToken() // "code"
|
||||
val error = parseErrorFromJson(p.valueAsInt)
|
||||
p.nextToken() // "message"
|
||||
p.nextToken() // end of error object
|
||||
|
@ -1,6 +1,6 @@
|
||||
package org.moire.ultrasonic.api.subsonic.models
|
||||
|
||||
import java.util.*
|
||||
import java.util.Calendar
|
||||
|
||||
data class Artist(val id: Long,
|
||||
val name: String,
|
||||
|
@ -1,7 +1,7 @@
|
||||
package org.moire.ultrasonic.api.subsonic.models
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import java.util.*
|
||||
import java.util.Calendar
|
||||
|
||||
data class MusicDirectory(val id: Long,
|
||||
val name: String,
|
||||
|
@ -1,6 +1,6 @@
|
||||
package org.moire.ultrasonic.api.subsonic.models
|
||||
|
||||
import java.util.*
|
||||
import java.util.Calendar
|
||||
|
||||
data class MusicDirectoryChild(val id: Long, val parent: Long, val isDir: Boolean = false,
|
||||
val title: String = "", val album: String = "",
|
||||
|
@ -7,5 +7,5 @@ import org.moire.ultrasonic.api.subsonic.models.License
|
||||
class LicenseResponse(val license: License = License(),
|
||||
status: Status,
|
||||
version: SubsonicAPIVersions,
|
||||
error: SubsonicError?):
|
||||
error: SubsonicError?) :
|
||||
SubsonicResponse(status, version, error)
|
@ -14,12 +14,12 @@ class MusicFoldersResponse(status: Status,
|
||||
version: SubsonicAPIVersions,
|
||||
error: SubsonicError?,
|
||||
@JsonDeserialize(using = MusicFoldersDeserializer::class)
|
||||
val musicFolders: List<MusicFolder> = emptyList()):
|
||||
val musicFolders: List<MusicFolder> = emptyList()) :
|
||||
SubsonicResponse(status, version, error) {
|
||||
companion object {
|
||||
class MusicFoldersDeserializer(): JsonDeserializer<List<MusicFolder>>() {
|
||||
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): List<MusicFolder> {
|
||||
p!!.nextToken()
|
||||
class MusicFoldersDeserializer() : JsonDeserializer<List<MusicFolder>>() {
|
||||
override fun deserialize(p: JsonParser, ctxt: DeserializationContext?): List<MusicFolder> {
|
||||
p.nextToken()
|
||||
if (p.currentName == "musicFolder" && p.nextToken() == JsonToken.START_ARRAY) {
|
||||
val mfJavaType = ctxt!!.typeFactory
|
||||
.constructCollectionType(List::class.java, MusicFolder::class.java)
|
||||
|
@ -25,9 +25,9 @@ open class SubsonicResponse(val status: Status,
|
||||
.filter { it.jsonValue == jsonValue }.firstOrNull()
|
||||
?: throw IllegalArgumentException("Unknown status value: $jsonValue")
|
||||
|
||||
class StatusJsonDeserializer: JsonDeserializer<Status>() {
|
||||
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): Status {
|
||||
if (p!!.currentName != "status") {
|
||||
class StatusJsonDeserializer : JsonDeserializer<Status>() {
|
||||
override fun deserialize(p: JsonParser, ctxt: DeserializationContext?): Status {
|
||||
if (p.currentName != "status") {
|
||||
throw JsonParseException(p,
|
||||
"Current token is not status. Current token name ${p.currentName}.")
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply from: "../gradle_scripts/code_quality.gradle"
|
||||
|
||||
android {
|
||||
compileSdkVersion versions.compileSdk
|
||||
|
Loading…
x
Reference in New Issue
Block a user