Don't reload Nebula unless config is updated (#91)

This commit is contained in:
John Maguire 2022-11-18 14:27:27 -05:00 committed by GitHub
parent e4bbd0a31c
commit 9dd5b9cad9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 7 deletions

View File

@ -40,13 +40,19 @@ class DNUpdateWorker(ctx: Context, params: WorkerParameters) : Worker(ctx, param
private fun updateSite(site: Site) {
try {
DNUpdateLock(site).use {
if (updater.updateSite(site)) {
val res = updater.updateSite(site)
// Reload Nebula if this is the currently active site
if (res == DNSiteUpdater.Result.CONFIG_UPDATED) {
Intent().also { intent ->
intent.action = NebulaVpnService.ACTION_RELOAD
intent.putExtra("id", site.id)
context.sendBroadcast(intent)
}
}
// Update the UI on any change
if (res != DNSiteUpdater.Result.NOOP) {
Intent().also { intent ->
intent.action = MainActivity.ACTION_REFRESH_SITES
context.sendBroadcast(intent)
@ -77,9 +83,13 @@ class DNSiteUpdater(
private val context: Context,
private val apiClient: APIClient,
) {
fun updateSite(site: Site): Boolean {
enum class Result {
CONFIG_UPDATED, CREDENTIALS_UPDATED, NOOP
}
fun updateSite(site: Site): Result {
if (!site.managed) {
return false
return Result.NOOP
}
val credentials = site.getDNCredentials(context)
@ -97,21 +107,23 @@ class DNSiteUpdater(
if (!credentials.invalid) {
site.invalidateDNCredentials(context)
Log.d(TAG, "Invalidated credentials in site ${site.name}")
return Result.CREDENTIALS_UPDATED
}
return true
return Result.NOOP
}
if (newSite != null) {
newSite.save(context)
Log.d(TAG, "Updated site ${site.id}: ${site.name}")
return true
return Result.CONFIG_UPDATED
}
if (credentials.invalid) {
site.validateDNCredentials(context)
Log.d(TAG, "Revalidated credentials in site ${site.id}: ${site.name}")
return Result.CREDENTIALS_UPDATED
}
return false
return Result.NOOP
}
}