diff --git a/.circleci/config.yml b/.circleci/config.yml
index fa7fd824..001ebc62 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -25,12 +25,12 @@ jobs:
- run:
name: unit-tests
command: |
- ./gradlew :subsonic-api:test :cache:test :subsonic-api-image-loader:testDebugUnitTest :ultrasonic:testDebugUnitTest
+ ./gradlew ciTest testDebugUnitTest
./gradlew jacocoFullReport
bash <(curl -s https://codecov.io/bash)
- run:
name: lint
- command: ./gradlew lint
+ command: ./gradlew :ultrasonic:lintRelease
- run:
name: assemble release build
command: ./gradlew assembleRelease
diff --git a/build.gradle b/build.gradle
index abcee58c..d8dd50e5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,6 +2,11 @@
buildscript {
apply from: 'dependencies.gradle'
+ ext.bootstrap = [
+ kotlinModule : "${project.rootDir}/gradle_scripts/kotlin-module-bootstrap.gradle",
+ androidModule : "${project.rootDir}/gradle_scripts/android-module-bootstrap.gradle"
+ ]
+
repositories {
jcenter()
google()
diff --git a/cache/build.gradle b/cache/build.gradle
deleted file mode 100644
index 57cecf59..00000000
--- a/cache/build.gradle
+++ /dev/null
@@ -1,46 +0,0 @@
-apply plugin: 'java-library'
-apply plugin: 'kotlin'
-apply plugin: 'jacoco'
-apply from: '../gradle_scripts/code_quality.gradle'
-
-dependencies {
- api project(':domain')
- api other.kotlinStdlib
- api other.twitterSerial
-
- testImplementation testing.junit
- testImplementation testing.kotlinJunit
- testImplementation testing.mockito
- testImplementation testing.mockitoInline
- testImplementation testing.mockitoKotlin
- testImplementation testing.kluent
-}
-
-jacoco {
- toolVersion(versions.jacoco)
-}
-
-ext {
- jacocoExclude = []
-}
-
-jacocoTestReport {
- reports {
- html.enabled true
- csv.enabled false
- xml.enabled true
- }
-
- afterEvaluate {
- classDirectories = files(classDirectories.files.collect {
- fileTree(dir: it, excludes: jacocoExclude)
- })
- }
-}
-
-test.finalizedBy jacocoTestReport
-test {
- jacoco {
- excludes += jacocoExclude
- }
-}
diff --git a/core/cache/build.gradle b/core/cache/build.gradle
new file mode 100644
index 00000000..4f9d6446
--- /dev/null
+++ b/core/cache/build.gradle
@@ -0,0 +1,12 @@
+apply from: bootstrap.kotlinModule
+
+dependencies {
+ api project(':core:domain')
+ api other.twitterSerial
+
+ testImplementation testing.kotlinJunit
+ testImplementation testing.mockito
+ testImplementation testing.mockitoInline
+ testImplementation testing.mockitoKotlin
+ testImplementation testing.kluent
+}
diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/Directories.kt b/core/cache/src/main/kotlin/org/moire/ultrasonic/cache/Directories.kt
similarity index 100%
rename from cache/src/main/kotlin/org/moire/ultrasonic/cache/Directories.kt
rename to core/cache/src/main/kotlin/org/moire/ultrasonic/cache/Directories.kt
diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt b/core/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt
similarity index 100%
rename from cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt
rename to core/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt
diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt b/core/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt
similarity index 100%
rename from cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt
rename to core/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt
diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt b/core/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt
similarity index 100%
rename from cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt
rename to core/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt
diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt b/core/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt
similarity index 100%
rename from cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt
rename to core/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/BaseStorageTest.kt b/core/cache/src/test/kotlin/org/moire/ultrasonic/cache/BaseStorageTest.kt
similarity index 100%
rename from cache/src/test/kotlin/org/moire/ultrasonic/cache/BaseStorageTest.kt
rename to core/cache/src/test/kotlin/org/moire/ultrasonic/cache/BaseStorageTest.kt
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt b/core/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt
similarity index 100%
rename from cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt
rename to core/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt b/core/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt
similarity index 100%
rename from cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt
rename to core/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt b/core/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt
similarity index 100%
rename from cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt
rename to core/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt b/core/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt
similarity index 100%
rename from cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt
rename to core/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt
diff --git a/core/domain/build.gradle b/core/domain/build.gradle
new file mode 100644
index 00000000..b6d0f5d0
--- /dev/null
+++ b/core/domain/build.gradle
@@ -0,0 +1,10 @@
+apply from: bootstrap.kotlinModule
+
+ext {
+ jacocoExclude = [
+ '**/domain/**'
+ ]
+}
+dependencies {
+ api other.semver
+}
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/Artist.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Artist.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/Artist.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Artist.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/ChatMessage.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/ChatMessage.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/ChatMessage.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/ChatMessage.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/Genre.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Genre.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/Genre.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Genre.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/Indexes.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Indexes.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/Indexes.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Indexes.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/JukeboxStatus.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/JukeboxStatus.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/JukeboxStatus.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/JukeboxStatus.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/Lyrics.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Lyrics.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/Lyrics.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Lyrics.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicFolder.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicFolder.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicFolder.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicFolder.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/PlayerState.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/PlayerState.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/PlayerState.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/PlayerState.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/Playlist.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Playlist.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/Playlist.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Playlist.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/PodcastsChannel.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/PodcastsChannel.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/PodcastsChannel.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/PodcastsChannel.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/RepeatMode.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/RepeatMode.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/RepeatMode.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/RepeatMode.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchCriteria.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchCriteria.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchCriteria.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchCriteria.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/UserInfo.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/UserInfo.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/UserInfo.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/UserInfo.kt
diff --git a/domain/src/main/kotlin/org/moire/ultrasonic/domain/Version.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Version.kt
similarity index 100%
rename from domain/src/main/kotlin/org/moire/ultrasonic/domain/Version.kt
rename to core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Version.kt
diff --git a/core/library/build.gradle b/core/library/build.gradle
new file mode 100644
index 00000000..75940e1c
--- /dev/null
+++ b/core/library/build.gradle
@@ -0,0 +1,13 @@
+apply from: bootstrap.androidModule
+apply plugin: 'com.android.library'
+
+android {
+ lintOptions {
+ baselineFile file("lint-baseline.xml")
+ abortOnError true
+ }
+}
+
+dependencies {
+ api androidSupport.support
+}
diff --git a/library/lint-baseline.xml b/core/library/lint-baseline.xml
similarity index 100%
rename from library/lint-baseline.xml
rename to core/library/lint-baseline.xml
diff --git a/library/src/main/AndroidManifest.xml b/core/library/src/main/AndroidManifest.xml
similarity index 70%
rename from library/src/main/AndroidManifest.xml
rename to core/library/src/main/AndroidManifest.xml
index f0ef29f3..7a731338 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/core/library/src/main/AndroidManifest.xml
@@ -3,6 +3,4 @@
package="com.mobeta.android.dslv"
android:versionCode="4"
android:versionName="0.6.1">
-
-
+
diff --git a/library/src/main/java/com/mobeta/android/dslv/DragSortController.java b/core/library/src/main/java/com/mobeta/android/dslv/DragSortController.java
similarity index 100%
rename from library/src/main/java/com/mobeta/android/dslv/DragSortController.java
rename to core/library/src/main/java/com/mobeta/android/dslv/DragSortController.java
diff --git a/library/src/main/java/com/mobeta/android/dslv/DragSortCursorAdapter.java b/core/library/src/main/java/com/mobeta/android/dslv/DragSortCursorAdapter.java
similarity index 100%
rename from library/src/main/java/com/mobeta/android/dslv/DragSortCursorAdapter.java
rename to core/library/src/main/java/com/mobeta/android/dslv/DragSortCursorAdapter.java
diff --git a/library/src/main/java/com/mobeta/android/dslv/DragSortItemView.java b/core/library/src/main/java/com/mobeta/android/dslv/DragSortItemView.java
similarity index 100%
rename from library/src/main/java/com/mobeta/android/dslv/DragSortItemView.java
rename to core/library/src/main/java/com/mobeta/android/dslv/DragSortItemView.java
diff --git a/library/src/main/java/com/mobeta/android/dslv/DragSortItemViewCheckable.java b/core/library/src/main/java/com/mobeta/android/dslv/DragSortItemViewCheckable.java
similarity index 100%
rename from library/src/main/java/com/mobeta/android/dslv/DragSortItemViewCheckable.java
rename to core/library/src/main/java/com/mobeta/android/dslv/DragSortItemViewCheckable.java
diff --git a/library/src/main/java/com/mobeta/android/dslv/DragSortListView.java b/core/library/src/main/java/com/mobeta/android/dslv/DragSortListView.java
similarity index 100%
rename from library/src/main/java/com/mobeta/android/dslv/DragSortListView.java
rename to core/library/src/main/java/com/mobeta/android/dslv/DragSortListView.java
diff --git a/library/src/main/java/com/mobeta/android/dslv/ResourceDragSortCursorAdapter.java b/core/library/src/main/java/com/mobeta/android/dslv/ResourceDragSortCursorAdapter.java
similarity index 100%
rename from library/src/main/java/com/mobeta/android/dslv/ResourceDragSortCursorAdapter.java
rename to core/library/src/main/java/com/mobeta/android/dslv/ResourceDragSortCursorAdapter.java
diff --git a/library/src/main/java/com/mobeta/android/dslv/SimpleDragSortCursorAdapter.java b/core/library/src/main/java/com/mobeta/android/dslv/SimpleDragSortCursorAdapter.java
similarity index 100%
rename from library/src/main/java/com/mobeta/android/dslv/SimpleDragSortCursorAdapter.java
rename to core/library/src/main/java/com/mobeta/android/dslv/SimpleDragSortCursorAdapter.java
diff --git a/library/src/main/java/com/mobeta/android/dslv/SimpleFloatViewManager.java b/core/library/src/main/java/com/mobeta/android/dslv/SimpleFloatViewManager.java
similarity index 100%
rename from library/src/main/java/com/mobeta/android/dslv/SimpleFloatViewManager.java
rename to core/library/src/main/java/com/mobeta/android/dslv/SimpleFloatViewManager.java
diff --git a/library/src/main/res/values/dslv_attrs.xml b/core/library/src/main/res/values/dslv_attrs.xml
similarity index 100%
rename from library/src/main/res/values/dslv_attrs.xml
rename to core/library/src/main/res/values/dslv_attrs.xml
diff --git a/core/menudrawer/build.gradle b/core/menudrawer/build.gradle
new file mode 100644
index 00000000..102c5711
--- /dev/null
+++ b/core/menudrawer/build.gradle
@@ -0,0 +1,8 @@
+apply from: bootstrap.androidModule
+
+android {
+ lintOptions {
+ baselineFile file("lint-baseline.xml")
+ abortOnError true
+ }
+}
diff --git a/menudrawer/lint-baseline.xml b/core/menudrawer/lint-baseline.xml
similarity index 100%
rename from menudrawer/lint-baseline.xml
rename to core/menudrawer/lint-baseline.xml
diff --git a/menudrawer/src/main/AndroidManifest.xml b/core/menudrawer/src/main/AndroidManifest.xml
similarity index 75%
rename from menudrawer/src/main/AndroidManifest.xml
rename to core/menudrawer/src/main/AndroidManifest.xml
index 0dc0710c..c80a4f06 100644
--- a/menudrawer/src/main/AndroidManifest.xml
+++ b/core/menudrawer/src/main/AndroidManifest.xml
@@ -3,6 +3,4 @@
package="net.simonvt.menudrawer"
android:versionCode="6"
android:versionName="3.0.2">
-
-
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/BuildLayerFrameLayout.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/BuildLayerFrameLayout.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/BuildLayerFrameLayout.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/BuildLayerFrameLayout.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/ColorDrawable.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/ColorDrawable.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/ColorDrawable.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/ColorDrawable.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/DraggableDrawer.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/DraggableDrawer.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/DraggableDrawer.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/DraggableDrawer.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/FloatScroller.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/FloatScroller.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/FloatScroller.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/FloatScroller.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/MenuDrawer.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/MenuDrawer.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/MenuDrawer.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/MenuDrawer.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/NoClickThroughFrameLayout.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/NoClickThroughFrameLayout.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/NoClickThroughFrameLayout.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/NoClickThroughFrameLayout.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/OverlayDrawer.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/OverlayDrawer.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/OverlayDrawer.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/OverlayDrawer.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/PeekInterpolator.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/PeekInterpolator.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/PeekInterpolator.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/PeekInterpolator.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/Position.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/Position.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/Position.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/Position.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/Scroller.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/Scroller.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/Scroller.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/Scroller.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/SinusoidalInterpolator.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/SinusoidalInterpolator.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/SinusoidalInterpolator.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/SinusoidalInterpolator.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/SlideDrawable.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/SlideDrawable.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/SlideDrawable.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/SlideDrawable.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/SlidingDrawer.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/SlidingDrawer.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/SlidingDrawer.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/SlidingDrawer.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/SmoothInterpolator.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/SmoothInterpolator.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/SmoothInterpolator.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/SmoothInterpolator.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/StaticDrawer.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/StaticDrawer.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/StaticDrawer.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/StaticDrawer.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/ViewHelper.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/ViewHelper.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/ViewHelper.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/ViewHelper.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelper.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelper.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelper.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelper.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelperCompat.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelperCompat.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelperCompat.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelperCompat.java
diff --git a/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelperNative.java b/core/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelperNative.java
similarity index 100%
rename from menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelperNative.java
rename to core/menudrawer/src/main/java/net/simonvt/menudrawer/compat/ActionBarHelperNative.java
diff --git a/menudrawer/src/main/res/values/attrs.xml b/core/menudrawer/src/main/res/values/attrs.xml
similarity index 100%
rename from menudrawer/src/main/res/values/attrs.xml
rename to core/menudrawer/src/main/res/values/attrs.xml
diff --git a/menudrawer/src/main/res/values/colors.xml b/core/menudrawer/src/main/res/values/colors.xml
similarity index 100%
rename from menudrawer/src/main/res/values/colors.xml
rename to core/menudrawer/src/main/res/values/colors.xml
diff --git a/menudrawer/src/main/res/values/ids.xml b/core/menudrawer/src/main/res/values/ids.xml
similarity index 100%
rename from menudrawer/src/main/res/values/ids.xml
rename to core/menudrawer/src/main/res/values/ids.xml
diff --git a/menudrawer/src/main/res/values/strings.xml b/core/menudrawer/src/main/res/values/strings.xml
similarity index 100%
rename from menudrawer/src/main/res/values/strings.xml
rename to core/menudrawer/src/main/res/values/strings.xml
diff --git a/menudrawer/src/main/res/values/styles.xml b/core/menudrawer/src/main/res/values/styles.xml
similarity index 100%
rename from menudrawer/src/main/res/values/styles.xml
rename to core/menudrawer/src/main/res/values/styles.xml
diff --git a/core/pulltorefresh/build.gradle b/core/pulltorefresh/build.gradle
new file mode 100644
index 00000000..102c5711
--- /dev/null
+++ b/core/pulltorefresh/build.gradle
@@ -0,0 +1,8 @@
+apply from: bootstrap.androidModule
+
+android {
+ lintOptions {
+ baselineFile file("lint-baseline.xml")
+ abortOnError true
+ }
+}
diff --git a/pulltorefresh/lint-baseline.xml b/core/pulltorefresh/lint-baseline.xml
similarity index 100%
rename from pulltorefresh/lint-baseline.xml
rename to core/pulltorefresh/lint-baseline.xml
diff --git a/pulltorefresh/src/main/AndroidManifest.xml b/core/pulltorefresh/src/main/AndroidManifest.xml
similarity index 72%
rename from pulltorefresh/src/main/AndroidManifest.xml
rename to core/pulltorefresh/src/main/AndroidManifest.xml
index 6382ef54..2dc1eb5f 100644
--- a/pulltorefresh/src/main/AndroidManifest.xml
+++ b/core/pulltorefresh/src/main/AndroidManifest.xml
@@ -3,6 +3,4 @@
package="com.handmark.pulltorefresh.library"
android:versionCode="2110"
android:versionName="2.1.1">
-
-
\ No newline at end of file
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/ILoadingLayout.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/ILoadingLayout.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/ILoadingLayout.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/ILoadingLayout.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/IPullToRefresh.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/IPullToRefresh.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/IPullToRefresh.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/IPullToRefresh.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/LoadingLayoutProxy.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/LoadingLayoutProxy.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/LoadingLayoutProxy.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/LoadingLayoutProxy.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/OverscrollHelper.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/OverscrollHelper.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/OverscrollHelper.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/OverscrollHelper.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshAdapterViewBase.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshAdapterViewBase.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshAdapterViewBase.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshAdapterViewBase.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshBase.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshBase.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshBase.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshBase.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshExpandableListView.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshExpandableListView.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshExpandableListView.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshExpandableListView.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshGridView.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshGridView.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshGridView.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshGridView.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshHorizontalScrollView.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshHorizontalScrollView.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshHorizontalScrollView.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshHorizontalScrollView.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshScrollView.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshScrollView.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshScrollView.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshScrollView.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshWebView.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshWebView.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshWebView.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshWebView.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/extras/SoundPullEventListener.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/extras/SoundPullEventListener.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/extras/SoundPullEventListener.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/extras/SoundPullEventListener.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/EmptyViewMethodAccessor.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/EmptyViewMethodAccessor.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/EmptyViewMethodAccessor.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/EmptyViewMethodAccessor.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/FlipLoadingLayout.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/FlipLoadingLayout.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/FlipLoadingLayout.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/FlipLoadingLayout.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/IndicatorLayout.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/IndicatorLayout.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/IndicatorLayout.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/IndicatorLayout.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/LoadingLayout.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/LoadingLayout.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/LoadingLayout.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/LoadingLayout.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/RotateLoadingLayout.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/RotateLoadingLayout.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/RotateLoadingLayout.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/RotateLoadingLayout.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/Utils.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/Utils.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/Utils.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/Utils.java
diff --git a/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/ViewCompat.java b/core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/ViewCompat.java
similarity index 100%
rename from pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/ViewCompat.java
rename to core/pulltorefresh/src/main/java/com/handmark/pulltorefresh/library/internal/ViewCompat.java
diff --git a/pulltorefresh/src/main/res/anim/slide_in_from_bottom.xml b/core/pulltorefresh/src/main/res/anim/slide_in_from_bottom.xml
similarity index 100%
rename from pulltorefresh/src/main/res/anim/slide_in_from_bottom.xml
rename to core/pulltorefresh/src/main/res/anim/slide_in_from_bottom.xml
diff --git a/pulltorefresh/src/main/res/anim/slide_in_from_top.xml b/core/pulltorefresh/src/main/res/anim/slide_in_from_top.xml
similarity index 100%
rename from pulltorefresh/src/main/res/anim/slide_in_from_top.xml
rename to core/pulltorefresh/src/main/res/anim/slide_in_from_top.xml
diff --git a/pulltorefresh/src/main/res/anim/slide_out_to_bottom.xml b/core/pulltorefresh/src/main/res/anim/slide_out_to_bottom.xml
similarity index 100%
rename from pulltorefresh/src/main/res/anim/slide_out_to_bottom.xml
rename to core/pulltorefresh/src/main/res/anim/slide_out_to_bottom.xml
diff --git a/pulltorefresh/src/main/res/anim/slide_out_to_top.xml b/core/pulltorefresh/src/main/res/anim/slide_out_to_top.xml
similarity index 100%
rename from pulltorefresh/src/main/res/anim/slide_out_to_top.xml
rename to core/pulltorefresh/src/main/res/anim/slide_out_to_top.xml
diff --git a/pulltorefresh/src/main/res/drawable-hdpi/default_ptr_flip.png b/core/pulltorefresh/src/main/res/drawable-hdpi/default_ptr_flip.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-hdpi/default_ptr_flip.png
rename to core/pulltorefresh/src/main/res/drawable-hdpi/default_ptr_flip.png
diff --git a/pulltorefresh/src/main/res/drawable-hdpi/default_ptr_rotate.png b/core/pulltorefresh/src/main/res/drawable-hdpi/default_ptr_rotate.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-hdpi/default_ptr_rotate.png
rename to core/pulltorefresh/src/main/res/drawable-hdpi/default_ptr_rotate.png
diff --git a/pulltorefresh/src/main/res/drawable-hdpi/indicator_arrow.png b/core/pulltorefresh/src/main/res/drawable-hdpi/indicator_arrow.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-hdpi/indicator_arrow.png
rename to core/pulltorefresh/src/main/res/drawable-hdpi/indicator_arrow.png
diff --git a/pulltorefresh/src/main/res/drawable-mdpi/default_ptr_flip.png b/core/pulltorefresh/src/main/res/drawable-mdpi/default_ptr_flip.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-mdpi/default_ptr_flip.png
rename to core/pulltorefresh/src/main/res/drawable-mdpi/default_ptr_flip.png
diff --git a/pulltorefresh/src/main/res/drawable-mdpi/default_ptr_rotate.png b/core/pulltorefresh/src/main/res/drawable-mdpi/default_ptr_rotate.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-mdpi/default_ptr_rotate.png
rename to core/pulltorefresh/src/main/res/drawable-mdpi/default_ptr_rotate.png
diff --git a/pulltorefresh/src/main/res/drawable-mdpi/indicator_arrow.png b/core/pulltorefresh/src/main/res/drawable-mdpi/indicator_arrow.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-mdpi/indicator_arrow.png
rename to core/pulltorefresh/src/main/res/drawable-mdpi/indicator_arrow.png
diff --git a/pulltorefresh/src/main/res/drawable-xhdpi/default_ptr_flip.png b/core/pulltorefresh/src/main/res/drawable-xhdpi/default_ptr_flip.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-xhdpi/default_ptr_flip.png
rename to core/pulltorefresh/src/main/res/drawable-xhdpi/default_ptr_flip.png
diff --git a/pulltorefresh/src/main/res/drawable-xhdpi/default_ptr_rotate.png b/core/pulltorefresh/src/main/res/drawable-xhdpi/default_ptr_rotate.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-xhdpi/default_ptr_rotate.png
rename to core/pulltorefresh/src/main/res/drawable-xhdpi/default_ptr_rotate.png
diff --git a/pulltorefresh/src/main/res/drawable-xhdpi/indicator_arrow.png b/core/pulltorefresh/src/main/res/drawable-xhdpi/indicator_arrow.png
similarity index 100%
rename from pulltorefresh/src/main/res/drawable-xhdpi/indicator_arrow.png
rename to core/pulltorefresh/src/main/res/drawable-xhdpi/indicator_arrow.png
diff --git a/pulltorefresh/src/main/res/drawable/indicator_bg_bottom.xml b/core/pulltorefresh/src/main/res/drawable/indicator_bg_bottom.xml
similarity index 100%
rename from pulltorefresh/src/main/res/drawable/indicator_bg_bottom.xml
rename to core/pulltorefresh/src/main/res/drawable/indicator_bg_bottom.xml
diff --git a/pulltorefresh/src/main/res/drawable/indicator_bg_top.xml b/core/pulltorefresh/src/main/res/drawable/indicator_bg_top.xml
similarity index 100%
rename from pulltorefresh/src/main/res/drawable/indicator_bg_top.xml
rename to core/pulltorefresh/src/main/res/drawable/indicator_bg_top.xml
diff --git a/pulltorefresh/src/main/res/layout/pull_to_refresh_header_horizontal.xml b/core/pulltorefresh/src/main/res/layout/pull_to_refresh_header_horizontal.xml
similarity index 100%
rename from pulltorefresh/src/main/res/layout/pull_to_refresh_header_horizontal.xml
rename to core/pulltorefresh/src/main/res/layout/pull_to_refresh_header_horizontal.xml
diff --git a/pulltorefresh/src/main/res/layout/pull_to_refresh_header_vertical.xml b/core/pulltorefresh/src/main/res/layout/pull_to_refresh_header_vertical.xml
similarity index 100%
rename from pulltorefresh/src/main/res/layout/pull_to_refresh_header_vertical.xml
rename to core/pulltorefresh/src/main/res/layout/pull_to_refresh_header_vertical.xml
diff --git a/core/pulltorefresh/src/main/res/values-ar/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-ar/pull_refresh_strings.xml
new file mode 100644
index 00000000..25d5392d
--- /dev/null
+++ b/core/pulltorefresh/src/main/res/values-ar/pull_refresh_strings.xml
@@ -0,0 +1,6 @@
+
+
+ اسحب للتحديث…
+ اترك للتحديث…
+ تحميل…
+
diff --git a/pulltorefresh/src/main/res/values-cs/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-cs/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-cs/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-cs/pull_refresh_strings.xml
index a8f0acea..c878da0c 100755
--- a/pulltorefresh/src/main/res/values-cs/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-cs/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Tažením aktualizujete…
- Uvolněním aktualizujete…
- Načítání…
-
+
+
+ Tažením aktualizujete…
+ Uvolněním aktualizujete…
+ Načítání…
+
diff --git a/pulltorefresh/src/main/res/values-de/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-de/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-de/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-de/pull_refresh_strings.xml
index 3f773deb..901291bf 100755
--- a/pulltorefresh/src/main/res/values-de/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-de/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Ziehen zum Aktualisieren…
- Loslassen zum Aktualisieren…
- Laden…
-
+
+
+ Ziehen zum Aktualisieren…
+ Loslassen zum Aktualisieren…
+ Laden…
+
diff --git a/pulltorefresh/src/main/res/values-es/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-es/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-es/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-es/pull_refresh_strings.xml
index 6f85c100..5e9d2803 100755
--- a/pulltorefresh/src/main/res/values-es/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-es/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Tirar para actualizar…
- Soltar para actualizar…
- Cargando…
-
+
+
+ Tirar para actualizar…
+ Soltar para actualizar…
+ Cargando…
+
diff --git a/pulltorefresh/src/main/res/values-fi/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-fi/pull_refresh_strings.xml
similarity index 100%
rename from pulltorefresh/src/main/res/values-fi/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-fi/pull_refresh_strings.xml
diff --git a/pulltorefresh/src/main/res/values-fr/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-fr/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-fr/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-fr/pull_refresh_strings.xml
index e59f07ec..fb53ef8c 100755
--- a/pulltorefresh/src/main/res/values-fr/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-fr/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Tirez pour rafraîchir…
- Relâcher pour rafraîchir…
- Chargement…
-
+
+
+ Tirez pour rafraîchir…
+ Relâcher pour rafraîchir…
+ Chargement…
+
diff --git a/pulltorefresh/src/main/res/values-he/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-he/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-he/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-he/pull_refresh_strings.xml
index f22f7853..beedc1f6 100644
--- a/pulltorefresh/src/main/res/values-he/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-he/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- משוך לרענון…
- שחרר לרענון…
- טוען…
-
+
+
+ משוך לרענון…
+ שחרר לרענון…
+ טוען…
+
diff --git a/pulltorefresh/src/main/res/values-it/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-it/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-it/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-it/pull_refresh_strings.xml
index 9eaa7495..415fb9ed 100755
--- a/pulltorefresh/src/main/res/values-it/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-it/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Tira per aggiornare…
- Rilascia per aggionare…
- Caricamento…
-
+
+
+ Tira per aggiornare…
+ Rilascia per aggionare…
+ Caricamento…
+
diff --git a/pulltorefresh/src/main/res/values-iw/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-iw/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-iw/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-iw/pull_refresh_strings.xml
index f22f7853..beedc1f6 100644
--- a/pulltorefresh/src/main/res/values-iw/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-iw/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- משוך לרענון…
- שחרר לרענון…
- טוען…
-
+
+
+ משוך לרענון…
+ שחרר לרענון…
+ טוען…
+
diff --git a/pulltorefresh/src/main/res/values-ja/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-ja/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-ja/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-ja/pull_refresh_strings.xml
index 12415443..d24842c9 100644
--- a/pulltorefresh/src/main/res/values-ja/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-ja/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- 画面を引っ張って…
- 指を離して更新…
- 読み込み中…
-
+
+
+ 画面を引っ張って…
+ 指を離して更新…
+ 読み込み中…
+
diff --git a/pulltorefresh/src/main/res/values-ko/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-ko/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-ko/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-ko/pull_refresh_strings.xml
index 15d86d4d..53edd592 100755
--- a/pulltorefresh/src/main/res/values-ko/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-ko/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- 당겨서 새로 고침…
- 놓아서 새로 고침…
- 로드 중…
-
+
+
+ 당겨서 새로 고침…
+ 놓아서 새로 고침…
+ 로드 중…
+
diff --git a/pulltorefresh/src/main/res/values-nl/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-nl/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-nl/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-nl/pull_refresh_strings.xml
index 0701c9b4..4c063ed9 100755
--- a/pulltorefresh/src/main/res/values-nl/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-nl/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Sleep om te vernieuwen…
- Loslaten om te vernieuwen…
- Laden…
-
+
+
+ Sleep om te vernieuwen…
+ Loslaten om te vernieuwen…
+ Laden…
+
diff --git a/pulltorefresh/src/main/res/values-pl/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-pl/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-pl/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-pl/pull_refresh_strings.xml
index 7d474c18..007255a2 100755
--- a/pulltorefresh/src/main/res/values-pl/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-pl/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Pociągnij, aby odświeżyć…
- Puść, aby odświeżyć…
- Wczytywanie…
-
+
+
+ Pociągnij, aby odświeżyć…
+ Puść, aby odświeżyć…
+ Wczytywanie…
+
diff --git a/pulltorefresh/src/main/res/values-pt-rBR/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-pt-rBR/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-pt-rBR/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-pt-rBR/pull_refresh_strings.xml
index 1a4359a8..0ec1ef7f 100755
--- a/pulltorefresh/src/main/res/values-pt-rBR/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-pt-rBR/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Puxe para atualizar…
- Libere para atualizar…
- Carregando…
-
+
+
+ Puxe para atualizar…
+ Libere para atualizar…
+ Carregando…
+
diff --git a/pulltorefresh/src/main/res/values-pt/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-pt/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-pt/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-pt/pull_refresh_strings.xml
index 71eea31a..d08bc63b 100755
--- a/pulltorefresh/src/main/res/values-pt/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-pt/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Puxe para atualizar…
- Liberação para atualizar…
- A carregar…
-
+
+
+ Puxe para atualizar…
+ Liberação para atualizar…
+ A carregar…
+
diff --git a/pulltorefresh/src/main/res/values-ro/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-ro/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-ro/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-ro/pull_refresh_strings.xml
index c89e80a9..87ddc941 100644
--- a/pulltorefresh/src/main/res/values-ro/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-ro/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Trage pentru a reîmprospăta…
- Eliberează pentru a reîmprospăta…
- Încărcare…
-
+
+
+ Trage pentru a reîmprospăta…
+ Eliberează pentru a reîmprospăta…
+ Încărcare…
+
diff --git a/pulltorefresh/src/main/res/values-ru/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-ru/pull_refresh_strings.xml
similarity index 98%
rename from pulltorefresh/src/main/res/values-ru/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-ru/pull_refresh_strings.xml
index ca364ff8..71ddcda7 100755
--- a/pulltorefresh/src/main/res/values-ru/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-ru/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- Потяните для обновления…
- Отпустите для обновления…
- Загрузка…
-
+
+
+ Потяните для обновления…
+ Отпустите для обновления…
+ Загрузка…
+
diff --git a/pulltorefresh/src/main/res/values-zh/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values-zh/pull_refresh_strings.xml
similarity index 97%
rename from pulltorefresh/src/main/res/values-zh/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values-zh/pull_refresh_strings.xml
index 397376be..08766e0b 100755
--- a/pulltorefresh/src/main/res/values-zh/pull_refresh_strings.xml
+++ b/core/pulltorefresh/src/main/res/values-zh/pull_refresh_strings.xml
@@ -1,6 +1,6 @@
-
-
- 下拉刷新…
- 放开以刷新…
- 正在载入…
-
+
+
+ 下拉刷新…
+ 放开以刷新…
+ 正在载入…
+
diff --git a/pulltorefresh/src/main/res/values/attrs.xml b/core/pulltorefresh/src/main/res/values/attrs.xml
similarity index 100%
rename from pulltorefresh/src/main/res/values/attrs.xml
rename to core/pulltorefresh/src/main/res/values/attrs.xml
diff --git a/pulltorefresh/src/main/res/values/dimens.xml b/core/pulltorefresh/src/main/res/values/dimens.xml
similarity index 100%
rename from pulltorefresh/src/main/res/values/dimens.xml
rename to core/pulltorefresh/src/main/res/values/dimens.xml
diff --git a/pulltorefresh/src/main/res/values/ids.xml b/core/pulltorefresh/src/main/res/values/ids.xml
similarity index 100%
rename from pulltorefresh/src/main/res/values/ids.xml
rename to core/pulltorefresh/src/main/res/values/ids.xml
diff --git a/pulltorefresh/src/main/res/values/pull_refresh_strings.xml b/core/pulltorefresh/src/main/res/values/pull_refresh_strings.xml
similarity index 100%
rename from pulltorefresh/src/main/res/values/pull_refresh_strings.xml
rename to core/pulltorefresh/src/main/res/values/pull_refresh_strings.xml
diff --git a/core/subsonic-api-image-loader/build.gradle b/core/subsonic-api-image-loader/build.gradle
new file mode 100644
index 00000000..40c63863
--- /dev/null
+++ b/core/subsonic-api-image-loader/build.gradle
@@ -0,0 +1,22 @@
+apply from: bootstrap.androidModule
+
+android {
+ libraryVariants.all {
+ generateBuildConfig.enabled = true
+ }
+}
+
+dependencies {
+ api project(':core:domain')
+ api project(':core:subsonic-api')
+ api(other.picasso) {
+ exclude group: "com.android.support"
+ }
+
+ testImplementation testing.kotlinJunit
+ testImplementation testing.mockito
+ testImplementation testing.mockitoInline
+ testImplementation testing.mockitoKotlin
+ testImplementation testing.kluent
+ testImplementation testing.robolectric
+}
diff --git a/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandlerTest.kt b/core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandlerTest.kt
similarity index 97%
rename from subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandlerTest.kt
rename to core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandlerTest.kt
index 4dbc5f33..df1ae690 100644
--- a/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandlerTest.kt
+++ b/core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandlerTest.kt
@@ -50,7 +50,7 @@ class AvatarRequestHandlerTest {
handler.load(requestUri.buildRequest(), 0)
}
- fail `should throw` IllegalStateException::class
+ fail `should throw` IllegalArgumentException::class
}
@Test
diff --git a/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CommonFunctions.kt b/core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CommonFunctions.kt
similarity index 100%
rename from subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CommonFunctions.kt
rename to core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CommonFunctions.kt
diff --git a/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandlerTest.kt b/core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandlerTest.kt
similarity index 97%
rename from subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandlerTest.kt
rename to core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandlerTest.kt
index a4d74733..cfef4c4e 100644
--- a/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandlerTest.kt
+++ b/core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandlerTest.kt
@@ -50,7 +50,7 @@ class CoverArtRequestHandlerTest {
handler.load(requestUri.buildRequest(), 0)
}
- fail `should throw` IllegalStateException::class
+ fail `should throw` IllegalArgumentException::class
}
@Test
diff --git a/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/RequestCreatorTest.kt b/core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/RequestCreatorTest.kt
similarity index 100%
rename from subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/RequestCreatorTest.kt
rename to core/subsonic-api-image-loader/src/integrationTest/kotlin/org/moire/ultrasonic/subsonic/loader/image/RequestCreatorTest.kt
diff --git a/subsonic-api-image-loader/src/integrationTest/resources/Big_Buck_Bunny.jpeg b/core/subsonic-api-image-loader/src/integrationTest/resources/Big_Buck_Bunny.jpeg
similarity index 100%
rename from subsonic-api-image-loader/src/integrationTest/resources/Big_Buck_Bunny.jpeg
rename to core/subsonic-api-image-loader/src/integrationTest/resources/Big_Buck_Bunny.jpeg
diff --git a/subsonic-api-image-loader/src/main/AndroidManifest.xml b/core/subsonic-api-image-loader/src/main/AndroidManifest.xml
similarity index 100%
rename from subsonic-api-image-loader/src/main/AndroidManifest.xml
rename to core/subsonic-api-image-loader/src/main/AndroidManifest.xml
diff --git a/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandler.kt b/core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandler.kt
similarity index 93%
rename from subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandler.kt
rename to core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandler.kt
index afce254e..f74f0bcf 100644
--- a/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandler.kt
+++ b/core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/AvatarRequestHandler.kt
@@ -23,6 +23,7 @@ class AvatarRequestHandler(
override fun load(request: Request, networkPolicy: Int): Result {
val username = request.uri.getQueryParameter(QUERY_USERNAME)
+ ?: throw IllegalArgumentException("Nullable username")
val response = apiClient.getAvatar(username)
if (response.hasError()) {
diff --git a/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandler.kt b/core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandler.kt
similarity index 94%
rename from subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandler.kt
rename to core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandler.kt
index 8c6f4cd3..d9c50dc9 100644
--- a/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandler.kt
+++ b/core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/CoverArtRequestHandler.kt
@@ -21,6 +21,7 @@ class CoverArtRequestHandler(private val apiClient: SubsonicAPIClient) : Request
override fun load(request: Request, networkPolicy: Int): Result {
val id = request.uri.getQueryParameter(QUERY_ID)
+ ?: throw IllegalArgumentException("Nullable id")
val response = apiClient.getCoverArt(id)
if (response.hasError()) {
diff --git a/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/RequestCreator.kt b/core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/RequestCreator.kt
similarity index 100%
rename from subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/RequestCreator.kt
rename to core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/RequestCreator.kt
diff --git a/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/SubsonicImageLoader.kt b/core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/SubsonicImageLoader.kt
similarity index 100%
rename from subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/SubsonicImageLoader.kt
rename to core/subsonic-api-image-loader/src/main/kotlin/org/moire/ultrasonic/subsonic/loader/image/SubsonicImageLoader.kt
diff --git a/core/subsonic-api/build.gradle b/core/subsonic-api/build.gradle
new file mode 100644
index 00000000..2e4582fe
--- /dev/null
+++ b/core/subsonic-api/build.gradle
@@ -0,0 +1,29 @@
+apply from: bootstrap.kotlinModule
+
+dependencies {
+ api other.retrofit
+ api other.jacksonConverter
+ api other.koinCore
+
+ implementation(other.jacksonKotlin) {
+ exclude module: 'kotlin-reflect'
+ }
+ implementation other.kotlinReflect // for jackson kotlin, but to use the same version
+ implementation other.okhttpLogging
+
+ testImplementation testing.kotlinJunit
+ testImplementation testing.mockito
+ testImplementation testing.mockitoInline
+ testImplementation testing.mockitoKotlin
+ testImplementation testing.kluent
+ testImplementation testing.mockWebServer
+ testImplementation testing.apacheCodecs
+}
+
+ext {
+ // Excluding data classes
+ jacocoExclude = [
+ '**/models/**',
+ '**/di/**'
+ ]
+}
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/CommonFunctions.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/CommonFunctions.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/CommonFunctions.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/CommonFunctions.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/GetStreamUrlTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/GetStreamUrlTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/GetStreamUrlTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/GetStreamUrlTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClientTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClientTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClientTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClientTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiAddChatMessageTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiAddChatMessageTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiAddChatMessageTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiAddChatMessageTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreateBookmarkTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreateBookmarkTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreateBookmarkTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreateBookmarkTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreatePlaylistTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreatePlaylistTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreatePlaylistTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreatePlaylistTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreateShareTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreateShareTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreateShareTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiCreateShareTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteBookmarkTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteBookmarkTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteBookmarkTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteBookmarkTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeletePlaylistTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeletePlaylistTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeletePlaylistTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeletePlaylistTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteShareTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteShareTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteShareTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteShareTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiErrorsTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiErrorsTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiErrorsTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiErrorsTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumList2Test.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumList2Test.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumList2Test.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumList2Test.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumListRequestTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumListRequestTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumListRequestTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumListRequestTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAlbumTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetArtistTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetArtistTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetArtistTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetArtistTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetArtistsTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetArtistsTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetArtistsTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetArtistsTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAvatarTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAvatarTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAvatarTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetAvatarTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetBookmarksTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetBookmarksTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetBookmarksTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetBookmarksTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetChatMessagesTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetChatMessagesTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetChatMessagesTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetChatMessagesTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetCoverArtTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetCoverArtTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetCoverArtTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetCoverArtTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetGenresTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetGenresTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetGenresTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetGenresTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetIndexesTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetIndexesTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetIndexesTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetIndexesTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetLicenseTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetLicenseTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetLicenseTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetLicenseTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetLyricsTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetLyricsTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetLyricsTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetLyricsTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicDirectoryTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicDirectoryTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicDirectoryTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicDirectoryTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicFoldersTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicFoldersTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicFoldersTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicFoldersTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPlaylistTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPlaylistTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPlaylistTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPlaylistTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPlaylistsTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPlaylistsTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPlaylistsTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPlaylistsTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPodcastsTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPodcastsTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPodcastsTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetPodcastsTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetRandomSongsTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetRandomSongsTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetRandomSongsTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetRandomSongsTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetSharesTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetSharesTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetSharesTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetSharesTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetSongsByGenreTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetSongsByGenreTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetSongsByGenreTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetSongsByGenreTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetStarred2Test.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetStarred2Test.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetStarred2Test.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetStarred2Test.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetStarredTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetStarredTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetStarredTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetStarredTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetUserTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetUserTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetUserTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetUserTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetVideosListTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetVideosListTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetVideosListTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetVideosListTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiJukeboxControlTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiJukeboxControlTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiJukeboxControlTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiJukeboxControlTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiPasswordTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiPasswordTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiPasswordTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiPasswordTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiPingRequestTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiPingRequestTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiPingRequestTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiPingRequestTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSSLTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSSLTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSSLTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSSLTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiScrobbleTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiScrobbleTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiScrobbleTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiScrobbleTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchThreeTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchThreeTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchThreeTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchThreeTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchTwoTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchTwoTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchTwoTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiSearchTwoTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStarTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStarTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStarTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStarTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStreamTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStreamTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStreamTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStreamTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUnstarTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUnstarTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUnstarTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUnstarTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUpdatePlaylistTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUpdatePlaylistTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUpdatePlaylistTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUpdatePlaylistTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUpdateShareTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUpdateShareTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUpdateShareTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiUpdateShareTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/BaseInterceptorTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/BaseInterceptorTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/BaseInterceptorTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/BaseInterceptorTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordHexInterceptorTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordHexInterceptorTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordHexInterceptorTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordHexInterceptorTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordMD5InterceptorTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordMD5InterceptorTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordMD5InterceptorTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordMD5InterceptorTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/RangeHeaderInterceptorTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/RangeHeaderInterceptorTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/RangeHeaderInterceptorTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/RangeHeaderInterceptorTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptorTest.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptorTest.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptorTest.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptorTest.kt
diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/rules/MockWebServerRule.kt b/core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/rules/MockWebServerRule.kt
similarity index 100%
rename from subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/rules/MockWebServerRule.kt
rename to core/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/rules/MockWebServerRule.kt
diff --git a/subsonic-api/src/integrationTest/resources/error_first_generic_error.json b/core/subsonic-api/src/integrationTest/resources/error_first_generic_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/error_first_generic_error.json
rename to core/subsonic-api/src/integrationTest/resources/error_first_generic_error.json
diff --git a/subsonic-api/src/integrationTest/resources/generic_error.json b/core/subsonic-api/src/integrationTest/resources/generic_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/generic_error.json
rename to core/subsonic-api/src/integrationTest/resources/generic_error.json
diff --git a/subsonic-api/src/integrationTest/resources/get_album_list_2_ok.json b/core/subsonic-api/src/integrationTest/resources/get_album_list_2_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_album_list_2_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_album_list_2_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_album_list_ok.json b/core/subsonic-api/src/integrationTest/resources/get_album_list_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_album_list_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_album_list_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_album_ok.json b/core/subsonic-api/src/integrationTest/resources/get_album_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_album_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_album_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_artist_ok.json b/core/subsonic-api/src/integrationTest/resources/get_artist_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_artist_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_artist_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_artists_ok.json b/core/subsonic-api/src/integrationTest/resources/get_artists_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_artists_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_artists_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_bookmarks_ok.json b/core/subsonic-api/src/integrationTest/resources/get_bookmarks_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_bookmarks_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_bookmarks_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_chat_messages_ok.json b/core/subsonic-api/src/integrationTest/resources/get_chat_messages_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_chat_messages_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_chat_messages_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_genres_ok.json b/core/subsonic-api/src/integrationTest/resources/get_genres_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_genres_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_genres_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_indexes_ok.json b/core/subsonic-api/src/integrationTest/resources/get_indexes_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_indexes_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_indexes_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_lyrics_ok.json b/core/subsonic-api/src/integrationTest/resources/get_lyrics_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_lyrics_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_lyrics_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_music_directory_ok.json b/core/subsonic-api/src/integrationTest/resources/get_music_directory_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_music_directory_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_music_directory_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_music_folders_ok.json b/core/subsonic-api/src/integrationTest/resources/get_music_folders_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_music_folders_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_music_folders_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_playlist_ok.json b/core/subsonic-api/src/integrationTest/resources/get_playlist_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_playlist_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_playlist_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_playlists_ok.json b/core/subsonic-api/src/integrationTest/resources/get_playlists_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_playlists_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_playlists_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_podcasts_ok.json b/core/subsonic-api/src/integrationTest/resources/get_podcasts_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_podcasts_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_podcasts_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_random_songs_ok.json b/core/subsonic-api/src/integrationTest/resources/get_random_songs_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_random_songs_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_random_songs_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_shares_ok.json b/core/subsonic-api/src/integrationTest/resources/get_shares_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_shares_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_shares_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_songs_by_genre_ok.json b/core/subsonic-api/src/integrationTest/resources/get_songs_by_genre_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_songs_by_genre_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_songs_by_genre_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_starred_2_ok.json b/core/subsonic-api/src/integrationTest/resources/get_starred_2_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_starred_2_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_starred_2_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_starred_ok.json b/core/subsonic-api/src/integrationTest/resources/get_starred_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_starred_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_starred_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_user_ok.json b/core/subsonic-api/src/integrationTest/resources/get_user_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_user_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_user_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/get_videos_ok.json b/core/subsonic-api/src/integrationTest/resources/get_videos_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/get_videos_ok.json
rename to core/subsonic-api/src/integrationTest/resources/get_videos_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/incompatible_client_protocol_version_error.json b/core/subsonic-api/src/integrationTest/resources/incompatible_client_protocol_version_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/incompatible_client_protocol_version_error.json
rename to core/subsonic-api/src/integrationTest/resources/incompatible_client_protocol_version_error.json
diff --git a/subsonic-api/src/integrationTest/resources/incompatible_server_protocol_version_error.json b/core/subsonic-api/src/integrationTest/resources/incompatible_server_protocol_version_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/incompatible_server_protocol_version_error.json
rename to core/subsonic-api/src/integrationTest/resources/incompatible_server_protocol_version_error.json
diff --git a/subsonic-api/src/integrationTest/resources/jukebox_control_playlist_ok.json b/core/subsonic-api/src/integrationTest/resources/jukebox_control_playlist_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/jukebox_control_playlist_ok.json
rename to core/subsonic-api/src/integrationTest/resources/jukebox_control_playlist_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/jukebox_control_status_ok.json b/core/subsonic-api/src/integrationTest/resources/jukebox_control_status_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/jukebox_control_status_ok.json
rename to core/subsonic-api/src/integrationTest/resources/jukebox_control_status_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/license_ok.json b/core/subsonic-api/src/integrationTest/resources/license_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/license_ok.json
rename to core/subsonic-api/src/integrationTest/resources/license_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/non_subsonic_response.json b/core/subsonic-api/src/integrationTest/resources/non_subsonic_response.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/non_subsonic_response.json
rename to core/subsonic-api/src/integrationTest/resources/non_subsonic_response.json
diff --git a/subsonic-api/src/integrationTest/resources/ping_ok.json b/core/subsonic-api/src/integrationTest/resources/ping_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/ping_ok.json
rename to core/subsonic-api/src/integrationTest/resources/ping_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/ping_ok_utf8_bom.json b/core/subsonic-api/src/integrationTest/resources/ping_ok_utf8_bom.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/ping_ok_utf8_bom.json
rename to core/subsonic-api/src/integrationTest/resources/ping_ok_utf8_bom.json
diff --git a/subsonic-api/src/integrationTest/resources/request_data_not_found_error_response.json b/core/subsonic-api/src/integrationTest/resources/request_data_not_found_error_response.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/request_data_not_found_error_response.json
rename to core/subsonic-api/src/integrationTest/resources/request_data_not_found_error_response.json
diff --git a/subsonic-api/src/integrationTest/resources/requested_data_was_not_found_error.json b/core/subsonic-api/src/integrationTest/resources/requested_data_was_not_found_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/requested_data_was_not_found_error.json
rename to core/subsonic-api/src/integrationTest/resources/requested_data_was_not_found_error.json
diff --git a/subsonic-api/src/integrationTest/resources/required_param_missing_error.json b/core/subsonic-api/src/integrationTest/resources/required_param_missing_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/required_param_missing_error.json
rename to core/subsonic-api/src/integrationTest/resources/required_param_missing_error.json
diff --git a/subsonic-api/src/integrationTest/resources/reversed_tokens_generic_error.json b/core/subsonic-api/src/integrationTest/resources/reversed_tokens_generic_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/reversed_tokens_generic_error.json
rename to core/subsonic-api/src/integrationTest/resources/reversed_tokens_generic_error.json
diff --git a/subsonic-api/src/integrationTest/resources/search2_ok.json b/core/subsonic-api/src/integrationTest/resources/search2_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/search2_ok.json
rename to core/subsonic-api/src/integrationTest/resources/search2_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/search3_ok.json b/core/subsonic-api/src/integrationTest/resources/search3_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/search3_ok.json
rename to core/subsonic-api/src/integrationTest/resources/search3_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/search_ok.json b/core/subsonic-api/src/integrationTest/resources/search_ok.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/search_ok.json
rename to core/subsonic-api/src/integrationTest/resources/search_ok.json
diff --git a/subsonic-api/src/integrationTest/resources/self-signed.p12 b/core/subsonic-api/src/integrationTest/resources/self-signed.p12
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/self-signed.p12
rename to core/subsonic-api/src/integrationTest/resources/self-signed.p12
diff --git a/subsonic-api/src/integrationTest/resources/self-signed.pem b/core/subsonic-api/src/integrationTest/resources/self-signed.pem
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/self-signed.pem
rename to core/subsonic-api/src/integrationTest/resources/self-signed.pem
diff --git a/subsonic-api/src/integrationTest/resources/token_auth_not_supported_for_ldap_error.json b/core/subsonic-api/src/integrationTest/resources/token_auth_not_supported_for_ldap_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/token_auth_not_supported_for_ldap_error.json
rename to core/subsonic-api/src/integrationTest/resources/token_auth_not_supported_for_ldap_error.json
diff --git a/subsonic-api/src/integrationTest/resources/trial_period_is_over_error.json b/core/subsonic-api/src/integrationTest/resources/trial_period_is_over_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/trial_period_is_over_error.json
rename to core/subsonic-api/src/integrationTest/resources/trial_period_is_over_error.json
diff --git a/subsonic-api/src/integrationTest/resources/unexpected_error.json b/core/subsonic-api/src/integrationTest/resources/unexpected_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/unexpected_error.json
rename to core/subsonic-api/src/integrationTest/resources/unexpected_error.json
diff --git a/subsonic-api/src/integrationTest/resources/user_not_authorized_for_operation_error.json b/core/subsonic-api/src/integrationTest/resources/user_not_authorized_for_operation_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/user_not_authorized_for_operation_error.json
rename to core/subsonic-api/src/integrationTest/resources/user_not_authorized_for_operation_error.json
diff --git a/subsonic-api/src/integrationTest/resources/with_additional_json_object_generic_error.json b/core/subsonic-api/src/integrationTest/resources/with_additional_json_object_generic_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/with_additional_json_object_generic_error.json
rename to core/subsonic-api/src/integrationTest/resources/with_additional_json_object_generic_error.json
diff --git a/subsonic-api/src/integrationTest/resources/without_message_generic_error.json b/core/subsonic-api/src/integrationTest/resources/without_message_generic_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/without_message_generic_error.json
rename to core/subsonic-api/src/integrationTest/resources/without_message_generic_error.json
diff --git a/subsonic-api/src/integrationTest/resources/wrong_username_or_password_error.json b/core/subsonic-api/src/integrationTest/resources/wrong_username_or_password_error.json
similarity index 100%
rename from subsonic-api/src/integrationTest/resources/wrong_username_or_password_error.json
rename to core/subsonic-api/src/integrationTest/resources/wrong_username_or_password_error.json
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiNotSupportedException.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiNotSupportedException.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiNotSupportedException.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiNotSupportedException.kt
diff --git a/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
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapper.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapper.kt
diff --git a/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
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersions.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersions.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersions.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersions.kt
diff --git a/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
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicClientConfiguration.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicClientConfiguration.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicError.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicError.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicError.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicError.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/di/SubsonicApiModule.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/di/SubsonicApiModule.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/di/SubsonicApiModule.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/di/SubsonicApiModule.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordExt.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordExt.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordExt.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordExt.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordHexInterceptor.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordHexInterceptor.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordHexInterceptor.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordHexInterceptor.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordMD5Interceptor.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordMD5Interceptor.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordMD5Interceptor.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/PasswordMD5Interceptor.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/ProxyPasswordInterceptor.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/ProxyPasswordInterceptor.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/ProxyPasswordInterceptor.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/ProxyPasswordInterceptor.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/RangeHeaderInterceptor.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/RangeHeaderInterceptor.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/RangeHeaderInterceptor.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/RangeHeaderInterceptor.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptor.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptor.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptor.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptor.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Album.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Album.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Album.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Album.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/AlbumListType.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/AlbumListType.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/AlbumListType.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/AlbumListType.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Artist.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Artist.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Artist.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Artist.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Bookmark.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Bookmark.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Bookmark.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Bookmark.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/ChatMessage.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/ChatMessage.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/ChatMessage.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/ChatMessage.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Genre.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Genre.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Genre.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Genre.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Index.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Index.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Index.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Index.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Indexes.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Indexes.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Indexes.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Indexes.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/JukeboxAction.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/JukeboxAction.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/JukeboxAction.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/JukeboxAction.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/JukeboxStatus.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/JukeboxStatus.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/JukeboxStatus.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/JukeboxStatus.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/License.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/License.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/License.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/License.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Lyrics.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Lyrics.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Lyrics.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Lyrics.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicDirectory.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicDirectory.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicDirectory.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicDirectory.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicDirectoryChild.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicDirectoryChild.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicDirectoryChild.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicDirectoryChild.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicFolder.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicFolder.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicFolder.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicFolder.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Playlist.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Playlist.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Playlist.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Playlist.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/PodcastChannel.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/PodcastChannel.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/PodcastChannel.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/PodcastChannel.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchResult.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchResult.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchResult.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchResult.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchThreeResult.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchThreeResult.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchThreeResult.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchThreeResult.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchTwoResult.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchTwoResult.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchTwoResult.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/SearchTwoResult.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Share.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Share.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Share.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/Share.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/User.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/User.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/User.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/User.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/BookmarksResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/BookmarksResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/BookmarksResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/BookmarksResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/ChatMessagesResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/ChatMessagesResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/ChatMessagesResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/ChatMessagesResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GenresResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GenresResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GenresResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GenresResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumList2Response.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumList2Response.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumList2Response.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumList2Response.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumListResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumListResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumListResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumListResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetAlbumResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetArtistResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetArtistResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetArtistResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetArtistResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetArtistsResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetArtistsResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetArtistsResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetArtistsResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetIndexesResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetIndexesResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetIndexesResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetIndexesResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetLyricsResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetLyricsResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetLyricsResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetLyricsResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetMusicDirectoryResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetMusicDirectoryResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetMusicDirectoryResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetMusicDirectoryResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPlaylistResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPlaylistResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPlaylistResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPlaylistResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPlaylistsResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPlaylistsResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPlaylistsResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPlaylistsResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPodcastsResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPodcastsResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPodcastsResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetPodcastsResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetRandomSongsResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetRandomSongsResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetRandomSongsResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetRandomSongsResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetSongsByGenreResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetSongsByGenreResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetSongsByGenreResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetSongsByGenreResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetStarredResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetStarredResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetStarredResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetStarredResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetStarredTwoResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetStarredTwoResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetStarredTwoResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetStarredTwoResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetUserResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetUserResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetUserResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/GetUserResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/JukeboxResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/JukeboxResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/JukeboxResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/JukeboxResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/LicenseResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/LicenseResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/LicenseResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/LicenseResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/MusicFoldersResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/MusicFoldersResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/MusicFoldersResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/MusicFoldersResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchThreeResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchThreeResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchThreeResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchThreeResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchTwoResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchTwoResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchTwoResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SearchTwoResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SharesResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SharesResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SharesResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SharesResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/StreamResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/StreamResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/StreamResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/StreamResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SubsonicResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SubsonicResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SubsonicResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/SubsonicResponse.kt
diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/VideosResponse.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/VideosResponse.kt
similarity index 100%
rename from subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/VideosResponse.kt
rename to core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/VideosResponse.kt
diff --git a/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapperTest.kt b/core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapperTest.kt
similarity index 100%
rename from subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapperTest.kt
rename to core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/ApiVersionCheckWrapperTest.kt
diff --git a/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersionsDeserializerTest.kt b/core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersionsDeserializerTest.kt
similarity index 100%
rename from subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersionsDeserializerTest.kt
rename to core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersionsDeserializerTest.kt
diff --git a/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersionsTest.kt b/core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersionsTest.kt
similarity index 100%
rename from subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersionsTest.kt
rename to core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIVersionsTest.kt
diff --git a/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/ProxyPasswordInterceptorTest.kt b/core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/ProxyPasswordInterceptorTest.kt
similarity index 100%
rename from subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/ProxyPasswordInterceptorTest.kt
rename to core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/ProxyPasswordInterceptorTest.kt
diff --git a/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/models/AlbumListTypeTest.kt b/core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/models/AlbumListTypeTest.kt
similarity index 100%
rename from subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/models/AlbumListTypeTest.kt
rename to core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/models/AlbumListTypeTest.kt
diff --git a/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/models/StatusTest.kt b/core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/models/StatusTest.kt
similarity index 100%
rename from subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/models/StatusTest.kt
rename to core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/models/StatusTest.kt
diff --git a/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/response/StreamResponseTest.kt b/core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/response/StreamResponseTest.kt
similarity index 100%
rename from subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/response/StreamResponseTest.kt
rename to core/subsonic-api/src/test/kotlin/org/moire/ultrasonic/api/subsonic/response/StreamResponseTest.kt
diff --git a/dependencies.gradle b/dependencies.gradle
index d3070c20..576c0019 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -1,18 +1,18 @@
ext.versions = [
minSdk : 14,
targetSdk : 22,
- compileSdk : 27,
- gradle : '4.5.1',
+ compileSdk : 28,
+ gradle : '4.6',
- androidTools : "3.1.3",
- ktlint : "0.24.0",
- ktlintGradle : "4.1.0",
+ androidTools : "3.2.0",
+ ktlint : "0.28.0",
+ ktlintGradle : "5.1.0",
detekt : "1.0.0.RC6-4",
jacoco : "0.8.2",
androidSupport : "22.2.1",
- kotlin : "1.2.51",
+ kotlin : "1.2.71",
retrofit : "2.4.0",
jackson : "2.9.5",
@@ -22,7 +22,8 @@ ext.versions = [
koin : "1.0.0-beta-3",
picasso : "2.71828",
- junit : "4.12",
+ junit4 : "4.12",
+ junit5 : "5.3.1",
mockito : "2.16.0",
mockitoKotlin : "1.5.0",
kluent : "1.35",
@@ -62,7 +63,8 @@ ext.other = [
]
ext.testing = [
- junit : "junit:junit:$versions.junit",
+ junit : "junit:junit:$versions.junit4",
+ junitVintage : "org.junit.vintage:junit-vintage-engine:$versions.junit5",
kotlinJunit : "org.jetbrains.kotlin:kotlin-test-junit:$versions.kotlin",
mockitoKotlin : "com.nhaarman:mockito-kotlin:$versions.mockitoKotlin",
mockito : "org.mockito:mockito-core:$versions.mockito",
diff --git a/domain/build.gradle b/domain/build.gradle
deleted file mode 100644
index cab611de..00000000
--- a/domain/build.gradle
+++ /dev/null
@@ -1,38 +0,0 @@
-apply plugin: 'java-library'
-apply plugin: 'kotlin'
-apply plugin: 'jacoco'
-apply from: '../gradle_scripts/code_quality.gradle'
-
-dependencies {
- api other.kotlinStdlib
- api other.semver
-}
-
-jacoco {
- toolVersion(versions.jacoco)
-}
-
-ext {
- jacocoExclude = []
-}
-
-jacocoTestReport {
- reports {
- html.enabled true
- csv.enabled false
- xml.enabled true
- }
-
- afterEvaluate {
- classDirectories = files(classDirectories.files.collect {
- fileTree(dir: it, excludes: jacocoExclude)
- })
- }
-}
-
-test.finalizedBy jacocoTestReport
-test {
- jacoco {
- excludes += jacocoExclude
- }
-}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 99340b4a..c44b679a 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 8941bfbb..3f0f9be6 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.5.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
diff --git a/gradle_scripts/android-module-bootstrap.gradle b/gradle_scripts/android-module-bootstrap.gradle
new file mode 100644
index 00000000..98fb9516
--- /dev/null
+++ b/gradle_scripts/android-module-bootstrap.gradle
@@ -0,0 +1,74 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'jacoco'
+apply from: "${project.rootDir}/gradle_scripts/code_quality.gradle"
+
+androidExtensions {
+ experimental = true
+}
+
+android {
+ compileSdkVersion versions.compileSdk
+
+ defaultConfig {
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ minSdkVersion versions.minSdk
+ targetSdkVersion versions.targetSdk
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ sourceSets {
+ main.java.srcDirs += "${projectDir}/src/main/kotlin"
+ test.java.srcDirs += "${projectDir}/src/test/kotlin"
+ test.java.srcDirs += "${projectDir}/src/integrationTest/kotlin"
+ test.resources.srcDirs += "${projectDir}/src/integrationTest/resources"
+ }
+
+ buildTypes {
+ debug {
+ minifyEnabled false
+ debuggable true
+ }
+ release {
+ minifyEnabled false
+ }
+ }
+
+ // Disable generating BuildConfig class by default
+ // Replace it with https://issuetracker.google.com/issues/72050365 once released.
+ libraryVariants.all {
+ generateBuildConfig.enabled = false
+ }
+}
+
+sourceCompatibility = JavaVersion.VERSION_1_8
+targetCompatibility = JavaVersion.VERSION_1_8
+
+tasks.withType(Test) {
+ useJUnitPlatform()
+ jacoco {
+ includeNoLocationClasses = true
+ excludes += jacocoExclude
+ }
+}
+
+dependencies {
+ api other.kotlinStdlib
+
+ testImplementation testing.junit
+ testRuntimeOnly testing.junitVintage
+}
+
+jacoco {
+ toolVersion(versions.jacoco)
+}
+
+ext {
+ jacocoExclude = []
+}
+
diff --git a/gradle_scripts/jacoco.gradle b/gradle_scripts/jacoco.gradle
index eef97b49..f7b30b11 100644
--- a/gradle_scripts/jacoco.gradle
+++ b/gradle_scripts/jacoco.gradle
@@ -4,72 +4,89 @@ jacoco {
toolVersion(versions.jacoco)
}
-task jacocoMergeReports(type: JacocoMerge) {
+def mergedJacocoExec = file("${project.buildDir}/jacoco/jacocoMerged.exec")
+
+tasks.create(name: 'jacocoMergeReports', type: JacocoMerge) {
group = "Reporting"
description = "Merge all jacoco reports from projects into one."
- List jacocoFiles = new ArrayList<>()
+ ListProperty jacocoFiles = project.objects.listProperty(File.class)
project.subprojects { subproject ->
- File commonModuleReport = new File(subproject.buildDir, "/jacoco/test.exec")
- if (commonModuleReport.exists()) jacocoFiles.add(commonModuleReport)
- File androidModuleReport = new File(subproject.buildDir, "/jacoco/testDebugUnitTest.exec")
- if (androidModuleReport.exists()) jacocoFiles.add(androidModuleReport)
+ subproject.plugins.withId("jacoco") {
+ project.logger.info("${subproject.name} has Jacoco plugin applied")
+ subproject.tasks.withType(Test) { task ->
+ File destFile = task.extensions.getByType(JacocoTaskExtension.class).destinationFile
+ if (destFile.exists() && !task.name.contains("Release")) {
+ jacocoFiles.add(destFile)
+ }
+ }
+ }
}
- executionData(jacocoFiles.toArray())
- destinationFile(file("${project.buildDir}/jacoco/jacoco.exec"))
+
+ executionData(jacocoFiles)
+ destinationFile(mergedJacocoExec)
}
-def createJacocoFullReportTask() {
- tasks.create(name: 'jacocoFullReport', type: JacocoReport, dependsOn: 'jacocoMergeReports') {
- group = "Reporting"
- description = "Generate full Jacoco coverage report including all modules."
+tasks.create(name: 'jacocoFullReport', type: JacocoReport, dependsOn: 'jacocoMergeReports') {
+ group = "Reporting"
+ description = "Generate full Jacoco coverage report including all modules."
- List classFileTreeList = new ArrayList<>()
- List sourceFileTreeList = new ArrayList<>()
+ classDirectories = files()
+ sourceDirectories = files()
+ executionData = files()
+
+ reports {
+ xml.enabled = true
+ html.enabled = true
+ csv.enabled = false
+ }
+
+ // Always run merging, as all input calculation is done in doFirst {}
+ outputs.upToDateWhen { false }
+ // Task will run anyway even if initial inputs are empty
+ onlyIf = { true }
+
+ doFirst {
project.subprojects { subproject ->
- if (subproject.plugins.hasPlugin("kotlin-android") &&
- subproject.hasProperty("jacocoExclude")) {
- classFileTreeList.add(
- fileTree(
- dir: "${subproject.buildDir}/tmp/kotlin-classes/debug",
- excludes: subproject.jacocoExclude
- )
- )
- sourceFileTreeList.add(
- subproject.extensions.getByName('android').sourceSets.main.java.sourceFiles
- )
- } else if (subproject.hasProperty("jacocoExclude")) {
- classFileTreeList.add(
- fileTree(
- dir: "${subproject.buildDir}/classes/kotlin/main",
- excludes: subproject.jacocoExclude
- )
- )
- sourceFileTreeList.add(subproject.sourceSets.main.getAllSource())
+ subproject.plugins.withId("jacoco") {
+ project.logger.info("${subproject.name} has Jacoco plugin applied")
+ subproject.plugins.withId("kotlin-android") {
+ project.logger.info("${subproject.name} is android project")
+ def mainSources = subproject.extensions.findByName("android").sourceSets['main']
+ project.logger.info("Android sources: ${mainSources.java.srcDirs}")
+ mainSources.java.srcDirs.forEach {
+ additionalSourceDirs(it)
+ }
+ project.logger.info("Subproject exclude: ${subproject.jacocoExclude}")
+ additionalClassDirs(fileTree(
+ dir: "${subproject.buildDir}/tmp/kotlin-classes/debug",
+ excludes: subproject.jacocoExclude
+ ))
+ }
+ subproject.plugins.withId("kotlin") { plugin ->
+ project.logger.info("${subproject.name} is common kotlin project")
+ SourceDirectorySet mainSources = subproject.extensions.getByName("kotlin")
+ .sourceSets[SourceSet.MAIN_SOURCE_SET_NAME]
+ .kotlin
+ mainSources.srcDirs.forEach {
+ project.logger.debug("Adding sources: $it")
+ additionalSourceDirs(it)
+ }
+ project.logger.info("Subproject exclude: ${subproject.jacocoExclude}")
+ additionalClassDirs(fileTree(
+ dir: "${subproject.buildDir}/classes/kotlin/main",
+ excludes: subproject.jacocoExclude
+ ))
+ }
+
+ subproject.tasks.withType(Test) { task ->
+ File destFile = task.extensions.getByType(JacocoTaskExtension.class).destinationFile
+ if (destFile.exists() && !task.name.contains("Release")) {
+ project.logger.info("Adding execution data: $destFile")
+ executionData(destFile)
+ }
+ }
}
}
-
- classDirectories = files(classFileTreeList.toArray())
- sourceDirectories = files(sourceFileTreeList.toArray())
- executionData = files("${buildDir}/jacoco/jacoco.exec")
-
- reports {
- xml.enabled = true
- html.enabled = true
- csv.enabled = false
- }
}
}
-
-// We need to wait to all subprojects configuration finish or we don't get sources and exclusions
-def subprojectsCount = allprojects.size()
-allprojects {
- afterEvaluate { subproject ->
- subprojectsCount--
- if (subprojectsCount == 0) {
- apply {
- createJacocoFullReportTask()
- }
- }
- }
-}
\ No newline at end of file
diff --git a/subsonic-api/build.gradle b/gradle_scripts/kotlin-module-bootstrap.gradle
similarity index 51%
rename from subsonic-api/build.gradle
rename to gradle_scripts/kotlin-module-bootstrap.gradle
index 78f37860..f5972e63 100644
--- a/subsonic-api/build.gradle
+++ b/gradle_scripts/kotlin-module-bootstrap.gradle
@@ -1,34 +1,27 @@
-apply plugin: 'kotlin'
apply plugin: 'java-library'
+apply plugin: 'kotlin'
apply plugin: 'jacoco'
-apply from: '../gradle_scripts/code_quality.gradle'
+apply from: "${project.rootDir}/gradle_scripts/code_quality.gradle"
+
+sourceCompatibility = JavaVersion.VERSION_1_8
+targetCompatibility = JavaVersion.VERSION_1_8
sourceSets {
main.java.srcDirs += "${projectDir}/src/main/kotlin"
+ test.java.srcDirs += "${projectDir}/src/test/kotlin"
test.java.srcDirs += "${projectDir}/src/integrationTest/kotlin"
test.resources.srcDirs += "${projectDir}/src/integrationTest/resources"
}
+test {
+ useJUnitPlatform()
+}
+
dependencies {
api other.kotlinStdlib
- api other.retrofit
- api other.jacksonConverter
- api other.koinCore
-
- implementation(other.jacksonKotlin) {
- exclude module: 'kotlin-reflect'
- }
- implementation other.kotlinReflect // for jackson kotlin, but to use the same version
- implementation other.okhttpLogging
testImplementation testing.junit
- testImplementation testing.kotlinJunit
- testImplementation testing.mockito
- testImplementation testing.mockitoInline
- testImplementation testing.mockitoKotlin
- testImplementation testing.kluent
- testImplementation testing.mockWebServer
- testImplementation testing.apacheCodecs
+ testRuntimeOnly testing.junitVintage
}
jacoco {
@@ -36,11 +29,8 @@ jacoco {
}
ext {
- // Excluding data classes
- jacocoExclude = [
- '**/models/**',
- '**/di/**'
- ]
+ // override it in the module
+ jacocoExclude = []
}
jacocoTestReport {
@@ -61,5 +51,11 @@ test.finalizedBy jacocoTestReport
test {
jacoco {
excludes += jacocoExclude
+ includeNoLocationClasses = true
}
}
+
+tasks.create(name: "ciTest", dependsOn: "test") {
+ group = "Verification"
+ description = "Special task for CI that calls all tests in pure kotlin modules"
+}
diff --git a/library/.gitignore b/library/.gitignore
deleted file mode 100644
index e8fa30f8..00000000
--- a/library/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build
-*.iml
diff --git a/library/build.gradle b/library/build.gradle
deleted file mode 100644
index b2e07832..00000000
--- a/library/build.gradle
+++ /dev/null
@@ -1,26 +0,0 @@
-apply plugin: 'com.android.library'
-
-android {
- compileSdkVersion versions.compileSdk
-
- defaultConfig {
- minSdkVersion versions.minSdk
- targetSdkVersion versions.targetSdk
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
- }
- }
-
- lintOptions {
- baselineFile file("lint-baseline.xml")
- abortOnError true
- }
-}
-
-dependencies {
- api androidSupport.support
-}
diff --git a/menudrawer/.gitignore b/menudrawer/.gitignore
deleted file mode 100644
index e8fa30f8..00000000
--- a/menudrawer/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build
-*.iml
diff --git a/menudrawer/build.gradle b/menudrawer/build.gradle
deleted file mode 100644
index 1979d8cd..00000000
--- a/menudrawer/build.gradle
+++ /dev/null
@@ -1,22 +0,0 @@
-apply plugin: 'com.android.library'
-
-android {
- compileSdkVersion versions.compileSdk
-
- defaultConfig {
- minSdkVersion versions.minSdk
- targetSdkVersion versions.targetSdk
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
- }
- }
-
- lintOptions {
- baselineFile file("lint-baseline.xml")
- abortOnError true
- }
-}
diff --git a/pulltorefresh/.gitignore b/pulltorefresh/.gitignore
deleted file mode 100644
index e8fa30f8..00000000
--- a/pulltorefresh/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build
-*.iml
diff --git a/pulltorefresh/build.gradle b/pulltorefresh/build.gradle
deleted file mode 100644
index 1979d8cd..00000000
--- a/pulltorefresh/build.gradle
+++ /dev/null
@@ -1,22 +0,0 @@
-apply plugin: 'com.android.library'
-
-android {
- compileSdkVersion versions.compileSdk
-
- defaultConfig {
- minSdkVersion versions.minSdk
- targetSdkVersion versions.targetSdk
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
- }
- }
-
- lintOptions {
- baselineFile file("lint-baseline.xml")
- abortOnError true
- }
-}
diff --git a/pulltorefresh/src/main/res/values-ar/pull_refresh_strings.xml b/pulltorefresh/src/main/res/values-ar/pull_refresh_strings.xml
deleted file mode 100644
index 5b0b571c..00000000
--- a/pulltorefresh/src/main/res/values-ar/pull_refresh_strings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- اسحب للتحديث…
- اترك للتحديث…
- تحميل…
-
diff --git a/settings.gradle b/settings.gradle
index eb222b3d..b5554310 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,8 +1,8 @@
-include ':library'
-include ':domain'
-include ':subsonic-api'
-include ':subsonic-api-image-loader'
-include ':cache'
-include ':menudrawer'
-include ':pulltorefresh'
+include ':core:library'
+include ':core:domain'
+include ':core:subsonic-api'
+include ':core:subsonic-api-image-loader'
+include ':core:cache'
+include ':core:menudrawer'
+include ':core:pulltorefresh'
include ':ultrasonic'
diff --git a/subsonic-api-image-loader/build.gradle b/subsonic-api-image-loader/build.gradle
deleted file mode 100644
index 5baa60ce..00000000
--- a/subsonic-api-image-loader/build.gradle
+++ /dev/null
@@ -1,52 +0,0 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply from: '../gradle_scripts/code_quality.gradle'
-apply plugin: 'jacoco'
-
-
-ext {
- jacocoExclude = []
-}
-
-jacoco {
- toolVersion(versions.jacoco)
-}
-
-tasks.withType(Test) {
- jacoco.includeNoLocationClasses = true
-}
-
-android {
- compileSdkVersion(versions.compileSdk)
-
- defaultConfig {
- minSdkVersion(versions.minSdk)
- targetSdkVersion(versions.targetSdk)
-
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- }
-
- sourceSets {
- main.java.srcDirs += 'src/main/kotlin'
- test.java.srcDirs += 'src/test/kotlin'
- test.java.srcDirs += "${projectDir}/src/integrationTest/kotlin"
- test.resources.srcDirs += "${projectDir}/src/integrationTest/resources"
- }
-}
-
-dependencies {
- api project(':domain')
- api project(':subsonic-api')
- api other.kotlinStdlib
- api(other.picasso) {
- exclude group: "com.android.support"
- }
-
- testImplementation testing.junit
- testImplementation testing.kotlinJunit
- testImplementation testing.mockito
- testImplementation testing.mockitoInline
- testImplementation testing.mockitoKotlin
- testImplementation testing.kluent
- testImplementation testing.robolectric
-}
diff --git a/subsonic-api/.gitignore b/subsonic-api/.gitignore
deleted file mode 100644
index e8fa30f8..00000000
--- a/subsonic-api/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build
-*.iml
diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle
index aa7a2ff5..56f858d0 100644
--- a/ultrasonic/build.gradle
+++ b/ultrasonic/build.gradle
@@ -49,14 +49,18 @@ android {
}
}
+tasks.withType(Test) {
+ useJUnitPlatform()
+}
+
dependencies {
- implementation project(':menudrawer')
- implementation project(':pulltorefresh')
- implementation project(':library')
- implementation project(':domain')
- implementation project(':subsonic-api')
- implementation project(':subsonic-api-image-loader')
- implementation project(':cache')
+ implementation project(':core:menudrawer')
+ implementation project(':core:pulltorefresh')
+ implementation project(':core:library')
+ implementation project(':core:domain')
+ implementation project(':core:subsonic-api')
+ implementation project(':core:subsonic-api-image-loader')
+ implementation project(':core:cache')
implementation androidSupport.support
implementation androidSupport.design
@@ -67,11 +71,16 @@ dependencies {
testImplementation other.kotlinReflect
testImplementation testing.junit
+ testRuntimeOnly testing.junitVintage
testImplementation testing.kotlinJunit
testImplementation testing.mockitoKotlin
testImplementation testing.kluent
}
+jacoco {
+ toolVersion(versions.jacoco)
+}
+
// Excluding all java classes and stuff that should not be covered
ext {
jacocoExclude = [
diff --git a/ultrasonic/lint-baseline.xml b/ultrasonic/lint-baseline.xml
index 916b6f0c..fc439fa2 100644
--- a/ultrasonic/lint-baseline.xml
+++ b/ultrasonic/lint-baseline.xml
@@ -1,5 +1,5 @@
-
+
@@ -30,7 +30,7 @@
errorLine2=" ~~~~~~~~~~~~~~~">
@@ -41,7 +41,7 @@
errorLine2=" ~~~~~~~~~~~~~~~">
@@ -52,18 +52,7 @@
errorLine2=" ~~~~~~~~~~~~~~~">
-
-
-
-
@@ -74,10 +63,32 @@
errorLine2=" ~~~~~~~~~~~~~~~">
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
@@ -166,30 +155,30 @@
errorLine2=" ~~~~~~~~~~~">
+ errorLine1=" Thread thread = new Thread(this, String.format("ImageLoader_%d", i));"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ file="src/main/java/org/moire/ultrasonic/util/LegacyImageLoader.java"
+ line="104"
+ column="46"/>
+ errorLine1=" return String.format("%s:%d", coverArtId, size);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ file="src/main/java/org/moire/ultrasonic/util/LegacyImageLoader.java"
+ line="209"
+ column="16"/>
-
-
-
-
+
+
+
+
@@ -232,7 +221,7 @@
errorLine2=" ~~~~~~~~~~~">
@@ -243,7 +232,7 @@
errorLine2=" ~~~~~~~~~~~">
@@ -254,7 +243,7 @@
errorLine2=" ~~~~~~~~~~~">
@@ -265,7 +254,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -276,7 +265,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -298,7 +287,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -309,7 +298,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -320,7 +309,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -331,10 +320,43 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+
+
+
+
+
+
+
+
+
+
+
+
@@ -397,7 +419,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -430,7 +452,7 @@
errorLine2=" ~~~~">
@@ -441,7 +463,7 @@
errorLine2=" ~~~~">
@@ -559,7 +581,7 @@
errorLine2=" ^">
@@ -570,7 +592,7 @@
errorLine2=" ^">
@@ -581,7 +603,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -592,7 +614,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -603,7 +625,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -614,7 +636,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -625,7 +647,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -636,7 +658,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -647,7 +669,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -658,7 +680,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -669,7 +691,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -680,7 +702,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -691,7 +713,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -702,7 +724,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -713,7 +735,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -724,7 +746,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -735,7 +757,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -746,7 +768,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -757,7 +779,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -768,51 +790,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -823,7 +801,7 @@
errorLine2=" ~~~~~~~~~~~~">
@@ -853,11 +831,11 @@
id="ExportedContentProvider"
message="Exported content providers can provide access to potentially sensitive data"
errorLine1=" <provider"
- errorLine2=" ^">
+ errorLine2=" ~~~~~~~~">
+ column="10"/>
@@ -987,7 +965,7 @@
errorLine2=" ~~~~~~~~~~~~~">
@@ -998,7 +976,7 @@
errorLine2=" ~~~~~~~~~~~~~~~">
@@ -1009,7 +987,7 @@
errorLine2=" ~~~~~~~~~~~">
@@ -1057,17 +1035,6 @@
column="16"/>
-
-
-
-
@@ -1359,27 +1326,27 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -1388,83 +1355,21 @@
message="The resource `R.string.parser_artist_count` appears to be unused"
errorLine1=" <string name="parser.artist_count">Got %d Artists.</string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ errorLine2=" ~~~~~~~~~~~~">
+ column="6"/>
+
+
+
+
@@ -1642,7 +1496,18 @@
errorLine2=" ^">
+
+
+
+
@@ -1667,7 +1532,40 @@
file="src/main/res/drawable-hdpi/ic_stat_ultrasonic.png"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1726,7 +1624,7 @@
errorLine2=" ^">
@@ -1737,7 +1635,7 @@
errorLine2=" ~~~~~~~~~">
@@ -1803,7 +1701,7 @@
errorLine2=" ~~~~~~~">
@@ -1811,605 +1709,649 @@
id="ContentDescription"
message="Missing `contentDescription` attribute on image"
errorLine1=" <ImageView"
- errorLine2=" ^">
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="10"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="10"/>
+ errorLine2=" ~~~~~~~~~">
+ column="10"/>
+ errorLine2=" ~~~~~~~~~">
+ column="10"/>
+ errorLine2=" ~~~~~~~~~">
+ column="4"/>
+ errorLine2=" ~~~~~~~~~">
+ column="2"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="10"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="10"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="10"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="10"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~~~">
+ column="14"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+ errorLine2=" ~~~~~~~~~">
+ column="6"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+