mirror of
https://github.com/kovidgoyal/kitty.git
synced 2025-12-13 20:36:22 +01:00
56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
#!/usr/bin/env python
|
|
# License: GPLv3 Copyright: 2025, Kovid Goyal <kovid at kovidgoyal.net>
|
|
|
|
|
|
from enum import Enum
|
|
|
|
from .fast_data_types import monotonic
|
|
from .utils import log_error
|
|
|
|
|
|
class ProgressState(Enum):
|
|
unset = 0
|
|
set = 1
|
|
error = 2
|
|
indeterminate = 3
|
|
paused = 4
|
|
|
|
|
|
class Progress:
|
|
|
|
state: ProgressState = ProgressState.unset
|
|
percent: int = 0
|
|
last_update_at: float = 0.
|
|
clear_timeout: float = 60.0
|
|
finished_clear_timeout: float = 5.0
|
|
|
|
def update(self, st: int, percent: int = -1) -> None:
|
|
self.last_update_at = monotonic()
|
|
if st == 0:
|
|
self.state = ProgressState.unset
|
|
self.percent = 0
|
|
elif st == 1:
|
|
self.state = ProgressState.set
|
|
self.percent = max(0, min(percent, 100))
|
|
elif st == 2:
|
|
self.state = ProgressState.error
|
|
self.percent = 0
|
|
elif st == 3:
|
|
self.state = ProgressState.indeterminate
|
|
self.percent = 0
|
|
elif st == 4:
|
|
self.state = ProgressState.paused
|
|
if percent > -1:
|
|
self.percent = max(0, min(percent, 100))
|
|
else:
|
|
log_error(f'Unknown OSC 9;4 state: {st}')
|
|
|
|
def clear_progress(self) -> bool:
|
|
time_since_last_update = monotonic() - self.last_update_at
|
|
threshold = self.finished_clear_timeout if self.percent == 100 and self.state is ProgressState.set else self.clear_timeout
|
|
if time_since_last_update >= threshold:
|
|
self.state = ProgressState.unset
|
|
self.percent = 0
|
|
return True
|
|
return False
|