package com.vpn.fastestvpnservice.viewmodels import android.content.Context import android.content.pm.ActivityInfo import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.vpn.fastestvpnservice.beans.DataResponseServers import com.vpn.fastestvpnservice.beans.ServerData import com.vpn.fastestvpnservice.constants.AppEnum import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper import com.vpn.fastestvpnservice.openVpnUtils.EncryptData import com.vpn.fastestvpnservice.retrofit.RetrofitNetworkHandling import com.vpn.fastestvpnservice.retrofit.WebServiceFactory import com.vpn.fastestvpnservice.screens.isServerModelInitialized import com.vpn.fastestvpnservice.screens.serverListViewModelSplash import com.vpn.fastestvpnservice.utils.StaticMethods import retrofit2.Call import java.io.BufferedReader import java.io.InputStream import java.io.InputStreamReader class SplashViewModel constructor(context: Context): ViewModel() { var mutableLiveDataServerData = MutableLiveData<DataResponseServers<ArrayList<ServerData>>>() var liveDataServerData: LiveData<DataResponseServers<ArrayList<ServerData>>> = mutableLiveDataServerData var mutableLiveDataLanguageStatus = MutableLiveData<Boolean>(false) var liveDataLanguageStatus: LiveData<Boolean> = mutableLiveDataLanguageStatus var preferenceHelper: BasePreferenceHelper var context: Context init { this.context = context preferenceHelper = BasePreferenceHelper(context) val jsonAppDetails = getJsonAppDetails() val jsonFileDetails = getJsonFileDetails() jsonAppDetails?.let { val En = EncryptData() preferenceHelper.saveAppDetails(En.encrypt(it)) } jsonFileDetails?.let { val En = EncryptData() preferenceHelper.saveFileDetails(En.encrypt(it)) } } fun serverDataApi() { Log.d("test_api_response_s", "serverDataApi called()") WebServiceFactory.getInstance().serverDataApi().enqueue( RetrofitNetworkHandling<Any>(object : RetrofitNetworkHandling.ResponseCallback<Any> { override fun onSuccess(call: Call<Any>?, response: Any?) { try { val gson = Gson() val jsonString = gson.toJson(response) val type = object : TypeToken<DataResponseServers<ArrayList<ServerData>>>() {}.type val data = gson.fromJson<DataResponseServers<ArrayList<ServerData>>>(jsonString, type) if (data?.status == true) { Log.d("test_api_response_s", "response true") mutableLiveDataServerData.value = data data.data?.let { preferenceHelper.saveServerData(it) } data.wireguard?.let {wg -> if (wg.ip?.isNotEmpty() == true && wg.key?.isNotEmpty() == true){ Log.d("test_wg_data", "WG isNotEmpty") preferenceHelper.saveWireGuard(wg) } else { Log.d("test_wg_data", "WG isEmpty") } } data.product?.let { // Log.d("test_api_response", it.productName.toString()) preferenceHelper.saveProduct(it) } data.available_protocols.let { preferenceHelper.saveAvailableProtocols(it) } data.enabled_protocols.let { preferenceHelper.saveEnabledProtocols(it) } if (isServerModelInitialized) { Log.d("test_api_response_s", "serverDataApi isServerModelInitialized") if (StaticMethods.isTV(context)) { Log.d("test_api_response_s", "serverDataApi TV") serverListViewModelSplash.setCountryDataTV() } else { Log.d("test_api_response_s", "serverDataApi Android") serverListViewModelSplash.setRecommendedSmartServers() serverListViewModelSplash.setCountryData() } } // Log.d("test_api_response", data.data.toString()) // Log.d("test_api_response", data.enabled_protocols.toString()) // Log.d("test_api_response", data.available_protocols.toString()) } } catch (ex: Exception) { Log.d("test_api_response_s", "server catch") } } override fun onFail(call: Call<Any>?, response: Any?) { Log.d("test_api_response_s", "serverDataApi onFail") mutableLiveDataLanguageStatus.value = false } override fun onError(call: Call<Any>?, response: Any?) { Log.d("test_api_response_s", "serverDataApi onError") mutableLiveDataLanguageStatus.value = false } } ) ) } private fun getJsonFileDetails(): String? { val protocol = AppEnum.UDP_PROTOCOL.key var conf: InputStream? = null try { conf = if (protocol.equals(AppEnum.TCP_PROTOCOL.key, ignoreCase = true)) { context.assets.open("fileDetails/fileDetails.json") } else { context.assets.open("fileDetails/fileDetails.json") } } catch (e: Exception) { e.printStackTrace() } var bufferedReader: BufferedReader? = null var isr: InputStreamReader? = null try { isr = InputStreamReader(conf) } catch (e: Exception) { e.printStackTrace() } try { bufferedReader = BufferedReader(isr) val total = StringBuilder() var line: String? while (bufferedReader.readLine().also { line = it } != null) { total.append(line).append('\n') } return total.toString() } catch (e: Exception) { e.printStackTrace() } return "" } private fun getJsonAppDetails(): String? { var conf: InputStream? = null try { conf = context.assets.open("appDetails/appDetails.json") } catch (e: Exception) { e.printStackTrace() } var bufferedReader: BufferedReader? = null var isr: InputStreamReader? = null try { isr = InputStreamReader(conf) } catch (e: Exception) { e.printStackTrace() } try { bufferedReader = BufferedReader(isr) val total = StringBuilder() var line: String? while (bufferedReader.readLine().also { line = it } != null) { total.append(line).append('\n') } return total.toString() } catch (e: Exception) { e.printStackTrace() } return "" } }