From 630ab5ef1e0d6705fbad68489c72c37903fe113b Mon Sep 17 00:00:00 2001 From: emkartal1 Date: Mon, 10 Apr 2023 16:36:30 +0200 Subject: [PATCH] Fix Api exception and searchList :bug: --- .../java/uca/iut/clermont/api/FootballApi.kt | 21 ++++++++++++ .../uca/iut/clermont/view/HomeFragment.kt | 21 +++++------- .../view/viewModel/DetailViewModel.kt | 33 +++++++++++++------ .../clermont/view/viewModel/HomeViewModel.kt | 24 ++++++++++---- 4 files changed, 70 insertions(+), 29 deletions(-) diff --git a/src/app/src/main/java/uca/iut/clermont/api/FootballApi.kt b/src/app/src/main/java/uca/iut/clermont/api/FootballApi.kt index 93ba88f..9dbaae1 100644 --- a/src/app/src/main/java/uca/iut/clermont/api/FootballApi.kt +++ b/src/app/src/main/java/uca/iut/clermont/api/FootballApi.kt @@ -13,6 +13,8 @@ import uca.iut.clermont.model.PlayerResponse interface FootballApi { + // Area + @Headers("X-Auth-Token: 7814ffe5b0314b5291a287d32a178e57") @GET("areas/{id}") suspend fun getArea(@Path("id") id: Int): Area @@ -21,10 +23,14 @@ interface FootballApi { @GET("areas") suspend fun getAreas(): AreaResponse + // Person + @Headers("X-Auth-Token: 7814ffe5b0314b5291a287d32a178e57") @GET("persons/{id}") suspend fun getPlayer(@Path("id") playerId: Int): PlayerResponse + // Competition + @Headers("X-Auth-Token: 621ef06e148542f98b4993a5442421eb") @GET("competitions") suspend fun getCompetitions(): CompetitionResponse @@ -33,6 +39,21 @@ interface FootballApi { @GET("competitions/{id}") suspend fun getCompetition(@Path("id") id: Int): CompetitionResult + // Team + @Headers("X-Auth-Token: 9983c8c887464274bed01ff046775bed") + @GET("teams?limit=1000") + suspend fun getTeams(): CompetitionResponse + + @Headers("X-Auth-Token: 84c47f4211244a0d9b3cb9376e00f4aa") + @GET("competitions/{id}/teams") + suspend fun getTeamsByCompetition(): CompetitionResponse + + @Headers("X-Auth-Token: 9983c8c887464274bed01ff046775bed") + @GET("teams/{id}") + suspend fun getTeam(): CompetitionResponse + + // Match + @Headers("X-Auth-Token: 7814ffe5b0314b5291a287d32a178e57") @GET("matches") suspend fun getMatches(): MatchResponse diff --git a/src/app/src/main/java/uca/iut/clermont/view/HomeFragment.kt b/src/app/src/main/java/uca/iut/clermont/view/HomeFragment.kt index af31b60..e035845 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/HomeFragment.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/HomeFragment.kt @@ -28,6 +28,8 @@ class HomeFragment : Fragment(), CompetitionsAdapter.OnItemClickListener { private val viewModel: HomeViewModel by viewModels() private lateinit var searchBar: EditText private lateinit var searchAdapter: RecyclerView + private var searchList: MutableList = mutableListOf() + override fun onCreateView( inflater: LayoutInflater, @@ -85,16 +87,12 @@ class HomeFragment : Fragment(), CompetitionsAdapter.OnItemClickListener { } private fun searchNames(query: String) { - val filteredCompetition = mutableListOf() - if (query.isNotEmpty()) { - for (competition in viewModel.competitions.value!!) { - if (competition.name.lowercase() - .contains(query.lowercase()) && filteredCompetition.size < 3 - ) { - filteredCompetition.add(competition) - } - } - } + val filteredCompetition = viewModel.competitions.value.orEmpty() + .asSequence() + .filter { it.name.lowercase().contains(query.lowercase()) } + .take(3) + .toMutableList() + searchList = filteredCompetition searchList(filteredCompetition, this) } @@ -129,9 +127,8 @@ class HomeFragment : Fragment(), CompetitionsAdapter.OnItemClickListener { } override fun onItemClick(position: Int) { - val competitions = viewModel.competitions.value!! val bundle = bundleOf( - "idItem" to competitions[position].id, + "idItem" to searchList[position].id, "fragmentId" to R.id.homeFragment ) findNavController().navigate(R.id.action_homeFragment_to_detailFragment, bundle) diff --git a/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt b/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt index cb2092f..9e9f9e0 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt @@ -1,9 +1,11 @@ package uca.iut.clermont.view.viewModel +import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch +import retrofit2.HttpException import uca.iut.clermont.api.ApiManager import uca.iut.clermont.model.Competition import uca.iut.clermont.model.Match @@ -25,21 +27,32 @@ class DetailViewModel( */ fun loadCurrentCompetition(id: Int) = viewModelScope.launch { - val result = manager.competitionsMgr.getItemById(id) - competition.value = result + try { + val result = manager.competitionsMgr.getItemById(id) + competition.value = result + } catch (e: HttpException) { + Log.d(e.toString(), ": too many requests") + } } fun loadMatches(id: Int) = viewModelScope.launch { - - val matchResults = manager.matchesMgr.getItemsByCompetition(id) - competitionMatches.value = - matchResults.filter { it.status != "TIMED" && it.status != "SCHEDULED" && it.status != "POSTPONED" } - .apply { forEach { it.date.add(Calendar.HOUR_OF_DAY, 2) } } - .sortedBy { it.competition.name } - .sortedByDescending { it.date } + try { + val matchResults = manager.matchesMgr.getItemsByCompetition(id) + competitionMatches.value = + matchResults.filter { it.status != "TIMED" && it.status != "SCHEDULED" && it.status != "POSTPONED" } + .apply { forEach { it.date.add(Calendar.HOUR_OF_DAY, 2) } } + .sortedBy { it.competition.name } + .sortedByDescending { it.date } + } catch (e: HttpException) { + Log.d(e.toString(), ": too many requests") + } } fun loadNumberMatches() = viewModelScope.launch { - nbCompetitionMatches.value = competitionMatches.value?.size + try { + nbCompetitionMatches.value = competitionMatches.value?.size + } catch (e: HttpException) { + Log.d(e.toString(), ": too many requests") + } } } \ No newline at end of file diff --git a/src/app/src/main/java/uca/iut/clermont/view/viewModel/HomeViewModel.kt b/src/app/src/main/java/uca/iut/clermont/view/viewModel/HomeViewModel.kt index 93892d0..1e49caf 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/viewModel/HomeViewModel.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/viewModel/HomeViewModel.kt @@ -1,9 +1,11 @@ package uca.iut.clermont.view.viewModel +import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch +import retrofit2.HttpException import uca.iut.clermont.api.ApiManager import uca.iut.clermont.model.Competition import uca.iut.clermont.model.Match @@ -16,16 +18,24 @@ class HomeViewModel : ViewModel() { val competitions = MutableLiveData>() fun loadMatches() = viewModelScope.launch { - val matchResults = manager.matchesMgr.getItems() - matches.value = matchResults.filter { it.status != "TIMED" } - .apply { forEach { it.date.add(Calendar.HOUR_OF_DAY, 2) } } - .sortedBy { it.competition.name } - .sortedByDescending { it.date } + try { + val matchResults = manager.matchesMgr.getItems() + matches.value = matchResults.filter { it.status != "TIMED" } + .apply { forEach { it.date.add(Calendar.HOUR_OF_DAY, 2) } } + .sortedBy { it.competition.name } + .sortedByDescending { it.date } + } catch (e: HttpException) { + Log.d(e.toString(),": too many requests") + } } fun loadCompetitions() = viewModelScope.launch { - val result = manager.competitionsMgr.getItems() - competitions.value = result + try { + val result = manager.competitionsMgr.getItems() + competitions.value = result + } catch (e: HttpException) { + Log.d(e.toString(),": too many requests") + } } } \ No newline at end of file