diff --git a/app/src/main/java/one/mixin/android/db/MarketCoinDao.kt b/app/src/main/java/one/mixin/android/db/MarketCoinDao.kt index a9a06bf780..1dfbf37083 100644 --- a/app/src/main/java/one/mixin/android/db/MarketCoinDao.kt +++ b/app/src/main/java/one/mixin/android/db/MarketCoinDao.kt @@ -16,6 +16,12 @@ interface MarketCoinDao : BaseDao { @Query("SELECT asset_id FROM market_coins WHERE coin_id = :coinId") suspend fun findTokenIdsByCoinId(coinId: String): List + @Query("SELECT coin_id FROM market_coins WHERE asset_id = :assetId") + suspend fun findCoinIdByTokenId(assetId: String): String? + @Query("DELETE FROM market_coins WHERE coin_id = :coinId AND asset_id IN (:assetIds)") suspend fun deleteByCoinIdAndAssetIds(coinId: String, assetIds: List) + + @Query("DELETE FROM market_coins WHERE coin_id = :coinId") + suspend fun deleteByCoinId(coinId: String) } diff --git a/app/src/main/java/one/mixin/android/db/MarketDao.kt b/app/src/main/java/one/mixin/android/db/MarketDao.kt index 07ffb7885b..dbf76b03a2 100644 --- a/app/src/main/java/one/mixin/android/db/MarketDao.kt +++ b/app/src/main/java/one/mixin/android/db/MarketDao.kt @@ -87,4 +87,7 @@ interface MarketDao : BaseDao { @Query("SELECT m.* FROM markets m LEFT JOIN market_coins mc on mc.coin_id = m.coin_id WHERE mc.asset_id = :assetId") suspend fun simpleCoinItemByAssetId(assetId: String): CoinItem? + + @Query("DELETE FROM markets WHERE coin_id = :coinId") + suspend fun deleteByCoinId(coinId: String) } diff --git a/app/src/main/java/one/mixin/android/db/MarketFavoredDao.kt b/app/src/main/java/one/mixin/android/db/MarketFavoredDao.kt index 14dcf5e759..2e2299c147 100644 --- a/app/src/main/java/one/mixin/android/db/MarketFavoredDao.kt +++ b/app/src/main/java/one/mixin/android/db/MarketFavoredDao.kt @@ -1,7 +1,11 @@ package one.mixin.android.db import androidx.room.Dao +import androidx.room.Query import one.mixin.android.vo.market.MarketFavored @Dao -interface MarketFavoredDao : BaseDao +interface MarketFavoredDao : BaseDao { + @Query("DELETE FROM market_favored WHERE coin_id = :coinId") + suspend fun deleteByCoinId(coinId: String) +} diff --git a/app/src/main/java/one/mixin/android/job/RefreshMarketJob.kt b/app/src/main/java/one/mixin/android/job/RefreshMarketJob.kt index ff86bae5e8..d83aaa660d 100644 --- a/app/src/main/java/one/mixin/android/job/RefreshMarketJob.kt +++ b/app/src/main/java/one/mixin/android/job/RefreshMarketJob.kt @@ -6,7 +6,7 @@ import one.mixin.android.extension.nowInUtc import one.mixin.android.vo.market.MarketCoin import timber.log.Timber -class RefreshMarketJob(private val assetId: String) : BaseJob( +class RefreshMarketJob(private val id: String, private val isCoinId: Boolean = false) : BaseJob( Params(PRIORITY_UI_HIGH) .addTags(GROUP).requireNetwork(), ) { @@ -15,10 +15,15 @@ class RefreshMarketJob(private val assetId: String) : BaseJob( const val GROUP = "RefreshMarketJob" } - override fun onRun() = runBlocking { - val response = routeService.market(assetId) + override fun onRun(): Unit = runBlocking { + val response = routeService.market(id) if (response.isSuccess && response.data != null) { response.data?.let { market -> + val localCoinId = if (isCoinId.not()) { + marketCoinDao.findCoinIdByTokenId(id) + } else { + null + } marketDao.insert(market) val remoteAssetIds = market.assetIds ?: emptyList() val localAssetIds = marketCoinDao.findTokenIdsByCoinId(market.coinId) @@ -34,7 +39,17 @@ class RefreshMarketJob(private val assetId: String) : BaseJob( createdAt = nowInUtc() ) }) + + if (localCoinId != null && localCoinId != market.coinId) { + marketCoinDao.deleteByCoinId(localCoinId) + marketDao.deleteByCoinId(localCoinId) + marketFavoredDao.deleteByCoinId(localCoinId) + } } + } else if (response.errorCode == 404 && isCoinId) { + marketCoinDao.deleteByCoinId(id) + marketFavoredDao.deleteByCoinId(id) + marketDao.deleteByCoinId(id) } } } diff --git a/app/src/main/java/one/mixin/android/ui/wallet/MarketDetailsFragment.kt b/app/src/main/java/one/mixin/android/ui/wallet/MarketDetailsFragment.kt index 39fa8d0a24..6557395535 100644 --- a/app/src/main/java/one/mixin/android/ui/wallet/MarketDetailsFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/wallet/MarketDetailsFragment.kt @@ -99,7 +99,7 @@ class MarketDetailsFragment : BaseFragment(R.layout.fragment_details_market) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) - jobManager.addJobInBackground(RefreshMarketJob(marketItem.coinId)) + jobManager.addJobInBackground(RefreshMarketJob(marketItem.coinId, true)) AnalyticsTracker.trackMarketDetail(marketSource) binding.apply { titleView.apply { diff --git a/app/src/main/java/one/mixin/android/ui/wallet/TransactionsFragment.kt b/app/src/main/java/one/mixin/android/ui/wallet/TransactionsFragment.kt index 46f0d03882..4b8b9c7b8b 100644 --- a/app/src/main/java/one/mixin/android/ui/wallet/TransactionsFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/wallet/TransactionsFragment.kt @@ -230,7 +230,7 @@ class TransactionsFragment : BaseFragment(R.layout.fragment_transactions), OnSna } var market = walletViewModel.findMarketItemByAssetId(asset.assetId) if (market == null) { - jobManager.addJobInBackground(RefreshMarketJob(asset.assetId)) + jobManager.addJobInBackground(RefreshMarketJob(asset.assetId, false)) market = MarketItem( "", asset.name, asset.symbol, asset.iconUrl, asset.priceUsd, "", "", "", "", "", runCatching {