11package chat.rocket.android.db
22
33import android.app.Application
4+ import androidx.core.net.toUri
45import chat.rocket.android.R
56import chat.rocket.android.db.model.BaseMessageEntity
67import chat.rocket.android.db.model.BaseUserEntity
@@ -15,6 +16,7 @@ import chat.rocket.android.db.model.UrlEntity
1516import chat.rocket.android.db.model.UserEntity
1617import chat.rocket.android.db.model.UserStatus
1718import chat.rocket.android.db.model.asEntity
19+ import chat.rocket.android.util.extensions.avatarUrl
1820import chat.rocket.android.util.extensions.exhaustive
1921import chat.rocket.android.util.extensions.removeTrailingSlash
2022import chat.rocket.android.util.extensions.toEntity
@@ -23,6 +25,7 @@ import chat.rocket.android.util.retryDB
2325import chat.rocket.common.model.BaseRoom
2426import chat.rocket.common.model.RoomType
2527import chat.rocket.common.model.SimpleUser
28+ import chat.rocket.common.model.Token
2629import chat.rocket.common.model.User
2730import chat.rocket.core.internal.model.Subscription
2831import chat.rocket.core.internal.realtime.socket.model.StreamMessage
@@ -32,6 +35,7 @@ import chat.rocket.core.model.Message
3235import chat.rocket.core.model.Myself
3336import chat.rocket.core.model.Room
3437import chat.rocket.core.model.userId
38+ import com.facebook.drawee.backends.pipeline.Fresco
3539import kotlinx.coroutines.GlobalScope
3640import kotlinx.coroutines.Job
3741import kotlinx.coroutines.channels.Channel
@@ -48,8 +52,7 @@ import kotlin.collections.component2
4852import kotlin.collections.set
4953import kotlin.system.measureTimeMillis
5054
51- class DatabaseManager (val context : Application , val serverUrl : String ) {
52-
55+ class DatabaseManager (val context : Application , val serverUrl : String , val token : Token ) {
5356 private val database: RCDatabase = androidx.room.Room .databaseBuilder(
5457 context,
5558 RCDatabase ::class .java, serverUrl.databaseName()
@@ -58,23 +61,23 @@ class DatabaseManager(val context: Application, val serverUrl: String) {
5861 .build()
5962 private val dbContext = newSingleThreadContext(" $serverUrl -db-context" )
6063 private val dbManagerContext = newSingleThreadContext(" $serverUrl -db-manager-context" )
61-
6264 private val writeChannel = Channel <Operation >(Channel .UNLIMITED )
6365 private var dbJob: Job ? = null
64-
6566 private val insertSubs = HashMap <String , Subscription >()
6667 private val insertRooms = HashMap <String , Room >()
6768 private val updateSubs = LinkedHashMap <String , Subscription >()
6869 private val updateRooms = LinkedHashMap <String , Room >()
6970
70- fun chatRoomDao (): ChatRoomDao = database.chatRoomDao()
71- fun userDao (): UserDao = database.userDao()
72- fun messageDao (): MessageDao = database.messageDao()
73-
7471 init {
7572 start()
7673 }
7774
75+ fun chatRoomDao (): ChatRoomDao = database.chatRoomDao()
76+
77+ fun userDao (): UserDao = database.userDao()
78+
79+ fun messageDao (): MessageDao = database.messageDao()
80+
7881 fun start () {
7982 dbJob?.cancel()
8083 dbJob = GlobalScope .launch(dbContext) {
@@ -189,6 +192,20 @@ class DatabaseManager(val context: Application, val serverUrl: String) {
189192 status = myself.status?.toString() ? : user.status
190193 ) ? : myself.asUser().toEntity()
191194
195+ if (myself.avatarOrigin != null && myself.active == null &&
196+ myself.name == null && myself.username == null
197+ ) {
198+ user?.username?.let {
199+ Fresco .getImagePipeline().evictFromCache(
200+ serverUrl.avatarUrl(
201+ it,
202+ token.userId,
203+ token.authToken
204+ ).toUri()
205+ )
206+ }
207+ }
208+
192209 Timber .d(" UPDATING SELF: $entity " )
193210 entity?.let { sendOperation(Operation .UpsertUser (it)) }
194211 }
0 commit comments