ultrasonic-app-subsonic-and.../ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/AlbumHeader.kt

92 lines
2.4 KiB
Kotlin

package org.moire.ultrasonic.adapters
import java.util.HashSet
import org.moire.ultrasonic.domain.Identifiable
import org.moire.ultrasonic.domain.MusicDirectory
import org.moire.ultrasonic.util.Settings.shouldUseFolderForArtistName
import org.moire.ultrasonic.util.Util.getGrandparent
class AlbumHeader(
var entries: List<MusicDirectory.Child>,
var name: String?
) : Identifiable {
var isAllVideo: Boolean
private set
var totalDuration: Long
private set
var childCount = 0
private val _artists: MutableSet<String>
private val _grandParents: MutableSet<String>
private val _genres: MutableSet<String>
private val _years: MutableSet<Int>
val artists: Set<String>
get() = _artists
val grandParents: Set<String>
get() = _grandParents
val genres: Set<String>
get() = _genres
val years: Set<Int>
get() = _years
private fun processGrandParents(entry: MusicDirectory.Child) {
val grandParent = getGrandparent(entry.path)
if (grandParent != null) {
_grandParents.add(grandParent)
}
}
@Suppress("NestedBlockDepth")
private fun processEntries(list: List<MusicDirectory.Child>) {
entries = list
childCount = entries.size
for (entry in entries) {
if (!entry.isVideo) {
isAllVideo = false
}
if (!entry.isDirectory) {
if (shouldUseFolderForArtistName) {
processGrandParents(entry)
}
if (entry.artist != null) {
val duration = entry.duration
if (duration != null) {
totalDuration += duration.toLong()
}
_artists.add(entry.artist!!)
}
if (entry.genre != null) {
_genres.add(entry.genre!!)
}
if (entry.year != null) {
_years.add(entry.year!!)
}
}
}
}
init {
_artists = HashSet()
_grandParents = HashSet()
_genres = HashSet()
_years = HashSet()
isAllVideo = true
totalDuration = 0
processEntries(entries)
}
override val id: String
get() = "HEADER"
override val longId: Long
get() = -1L
}