package org.fossify.musicplayer.models import android.provider.MediaStore import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey import org.fossify.commons.helpers.AlphanumericComparator import org.fossify.commons.helpers.SORT_DESCENDING import org.fossify.musicplayer.extensions.sortSafely import org.fossify.musicplayer.helpers.PLAYER_SORT_BY_ARTIST_TITLE import org.fossify.musicplayer.helpers.PLAYER_SORT_BY_DATE_ADDED import org.fossify.musicplayer.helpers.PLAYER_SORT_BY_TITLE @Entity(tableName = "albums", indices = [(Index(value = ["id"], unique = true))]) data class Album( @PrimaryKey(autoGenerate = true) var id: Long, @ColumnInfo(name = "artist") val artist: String, @ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "cover_art") val coverArt: String, @ColumnInfo(name = "year") val year: Int, @ColumnInfo(name = "track_cnt") var trackCnt: Int, @ColumnInfo(name = "artist_id") var artistId: Long, @ColumnInfo(name = "date_added") var dateAdded: Int, ) : ListItem() { companion object { fun getComparator(sorting: Int) = Comparator { first, second -> var result = when { sorting and PLAYER_SORT_BY_TITLE != 0 -> { when { first.title == MediaStore.UNKNOWN_STRING && second.title != MediaStore.UNKNOWN_STRING -> 1 first.title != MediaStore.UNKNOWN_STRING && second.title == MediaStore.UNKNOWN_STRING -> -1 else -> AlphanumericComparator().compare(first.title.lowercase(), second.title.lowercase()) } } sorting and PLAYER_SORT_BY_ARTIST_TITLE != 0 -> { when { first.artist == MediaStore.UNKNOWN_STRING && second.artist != MediaStore.UNKNOWN_STRING -> 1 first.artist != MediaStore.UNKNOWN_STRING && second.artist == MediaStore.UNKNOWN_STRING -> -1 else -> AlphanumericComparator().compare(first.artist.lowercase(), second.artist.lowercase()) } } sorting and PLAYER_SORT_BY_DATE_ADDED != 0 -> first.dateAdded.compareTo(second.dateAdded) else -> first.year.compareTo(second.year) } if (sorting and SORT_DESCENDING != 0) { result *= -1 } return@Comparator result } } fun getBubbleText(sorting: Int) = when { sorting and PLAYER_SORT_BY_TITLE != 0 -> title sorting and PLAYER_SORT_BY_ARTIST_TITLE != 0 -> artist else -> year.toString() } } fun ArrayList.sortSafely(sorting: Int) = sortSafely(Album.getComparator(sorting))