Explorar o código

Changed logic of favorite server, getting favorite servers by server ID

Khubaib hai 8 meses
pai
achega
4f4f84c859

+ 15 - 0
app/src/main/java/com/vpn/fastestvpnservice/helpers/BasePreferenceHelper.kt

@@ -52,6 +52,7 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         removePreference(context, KEY_FILENAME, KEY_FEEDBACK)
         removePreference(context, KEY_FILENAME, KEY_LAUNCH)
 //        removePreference(context, KEY_FILENAME, LANGUAGE)
+        removePreference(context, KEY_FILENAME, KEY_SERVERS_ID)
     }
 
     fun clearServerObject() {
@@ -132,6 +133,19 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         putStringPreference(context, KEY_FILENAME, KEY_RECENTLY_SERVERS, Gson().toJson(list))
     }
 
+    fun getServersId(): ArrayList<Int>? {
+        val type = object : TypeToken<ArrayList<Int?>?>() {}.type
+        return Gson().fromJson<ArrayList<Int>>(
+            getStringPreference(
+                context, KEY_FILENAME, KEY_SERVERS_ID
+            ), type
+        )
+    }
+
+    fun setServersId(list: ArrayList<Int>?) {
+        putStringPreference(context, KEY_FILENAME, KEY_SERVERS_ID, Gson().toJson(list))
+    }
+
     fun saveFeaturesData(list: ArrayList<ProductFeatures>) {
         putStringPreference(context, KEY_FILENAME, KEY_FEATURES_DATA, Gson().toJson(list))
     }
@@ -651,5 +665,6 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         private const val KEY_FEEDBACK = "key_feedback"
         private const val KEY_LAUNCH = "key_launch"
         private const val LANGUAGE = "key_language"
+        private const val KEY_SERVERS_ID = "key_servers_id"
     }
 }

+ 11 - 0
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/SearchListViewModel.kt

@@ -80,6 +80,7 @@ class SearchListViewModel constructor(
         val serversArray: ArrayList<Server> = ArrayList<Server>()
         var filtersArray: ArrayList<Server> = ArrayList<Server>()
         val emptyArray: ArrayList<Server> = ArrayList<Server>()
+        val getServersIdList = basePreferenceHelper.getServersId()
 
         Log.d("test_search_logic", "getCountries() $text")
 
@@ -119,6 +120,16 @@ class SearchListViewModel constructor(
             }
         }
 
+        filtersArray.forEachIndexed { index, server ->
+            if (getServersIdList?.any { it == server.id } == true) {
+                Log.d("serversListGlobal", "match - ${server.server_name} ${server.id}")
+                server.isFavourited = true
+            }
+            else {
+                server.isFavourited = false
+            }
+        }
+
            if (isReturn) {
                _countriesList.value = filtersArray
                _countriesListSettings.value = filtersArray

+ 49 - 3
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/ServerListViewModel.kt

@@ -186,6 +186,7 @@ class ServerListViewModel(context: Context): ViewModel() {
 
     fun setCountryData() {
         val data = preferencesHelper.getServerData()
+        val getServersIdList = preferencesHelper.getServersId()
 
         serversListGlobal.clear()
         serversListAllGlobal.clear()
@@ -224,6 +225,18 @@ class ServerListViewModel(context: Context): ViewModel() {
             serverDataGlobal?.servers?.let { serversListAllGlobal.addAll(it) }
         }
 
+        serversListGlobal.let {
+            it.forEach {
+              it?.servers?.forEachIndexed { index, server ->
+                  if (getServersIdList?.any { it == server.id } == true) {
+                      Log.d("serversListGlobal", "match - ${server.server_name} ${server.id}")
+                      server.isFavourited = true
+                  }
+              }
+            }
+        }
+
+
         _mutableLiveDataGetServersGlobal.value = serversListGlobal
         mutableLiveDataAllServers.value = serversListAllGlobal
     }
@@ -709,11 +722,22 @@ class ServerListViewModel(context: Context): ViewModel() {
 
     fun getFavList(toReturn: Boolean = false): ArrayList<Server> {
         val tempList = ArrayList<Server>()
+        val getServersIdList = preferencesHelper.getServersId()
+
+//        preferencesHelper.getServerData().let {
+//            it.forEach {
+//                tempList.addAll(it.servers?.filter {
+//                    it.isFavourited == true
+//                }!!)
+//            }
+//        }
 
         preferencesHelper.getServerData().let {
             it.forEach {
-                tempList.addAll(it.servers?.filter {
-                    it.isFavourited == true
+                tempList.addAll(it.servers?.filter { server ->
+                    getServersIdList?.any { id ->
+                        server.id == id
+                    } == true
                 }!!)
             }
         }
@@ -724,6 +748,11 @@ class ServerListViewModel(context: Context): ViewModel() {
             }
         }
 
+        tempList.forEachIndexed { index, server ->
+            server.isFavourited = true
+        }
+
+
 //        tempList.forEachIndexed { index, server ->
 //            CalculatePing(server) {
 //                server.ping = it
@@ -783,6 +812,24 @@ class ServerListViewModel(context: Context): ViewModel() {
         val serversGroup = liveDataGroupServers.value
         val filterServersList = ArrayList<ServerDataGlobal>()
 
+        val getServersIdList: ArrayList<Int>? = preferencesHelper.getServersId()
+        val tempListId = ArrayList<Int>()
+
+        getServersIdList?.let {
+            tempListId.addAll(it)
+        }
+
+        if (!tempListId.any { it == server.id })
+        {
+            server.isFavourited = true
+            server.id?.let { tempListId.add(it) }
+        } else {
+            server.isFavourited = false
+            tempListId.remove(server.id)
+        }
+
+        preferencesHelper.setServersId(tempListId)
+
         serverData.forEachIndexed { i, serverDataList ->
             serverDataList.servers?.let {serverList ->
                 serverList.forEachIndexed { index, obj ->
@@ -803,7 +850,6 @@ class ServerListViewModel(context: Context): ViewModel() {
                 }
             }
         }
-
         serversGroup?.forEachIndexed { i, serverDataList ->
             serverDataList?.servers?.let {serverList ->
                 serverList.forEachIndexed { index, obj ->