From 6f222d5e67d16443c0a2c3d491bc915ae5c1fd25 Mon Sep 17 00:00:00 2001 From: ViscousPot Date: Wed, 15 Jan 2025 02:14:44 +0000 Subject: [PATCH] feat: better invalid remote handling --- .../com/viscouspot/gitsync/util/GitManager.kt | 29 ++++++++++++++----- .../com/viscouspot/gitsync/util/Helper.kt | 11 ++++--- .../com/viscouspot/gitsync/util/Logger.kt | 2 +- app/src/main/res/values/strings.xml | 2 +- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/viscouspot/gitsync/util/GitManager.kt b/app/src/main/java/com/viscouspot/gitsync/util/GitManager.kt index 1ad668a2..37bd58f5 100644 --- a/app/src/main/java/com/viscouspot/gitsync/util/GitManager.kt +++ b/app/src/main/java/com/viscouspot/gitsync/util/GitManager.kt @@ -120,6 +120,7 @@ class GitManager(private val context: Context, private val settingsManager: Sett setProgressMonitor(monitor) setDirectory(File(Helper.getPathFromUri(context, userStorageUri))) applyCredentials(this) + setRemote(settingsManager.getRemote()) }.call() log(LogType.CloneRepo, "Repository cloned successfully") @@ -183,7 +184,7 @@ class GitManager(private val context: Context, private val settingsManager: Sett log(LogType.ForcePull, "Fetching changes") git.fetch().apply { applyCredentials(this) - setRemote("origin") + setRemote(settingsManager.getRemote()) setRefSpecs(RefSpec("+refs/heads/*:refs/remotes/origin/*")) }.call() @@ -202,6 +203,8 @@ class GitManager(private val context: Context, private val settingsManager: Sett closeRepo(repo) return true + } catch (e: InvalidRemoteException) { + handleInvalidRemoteException(e) } catch (e: TransportException) { handleTransportException(e) { } } catch (e: Throwable) { @@ -223,6 +226,7 @@ class GitManager(private val context: Context, private val settingsManager: Sett log(LogType.PullFromRepo, "Fetching changes") val fetchResult = git.fetch().apply { applyCredentials(this) + setRemote(settingsManager.getRemote()) }.call() if (conditionallyScheduleNetworkSync(scheduleNetworkSync)) { @@ -239,7 +243,7 @@ class GitManager(private val context: Context, private val settingsManager: Sett onSync.invoke() val result = git.pull().apply { applyCredentials(this) - remote = settingsManager.getRemote() + setRemote(settingsManager.getRemote()) }.call() if (result.mergeResult.failingPaths != null && result.mergeResult.failingPaths.containsValue( @@ -268,7 +272,7 @@ class GitManager(private val context: Context, private val settingsManager: Sett } catch (e: CheckoutConflictException) { log(LogType.PullFromRepo, e.stackTraceToString()) return false - }catch (e: ApiCheckoutConflictException) { + } catch (e: ApiCheckoutConflictException) { log(LogType.PullFromRepo, e.stackTraceToString()) return false } catch (e: WrongRepositoryStateException) { @@ -278,6 +282,8 @@ class GitManager(private val context: Context, private val settingsManager: Sett } log(context, LogType.PullFromRepo, e) return null + } catch (e: InvalidRemoteException) { + handleInvalidRemoteException(e) } catch (e: TransportException) { handleTransportException(e, scheduleNetworkSync) } catch (e: Throwable) { @@ -359,7 +365,7 @@ class GitManager(private val context: Context, private val settingsManager: Sett git.push().apply { applyCredentials(this) setForce(true) - remote = "origin" + setRemote(settingsManager.getRemote()) }.call() logStatus(git) @@ -368,6 +374,8 @@ class GitManager(private val context: Context, private val settingsManager: Sett closeRepo(repo) return returnResult + } catch (e: InvalidRemoteException) { + handleInvalidRemoteException(e) } catch (e: Throwable) { log(context, LogType.PushToRepo, e) } @@ -441,7 +449,7 @@ class GitManager(private val context: Context, private val settingsManager: Sett log(LogType.PushToRepo, "Pushing changes") val pushResults = git.push().apply { applyCredentials(this) - remote = settingsManager.getRemote() + setRemote(settingsManager.getRemote()) }.call() for (pushResult in pushResults) { for (remoteUpdate in pushResult.remoteUpdates) { @@ -505,6 +513,8 @@ class GitManager(private val context: Context, private val settingsManager: Sett closeRepo(repo) return returnResult + } catch (e: InvalidRemoteException) { + handleInvalidRemoteException(e) } catch (e: TransportException) { handleTransportException(e, scheduleNetworkSync) } catch (e: Throwable) { @@ -521,6 +531,11 @@ class GitManager(private val context: Context, private val settingsManager: Sett return false } + private fun handleInvalidRemoteException(e: InvalidRemoteException) { + makeToast(context, context.getString(R.string.invalid_remote)) + log(LogType.SyncException, e.stackTraceToString()) + } + private fun handleTransportException(e: TransportException, scheduleNetworkSync: () -> Unit) { if (listOf( JGitText.get().connectionFailed, @@ -540,11 +555,11 @@ class GitManager(private val context: Context, private val settingsManager: Sett message = it e.message.toString().contains(it) }) { - log(context, LogType.TransportException, Throwable(message)) + log(context, LogType.SyncException, Throwable(message)) return } - log(context, LogType.TransportException, e) + log(context, LogType.SyncException, e) } private fun logStatus(git: Git) { diff --git a/app/src/main/java/com/viscouspot/gitsync/util/Helper.kt b/app/src/main/java/com/viscouspot/gitsync/util/Helper.kt index 6f325fda..a36a1e10 100644 --- a/app/src/main/java/com/viscouspot/gitsync/util/Helper.kt +++ b/app/src/main/java/com/viscouspot/gitsync/util/Helper.kt @@ -15,6 +15,8 @@ import android.net.NetworkCapabilities import android.net.Uri import android.os.Build import android.os.Environment +import android.os.Handler +import android.os.Looper import android.provider.DocumentsContract import android.provider.MediaStore import android.text.Html @@ -34,11 +36,6 @@ import com.viscouspot.gitsync.MainActivity import com.viscouspot.gitsync.R import com.viscouspot.gitsync.ui.dialog.BaseDialog import com.viscouspot.gitsync.util.Logger.log -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch import java.io.BufferedReader import java.io.ByteArrayOutputStream import java.io.File @@ -53,7 +50,9 @@ object Helper { fun makeToast(context: Context, message: String, length: Int = Toast.LENGTH_SHORT) { if (!NotificationManagerCompat.from(context).areNotificationsEnabled()) return - Toast.makeText(context, message, length).show() + + val mainHandler = Handler(Looper.getMainLooper()) + mainHandler.post { Toast.makeText(context, message, length).show() } } fun networkRequired(context: Context) { diff --git a/app/src/main/java/com/viscouspot/gitsync/util/Logger.kt b/app/src/main/java/com/viscouspot/gitsync/util/Logger.kt index bcf11aed..919ff75f 100644 --- a/app/src/main/java/com/viscouspot/gitsync/util/Logger.kt +++ b/app/src/main/java/com/viscouspot/gitsync/util/Logger.kt @@ -40,7 +40,7 @@ enum class LogType(val type: String) { GitStatus("GitStatus"), RecentCommits("RecentCommits"), - TransportException("TransportException"), + SyncException("SyncException"), GithubOAuthFlow("GithubOAuthFlow"), GithubAuthCredentials("GithubAuthCredentials"), diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 63255ed3..53b9ec0f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -34,7 +34,7 @@ Send email using: Application ran out of memory! - Invalid remote! + Invalid remote! Modify this in settings Singular files larger than 50MB not supported! Failed to clone repository! Inaccessible directory! Please select a different location.