Skip to content

Commit a2e9680

Browse files
Okuro3499dogi
andauthored
sync: smoother user profile realm handling (fixes #8999) (#9004)
Co-authored-by: dogi <[email protected]>
1 parent 9ab55e7 commit a2e9680

File tree

4 files changed

+32
-16
lines changed

4 files changed

+32
-16
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 = 3714
13-
versionName = "0.37.14"
12+
versionCode = 3715
13+
versionName = "0.37.15"
1414
ndkVersion = '26.3.11579264'
1515
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1616
vectorDrawables.useSupportLibrary = true

app/src/main/java/org/ole/planet/myplanet/service/UserProfileDbHandler.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class UserProfileDbHandler @Inject constructor(
7070
val parentCode = model?.parentCode
7171
val planetCode = model?.planetCode
7272

73-
realmService.withRealmAsync { realm ->
73+
realmService.executeTransactionAsync { realm ->
7474
val offlineActivities = realm.createObject(RealmOfflineActivity::class.java, UUID.randomUUID().toString())
7575
offlineActivities.userId = userId
7676
offlineActivities.userName = userName
@@ -96,7 +96,7 @@ class UserProfileDbHandler @Inject constructor(
9696
fun logoutAsync() {
9797
GlobalScope.launch(Dispatchers.IO) {
9898
try {
99-
realmService.withRealmAsync { realm ->
99+
realmService.executeTransactionAsync { realm ->
100100
RealmOfflineActivity.getRecentLogin(realm)
101101
?.logoutTime = Date().time
102102
}
@@ -145,6 +145,9 @@ class UserProfileDbHandler @Inject constructor(
145145
}
146146

147147
fun setResourceOpenCount(item: RealmMyLibrary, type: String?) {
148+
val itemTitle = item.title
149+
val itemResourceId = item.resourceId
150+
148151
GlobalScope.launch(Dispatchers.IO) {
149152
try {
150153
val model = getUserModelCopy()
@@ -155,10 +158,8 @@ class UserProfileDbHandler @Inject constructor(
155158
val userName = model?.name
156159
val parentCode = model?.parentCode
157160
val planetCode = model?.planetCode
158-
val itemTitle = item.title
159-
val itemResourceId = item.resourceId
160161

161-
realmService.withRealmAsync { realm ->
162+
realmService.executeTransactionAsync { realm ->
162163
val offlineActivities = realm.createObject(RealmResourceActivity::class.java, "${UUID.randomUUID()}")
163164
offlineActivities.user = userName
164165
offlineActivities.parentCode = parentCode

app/src/main/java/org/ole/planet/myplanet/ui/sync/LoginActivity.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
173173
binding.inputPassword.error = getString(R.string.err_msg_password)
174174
} else {
175175
val enterUserName = binding.inputName.text.toString().trimEnd()
176-
val user = mRealm.where(RealmUserModel::class.java).equalTo("name", enterUserName).findFirst()
176+
val user = databaseService.withRealm { realm ->
177+
realm.where(RealmUserModel::class.java).equalTo("name", enterUserName).findFirst()?.let { realm.copyFromRealm(it) }
178+
}
177179
if (user == null || !user.isArchived) {
178180
submitForm(enterUserName, binding.inputPassword.text.toString())
179181
} else {
@@ -287,8 +289,10 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
287289
}
288290

289291
fun updateTeamDropdown() {
290-
val teams: List<RealmMyTeam>? = mRealm.where(RealmMyTeam::class.java)
291-
?.isEmpty("teamId")?.equalTo("status", "active")?.findAll()
292+
val teams: List<RealmMyTeam>? = databaseService.withRealm { realm ->
293+
realm.where(RealmMyTeam::class.java)
294+
.isEmpty("teamId").equalTo("status", "active").findAll()?.let { realm.copyFromRealm(it) }
295+
}
292296

293297
if (!teams.isNullOrEmpty()) {
294298
binding.team.visibility = View.VISIBLE
@@ -407,7 +411,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
407411
fun getTeamMembers() {
408412
selectedTeamId = prefData.getSelectedTeamId().toString()
409413
if (selectedTeamId?.isNotEmpty() == true) {
410-
users = RealmMyTeam.getUsers(selectedTeamId, mRealm, "membership")
414+
users = databaseService.withRealm { realm ->
415+
RealmMyTeam.getUsers(selectedTeamId, realm, "membership").map { realm.copyFromRealm(it) }.toMutableList()
416+
}
411417
val userList = (users as? MutableList<RealmUserModel>)?.map {
412418
User(it.name ?: "", it.name ?: "", "", it.userImage ?: "", "team")
413419
} ?: emptyList()
@@ -444,7 +450,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
444450
binding.inputName.setText(user.name)
445451
} else {
446452
if (user.source == "guest"){
447-
val model = RealmUserModel.createGuestUser(user.name, mRealm, settings)?.let { mRealm.copyFromRealm(it) }
453+
val model = databaseService.withRealm { realm ->
454+
RealmUserModel.createGuestUser(user.name, realm, settings)?.let { realm.copyFromRealm(it) }
455+
}
448456
if (model == null) {
449457
toast(this, getString(R.string.unable_to_login))
450458
} else {
@@ -469,7 +477,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
469477
builder.setNegativeButton("cancel") { dialog: DialogInterface, _: Int -> dialog.dismiss() }
470478
builder.setPositiveButton("continue") { dialog: DialogInterface, _: Int ->
471479
dialog.dismiss()
472-
val model = RealmUserModel.createGuestUser(username, mRealm, settings)?.let { mRealm.copyFromRealm(it) }
480+
val model = databaseService.withRealm { realm ->
481+
RealmUserModel.createGuestUser(username, realm, settings)?.let { realm.copyFromRealm(it) }
482+
}
473483
if (model == null) {
474484
toast(this, getString(R.string.unable_to_login))
475485
} else {

app/src/main/java/org/ole/planet/myplanet/ui/sync/SyncActivity.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,8 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
357357
if (settings != null) {
358358
this.settings = settings
359359
}
360-
if (mRealm.isEmpty) {
360+
val isEmpty = databaseService.withRealm { realm -> realm.isEmpty }
361+
if (isEmpty) {
361362
alertDialogOkay(getString(R.string.server_not_configured_properly_connect_this_device_with_planet_server))
362363
false
363364
} else {
@@ -371,7 +372,9 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
371372

372373
private fun checkName(username: String?, password: String?, isManagerMode: Boolean): Boolean {
373374
try {
374-
val user = mRealm.where(RealmUserModel::class.java).equalTo("name", username).findFirst()
375+
val user = databaseService.withRealm { realm ->
376+
realm.where(RealmUserModel::class.java).equalTo("name", username).findFirst()?.let { realm.copyFromRealm(it) }
377+
}
375378
user?.let {
376379
if (it._id?.isEmpty() == true) {
377380
if (username == it.name && password == it.password) {
@@ -765,7 +768,9 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
765768
continueSyncProcess()
766769
}
767770
} else {
768-
mRealm.executeTransactionAsync { realm: Realm -> realm.deleteAll() }
771+
lifecycleScope.launch(Dispatchers.IO) {
772+
databaseService.executeTransactionAsync { realm -> realm.deleteAll() }
773+
}
769774
}
770775
builder.setCancelable(cancelable)
771776
builder.show()

0 commit comments

Comments
 (0)