feat(domain): add core use cases
This commit is contained in:
@@ -0,0 +1,14 @@
|
|||||||
|
package com.radiola.domain.usecase
|
||||||
|
|
||||||
|
import com.radiola.domain.model.Track
|
||||||
|
import com.radiola.domain.repository.NowPlayingRepository
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class GetNowPlayingUseCase @Inject constructor(
|
||||||
|
private val nowPlayingRepository: NowPlayingRepository
|
||||||
|
) {
|
||||||
|
operator fun invoke(stationPrefix: String): Flow<Track?> {
|
||||||
|
return nowPlayingRepository.getNowPlaying(stationPrefix)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.radiola.domain.usecase
|
||||||
|
|
||||||
|
import com.radiola.domain.model.Station
|
||||||
|
import com.radiola.domain.repository.StationRepository
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class GetStationsUseCase @Inject constructor(
|
||||||
|
private val stationRepository: StationRepository
|
||||||
|
) {
|
||||||
|
operator fun invoke(): Flow<List<Station>> = stationRepository.getStations()
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.radiola.domain.usecase
|
||||||
|
|
||||||
|
import com.radiola.domain.model.Station
|
||||||
|
import com.radiola.domain.repository.SettingsRepository
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class PlayStationUseCase @Inject constructor(
|
||||||
|
private val settingsRepository: SettingsRepository
|
||||||
|
) {
|
||||||
|
suspend operator fun invoke(station: Station) {
|
||||||
|
settingsRepository.setLastStationId(station.id)
|
||||||
|
// Actual playback is delegated to PlayerService
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.radiola.domain.usecase
|
||||||
|
|
||||||
|
import com.radiola.domain.model.DeeplinkService
|
||||||
|
import com.radiola.domain.model.Track
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class SearchTrackInServiceUseCase @Inject constructor() {
|
||||||
|
operator fun invoke(track: Track, service: DeeplinkService): String {
|
||||||
|
return service.buildSearchUrl(track.artist, track.song)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.radiola.domain.usecase
|
||||||
|
|
||||||
|
import com.radiola.domain.model.Station
|
||||||
|
import com.radiola.domain.repository.FavoritesRepository
|
||||||
|
import kotlinx.coroutines.flow.first
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class ToggleFavoriteUseCase @Inject constructor(
|
||||||
|
private val favoritesRepository: FavoritesRepository
|
||||||
|
) {
|
||||||
|
suspend operator fun invoke(station: Station) {
|
||||||
|
val isFav = favoritesRepository.isFavorite(station.id).first()
|
||||||
|
if (isFav) {
|
||||||
|
favoritesRepository.removeFavorite(station.id)
|
||||||
|
} else {
|
||||||
|
favoritesRepository.addFavorite(station)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user