Kindof fix deletes

This commit is contained in:
Mario Danic 2019-12-29 02:08:25 +01:00 committed by Mario Đanić
parent 72251d1e58
commit 647e6d9433
2 changed files with 28 additions and 50 deletions

View File

@ -328,7 +328,7 @@ class WebViewLoginController : BaseController {
messageType = ACCOUNT_UPDATED_NOT_ADDED
}
if (targetUser != null && UserStatus.PENDING_DELETE.equals(targetUser.status)) {
if (targetUser != null && UserStatus.PENDING_DELETE == targetUser.status) {
ApplicationWideMessageHolder.getInstance().messageType = ACCOUNT_SCHEDULED_FOR_DELETION
if (!isPasswordUpdate) {
withContext(Dispatchers.Main) {

View File

@ -32,24 +32,18 @@ import com.nextcloud.talk.newarch.local.dao.UsersDao
import com.nextcloud.talk.newarch.local.models.UserNgEntity
import com.nextcloud.talk.newarch.local.models.getCredentials
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils
import com.nextcloud.talk.webrtc.WebSocketConnectionHelper.Companion.deleteExternalSignalingInstanceForUserEntity
import io.reactivex.Observer
import io.reactivex.disposables.Disposable
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import okhttp3.JavaNetCookieJar
import okhttp3.OkHttpClient
import org.koin.core.KoinComponent
import org.koin.core.inject
import retrofit2.Retrofit
import java.net.CookieManager
import java.util.*
import java.util.zip.CRC32
class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams), KoinComponent {
val arbitraryStorageUtils: ArbitraryStorageUtils by inject()
val okHttpClient: OkHttpClient by inject()
val retrofit: Retrofit by inject()
private val usersDao: UsersDao by inject()
@ -57,8 +51,6 @@ class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : C
var ncApi: NcApi? = null
override suspend fun doWork(): Result {
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
for (userEntityObject in usersDao.getUsersScheduledForDeletion()) {
val userEntity: UserNgEntity = userEntityObject
val credentials = userEntity.getCredentials()
@ -76,41 +68,7 @@ class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : C
queryMap["userPublicKey"] = userEntity.pushConfiguration!!.userPublicKey
queryMap["deviceIdentifierSignature"] = userEntity.pushConfiguration!!.deviceIdentifierSignature
ncApi!!.unregisterDeviceForNotificationsWithProxy(ApiUtils.getUrlPushProxy(), queryMap)
.subscribe(object : Observer<Void> {
override fun onSubscribe(d: Disposable) {}
override fun onNext(aVoid: Void) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val groupName = java.lang.String.format(applicationContext.resources
.getString(R.string.nc_notification_channel), userEntity.userId,
userEntity.baseUrl)
val crc32 = CRC32()
crc32.update(groupName.toByteArray())
notificationManager.deleteNotificationChannelGroup(java.lang.Long
.toString(crc32.value))
}
deleteExternalSignalingInstanceForUserEntity(
userEntity.id!!)
arbitraryStorageUtils.deleteAllEntriesForAccountIdentifier(
userEntity.id!!).subscribe(object : Observer<Any?> {
override fun onSubscribe(d: Disposable) {}
override fun onNext(o: Any) {
GlobalScope.launch {
val job = async {
usersRepository.deleteUserWithId(userEntity.id!!)
}
job.await()
}
}
override fun onError(e: Throwable) {}
override fun onComplete() {}
})
}
override fun onError(e: Throwable) {}
override fun onComplete() {}
})
unregisterWithProxy(queryMap, userEntity)
}
}
@ -118,17 +76,37 @@ class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : C
override fun onComplete() {}
})
} ?: run {
GlobalScope.launch {
val job = async {
usersRepository.deleteUserWithId(userEntity.id!!)
}
job.await()
runBlocking {
usersRepository.deleteUserWithId(userEntity.id!!)
}
}
}
return Result.success()
}
private fun unregisterWithProxy(queryMap: HashMap<String, String?>, userEntity: UserNgEntity) {
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
ncApi!!.unregisterDeviceForNotificationsWithProxy(ApiUtils.getUrlPushProxy(), queryMap)
.doOnComplete {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val groupName = java.lang.String.format(applicationContext.resources
.getString(R.string.nc_notification_channel), userEntity.userId,
userEntity.baseUrl)
val crc32 = CRC32()
crc32.update(groupName.toByteArray())
notificationManager.deleteNotificationChannelGroup(crc32.value.toString())
}
//deleteExternalSignalingInstanceForUserEntity(
// userEntity.id!!)
runBlocking {
usersRepository.deleteUserWithId(userEntity.id!!)
}
}
.blockingSubscribe()
}
companion object {
const val TAG = "AccountRemovalWorker"
}