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