@@ -18,28 +18,44 @@ package org.matrix.android.sdk.internal.session.media
18
18
19
19
import com.zhuinden.monarchy.Monarchy
20
20
import io.realm.Realm
21
+ import io.realm.RealmResults
22
+ import org.matrix.android.sdk.internal.database.RealmLiveEntityObserver
21
23
import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntity
22
- import org.matrix.android.sdk.internal.database.query.get
23
24
import org.matrix.android.sdk.internal.di.SessionDatabase
24
25
import org.matrix.android.sdk.internal.session.SessionScope
26
+ import timber.log.Timber
25
27
import javax.inject.Inject
26
28
27
29
@SessionScope
28
- class DefaultIsAuthenticatedMediaSupported @Inject constructor(
30
+ internal class DefaultIsAuthenticatedMediaSupported @Inject constructor(
29
31
@SessionDatabase private val monarchy : Monarchy ,
30
- ) : IsAuthenticatedMediaSupported {
31
-
32
- private val canUseAuthenticatedMedia: Boolean by lazy {
33
- canUseAuthenticatedMedia()
34
- }
32
+ ) :
33
+ IsAuthenticatedMediaSupported ,
34
+ RealmLiveEntityObserver <HomeServerCapabilitiesEntity >(monarchy.realmConfiguration) {
35
35
36
36
override fun invoke (): Boolean {
37
37
return canUseAuthenticatedMedia
38
38
}
39
39
40
- private fun canUseAuthenticatedMedia (): Boolean {
40
+ override val query = Monarchy .Query {
41
+ it.where(HomeServerCapabilitiesEntity ::class .java)
42
+ }
43
+
44
+ override fun onChange (results : RealmResults <HomeServerCapabilitiesEntity >) {
45
+ Timber .d(" HomeServerCapabilitiesEntity updated." )
46
+ canUseAuthenticatedMedia = results.canUseAuthenticatedMedia()
47
+ Timber .d(" canUseAuthenticatedMedia: $canUseAuthenticatedMedia " )
48
+ }
49
+
50
+ private var canUseAuthenticatedMedia = getInitialValue()
51
+
52
+ private fun getInitialValue (): Boolean {
41
53
return Realm .getInstance(monarchy.realmConfiguration).use { realm ->
42
- HomeServerCapabilitiesEntity .get (realm)?. canUseAuthenticatedMedia ? : false
54
+ query.createQuery (realm).findAll(). canUseAuthenticatedMedia()
43
55
}
44
56
}
57
+
58
+ private fun RealmResults<HomeServerCapabilitiesEntity>.canUseAuthenticatedMedia (): Boolean {
59
+ return firstOrNull()?.canUseAuthenticatedMedia ? : false
60
+ }
45
61
}
0 commit comments