Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions app/src/main/java/one/mixin/android/db/MarketCoinDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,13 @@ interface MarketCoinDao : BaseDao<MarketCoin> {

@Query("SELECT asset_id FROM market_coins WHERE coin_id = :coinId")
suspend fun findTokenIdsByCoinId(coinId: String): List<String>

@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 NOT IN (:assetIds)")
suspend fun deleteMarketCoinsNotInAssetIds(coinId: String, assetIds: List<String>)

@Query("DELETE FROM market_coins WHERE coin_id = :coinId")
suspend fun deleteByCoinId(coinId: String)
}
3 changes: 3 additions & 0 deletions app/src/main/java/one/mixin/android/db/MarketDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,7 @@ interface MarketDao : BaseDao<Market> {

@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)
}
6 changes: 5 additions & 1 deletion app/src/main/java/one/mixin/android/db/MarketFavoredDao.kt
Original file line number Diff line number Diff line change
@@ -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<MarketFavored>
interface MarketFavoredDao : BaseDao<MarketFavored> {
@Query("DELETE FROM market_favored WHERE coin_id = :coinId")
suspend fun deleteByCoinId(coinId: String)
}
38 changes: 29 additions & 9 deletions app/src/main/java/one/mixin/android/job/RefreshMarketJob.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,48 @@ import kotlinx.coroutines.runBlocking
import one.mixin.android.extension.nowInUtc
import one.mixin.android.vo.market.MarketCoin

class RefreshMarketJob(private val assetId: String) : BaseJob(
Params(PRIORITY_UI_HIGH)
.addTags(GROUP).requireNetwork(),
class RefreshMarketJob(private val id: String, private val isCoinId: Boolean) : BaseJob(
Params(PRIORITY_UI_HIGH).addTags(GROUP).requireNetwork(),
) {
companion object {
private const val serialVersionUID = 1L
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->
response.data?.let { market ->
marketDao.insert(market)
marketCoinDao.insertList(market.assetIds?.map { assetId ->
MarketCoin(
coinId = market.coinId,
assetId = assetId,
createdAt = nowInUtc()
coinId = market.coinId, assetId = assetId, createdAt = nowInUtc()
)
} ?: emptyList())

if (isCoinId.not()) { // id is token id
marketCoinDao.findCoinIdByTokenId(id)?.let { localCoinId ->
if (localCoinId != market.coinId) { // Clean up old data when coin ID changes
marketCoinDao.deleteByCoinId(localCoinId)
marketDao.deleteByCoinId(localCoinId)
marketFavoredDao.deleteByCoinId(localCoinId)
}
}
}

if (market.assetIds.isNullOrEmpty()) {
// Remove coin relationships when no assets are mapped
marketCoinDao.deleteByCoinId(market.coinId)
} else {
// Remove obsolete asset mappings
marketCoinDao.deleteMarketCoinsNotInAssetIds(market.coinId, market.assetIds)
}
}
} else if (response.errorCode == 404 && isCoinId) {
// Clean up all related data when market is not found
marketCoinDao.deleteByCoinId(id)
marketFavoredDao.deleteByCoinId(id)
marketDao.deleteByCoinId(id)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,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))
binding.apply {
titleView.apply {
setSubTitle(marketItem.symbol, marketItem.name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,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 {
Expand Down
Loading