diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/AbsFriendshipOperationTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/AbsFriendshipOperationTask.kt index c9d1f223a..a3963581e 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/AbsFriendshipOperationTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/AbsFriendshipOperationTask.kt @@ -22,6 +22,8 @@ abstract class AbsFriendshipOperationTask( ) : ExceptionHandlingAbstractTask(context) { + override val exceptionClass = MicroBlogException::class.java + override fun beforeExecute() { microBlogWrapper.addUpdatingRelationshipId(params.accountKey, params.userKey) val event = FriendshipTaskEvent(action, params.accountKey, @@ -59,13 +61,13 @@ abstract class AbsFriendshipOperationTask( @Throws(MicroBlogException::class) protected abstract fun perform(twitter: MicroBlog, - details: AccountDetails, - args: Arguments): User + details: AccountDetails, + args: Arguments): User protected abstract fun succeededWorker(twitter: MicroBlog, - details: AccountDetails, - args: Arguments, - user: ParcelableUser) + details: AccountDetails, + args: Arguments, + user: ParcelableUser) protected abstract fun showSucceededMessage(params: Arguments, user: ParcelableUser) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/ExceptionHandlingAbstractTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/ExceptionHandlingAbstractTask.kt index 826e114b4..c850d7c0a 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/ExceptionHandlingAbstractTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/ExceptionHandlingAbstractTask.kt @@ -26,18 +26,24 @@ import org.mariotaku.twidere.model.SingleResponse * Created by mariotaku on 2017/2/10. */ -abstract class ExceptionHandlingAbstractTask( +abstract class ExceptionHandlingAbstractTask( context: Context ) : BaseAbstractTask, Callback>(context) { + protected abstract val exceptionClass: Class + override final fun afterExecute(callback: Callback?, result: SingleResponse) { @Suppress("UNCHECKED_CAST") afterExecute(callback, result.data, result.exception as? TaskException) if (result.data != null) { onSucceed(callback, result.data) } else if (result.exception != null) { - @Suppress("UNCHECKED_CAST") - onException(callback, result.exception as TaskException) + if (exceptionClass.isInstance(result.exception)) { + @Suppress("UNCHECKED_CAST") + onException(callback, result.exception as TaskException) + } else { + throw result.exception + } } } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/AddParticipantsTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/AddParticipantsTask.kt index 4d0ff1dc9..31acde509 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/AddParticipantsTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/AddParticipantsTask.kt @@ -49,6 +49,8 @@ class AddParticipantsTask( private val profileImageSize: String = context.getString(R.string.profile_image_size) + override val exceptionClass = MicroBlogException::class.java + override fun onExecute(params: Unit?): Boolean { val account = AccountUtils.getAccountDetails(AccountManager.get(context), accountKey, true) ?: throw MicroBlogException("No account") diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/DestroyConversationTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/DestroyConversationTask.kt index 66fb274f0..9b01d44e0 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/DestroyConversationTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/DestroyConversationTask.kt @@ -45,6 +45,8 @@ class DestroyConversationTask( val conversationId: String ) : ExceptionHandlingAbstractTask Unit)?>(context) { + override val exceptionClass = MicroBlogException::class.java + override fun onExecute(params: Unit?): Boolean { val account = AccountUtils.getAccountDetails(AccountManager.get(context), accountKey, true) ?: throw MicroBlogException("No account") diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/DestroyMessageTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/DestroyMessageTask.kt index bb04d27d8..c7e3ed7ed 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/DestroyMessageTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/DestroyMessageTask.kt @@ -43,6 +43,9 @@ class DestroyMessageTask( val conversationId: String?, val messageId: String ) : ExceptionHandlingAbstractTask(context) { + + override val exceptionClass = MicroBlogException::class.java + override fun onExecute(params: Unit?): Boolean { val account = AccountUtils.getAccountDetails(AccountManager.get(context), accountKey, true) ?: throw MicroBlogException("No account") diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/MarkMessageReadTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/MarkMessageReadTask.kt index 1e825cb14..a97f640be 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/MarkMessageReadTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/MarkMessageReadTask.kt @@ -53,6 +53,9 @@ class MarkMessageReadTask( val accountKey: UserKey, val conversationId: String ) : ExceptionHandlingAbstractTask(context) { + + override val exceptionClass = MicroBlogException::class.java + override fun onExecute(params: Unit?): Boolean { if (conversationId.startsWith(TEMP_CONVERSATION_ID_PREFIX)) return true val account = AccountUtils.getAccountDetails(AccountManager.get(context), accountKey, true) ?: diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/SendMessageTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/SendMessageTask.kt index 369ac11fd..d45f55316 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/SendMessageTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/SendMessageTask.kt @@ -54,8 +54,10 @@ class SendMessageTask( private val profileImageSize = context.getString(R.string.profile_image_size) + override val exceptionClass = MicroBlogException::class.java + override fun onExecute(params: ParcelableNewMessage): SendMessageResult { - val account = params.account + val account = params.account ?: throw MicroBlogException("No account") val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java) val updateData = requestSendMessage(microBlog, account, params) if (params.is_temp_conversation && params.conversation_id != null) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/SetConversationNotificationDisabledTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/SetConversationNotificationDisabledTask.kt index db1ba958d..0239b4c20 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/SetConversationNotificationDisabledTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/message/SetConversationNotificationDisabledTask.kt @@ -43,6 +43,9 @@ class SetConversationNotificationDisabledTask( val conversationId: String, val notificationDisabled: Boolean ) : ExceptionHandlingAbstractTask Unit)?>(context) { + + override val exceptionClass = MicroBlogException::class.java + override fun onExecute(params: Unit?): Boolean { val account = AccountUtils.getAccountDetails(AccountManager.get(context), accountKey, true) ?: throw MicroBlogException("No account") diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/util/AsyncTwitterWrapper.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/util/AsyncTwitterWrapper.kt index 7d3ac1f83..55b36659a 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/util/AsyncTwitterWrapper.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/util/AsyncTwitterWrapper.kt @@ -328,6 +328,8 @@ class AsyncTwitterWrapper( fun updateFriendship(accountKey: UserKey, userKey: UserKey, update: FriendshipUpdate) { TaskStarter.execute(object : ExceptionHandlingAbstractTask(context) { + override val exceptionClass = Exception::class.java + override fun onExecute(params: Any?): Relationship { val microBlog = MicroBlogAPIFactory.getInstance(context, accountKey) ?: throw MicroBlogException("No account") @@ -371,6 +373,8 @@ class AsyncTwitterWrapper( fun setActivitiesAboutMeUnreadAsync(accountKeys: Array, cursor: Long) { val task = object : ExceptionHandlingAbstractTask(context) { + override val exceptionClass = MicroBlogException::class.java + override fun onExecute(params: Any?) { for (accountId in accountKeys) { val microBlog = MicroBlogAPIFactory.getInstance(context, accountId) ?: continue