Skip to content

Commit e374ddc

Browse files
Okuro3499dogi
andauthored
sync: smoother server checking (fixes #11298) (#11299)
Co-authored-by: dogi <dogi@users.noreply.github.com>
1 parent a348ec5 commit e374ddc

7 files changed

Lines changed: 25 additions & 18 deletions

File tree

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ android {
1212
applicationId "org.ole.planet.myplanet"
1313
minSdk = 26
1414
targetSdk = 36
15-
versionCode = 4619
16-
versionName = "0.46.19"
15+
versionCode = 4620
16+
versionName = "0.46.20"
1717
ndkVersion = '26.3.11579264'
1818
vectorDrawables.useSupportLibrary = true
1919
}

app/src/main/java/org/ole/planet/myplanet/repository/ConfigurationsRepositoryImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class ConfigurationsRepositoryImpl @Inject constructor(
6868
is java.net.UnknownHostException -> "Server not reachable"
6969
is java.net.SocketTimeoutException -> "Connection timeout"
7070
is java.net.ConnectException -> "Unable to connect to server"
71-
is java.io.IOException -> "Network connection error"
71+
is IOException -> "Network connection error"
7272
else -> "Network error: ${t.localizedMessage ?: "Unknown error"}"
7373
}
7474
withContext(Dispatchers.Main) { listener.onSuccess(errorMsg) }
@@ -171,7 +171,7 @@ class ConfigurationsRepositoryImpl @Inject constructor(
171171
val alternativeReachable = mapping.alternativeUrl?.let { checkServerAvailability(it) } == true
172172

173173
if (!primaryReachable && alternativeReachable) {
174-
mapping.alternativeUrl!!.let { alternativeUrl ->
174+
mapping.alternativeUrl.let { alternativeUrl ->
175175
val uri = updateUrl.toUri()
176176
val editor = preferences.edit()
177177

app/src/main/java/org/ole/planet/myplanet/services/ConfigurationManager.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,9 @@ class ConfigurationManager(
3434
) {
3535

3636
fun getMinApk(
37-
listener: DataService.ConfigurationIdListener?,
38-
url: String,
39-
pin: String,
40-
activity: SyncActivity,
41-
callerActivity: String
37+
listener: DataService.ConfigurationIdListener?, url: String, pin: String,
38+
activity: SyncActivity, callerActivity: String
4239
) {
43-
4440
val serverUrlMapper = ServerUrlMapper()
4541
val mapping = serverUrlMapper.processUrl(url)
4642
val urlsToTry = mutableListOf(url).apply { mapping.alternativeUrl?.let { add(it) } }
@@ -126,8 +122,7 @@ class ConfigurationManager(
126122

127123
fetchConfiguration(couchdbURL)?.let { (id, code) ->
128124
return UrlCheckResult.Success(id, code, currentUrl)
129-
} ?: run {
130-
}
125+
} ?: run {}
131126
}
132127
}
133128
UrlCheckResult.Failure(currentUrl)

app/src/main/java/org/ole/planet/myplanet/ui/sync/ServerDialogExtensions.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,8 @@ fun SyncActivity.setupServerListUi(binding: DialogServerUrlBinding, dialog: Mate
160160
val protocol = if (
161161
actualUrl == BuildConfig.PLANET_XELA_URL ||
162162
actualUrl == BuildConfig.PLANET_SANPABLO_URL ||
163-
actualUrl == BuildConfig.PLANET_URIUR_URL
163+
actualUrl == BuildConfig.PLANET_URIUR_URL ||
164+
isLocalNetwork(actualUrl)
164165
) "http://" else "https://"
165166
editor.putString("serverProtocol", protocol).apply()
166167
if (serverCheck) {
@@ -210,7 +211,6 @@ fun SyncActivity.setupServerListUi(binding: DialogServerUrlBinding, dialog: Mate
210211
}
211212
serverUrl.isEnabled = false
212213
serverPassword.isEnabled = false
213-
editor.putString("serverProtocol", getString(R.string.https_protocol)).apply()
214214
}
215215

216216
fun SyncActivity.onNeutralButtonClick(dialog: MaterialDialog) {
@@ -330,3 +330,13 @@ fun SyncActivity.setupManualConfigEnabled(binding: DialogServerUrlBinding, dialo
330330
setUrlAndPin(settings.getBoolean("switchCloudUrl", false))
331331
protocolSemantics()
332332
}
333+
334+
private fun isLocalNetwork(url: String): Boolean {
335+
val host = url.split(":").firstOrNull()?.split("/")?.firstOrNull() ?: url
336+
return host.startsWith("192.168.") ||
337+
host.startsWith("10.") ||
338+
host.matches(Regex("^172\\.(1[6-9]|2[0-9]|3[0-1])\\..*")) ||
339+
host == "localhost" ||
340+
host == "127.0.0.1" ||
341+
host.endsWith(".local")
342+
}

app/src/main/java/org/ole/planet/myplanet/ui/sync/SyncActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,8 @@ abstract class SyncActivity : ProcessUserDataActivity(), ConfigurationsRepositor
314314
"$processedUrl/_all_dbs"
315315
}
316316

317-
if (configurationsRepository.checkServerAvailability(url)) {
317+
val isAvailable = configurationsRepository.checkServerAvailability(url)
318+
if (isAvailable) {
318319
startSync(type)
319320
return true
320321
}

app/src/main/java/org/ole/planet/myplanet/utils/ServerConfigUtils.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Context
44
import org.ole.planet.myplanet.BuildConfig
55
import org.ole.planet.myplanet.R
66
import org.ole.planet.myplanet.model.ServerAddress
7+
import androidx.core.net.toUri
78

89
object ServerConfigUtils {
910
fun getServerAddresses(context: Context): List<ServerAddress> {
@@ -67,7 +68,7 @@ object ServerConfigUtils {
6768
settings: android.content.SharedPreferences,
6869
editor: android.content.SharedPreferences.Editor,
6970
): String {
70-
val uri = android.net.Uri.parse(url)
71+
val uri = url.toUri()
7172
val (urlUser, urlPwd, couchdbURL) = if (url.contains("@")) {
7273
val userinfo = org.ole.planet.myplanet.ui.sync.ProcessUserDataActivity.getUserInfo(uri)
7374
Triple(userinfo[0], userinfo[1], url)

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ PLANET_URIUR_CLONE_URL=uriur.planet.gt
5151
PLANET_URIUR_CLONE_PIN=4025
5252
PLANET_RUIRU_URL=192.168.1.93
5353
PLANET_RUIRU_PIN=8925
54-
PLANET_EMBAKASI_URL=192.168.1.202
55-
PLANET_EMBAKASI_PIN=1848
54+
PLANET_EMBAKASI_URL=192.168.1.148
55+
PLANET_EMBAKASI_PIN=0963
5656
PLANET_EMBAKASI_CLONE_URL=embakasi.planet.gt
5757
PLANET_EMBAKASI_CLONE_PIN=1848
5858
PLANET_CAMBRIDGE_URL=192.168.68.126

0 commit comments

Comments
 (0)