1
0
mirror of https://github.com/etesync/android synced 2024-11-15 20:38:58 +00:00

Sync: handle permission denied sync errors.

This commit is contained in:
Tom Hacohen 2020-09-03 08:32:39 +03:00
parent 5f8ca4326b
commit 2417f77a39
2 changed files with 19 additions and 13 deletions

View File

@ -11,6 +11,7 @@ import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import at.bitfire.ical4android.CalendarStorageException import at.bitfire.ical4android.CalendarStorageException
import at.bitfire.vcard4android.ContactsStorageException import at.bitfire.vcard4android.ContactsStorageException
import com.etebase.client.exceptions.*
import com.etesync.syncadapter.AccountSettings import com.etesync.syncadapter.AccountSettings
import com.etesync.syncadapter.Constants import com.etesync.syncadapter.Constants
import com.etesync.syncadapter.R import com.etesync.syncadapter.R
@ -27,7 +28,8 @@ class SyncNotification(internal val context: Context, internal val notificationT
internal val notificationManager: NotificationManagerCompat internal val notificationManager: NotificationManagerCompat
lateinit var detailsIntent: Intent lateinit var detailsIntent: Intent
internal set internal set
internal var messageString: Int = 0 internal var messageInt: Int = 0
internal var messageString: String? = null
private var throwable: Throwable? = null private var throwable: Throwable? = null
@ -37,30 +39,33 @@ class SyncNotification(internal val context: Context, internal val notificationT
fun setThrowable(e: Throwable) { fun setThrowable(e: Throwable) {
throwable = e throwable = e
if (e is Exceptions.UnauthorizedException) { if (e is Exceptions.UnauthorizedException || e is UnauthorizedException) {
Logger.log.log(Level.SEVERE, "Not authorized anymore", e) Logger.log.log(Level.SEVERE, "Not authorized anymore", e)
messageString = R.string.sync_error_unauthorized messageInt = R.string.sync_error_unauthorized
} else if (e is Exceptions.UserInactiveException) { } else if (e is Exceptions.UserInactiveException) {
Logger.log.log(Level.SEVERE, "User inactive") Logger.log.log(Level.SEVERE, "User inactive")
messageString = R.string.sync_error_user_inactive messageInt = R.string.sync_error_user_inactive
} else if (e is Exceptions.ServiceUnavailableException) { } else if (e is Exceptions.ServiceUnavailableException || e is TemporaryServerErrorException) {
Logger.log.log(Level.SEVERE, "Service unavailable") Logger.log.log(Level.SEVERE, "Service unavailable")
messageString = R.string.sync_error_unavailable messageInt = R.string.sync_error_unavailable
} else if (e is Exceptions.ReadOnlyException) { } else if (e is Exceptions.ReadOnlyException) {
Logger.log.log(Level.SEVERE, "Journal is read only", e) Logger.log.log(Level.SEVERE, "Journal is read only", e)
messageString = R.string.sync_error_journal_readonly messageInt = R.string.sync_error_journal_readonly
} else if (e is Exceptions.HttpException) { } else if (e is PermissionDeniedException) {
Logger.log.log(Level.SEVERE, "Permission denied", e)
messageString = context.getString(R.string.sync_error_permission_denied, e.localizedMessage)
} else if (e is Exceptions.HttpException || e is ServerErrorException) {
Logger.log.log(Level.SEVERE, "HTTP Exception during sync", e) Logger.log.log(Level.SEVERE, "HTTP Exception during sync", e)
messageString = R.string.sync_error_http_dav messageInt = R.string.sync_error_http_dav
} else if (e is CalendarStorageException || e is ContactsStorageException || e is SQLiteException) { } else if (e is CalendarStorageException || e is ContactsStorageException || e is SQLiteException) {
Logger.log.log(Level.SEVERE, "Couldn't access local storage", e) Logger.log.log(Level.SEVERE, "Couldn't access local storage", e)
messageString = R.string.sync_error_local_storage messageInt = R.string.sync_error_local_storage
} else if (e is Exceptions.IntegrityException) { } else if (e is Exceptions.IntegrityException) {
Logger.log.log(Level.SEVERE, "Integrity error", e) Logger.log.log(Level.SEVERE, "Integrity error", e)
messageString = R.string.sync_error_integrity messageInt = R.string.sync_error_integrity
} else { } else {
Logger.log.log(Level.SEVERE, "Unknown sync error", e) Logger.log.log(Level.SEVERE, "Unknown sync error", e)
messageString = R.string.sync_error messageInt = R.string.sync_error
} }
detailsIntent = Intent(context, NotificationHandlerActivity::class.java) detailsIntent = Intent(context, NotificationHandlerActivity::class.java)
@ -69,7 +74,7 @@ class SyncNotification(internal val context: Context, internal val notificationT
} }
fun notify(title: String, state: String) { fun notify(title: String, state: String) {
val message = context.getString(messageString, state) val message = messageString ?: context.getString(messageInt, state)
notify(title, message, null, detailsIntent) notify(title, message, null, detailsIntent)
} }

View File

@ -359,6 +359,7 @@
<string name="sync_error_unavailable">Could not connect to server while %s</string> <string name="sync_error_unavailable">Could not connect to server while %s</string>
<string name="sync_error_local_storage">Database error while %s</string> <string name="sync_error_local_storage">Database error while %s</string>
<string name="sync_error_journal_readonly">Journal is read only</string> <string name="sync_error_journal_readonly">Journal is read only</string>
<string name="sync_error_permission_denied">Permission denied: %s</string>
<string name="sync_phase_prepare">preparing synchronization</string> <string name="sync_phase_prepare">preparing synchronization</string>
<string name="sync_phase_journals">syncronizing journals</string> <string name="sync_phase_journals">syncronizing journals</string>
<string name="sync_phase_prepare_fetch">preparing for fetch</string> <string name="sync_phase_prepare_fetch">preparing for fetch</string>