mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-22 13:09:46 +01:00
Kindof fix deletes
This commit is contained in:
parent
72251d1e58
commit
647e6d9433
@ -328,7 +328,7 @@ class WebViewLoginController : BaseController {
|
|||||||
messageType = ACCOUNT_UPDATED_NOT_ADDED
|
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
|
ApplicationWideMessageHolder.getInstance().messageType = ACCOUNT_SCHEDULED_FOR_DELETION
|
||||||
if (!isPasswordUpdate) {
|
if (!isPasswordUpdate) {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
|
@ -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.UserNgEntity
|
||||||
import com.nextcloud.talk.newarch.local.models.getCredentials
|
import com.nextcloud.talk.newarch.local.models.getCredentials
|
||||||
import com.nextcloud.talk.utils.ApiUtils
|
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.Observer
|
||||||
import io.reactivex.disposables.Disposable
|
import io.reactivex.disposables.Disposable
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.async
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import okhttp3.JavaNetCookieJar
|
import okhttp3.JavaNetCookieJar
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import org.koin.core.KoinComponent
|
import org.koin.core.KoinComponent
|
||||||
import org.koin.core.inject
|
import org.koin.core.inject
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import java.net.CookieManager
|
import java.net.CookieManager
|
||||||
import java.util.*
|
|
||||||
import java.util.zip.CRC32
|
import java.util.zip.CRC32
|
||||||
|
|
||||||
class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams), KoinComponent {
|
class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams), KoinComponent {
|
||||||
val arbitraryStorageUtils: ArbitraryStorageUtils by inject()
|
|
||||||
val okHttpClient: OkHttpClient by inject()
|
val okHttpClient: OkHttpClient by inject()
|
||||||
val retrofit: Retrofit by inject()
|
val retrofit: Retrofit by inject()
|
||||||
private val usersDao: UsersDao by inject()
|
private val usersDao: UsersDao by inject()
|
||||||
@ -57,8 +51,6 @@ class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : C
|
|||||||
var ncApi: NcApi? = null
|
var ncApi: NcApi? = null
|
||||||
|
|
||||||
override suspend fun doWork(): Result {
|
override suspend fun doWork(): Result {
|
||||||
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
|
||||||
|
|
||||||
for (userEntityObject in usersDao.getUsersScheduledForDeletion()) {
|
for (userEntityObject in usersDao.getUsersScheduledForDeletion()) {
|
||||||
val userEntity: UserNgEntity = userEntityObject
|
val userEntity: UserNgEntity = userEntityObject
|
||||||
val credentials = userEntity.getCredentials()
|
val credentials = userEntity.getCredentials()
|
||||||
@ -76,41 +68,7 @@ class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : C
|
|||||||
queryMap["userPublicKey"] = userEntity.pushConfiguration!!.userPublicKey
|
queryMap["userPublicKey"] = userEntity.pushConfiguration!!.userPublicKey
|
||||||
queryMap["deviceIdentifierSignature"] = userEntity.pushConfiguration!!.deviceIdentifierSignature
|
queryMap["deviceIdentifierSignature"] = userEntity.pushConfiguration!!.deviceIdentifierSignature
|
||||||
|
|
||||||
ncApi!!.unregisterDeviceForNotificationsWithProxy(ApiUtils.getUrlPushProxy(), queryMap)
|
unregisterWithProxy(queryMap, userEntity)
|
||||||
.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() {}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,17 +76,37 @@ class AccountRemovalWorker(context: Context, workerParams: WorkerParameters) : C
|
|||||||
override fun onComplete() {}
|
override fun onComplete() {}
|
||||||
})
|
})
|
||||||
} ?: run {
|
} ?: run {
|
||||||
GlobalScope.launch {
|
runBlocking {
|
||||||
val job = async {
|
|
||||||
usersRepository.deleteUserWithId(userEntity.id!!)
|
usersRepository.deleteUserWithId(userEntity.id!!)
|
||||||
}
|
}
|
||||||
job.await()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Result.success()
|
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 {
|
companion object {
|
||||||
const val TAG = "AccountRemovalWorker"
|
const val TAG = "AccountRemovalWorker"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user