mirror of
https://github.com/element-hq/element-android
synced 2024-11-29 05:58:50 +03:00
Introduce @SessionId
This commit is contained in:
parent
160927e7b5
commit
215abea10a
4 changed files with 35 additions and 9 deletions
|
@ -18,6 +18,7 @@ package im.vector.matrix.android.internal.database
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import im.vector.matrix.android.internal.database.model.SessionRealmModule
|
import im.vector.matrix.android.internal.database.model.SessionRealmModule
|
||||||
|
import im.vector.matrix.android.internal.di.SessionId
|
||||||
import im.vector.matrix.android.internal.di.UserCacheDirectory
|
import im.vector.matrix.android.internal.di.UserCacheDirectory
|
||||||
import im.vector.matrix.android.internal.di.UserMd5
|
import im.vector.matrix.android.internal.di.UserMd5
|
||||||
import im.vector.matrix.android.internal.session.SessionModule
|
import im.vector.matrix.android.internal.session.SessionModule
|
||||||
|
@ -37,13 +38,14 @@ private const val REALM_NAME = "disk_store.realm"
|
||||||
*/
|
*/
|
||||||
internal class SessionRealmConfigurationFactory @Inject constructor(private val realmKeysUtils: RealmKeysUtils,
|
internal class SessionRealmConfigurationFactory @Inject constructor(private val realmKeysUtils: RealmKeysUtils,
|
||||||
@UserCacheDirectory val directory: File,
|
@UserCacheDirectory val directory: File,
|
||||||
|
@SessionId val sessionId: String,
|
||||||
@UserMd5 val userMd5: String,
|
@UserMd5 val userMd5: String,
|
||||||
context: Context) {
|
context: Context) {
|
||||||
|
|
||||||
private val sharedPreferences = context.getSharedPreferences("im.vector.matrix.android.realm", Context.MODE_PRIVATE)
|
private val sharedPreferences = context.getSharedPreferences("im.vector.matrix.android.realm", Context.MODE_PRIVATE)
|
||||||
|
|
||||||
fun create(): RealmConfiguration {
|
fun create(): RealmConfiguration {
|
||||||
val shouldClearRealm = sharedPreferences.getBoolean("$REALM_SHOULD_CLEAR_FLAG_$userMd5", false)
|
val shouldClearRealm = sharedPreferences.getBoolean("$REALM_SHOULD_CLEAR_FLAG_$sessionId", false)
|
||||||
if (shouldClearRealm) {
|
if (shouldClearRealm) {
|
||||||
Timber.v("************************************************************")
|
Timber.v("************************************************************")
|
||||||
Timber.v("The realm file session was corrupted and couldn't be loaded.")
|
Timber.v("The realm file session was corrupted and couldn't be loaded.")
|
||||||
|
@ -53,7 +55,7 @@ internal class SessionRealmConfigurationFactory @Inject constructor(private val
|
||||||
}
|
}
|
||||||
sharedPreferences
|
sharedPreferences
|
||||||
.edit()
|
.edit()
|
||||||
.putBoolean("$REALM_SHOULD_CLEAR_FLAG_$userMd5", true)
|
.putBoolean("$REALM_SHOULD_CLEAR_FLAG_$sessionId", true)
|
||||||
.apply()
|
.apply()
|
||||||
|
|
||||||
val realmConfiguration = RealmConfiguration.Builder()
|
val realmConfiguration = RealmConfiguration.Builder()
|
||||||
|
@ -71,7 +73,7 @@ internal class SessionRealmConfigurationFactory @Inject constructor(private val
|
||||||
Timber.v("Successfully create realm instance")
|
Timber.v("Successfully create realm instance")
|
||||||
sharedPreferences
|
sharedPreferences
|
||||||
.edit()
|
.edit()
|
||||||
.putBoolean("$REALM_SHOULD_CLEAR_FLAG_$userMd5", false)
|
.putBoolean("$REALM_SHOULD_CLEAR_FLAG_$sessionId", false)
|
||||||
.apply()
|
.apply()
|
||||||
}
|
}
|
||||||
return realmConfiguration
|
return realmConfiguration
|
||||||
|
|
|
@ -31,3 +31,11 @@ internal annotation class UserId
|
||||||
@Qualifier
|
@Qualifier
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class UserMd5
|
internal annotation class UserMd5
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to inject the sessionId, which is defined as md5(userId|deviceId)
|
||||||
|
*/
|
||||||
|
@Qualifier
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
|
internal annotation class SessionId
|
||||||
|
|
|
@ -25,7 +25,7 @@ import im.vector.matrix.android.api.session.file.FileService
|
||||||
import im.vector.matrix.android.api.util.Cancelable
|
import im.vector.matrix.android.api.util.Cancelable
|
||||||
import im.vector.matrix.android.internal.crypto.attachments.ElementToDecrypt
|
import im.vector.matrix.android.internal.crypto.attachments.ElementToDecrypt
|
||||||
import im.vector.matrix.android.internal.crypto.attachments.MXEncryptedAttachments
|
import im.vector.matrix.android.internal.crypto.attachments.MXEncryptedAttachments
|
||||||
import im.vector.matrix.android.internal.di.UserMd5
|
import im.vector.matrix.android.internal.di.SessionId
|
||||||
import im.vector.matrix.android.internal.extensions.foldToCallback
|
import im.vector.matrix.android.internal.extensions.foldToCallback
|
||||||
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
||||||
import im.vector.matrix.android.internal.util.md5
|
import im.vector.matrix.android.internal.util.md5
|
||||||
|
@ -42,7 +42,7 @@ import java.io.IOException
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal class DefaultFileService @Inject constructor(private val context: Context,
|
internal class DefaultFileService @Inject constructor(private val context: Context,
|
||||||
@UserMd5 private val userMd5: String,
|
@SessionId private val sessionId: String,
|
||||||
private val contentUrlResolver: ContentUrlResolver,
|
private val contentUrlResolver: ContentUrlResolver,
|
||||||
private val coroutineDispatchers: MatrixCoroutineDispatchers) : FileService {
|
private val coroutineDispatchers: MatrixCoroutineDispatchers) : FileService {
|
||||||
|
|
||||||
|
@ -103,9 +103,9 @@ internal class DefaultFileService @Inject constructor(private val context: Conte
|
||||||
return when (downloadMode) {
|
return when (downloadMode) {
|
||||||
FileService.DownloadMode.FOR_INTERNAL_USE -> {
|
FileService.DownloadMode.FOR_INTERNAL_USE -> {
|
||||||
// Create dir tree (MF stands for Matrix File):
|
// Create dir tree (MF stands for Matrix File):
|
||||||
// <cache>/MF/<md5(userId)>/<md5(id)>/
|
// <cache>/MF/<sessionId>/<md5(id)>/
|
||||||
val tmpFolderRoot = File(context.cacheDir, "MF")
|
val tmpFolderRoot = File(context.cacheDir, "MF")
|
||||||
val tmpFolderUser = File(tmpFolderRoot, userMd5)
|
val tmpFolderUser = File(tmpFolderRoot, sessionId)
|
||||||
File(tmpFolderUser, id.md5())
|
File(tmpFolderUser, id.md5())
|
||||||
}
|
}
|
||||||
FileService.DownloadMode.TO_EXPORT -> {
|
FileService.DownloadMode.TO_EXPORT -> {
|
||||||
|
|
|
@ -30,6 +30,7 @@ import im.vector.matrix.android.api.session.InitialSyncProgressService
|
||||||
import im.vector.matrix.android.api.session.Session
|
import im.vector.matrix.android.api.session.Session
|
||||||
import im.vector.matrix.android.api.session.homeserver.HomeServerCapabilitiesService
|
import im.vector.matrix.android.api.session.homeserver.HomeServerCapabilitiesService
|
||||||
import im.vector.matrix.android.api.session.securestorage.SecureStorageService
|
import im.vector.matrix.android.api.session.securestorage.SecureStorageService
|
||||||
|
import im.vector.matrix.android.internal.auth.createSessionId
|
||||||
import im.vector.matrix.android.internal.database.LiveEntityObserver
|
import im.vector.matrix.android.internal.database.LiveEntityObserver
|
||||||
import im.vector.matrix.android.internal.database.SessionRealmConfigurationFactory
|
import im.vector.matrix.android.internal.database.SessionRealmConfigurationFactory
|
||||||
import im.vector.matrix.android.internal.di.*
|
import im.vector.matrix.android.internal.di.*
|
||||||
|
@ -83,11 +84,26 @@ internal abstract class SessionModule {
|
||||||
return userId.md5()
|
return userId.md5()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
@SessionId
|
||||||
|
@Provides
|
||||||
|
fun providesSessionId(credentials: Credentials): String {
|
||||||
|
return createSessionId(credentials.userId, credentials.deviceId)
|
||||||
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@Provides
|
@Provides
|
||||||
@UserCacheDirectory
|
@UserCacheDirectory
|
||||||
fun providesFilesDir(@UserMd5 userMd5: String, context: Context): File {
|
fun providesFilesDir(@UserMd5 userMd5: String,
|
||||||
return File(context.filesDir, userMd5)
|
@SessionId sessionId: String,
|
||||||
|
context: Context): File {
|
||||||
|
// Temporary code for migration
|
||||||
|
val old = File(context.filesDir, userMd5)
|
||||||
|
if (old.exists()) {
|
||||||
|
old.renameTo(File(context.filesDir, sessionId))
|
||||||
|
}
|
||||||
|
|
||||||
|
return File(context.filesDir, sessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
|
|
Loading…
Reference in a new issue