Merge remote-tracking branch 'origin/dev' into development
This commit is contained in:
commit
7f2e16c580
@ -9,6 +9,7 @@ import com.isolaatti.audio.drafts.data.AudiosDraftsDao
|
||||
import com.isolaatti.audio.drafts.domain.repository.AudioDraftsRepository
|
||||
import com.isolaatti.connectivity.RetrofitClient
|
||||
import com.isolaatti.database.AppDatabase
|
||||
import com.isolaatti.settings.domain.UserIdSetting
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
@ -23,8 +24,8 @@ class Module {
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideAudiosRepository(audiosApi: AudiosApi, audiosDraftsDao: AudiosDraftsDao): AudiosRepository {
|
||||
return AudiosRepositoryImpl(audiosApi, audiosDraftsDao)
|
||||
fun provideAudiosRepository(audiosApi: AudiosApi, audiosDraftsDao: AudiosDraftsDao, userIdSetting: UserIdSetting): AudiosRepository {
|
||||
return AudiosRepositoryImpl(audiosApi, audiosDraftsDao, userIdSetting)
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
||||
@ -8,8 +8,13 @@ import com.isolaatti.audio.common.domain.AudiosRepository
|
||||
import com.isolaatti.audio.common.domain.Playable
|
||||
import com.isolaatti.audio.drafts.domain.AudioDraft
|
||||
import com.isolaatti.audio.drafts.domain.repository.AudioDraftsRepository
|
||||
import com.isolaatti.auth.domain.AuthRepository
|
||||
import com.isolaatti.common.SortingEnum
|
||||
import com.isolaatti.utils.Resource
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
@ -22,7 +27,9 @@ class AudioSelectorViewModel @Inject constructor(
|
||||
val audios: MutableLiveData<List<Audio>> = MutableLiveData()
|
||||
val drafts: MutableLiveData<List<AudioDraft>> = MutableLiveData()
|
||||
val sorting: MutableLiveData<SortingEnum> = MutableLiveData()
|
||||
|
||||
var squadId: String? = null
|
||||
val error: MutableLiveData<Resource.Error.ErrorType?> = MutableLiveData(null)
|
||||
val loading: MutableLiveData<Boolean> = MutableLiveData()
|
||||
fun setSorting(sort: SortingEnum) {
|
||||
sorting.value = sort
|
||||
}
|
||||
@ -36,8 +43,24 @@ class AudioSelectorViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
fun getAudios() {
|
||||
viewModelScope.launch {
|
||||
|
||||
if(squadId == null) {
|
||||
viewModelScope.launch {
|
||||
audiosRepository.getMyAudios(audios.value?.lastOrNull()?.id).onEach { resource ->
|
||||
when(resource) {
|
||||
is Resource.Error -> {
|
||||
loading.postValue(false)
|
||||
error.postValue(resource.errorType)
|
||||
}
|
||||
is Resource.Loading -> {
|
||||
loading.postValue(true)
|
||||
}
|
||||
is Resource.Success -> {
|
||||
loading.postValue(false)
|
||||
audios.postValue(resource.data ?: listOf())
|
||||
}
|
||||
}
|
||||
}.flowOn(Dispatchers.IO).launchIn(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -26,10 +26,12 @@ class AudiosListSelectorFragment : Fragment() {
|
||||
|
||||
arguments?.getInt(ARG_MODE)?.let { mode = it }
|
||||
arguments?.getString(ARG_SQUAD_ID)?.let { squadId = it }
|
||||
|
||||
viewModel.squadId = squadId
|
||||
|
||||
when(mode) {
|
||||
ARG_VAL_MODE_AUDIOS -> {}
|
||||
ARG_VAL_MODE_AUDIOS -> {
|
||||
viewModel.getAudios()
|
||||
}
|
||||
ARG_VAL_MODE_DRAFTS -> {
|
||||
viewModel.getAudioDrafts()
|
||||
}
|
||||
@ -61,7 +63,7 @@ class AudiosListSelectorFragment : Fragment() {
|
||||
when(mode) {
|
||||
ARG_VAL_MODE_AUDIOS -> {
|
||||
viewModel.audios.observe(viewLifecycleOwner) {
|
||||
|
||||
adapter.setData(it)
|
||||
}
|
||||
}
|
||||
ARG_VAL_MODE_DRAFTS -> {
|
||||
|
||||
@ -5,6 +5,7 @@ import com.isolaatti.MyApplication
|
||||
import com.isolaatti.audio.common.domain.Audio
|
||||
import com.isolaatti.audio.common.domain.AudiosRepository
|
||||
import com.isolaatti.audio.drafts.data.AudiosDraftsDao
|
||||
import com.isolaatti.settings.domain.UserIdSetting
|
||||
import com.isolaatti.utils.Resource
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.flow
|
||||
@ -15,29 +16,46 @@ import retrofit2.awaitResponse
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
|
||||
class AudiosRepositoryImpl @Inject constructor(private val audiosApi: AudiosApi, private val audiosDraftsDao: AudiosDraftsDao) : AudiosRepository {
|
||||
class AudiosRepositoryImpl @Inject constructor(
|
||||
private val audiosApi: AudiosApi,
|
||||
private val audiosDraftsDao: AudiosDraftsDao,
|
||||
private val userIdSetting: UserIdSetting
|
||||
) : AudiosRepository {
|
||||
companion object {
|
||||
const val LOG_TAG = "AudiosRepositoryImpl"
|
||||
}
|
||||
override fun getAudiosOfUser(userId: Int, lastId: String?): Flow<Resource<List<Audio>>> = flow {
|
||||
emit(Resource.Loading())
|
||||
|
||||
private suspend fun _getAudiosOfUser(userId: Int, lastId: String?): Resource<List<Audio>> {
|
||||
try {
|
||||
val response = audiosApi.getAudiosOfUser(userId, lastId).awaitResponse()
|
||||
|
||||
if(response.isSuccessful) {
|
||||
val body = response.body()
|
||||
if(body == null) {
|
||||
emit(Resource.Error(Resource.Error.ErrorType.ServerError))
|
||||
return@flow
|
||||
}
|
||||
val body = response.body() ?: return Resource.Error(Resource.Error.ErrorType.ServerError)
|
||||
|
||||
emit(Resource.Success(body.data.map { Audio.fromDto(it) }))
|
||||
return Resource.Success(body.data.map { Audio.fromDto(it) })
|
||||
} else {
|
||||
return Resource.Error(Resource.Error.ErrorType.ServerError)
|
||||
}
|
||||
} catch(e: Exception) {
|
||||
Log.e("AudiosRepositoryImpl", e.message.toString())
|
||||
emit(Resource.Error(Resource.Error.ErrorType.NetworkError))
|
||||
return Resource.Error(Resource.Error.ErrorType.NetworkError)
|
||||
}
|
||||
}
|
||||
override fun getAudiosOfUser(userId: Int, lastId: String?): Flow<Resource<List<Audio>>> = flow {
|
||||
emit(Resource.Loading())
|
||||
emit(_getAudiosOfUser(userId, lastId))
|
||||
}
|
||||
|
||||
override fun getMyAudios(lastId: String?): Flow<Resource<List<Audio>>> = flow {
|
||||
emit(Resource.Loading())
|
||||
val userId = userIdSetting.getUserIdAsync()
|
||||
if(userId == null) {
|
||||
emit(Resource.Error(Resource.Error.ErrorType.OtherError))
|
||||
return@flow
|
||||
}
|
||||
|
||||
emit(_getAudiosOfUser(userId, lastId))
|
||||
}
|
||||
|
||||
override fun uploadAudio(draftId: Long): Flow<Resource<Audio>> = flow {
|
||||
val audioDraftEntity = audiosDraftsDao.getAudioDraftById(draftId)
|
||||
|
||||
@ -5,6 +5,7 @@ import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface AudiosRepository {
|
||||
fun getAudiosOfUser(userId: Int, lastId: String?): Flow<Resource<List<Audio>>>
|
||||
fun getMyAudios(lastId: String?): Flow<Resource<List<Audio>>>
|
||||
|
||||
fun uploadAudio(draftId: Long): Flow<Resource<Audio>>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user