Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert AccountService to suspend functions #2354

Merged
merged 4 commits into from
Nov 10, 2020

Conversation

Dominaezzz
Copy link
Contributor

Signed-off-by: Dominic Fischer dominicfischer7@gmail.com

Pull Request Checklist

  • Changes has been tested on an Android device or Android emulator with API 21
  • UI change has been tested on both light and dark themes
  • Pull request is based on the develop branch
  • Pull request updates CHANGES.md
  • Pull request includes screenshots or videos if containing UI changes
  • Pull request includes a sign off

Would do a big PR but this will be easier to review.
Also each endpoint needs to be checked to see which dispatchers it should use so it's best to keep it small.

Signed-off-by: Dominic Fischer <dominicfischer7@gmail.com>
Copy link
Member

@bmarty bmarty left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR, one small remark and a question.
This look super promising, and we will finally get ride of MatrixCallback!

session.deactivateAccount(action.password, action.eraseAllData)
DeactivateAccountViewEvents.Done
} catch (failure: Exception) {
if (failure is CancellationException) throw failure
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why CancellationException is treated apart, and why throwing? Will it make the app crash?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CancellationException in general won't make the app crash.
When launch gets a CancellationException, it just gracefully stops executing.
When async gets a CancellationException, it just gracefully stops executing and other coroutines calling await() will get the cancellation exception.

The only case when it may crash the app is if it is directly thrown inside runBlocking, since it has to run in non-coroutine code.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, thanks for the answer!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't it ok to let the CancellationException go to OtherFailure then? it won't change anything in the execution flow, but we'll loose the error in the UI if not posting to viewEvents

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's technically not an error, the task has just been cancelled and this will only happen if the view model has been cleared, so if the UI has been destroyed.
But yeah it doesn't make much of a difference I can remove the special casing.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes I wasn't thinking about this specific case, but more generally. We can get a cancellation if some suspend got cancelled by any inner stuff. By the way, we still have to be able to cancel all session coroutine (clearing cache/logout)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That complicates things..... Is that the only time when you cancel all sessions coroutines?
In the case of viewModelScope the coroutine would already have been cancelled before user logs out or clears the cache, no?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess for most of the cases it will be ok yeah

@bmarty
Copy link
Member

bmarty commented Nov 6, 2020

Please also run to cleanup the code

curl -sSLO https://github.com/pinterest/ktlint/releases/download/0.34.2/ktlint && chmod a+x ktlint
./ktlint --android --experimental -v

Signed-off-by: Dominic Fischer <dominicfischer7@gmail.com>
Signed-off-by: Dominic Fischer <dominicfischer7@gmail.com>
Copy link
Member

@bmarty bmarty left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the update.
I will fix the conflict and merge the PR (EDIT: there are no conflicts, this is on another PR).
We have to think about the other applications which uses the SDK, and which are maybe not ready to use coroutines. Maybe for them we will create a project which converts coroutines to MatrixCallback. But for Element and its forks, we think it's a great improvement of the SDK API :)

@bmarty bmarty merged commit 0150d39 into element-hq:develop Nov 10, 2020
bmarty added a commit that referenced this pull request Nov 10, 2020
@Dominaezzz Dominaezzz deleted the suspend_functions branch November 10, 2020 10:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants