| 373 | |
| 374 | |
| 375 | async def select_iteration_time(preset: int | None = None) -> int | None: |
| 376 | header = tr('Enter iteration time for LUKS encryption (in milliseconds)') + '\n' |
| 377 | header += tr('Higher values increase security but slow down boot time') + '\n' |
| 378 | header += tr('Default: {}ms, Recommended range: 1000-60000').format(DEFAULT_ITER_TIME) + '\n' |
| 379 | |
| 380 | def validate_iter_time(value: str) -> str | None: |
| 381 | try: |
| 382 | iter_time = int(value) |
| 383 | if iter_time < 100: |
| 384 | return tr('Iteration time must be at least 100ms') |
| 385 | if iter_time > 120000: |
| 386 | return tr('Iteration time must be at most 120000ms') |
| 387 | return None |
| 388 | except ValueError: |
| 389 | return tr('Please enter a valid number') |
| 390 | |
| 391 | result = await Input( |
| 392 | header=header, |
| 393 | allow_skip=True, |
| 394 | default_value=str(preset) if preset else str(DEFAULT_ITER_TIME), |
| 395 | validator_callback=validate_iter_time, |
| 396 | ).show() |
| 397 | |
| 398 | match result.type_: |
| 399 | case ResultType.Skip: |
| 400 | return preset |
| 401 | case ResultType.Selection: |
| 402 | if not result.get_value(): |
| 403 | return preset |
| 404 | return int(result.get_value()) |
| 405 | case ResultType.Reset: |
| 406 | return None |