Skip to content

Commit da573b8

Browse files
Sakshamnayyardogi
andauthored
teams: smoother voices reply realm handling (fixes #8964) (#8970)
Co-authored-by: dogi <[email protected]>
1 parent 8015d04 commit da573b8

File tree

3 files changed

+46
-11
lines changed

3 files changed

+46
-11
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ android {
99
applicationId "org.ole.planet.myplanet"
1010
minSdk = 26
1111
targetSdk = 36
12-
versionCode = 3705
13-
versionName = "0.37.5"
12+
versionCode = 3706
13+
versionName = "0.37.6"
1414
ndkVersion = '26.3.11579264'
1515
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1616
vectorDrawables.useSupportLibrary = true

app/src/main/java/org/ole/planet/myplanet/repository/NewsRepositoryImpl.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import io.realm.Sort
77
import java.util.HashMap
88
import javax.inject.Inject
99
import org.ole.planet.myplanet.datamanager.DatabaseService
10+
import org.ole.planet.myplanet.datamanager.findCopyByField
1011
import org.ole.planet.myplanet.model.RealmNews
1112
import org.ole.planet.myplanet.model.RealmNews.Companion.createNews
1213
import org.ole.planet.myplanet.model.RealmUserModel
@@ -17,12 +18,15 @@ class NewsRepositoryImpl @Inject constructor(
1718
) : RealmRepository(databaseService), NewsRepository {
1819

1920
override suspend fun getNewsWithReplies(newsId: String): Pair<RealmNews?, List<RealmNews>> {
20-
val news = findByField(RealmNews::class.java, "id", newsId)
21-
val replies = queryList(RealmNews::class.java) {
22-
equalTo("replyTo", newsId, Case.INSENSITIVE)
23-
sort("time", Sort.DESCENDING)
21+
return withRealm(ensureLatest = true) { realm ->
22+
val news = realm.findCopyByField(RealmNews::class.java, "id", newsId)
23+
val replies = realm.where(RealmNews::class.java)
24+
.equalTo("replyTo", newsId, Case.INSENSITIVE)
25+
.sort("time", Sort.DESCENDING)
26+
.findAll()
27+
.let { realm.copyFromRealm(it) }
28+
news to replies
2429
}
25-
return news to replies
2630
}
2731

2832
override suspend fun getCommunityVisibleNews(userIdentifier: String): List<RealmNews> {

app/src/main/java/org/ole/planet/myplanet/repository/RealmRepository.kt

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,28 @@ open class RealmRepository(private val databaseService: DatabaseService) {
1818
protected suspend fun <T : RealmObject> queryList(
1919
clazz: Class<T>,
2020
builder: RealmQuery<T>.() -> Unit = {},
21+
): List<T> = queryList(clazz, false, builder)
22+
23+
protected suspend fun <T : RealmObject> queryList(
24+
clazz: Class<T>,
25+
ensureLatest: Boolean,
26+
builder: RealmQuery<T>.() -> Unit = {},
2127
): List<T> =
22-
databaseService.withRealmAsync { realm ->
28+
withRealm(ensureLatest) { realm ->
2329
realm.queryList(clazz, builder)
2430
}
2531

2632
protected suspend fun <T : RealmObject> count(
2733
clazz: Class<T>,
2834
builder: RealmQuery<T>.() -> Unit = {},
35+
): Long = count(clazz, false, builder)
36+
37+
protected suspend fun <T : RealmObject> count(
38+
clazz: Class<T>,
39+
ensureLatest: Boolean,
40+
builder: RealmQuery<T>.() -> Unit = {},
2941
): Long =
30-
databaseService.withRealmAsync { realm ->
42+
withRealm(ensureLatest) { realm ->
3143
realm.where(clazz).apply(builder).count()
3244
}
3345

@@ -54,8 +66,15 @@ open class RealmRepository(private val databaseService: DatabaseService) {
5466
clazz: Class<T>,
5567
fieldName: String,
5668
value: V,
69+
): T? = findByField(clazz, fieldName, value, false)
70+
71+
protected suspend fun <T : RealmObject, V : Any> findByField(
72+
clazz: Class<T>,
73+
fieldName: String,
74+
value: V,
75+
ensureLatest: Boolean,
5776
): T? =
58-
databaseService.withRealmAsync { realm ->
77+
withRealm(ensureLatest) { realm ->
5978
realm.findCopyByField(clazz, fieldName, value)
6079
}
6180

@@ -90,8 +109,20 @@ open class RealmRepository(private val databaseService: DatabaseService) {
90109
}
91110
}
92111

112+
protected suspend fun <T> withRealm(
113+
ensureLatest: Boolean = false,
114+
operation: (Realm) -> T,
115+
): T {
116+
return databaseService.withRealmAsync { realm ->
117+
if (ensureLatest) {
118+
realm.refresh()
119+
}
120+
operation(realm)
121+
}
122+
}
123+
93124
protected suspend fun <T> withRealmAsync(operation: (Realm) -> T): T {
94-
return databaseService.withRealmAsync(operation)
125+
return withRealm(false, operation)
95126
}
96127

97128
protected fun <T> withRealmFlow(

0 commit comments

Comments
 (0)