That fuck shit the fascists are using
at master 61 lines 2.1 kB view raw
1/* 2 * Copyright 2023 Signal Messenger, LLC 3 * SPDX-License-Identifier: AGPL-3.0-only 4 */ 5 6package org.tm.archive.components 7 8import android.app.Application 9import androidx.lifecycle.AndroidViewModel 10import androidx.lifecycle.ViewModel 11import androidx.lifecycle.ViewModelProvider 12import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers 13import io.reactivex.rxjava3.core.Single 14import io.reactivex.rxjava3.disposables.CompositeDisposable 15import io.reactivex.rxjava3.kotlin.plusAssign 16import io.reactivex.rxjava3.schedulers.Schedulers 17import io.reactivex.rxjava3.subjects.SingleSubject 18import org.tm.archive.crash.CrashConfig 19import org.tm.archive.database.LogDatabase 20import org.tm.archive.logsubmit.SubmitDebugLogRepository 21 22class PromptLogsViewModel(private val context: Application, private val purpose: DebugLogsPromptDialogFragment.Purpose) : AndroidViewModel(context) { 23 24 private val submitDebugLogRepository = SubmitDebugLogRepository() 25 26 private val disposables = CompositeDisposable() 27 28 fun onVisible() { 29 if (purpose == DebugLogsPromptDialogFragment.Purpose.CRASH) { 30 disposables += Single 31 .fromCallable { 32 LogDatabase.getInstance(context).crashes.markAsPrompted(CrashConfig.patterns, System.currentTimeMillis()) 33 } 34 .subscribeOn(Schedulers.io()) 35 .subscribe() 36 } 37 } 38 39 fun submitLogs(): Single<String> { 40 val singleSubject = SingleSubject.create<String?>() 41 submitDebugLogRepository.buildAndSubmitLog { result -> 42 if (result.isPresent) { 43 singleSubject.onSuccess(result.get()) 44 } else { 45 singleSubject.onError(Throwable()) 46 } 47 } 48 49 return singleSubject.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) 50 } 51 52 override fun onCleared() { 53 disposables.clear() 54 } 55 56 class Factory(private val context: Application, private val purpose: DebugLogsPromptDialogFragment.Purpose) : ViewModelProvider.NewInstanceFactory() { 57 override fun <T : ViewModel> create(modelClass: Class<T>): T { 58 return modelClass.cast(PromptLogsViewModel(context, purpose))!! 59 } 60 } 61}