EARHORNMUSIC UPnP · Android TV · Phones · Android Auto · GNU/Linux
Release 0.5.0

BrowseResult.kt

package dev.stave.upnp

import dev.stave.domain.model.DidlItem

/**
 * Result of a Browse() or Search() call against a UPnP ContentDirectory service.
 *
 * [Success.totalMatches] is the server-reported total count — different from [Success.items]
 * size when pagination is in play. A search returning the first 25 matches out of 5000
 * has items.size == 25 and totalMatches == 5000. Random sampling uses this to pick a
 * valid offset without fetching the whole library.
 *
 * The default makes totalMatches == items.size for callers that don't care (Browse on
 * small containers where everything returns in one page).
 */
sealed interface BrowseResult {
    data class Success(
        val items: List<DidlItem>,
        val totalMatches: Long = items.size.toLong(),
    ) : BrowseResult

    data class Failure(val message: String) : BrowseResult
}