Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Commit e7fa51c

Browse files
authored
Merge pull request #2082 from dev-ritik/avatar_realtime_api
[IMPROVEMENT] Listen to changes on user avatar.
2 parents 24c8acd + 465a859 commit e7fa51c

3 files changed

Lines changed: 36 additions & 14 deletions

File tree

app/src/main/java/chat/rocket/android/db/DatabaseManager.kt

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package chat.rocket.android.db
22

33
import android.app.Application
4+
import androidx.core.net.toUri
45
import chat.rocket.android.R
56
import chat.rocket.android.db.model.BaseMessageEntity
67
import chat.rocket.android.db.model.BaseUserEntity
@@ -15,6 +16,7 @@ import chat.rocket.android.db.model.UrlEntity
1516
import chat.rocket.android.db.model.UserEntity
1617
import chat.rocket.android.db.model.UserStatus
1718
import chat.rocket.android.db.model.asEntity
19+
import chat.rocket.android.util.extensions.avatarUrl
1820
import chat.rocket.android.util.extensions.exhaustive
1921
import chat.rocket.android.util.extensions.removeTrailingSlash
2022
import chat.rocket.android.util.extensions.toEntity
@@ -23,6 +25,7 @@ import chat.rocket.android.util.retryDB
2325
import chat.rocket.common.model.BaseRoom
2426
import chat.rocket.common.model.RoomType
2527
import chat.rocket.common.model.SimpleUser
28+
import chat.rocket.common.model.Token
2629
import chat.rocket.common.model.User
2730
import chat.rocket.core.internal.model.Subscription
2831
import chat.rocket.core.internal.realtime.socket.model.StreamMessage
@@ -32,6 +35,7 @@ import chat.rocket.core.model.Message
3235
import chat.rocket.core.model.Myself
3336
import chat.rocket.core.model.Room
3437
import chat.rocket.core.model.userId
38+
import com.facebook.drawee.backends.pipeline.Fresco
3539
import kotlinx.coroutines.GlobalScope
3640
import kotlinx.coroutines.Job
3741
import kotlinx.coroutines.channels.Channel
@@ -48,8 +52,7 @@ import kotlin.collections.component2
4852
import kotlin.collections.set
4953
import 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
}
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package chat.rocket.android.db
22

33
import android.app.Application
4+
import chat.rocket.android.server.domain.TokenRepository
45
import timber.log.Timber
56
import javax.inject.Inject
67
import javax.inject.Singleton
78

89
@Singleton
9-
class DatabaseManagerFactory @Inject constructor(private val context: Application) {
10+
class DatabaseManagerFactory @Inject constructor(
11+
private val context: Application,
12+
private val tokenRepository: TokenRepository
13+
) {
1014
private val cache = HashMap<String, DatabaseManager>()
1115

1216
fun create(serverUrl: String): DatabaseManager {
@@ -15,9 +19,10 @@ class DatabaseManagerFactory @Inject constructor(private val context: Applicatio
1519
return it
1620
}
1721

18-
Timber.d("Returning FRESH database for $serverUrl")
19-
val db = DatabaseManager(context, serverUrl)
20-
cache[serverUrl] = db
21-
return db
22+
Timber.d("Returning fresh database for $serverUrl")
23+
with(DatabaseManager(context, serverUrl, tokenRepository.get(serverUrl)!!)) {
24+
cache[serverUrl] = this
25+
return this
26+
}
2227
}
2328
}

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
66
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
7-
distributionSha256Sum=b7aedd369a26b177147bcb715f8b1fc4fe32b0a6ade0d7fd8ee5ed0c6f731f2c
7+
distributionSha256Sum=53b71812f18cdb2777e9f1b2a0f2038683907c90bdc406bc64d8b400e1fb2c3b

0 commit comments

Comments
 (0)