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.audio.drafts.domain.repository.AudioDraftsRepository
|
||||||
import com.isolaatti.connectivity.RetrofitClient
|
import com.isolaatti.connectivity.RetrofitClient
|
||||||
import com.isolaatti.database.AppDatabase
|
import com.isolaatti.database.AppDatabase
|
||||||
|
import com.isolaatti.settings.domain.UserIdSetting
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
@ -23,8 +24,8 @@ class Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun provideAudiosRepository(audiosApi: AudiosApi, audiosDraftsDao: AudiosDraftsDao): AudiosRepository {
|
fun provideAudiosRepository(audiosApi: AudiosApi, audiosDraftsDao: AudiosDraftsDao, userIdSetting: UserIdSetting): AudiosRepository {
|
||||||
return AudiosRepositoryImpl(audiosApi, audiosDraftsDao)
|
return AudiosRepositoryImpl(audiosApi, audiosDraftsDao, userIdSetting)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|||||||
@ -8,8 +8,13 @@ import com.isolaatti.audio.common.domain.AudiosRepository
|
|||||||
import com.isolaatti.audio.common.domain.Playable
|
import com.isolaatti.audio.common.domain.Playable
|
||||||
import com.isolaatti.audio.drafts.domain.AudioDraft
|
import com.isolaatti.audio.drafts.domain.AudioDraft
|
||||||
import com.isolaatti.audio.drafts.domain.repository.AudioDraftsRepository
|
import com.isolaatti.audio.drafts.domain.repository.AudioDraftsRepository
|
||||||
|
import com.isolaatti.auth.domain.AuthRepository
|
||||||
import com.isolaatti.common.SortingEnum
|
import com.isolaatti.common.SortingEnum
|
||||||
|
import com.isolaatti.utils.Resource
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
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.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -22,7 +27,9 @@ class AudioSelectorViewModel @Inject constructor(
|
|||||||
val audios: MutableLiveData<List<Audio>> = MutableLiveData()
|
val audios: MutableLiveData<List<Audio>> = MutableLiveData()
|
||||||
val drafts: MutableLiveData<List<AudioDraft>> = MutableLiveData()
|
val drafts: MutableLiveData<List<AudioDraft>> = MutableLiveData()
|
||||||
val sorting: MutableLiveData<SortingEnum> = 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) {
|
fun setSorting(sort: SortingEnum) {
|
||||||
sorting.value = sort
|
sorting.value = sort
|
||||||
}
|
}
|
||||||
@ -36,8 +43,24 @@ class AudioSelectorViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getAudios() {
|
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?.getInt(ARG_MODE)?.let { mode = it }
|
||||||
arguments?.getString(ARG_SQUAD_ID)?.let { squadId = it }
|
arguments?.getString(ARG_SQUAD_ID)?.let { squadId = it }
|
||||||
|
viewModel.squadId = squadId
|
||||||
|
|
||||||
when(mode) {
|
when(mode) {
|
||||||
ARG_VAL_MODE_AUDIOS -> {}
|
ARG_VAL_MODE_AUDIOS -> {
|
||||||
|
viewModel.getAudios()
|
||||||
|
}
|
||||||
ARG_VAL_MODE_DRAFTS -> {
|
ARG_VAL_MODE_DRAFTS -> {
|
||||||
viewModel.getAudioDrafts()
|
viewModel.getAudioDrafts()
|
||||||
}
|
}
|
||||||
@ -61,7 +63,7 @@ class AudiosListSelectorFragment : Fragment() {
|
|||||||
when(mode) {
|
when(mode) {
|
||||||
ARG_VAL_MODE_AUDIOS -> {
|
ARG_VAL_MODE_AUDIOS -> {
|
||||||
viewModel.audios.observe(viewLifecycleOwner) {
|
viewModel.audios.observe(viewLifecycleOwner) {
|
||||||
|
adapter.setData(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ARG_VAL_MODE_DRAFTS -> {
|
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.Audio
|
||||||
import com.isolaatti.audio.common.domain.AudiosRepository
|
import com.isolaatti.audio.common.domain.AudiosRepository
|
||||||
import com.isolaatti.audio.drafts.data.AudiosDraftsDao
|
import com.isolaatti.audio.drafts.data.AudiosDraftsDao
|
||||||
|
import com.isolaatti.settings.domain.UserIdSetting
|
||||||
import com.isolaatti.utils.Resource
|
import com.isolaatti.utils.Resource
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.flow
|
import kotlinx.coroutines.flow.flow
|
||||||
@ -15,29 +16,46 @@ import retrofit2.awaitResponse
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
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 {
|
companion object {
|
||||||
const val LOG_TAG = "AudiosRepositoryImpl"
|
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 {
|
try {
|
||||||
val response = audiosApi.getAudiosOfUser(userId, lastId).awaitResponse()
|
val response = audiosApi.getAudiosOfUser(userId, lastId).awaitResponse()
|
||||||
|
|
||||||
if(response.isSuccessful) {
|
if(response.isSuccessful) {
|
||||||
val body = response.body()
|
val body = response.body() ?: return Resource.Error(Resource.Error.ErrorType.ServerError)
|
||||||
if(body == null) {
|
|
||||||
emit(Resource.Error(Resource.Error.ErrorType.ServerError))
|
|
||||||
return@flow
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
} catch(e: Exception) {
|
||||||
Log.e("AudiosRepositoryImpl", e.message.toString())
|
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 {
|
override fun uploadAudio(draftId: Long): Flow<Resource<Audio>> = flow {
|
||||||
val audioDraftEntity = audiosDraftsDao.getAudioDraftById(draftId)
|
val audioDraftEntity = audiosDraftsDao.getAudioDraftById(draftId)
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import kotlinx.coroutines.flow.Flow
|
|||||||
|
|
||||||
interface AudiosRepository {
|
interface AudiosRepository {
|
||||||
fun getAudiosOfUser(userId: Int, lastId: String?): Flow<Resource<List<Audio>>>
|
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>>
|
fun uploadAudio(draftId: Long): Flow<Resource<Audio>>
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user