From 777f5d50824325f389c443b7e5d8f8b1b742f66e Mon Sep 17 00:00:00 2001 From: nk Date: Thu, 4 Jun 2026 12:53:55 +0300 Subject: [PATCH] =?UTF-8?q?fix(favorites):=20=D0=BD=D0=B5=20=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D1=8F=D1=82=D1=8C=20=D0=B8=D0=B7=D0=B1=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B5=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refreshStations пересоздавал каталог с isFavorite=false, а insertAll (OnConflictStrategy.REPLACE) затирал строки — отметки «избранное» пропадали при каждом старте. Перед вставкой считываем текущие id избранного (getFavoriteIdsOnce) и проставляем их новым записям. Co-Authored-By: Claude Opus 4.8 --- .../main/java/com/radiola/data/local/dao/StationDao.kt | 5 +++++ .../com/radiola/data/repository/StationRepositoryImpl.kt | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/radiola/data/local/dao/StationDao.kt b/app/src/main/java/com/radiola/data/local/dao/StationDao.kt index 336a759..3364a71 100644 --- a/app/src/main/java/com/radiola/data/local/dao/StationDao.kt +++ b/app/src/main/java/com/radiola/data/local/dao/StationDao.kt @@ -37,4 +37,9 @@ interface StationDao { @Query("SELECT id FROM stations WHERE isFavorite = 1") fun getFavoriteIds(): Flow> + + // Разовое чтение id избранного — чтобы при пересоздании каталога (refreshStations) + // не потерять отметки «избранное» (insertAll = REPLACE затирает строки). + @Query("SELECT id FROM stations WHERE isFavorite = 1") + suspend fun getFavoriteIdsOnce(): List } diff --git a/app/src/main/java/com/radiola/data/repository/StationRepositoryImpl.kt b/app/src/main/java/com/radiola/data/repository/StationRepositoryImpl.kt index 63f507d..d2d69c4 100644 --- a/app/src/main/java/com/radiola/data/repository/StationRepositoryImpl.kt +++ b/app/src/main/java/com/radiola/data/repository/StationRepositoryImpl.kt @@ -72,8 +72,10 @@ class StationRepositoryImpl @Inject constructor( } } - // 4. Save to DB - android.util.Log.d("StationRepo", "Saving ${merged.size} merged stations to DB") + // 4. Save to DB. Сохраняем текущие отметки «избранное», иначе REPLACE + // в insertAll затрёт их при каждом пересоздании каталога (на старте). + val favoriteIds = db.stationDao().getFavoriteIdsOnce().toSet() + android.util.Log.d("StationRepo", "Saving ${merged.size} merged stations to DB (избранных сохранено: ${favoriteIds.size})") val entities = merged.mapIndexed { index, station -> StationEntity( id = station.id, @@ -85,7 +87,7 @@ class StationRepositoryImpl @Inject constructor( tags = station.tags.joinToString(","), sortOrder = index, source = station.source, - isFavorite = false, + isFavorite = station.id in favoriteIds, qualities = encodeQualities(station.qualities) ) }