From 3f027c0701560b706628d9f7a0ef43bf6c298459 Mon Sep 17 00:00:00 2001 From: Canny Date: Thu, 10 Nov 2022 23:23:21 +0300 Subject: [PATCH] feat: sentry integration --- .github/workflows/release.yml | 1 + app/build.gradle.kts | 5 ++++- app/src/main/AndroidManifest.xml | 4 ++++ .../java/app/revanced/manager/MainActivity.kt | 15 +++++++++++++-- .../manager/domain/manager/PreferencesManager.kt | 1 + .../revanced/manager/network/api/ManagerAPI.kt | 3 ++- .../manager/network/service/GithubService.kt | 2 -- .../app/revanced/manager/patcher/PatcherUtils.kt | 2 ++ .../manager/patcher/worker/PatcherWorker.kt | 7 +++---- .../manager/ui/viewmodel/AppSelectorViewModel.kt | 3 +++ 10 files changed, 33 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bcce1f7..1326d83 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,6 +24,7 @@ jobs: - name: Build with Gradle env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} run: ./gradlew assembleRelease - name: Sign APK id: sign_apk diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0cb83e6..5ef6066 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -36,7 +36,7 @@ android { buildConfigField("String", "REVANCED_API_URL", "\"https://releases.revanced.app\"") buildConfigField("String", "GITHUB_API_URL", "\"https://api.github.com\"") - + buildConfigField("String", "SENTRY_DSN", System.getenv("SENTRY_DSN") ?: "\"\"") } buildTypes { @@ -129,4 +129,7 @@ dependencies { implementation("io.ktor:ktor-client-okhttp:$ktorVersion") implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion") implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion") + + // Sentry + implementation("io.sentry:sentry-android:6.7.0") } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 841ed8b..d1ee26c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,6 +48,10 @@ tools:node="remove" /> + + + if (prefs.sentry) { + event + } else null + } + } super.onCreate(savedInstanceState) setContent { ReVancedManagerTheme( diff --git a/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt b/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt index 7bef3dc..2e02795 100644 --- a/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt +++ b/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt @@ -16,4 +16,5 @@ class PreferencesManager( var theme by enumPreference("theme", Theme.SYSTEM) var srcPatches by stringPreference("src_patches", ghPatches) var srcIntegrations by stringPreference("src_integrations", ghIntegrations) + var sentry by booleanPreference("sentry", true) } diff --git a/app/src/main/java/app/revanced/manager/network/api/ManagerAPI.kt b/app/src/main/java/app/revanced/manager/network/api/ManagerAPI.kt index 0d92200..2249dc4 100644 --- a/app/src/main/java/app/revanced/manager/network/api/ManagerAPI.kt +++ b/app/src/main/java/app/revanced/manager/network/api/ManagerAPI.kt @@ -15,6 +15,7 @@ import io.ktor.client.request.* import io.ktor.client.statement.* import io.ktor.util.cio.* import io.ktor.utils.io.* +import io.sentry.Sentry import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.File @@ -52,6 +53,7 @@ class ManagerAPI( } } catch (e: Exception) { Log.e(tag, "An error occurred while downloading patches", e) + Sentry.captureException(e) } } @@ -65,7 +67,6 @@ class ManagerAPI( file } } - } diff --git a/app/src/main/java/app/revanced/manager/network/service/GithubService.kt b/app/src/main/java/app/revanced/manager/network/service/GithubService.kt index 6aebf95..a5ecc6d 100644 --- a/app/src/main/java/app/revanced/manager/network/service/GithubService.kt +++ b/app/src/main/java/app/revanced/manager/network/service/GithubService.kt @@ -7,7 +7,6 @@ import app.revanced.manager.network.dto.GithubContributor import app.revanced.manager.network.dto.GithubReleases import app.revanced.manager.network.utils.APIResponse import app.revanced.manager.network.utils.getOrNull -import app.revanced.manager.network.utils.getOrThrow import io.ktor.client.request.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -42,7 +41,6 @@ class GithubServiceImpl( override suspend fun findAsset(repo: String, file: String): PatchesAsset { val releases = getReleases(repo).getOrNull() ?: throw Exception("Cannot retrieve assets") - val asset = releases.assets.find { asset -> (asset.name.contains(file) && !asset.name.contains("-sources") && !asset.name.contains("-javadoc")) } ?: throw MissingAssetException() diff --git a/app/src/main/java/app/revanced/manager/patcher/PatcherUtils.kt b/app/src/main/java/app/revanced/manager/patcher/PatcherUtils.kt index fc0b10b..bef6cd9 100644 --- a/app/src/main/java/app/revanced/manager/patcher/PatcherUtils.kt +++ b/app/src/main/java/app/revanced/manager/patcher/PatcherUtils.kt @@ -14,6 +14,7 @@ import app.revanced.patcher.extensions.PatchExtensions.patchName import app.revanced.patcher.patch.Patch import app.revanced.patcher.util.patch.PatchBundle import dalvik.system.DexClassLoader +import io.sentry.Sentry import java.util.* class PatcherUtils(val app: Application) { @@ -40,6 +41,7 @@ class PatcherUtils(val app: Application) { } else throw IllegalStateException("No patch bundle(s) selected.") } catch (e: Exception) { Log.e(tag, "Failed to load patch bundle.", e) + Sentry.captureException(e) } } diff --git a/app/src/main/java/app/revanced/manager/patcher/worker/PatcherWorker.kt b/app/src/main/java/app/revanced/manager/patcher/worker/PatcherWorker.kt index 5e0f23a..a7b99cf 100644 --- a/app/src/main/java/app/revanced/manager/patcher/worker/PatcherWorker.kt +++ b/app/src/main/java/app/revanced/manager/patcher/worker/PatcherWorker.kt @@ -22,13 +22,11 @@ import app.revanced.manager.patcher.aligning.ZipAligner import app.revanced.manager.patcher.aligning.zip.ZipFile import app.revanced.manager.patcher.aligning.zip.structures.ZipEntry import app.revanced.manager.patcher.signing.Signer -import app.revanced.manager.ui.Resource import app.revanced.manager.ui.viewmodel.Logging import app.revanced.patcher.Patcher import app.revanced.patcher.PatcherOptions -import app.revanced.patcher.extensions.PatchExtensions.patchName import app.revanced.patcher.logging.Logger -import app.revanced.patcher.patch.Patch +import io.sentry.Sentry import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.koin.core.component.KoinComponent @@ -79,6 +77,7 @@ class PatcherWorker( setForeground(ForegroundInfo(1, createNotification())) } catch (e: Exception) { Log.d(tag, "Failed to set foreground info:", e) + Sentry.captureException(e) } return try { @@ -86,6 +85,7 @@ class PatcherWorker( Result.success() } catch (e: Exception) { Log.e(tag, "Error while patching: ${e.message ?: e::class.simpleName}") + Sentry.captureException(e) Result.failure() } } @@ -176,7 +176,6 @@ class PatcherWorker( Logging.log += "Failed to apply $patch" + result.exceptionOrNull()!!.cause + "\n" return@forEach } - } Logging.log += "Saving file\n" diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt index 0a082da..0aa00fc 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt @@ -12,6 +12,7 @@ import app.revanced.manager.patcher.PatcherUtils import app.revanced.manager.ui.Resource import app.revanced.manager.util.tag import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages +import io.sentry.Sentry import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -50,6 +51,7 @@ class AppSelectorViewModel( Log.d(tag, "Filtered apps.") } catch (e: Exception) { Log.e(tag, "An error occurred while filtering", e) + Sentry.captureException(e) } } @@ -82,6 +84,7 @@ class AppSelectorViewModel( ) } catch (e: Exception) { Log.e(tag, "Failed to load apk", e) + Sentry.captureException(e) } } } \ No newline at end of file