ultrasonic-app-subsonic-and.../ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparat...

51 lines
1.5 KiB
Kotlin

package org.moire.ultrasonic.util
import java.util.Comparator
import org.moire.ultrasonic.domain.MusicDirectory
class EntryByDiscAndTrackComparator : Comparator<MusicDirectory.Child> {
override fun compare(x: MusicDirectory.Child, y: MusicDirectory.Child): Int {
val discX = x.discNumber
val discY = y.discNumber
val trackX = if (x is MusicDirectory.Entry) x.track else null
val trackY = if (y is MusicDirectory.Entry) y.track else null
val albumX = x.album
val albumY = y.album
val pathX = x.path
val pathY = y.path
val albumComparison = compare(albumX, albumY)
if (albumComparison != 0) {
return albumComparison
}
val discComparison = compare(discX ?: 0, discY ?: 0)
if (discComparison != 0) {
return discComparison
}
val trackComparison = compare(trackX ?: 0, trackY ?: 0)
return if (trackComparison != 0) {
trackComparison
} else compare(
pathX ?: "",
pathY ?: ""
)
}
companion object {
private fun compare(a: Int, b: Int): Int {
return a.compareTo(b)
}
private fun compare(a: String?, b: String?): Int {
if (a == null && b == null) {
return 0
}
if (a == null) {
return -1
}
return if (b == null) {
1
} else a.compareTo(b)
}
}
}