That fuck shit the fascists are using
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}