From a2486a6bd625bda18402ccfec1f1b34ea1f72816 Mon Sep 17 00:00:00 2001 From: ViscousPotential Date: Fri, 8 Nov 2024 22:40:15 +0000 Subject: [PATCH] feat: move merge operation into background --- .../com/viscouspot/gitsync/GitSyncService.kt | 45 +++++++++++++++++ .../com/viscouspot/gitsync/MainActivity.kt | 50 +++---------------- app/src/main/res/values/strings.xml | 3 +- 3 files changed, 55 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/com/viscouspot/gitsync/GitSyncService.kt b/app/src/main/java/com/viscouspot/gitsync/GitSyncService.kt index d432972e..a1ae7405 100644 --- a/app/src/main/java/com/viscouspot/gitsync/GitSyncService.kt +++ b/app/src/main/java/com/viscouspot/gitsync/GitSyncService.kt @@ -44,6 +44,7 @@ class GitSyncService : Service() { companion object { const val NOTIFICATION_CHANNEL_ID = "git_sync_service_channel" const val NOTIFICATION_CHANNEL_NAME = "Git Sync Service" + const val MERGE = "MERGE" const val FORCE_SYNC = "FORCE_SYNC" const val APPLICATION_SYNC = "APPLICATION_SYNC" const val INTENT_SYNC = "INTENT_SYNC" @@ -55,6 +56,10 @@ class GitSyncService : Service() { } when (intent.action) { + MERGE -> { + log(LogType.ToServiceCommand, "Merge") + merge() + } FORCE_SYNC -> { log(LogType.ToServiceCommand, "Force Sync") debouncedSync(forced = true) @@ -240,6 +245,46 @@ class GitSyncService : Service() { } } + private fun merge() { + CoroutineScope(Dispatchers.Default).launch { + val authCredentials = settingsManager.getGitAuthCredentials() + if (settingsManager.getGitDirUri() == null || authCredentials.first == "" || authCredentials.second == "") return@launch + + val pushResult = gitManager.uploadChanges( + settingsManager.getGitDirUri()!!, + settingsManager.getSyncMessage(), + authCredentials.first, + authCredentials.second + ) { + Handler(Looper.getMainLooper()).post { + Toast.makeText( + applicationContext, + getString(R.string.resolving_merge), + Toast.LENGTH_SHORT + ) + .show() + } + } + + when (pushResult) { + null -> { + log(LogType.Sync, "Merge Failed") + return@launch + } + + true -> log(LogType.Sync, "Merge Complete") + false -> log(LogType.Sync, "Merge Not Required") + } + + debouncedSync(forced = true) + + if (isForeground()) { + val intent = Intent(MainActivity.MERGE_COMPLETE) + LocalBroadcastManager.getInstance(this@GitSyncService).sendBroadcast(intent) + } + } + } + private fun displaySyncMessage(msg: String) { if (settingsManager.getSyncMessageEnabled()) { Handler(Looper.getMainLooper()).post { diff --git a/app/src/main/java/com/viscouspot/gitsync/MainActivity.kt b/app/src/main/java/com/viscouspot/gitsync/MainActivity.kt index 5b5b27bf..60ac0964 100644 --- a/app/src/main/java/com/viscouspot/gitsync/MainActivity.kt +++ b/app/src/main/java/com/viscouspot/gitsync/MainActivity.kt @@ -123,12 +123,17 @@ class MainActivity : AppCompatActivity() { companion object { const val REFRESH = "REFRESH" + const val MERGE_COMPLETE = "MERGE_COMPLETE" } private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when (intent.action) { REFRESH -> refreshRecentCommits() + MERGE_COMPLETE -> { + mergeConflictDialog?.dismiss() + refreshRecentCommits() + } } } } @@ -225,10 +230,6 @@ class MainActivity : AppCompatActivity() { } refreshAll() - - if (gitManager.getConflicting(settingsManager.getGitDirUri()).isNotEmpty()) { - openMergeConflictDialog() - } } override fun onCreate(savedInstanceState: Bundle?) { @@ -646,44 +647,9 @@ class MainActivity : AppCompatActivity() { merge.setTextColor(getColor(R.color.textSecondary)) abortMerge.visibility = View.GONE - CoroutineScope(Dispatchers.Default).launch { - val authCredentials = settingsManager.getGitAuthCredentials() - if (settingsManager.getGitDirUri() == null || authCredentials.first == "" || authCredentials.second == "") return@launch - - val pushResult = gitManager.uploadChanges( - settingsManager.getGitDirUri()!!, - settingsManager.getSyncMessage(), - authCredentials.first, - authCredentials.second - ) { - Handler(Looper.getMainLooper()).post { - Toast.makeText( - applicationContext, - "Resolving merge...", - Toast.LENGTH_SHORT - ) - .show() - } - } - - when (pushResult) { - null -> { - log(LogType.Sync, "Merge Failed") - return@launch - } - - true -> log(LogType.Sync, "Merge Complete") - false -> log(LogType.Sync, "Merge Not Required") - } - - refreshRecentCommits() - - val forceSyncIntent = Intent(this@MainActivity, GitSyncService::class.java) - forceSyncIntent.setAction(GitSyncService.FORCE_SYNC) - startService(forceSyncIntent) - - mergeConflictDialog?.dismiss() - } + val forceSyncIntent = Intent(this@MainActivity, GitSyncService::class.java) + forceSyncIntent.setAction(GitSyncService.MERGE) + startService(forceSyncIntent) } abortMerge.setOnClickListener { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 886c277c..9d8bebb4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -95,7 +95,8 @@ MERGE CONFLICT There is a merge conflict! Tap to resolve Merge - Merging... + Merging… + Resolving merge… =======