-
Notifications
You must be signed in to change notification settings - Fork 170
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
feat(crowdnode): limit withdrawals to once per block #1229
Changes from 1 commit
ad1746c
23ad2b4
2ec020e
2649213
71f3d17
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -30,7 +30,8 @@ data class WithdrawalLimit( | |
enum class WithdrawalLimitPeriod { | ||
PerTransaction, | ||
PerHour, | ||
PerDay | ||
PerDay, | ||
PerBlock | ||
Comment on lines
-33
to
+34
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We add PerBlock limit period. |
||
} | ||
|
||
data class WithdrawalLimitsException( | ||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -339,30 +339,51 @@ class TransferFragment : Fragment(R.layout.fragment_transfer) { | |||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
private suspend fun showWithdrawalLimitsError(period: WithdrawalLimitPeriod) { | ||||||||||||||||||||||||||||
val limits = viewModel.getWithdrawalLimits() | ||||||||||||||||||||||||||||
val okButtonText = if (period == WithdrawalLimitPeriod.PerTransaction) { | ||||||||||||||||||||||||||||
if (viewModel.onlineAccountStatus == OnlineAccountStatus.Done) { | ||||||||||||||||||||||||||||
getString(R.string.read_withdrawal_policy) | ||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||
getString(R.string.online_account_create) | ||||||||||||||||||||||||||||
if (period == WithdrawalLimitPeriod.PerBlock) { | ||||||||||||||||||||||||||||
AdaptiveDialog.create( | ||||||||||||||||||||||||||||
R.drawable.ic_warning, | ||||||||||||||||||||||||||||
"Please wait before initiating the next withdrawal", | ||||||||||||||||||||||||||||
"Please wait 5 minutes before initiating another withdrawal", | ||||||||||||||||||||||||||||
getString(R.string.button_okay) | ||||||||||||||||||||||||||||
).show(requireActivity()) { | ||||||||||||||||||||||||||||
// TODO: what do we do here? | ||||||||||||||||||||||||||||
// close this page? | ||||||||||||||||||||||||||||
// findNavController().popBackStack() | ||||||||||||||||||||||||||||
// show an error? | ||||||||||||||||||||||||||||
safeNavigate( | ||||||||||||||||||||||||||||
TransferFragmentDirections.transferToResult( | ||||||||||||||||||||||||||||
true, | ||||||||||||||||||||||||||||
getString(R.string.crowdnode_withdraw_error), | ||||||||||||||||||||||||||||
"" | ||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To properly handle the progress dialog, we need to invoke the suspend method for showing the dialog which is called
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed |
||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||
"" | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
val doAction = WithdrawalLimitsInfoDialog( | ||||||||||||||||||||||||||||
limits[0], | ||||||||||||||||||||||||||||
limits[1], | ||||||||||||||||||||||||||||
limits[2], | ||||||||||||||||||||||||||||
highlightedLimit = period, | ||||||||||||||||||||||||||||
okButtonText = okButtonText | ||||||||||||||||||||||||||||
).showAsync(requireActivity()) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
if (doAction == true) { | ||||||||||||||||||||||||||||
if (viewModel.onlineAccountStatus == OnlineAccountStatus.Done) { | ||||||||||||||||||||||||||||
openWithdrawalPolicy() | ||||||||||||||||||||||||||||
val limits = viewModel.getWithdrawalLimits() | ||||||||||||||||||||||||||||
val okButtonText = if (period == WithdrawalLimitPeriod.PerTransaction) { | ||||||||||||||||||||||||||||
if (viewModel.onlineAccountStatus == OnlineAccountStatus.Done) { | ||||||||||||||||||||||||||||
getString(R.string.read_withdrawal_policy) | ||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||
getString(R.string.online_account_create) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||
safeNavigate(TransferFragmentDirections.transferToOnlineAccountEmail()) | ||||||||||||||||||||||||||||
"" | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
val doAction = WithdrawalLimitsInfoDialog( | ||||||||||||||||||||||||||||
limits[0], | ||||||||||||||||||||||||||||
limits[1], | ||||||||||||||||||||||||||||
limits[2], | ||||||||||||||||||||||||||||
highlightedLimit = period, | ||||||||||||||||||||||||||||
okButtonText = okButtonText | ||||||||||||||||||||||||||||
).showAsync(requireActivity()) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
if (doAction == true) { | ||||||||||||||||||||||||||||
if (viewModel.onlineAccountStatus == OnlineAccountStatus.Done) { | ||||||||||||||||||||||||||||
openWithdrawalPolicy() | ||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||
safeNavigate(TransferFragmentDirections.transferToOnlineAccountEmail()) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It might make sense to expose
currentBlockHeight
as a property (if possible) or suspend function to avoid dancing with observables. Here and in many other places, we might only need to get it once.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have a such a suspend function already.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This has been resolved.