SYMBOL INDEX (1603 symbols across 114 files) FILE: src/fk/core/abstract_cryptograph.py class AbstractCryptograph (line 24) | class AbstractCryptograph(ABC): method __init__ (line 29) | def __init__(self, settings: AbstractSettings): method _generate_key (line 37) | def _generate_key(self) -> None: method _on_setting_changed (line 44) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _on_key_changed (line 51) | def _on_key_changed(self) -> None: method encrypt (line 55) | def encrypt(self, s: str) -> str: method decrypt (line 59) | def decrypt(self, s: str) -> str: FILE: src/fk/core/abstract_data_container.py class AbstractDataContainer (line 25) | class AbstractDataContainer(AbstractDataItem[TParent], Generic[TChild, T... method __init__ (line 30) | def __init__(self, method __getitem__ (line 40) | def __getitem__(self, uid: str) -> TChild: method __contains__ (line 43) | def __contains__(self, uid: str): method __setitem__ (line 46) | def __setitem__(self, uid: str, value: TChild): method __delitem__ (line 51) | def __delitem__(self, uid: str): method __iter__ (line 56) | def __iter__(self) -> Iterable[str]: method __len__ (line 60) | def __len__(self): method values (line 63) | def values(self) -> list[TChild]: method keys (line 66) | def keys(self) -> Iterable[str]: method names (line 70) | def names(self) -> list[str]: method get_name (line 73) | def get_name(self) -> str: method set_name (line 76) | def set_name(self, new_name: str) -> None: method move_child (line 79) | def move_child(self, child: TChild, index_to: int) -> None: method get (line 84) | def get(self, key: str, default: TChild = None) -> TChild: method supports_children (line 90) | def supports_children(self) -> bool: method dump (line 93) | def dump(self, indent: str = '', mask_uid: bool = False, mask_last_mod... method to_dict (line 103) | def to_dict(self) -> dict: FILE: src/fk/core/abstract_data_item.py function generate_uid (line 26) | def generate_uid() -> str: function generate_unique_name (line 30) | def generate_unique_name(prefix: str, names: Iterable) -> str: class AbstractDataItem (line 43) | class AbstractDataItem(ABC, Generic[TParent]): method __init__ (line 49) | def __init__(self, method get_uid (line 58) | def get_uid(self) -> str: method get_owner (line 62) | def get_owner(self) -> 'User': method get_parent (line 66) | def get_parent(self) -> TParent: method dump (line 69) | def dump(self, indent: str = '', mask_uid: bool = False, mask_last_mod... method to_dict (line 80) | def to_dict(self) -> dict: method get_create_date (line 87) | def get_create_date(self) -> datetime.datetime: method get_last_modified_date (line 90) | def get_last_modified_date(self) -> datetime.datetime: method item_updated (line 94) | def item_updated(self, date: datetime.datetime = None): method supports_children (line 104) | def supports_children(self) -> bool: method change_parent (line 107) | def change_parent(self, new_parent: TParent) -> None: FILE: src/fk/core/abstract_event_emitter.py function _callback_display (line 26) | def _callback_display(callback) -> str: class AbstractEventEmitter (line 33) | class AbstractEventEmitter: method __init__ (line 41) | def __init__(self, allowed_events: list[str], callback_invoker: Callab... method on (line 56) | def on(self, event_pattern: str, callback: Callable, last: bool = Fals... method cancel (line 70) | def cancel(self, event_pattern: str) -> None: method unsubscribe (line 77) | def unsubscribe(self, callback: Callable) -> None: method unsubscribe_one (line 85) | def unsubscribe_one(self, callback: Callable, event_pattern: str) -> N... method _emit (line 94) | def _emit(self, event: str, params: dict[str, any], carry: any = None)... method _is_muted (line 110) | def _is_muted(self) -> bool: method unmute (line 113) | def unmute(self) -> None: method mute (line 117) | def mute(self) -> None: FILE: src/fk/core/abstract_event_source.py class AbstractEventSource (line 45) | class AbstractEventSource(AbstractEventEmitter, ABC, Generic[TRoot]): method __init__ (line 55) | def __init__(self, method get_data (line 125) | def get_data(self) -> TRoot: method get_name (line 130) | def get_name(self) -> str: method get_config_parameter (line 133) | def get_config_parameter(self, name: str) -> str: method set_config_parameters (line 136) | def set_config_parameters(self, values: dict[str, str]) -> None: method _append (line 142) | def _append(self, strategies: list[AbstractStrategy[TRoot]]) -> None: method start (line 147) | def start(self, mute_events: bool = True) -> None: method _auto_seal_at_the_end (line 150) | def _auto_seal_at_the_end(self, last_executed: AbstractStrategy) -> None: method _auto_seal (line 160) | def _auto_seal(self, strategy: AbstractStrategy[TRoot], second_time: b... method execute_prepared_strategy (line 191) | def execute_prepared_strategy(self, method execute (line 217) | def execute(self, method users (line 237) | def users(self) -> Iterable[User]: method backlogs (line 241) | def backlogs(self) -> Iterable[Backlog]: method tags (line 246) | def tags(self) -> Iterable[Tag]: method workitems (line 251) | def workitems(self) -> Iterable[Workitem]: method find_workitem (line 256) | def find_workitem(self, uid: str) -> Workitem | None: method find_backlog (line 261) | def find_backlog(self, uid: str) -> Backlog | None: method find_tag (line 266) | def find_tag(self, uid: str) -> Tag | None: method find_user (line 271) | def find_user(self, identity: str) -> User | None: method pomodoros (line 276) | def pomodoros(self) -> Iterable[Pomodoro]: method clone (line 282) | def clone(self, new_root: TRoot) -> AbstractEventSource[TRoot]: method _sequence_error (line 285) | def _sequence_error(self, prev: int, next_: int) -> None: method disconnect (line 291) | def disconnect(self): method get_settings (line 294) | def get_settings(self) -> AbstractSettings: method send_ping (line 298) | def send_ping(self) -> str | None: method can_connect (line 302) | def can_connect(self): method repair (line 306) | def repair(self) -> tuple[list[str], str | None]: method connect (line 309) | def connect(self): method get_init_strategy (line 312) | def get_init_strategy(self, emit: Callable[[str, dict[str, any], any],... method get_last_sequence (line 319) | def get_last_sequence(self): function start_workitem (line 326) | def start_workitem(workitem: Workitem, source: AbstractEventSource) -> N... FILE: src/fk/core/abstract_filesystem_watcher.py class AbstractFilesystemWatcher (line 20) | class AbstractFilesystemWatcher(ABC): method watch (line 22) | def watch(self, filename: str, callback: Callable[[str], None]): method unwatch (line 26) | def unwatch(self, filename: str) -> None: method unwatch_all (line 30) | def unwatch_all(self) -> None: FILE: src/fk/core/abstract_serializer.py function sanitize_user_input (line 27) | def sanitize_user_input(s: str) -> str: class AbstractSerializer (line 31) | class AbstractSerializer(ABC, Generic[T, TRoot]): method __init__ (line 35) | def __init__(self, settings: AbstractSettings | None, cryptograph: Abs... method serialize (line 40) | def serialize(self, s: AbstractStrategy[TRoot]) -> T: method deserialize (line 44) | def deserialize(self, t: T) -> AbstractStrategy[TRoot] | None: FILE: src/fk/core/abstract_settings.py function _get_desktop (line 30) | def _get_desktop() -> [str]: function _is_gnome (line 34) | def _is_gnome() -> bool: function _always_show (line 38) | def _always_show(_) -> bool: function _never_show (line 42) | def _never_show(_) -> bool: function _show_for_simple_long_breaks (line 46) | def _show_for_simple_long_breaks(values: dict[str, str]) -> bool: function _show_for_smart_long_breaks (line 50) | def _show_for_smart_long_breaks(values: dict[str, str]) -> bool: function _show_for_gradient_eyecandy (line 54) | def _show_for_gradient_eyecandy(values: dict[str, str]) -> bool: function _show_for_image_eyecandy (line 58) | def _show_for_image_eyecandy(values: dict[str, str]) -> bool: function _show_for_file_source (line 62) | def _show_for_file_source(values: dict[str, str]) -> bool: function _hide_for_ephemeral_source (line 66) | def _hide_for_ephemeral_source(values: dict[str, str]) -> bool: function _show_for_websocket_source (line 70) | def _show_for_websocket_source(values: dict[str, str]) -> bool: function _show_when_encryption_is_enabled (line 74) | def _show_when_encryption_is_enabled(values: dict[str, str]) -> bool: function _show_when_encryption_is_optional (line 79) | def _show_when_encryption_is_optional(values: dict[str, str]) -> bool: function _show_for_custom_websocket_source (line 83) | def _show_for_custom_websocket_source(values: dict[str, str]) -> bool: function _show_for_basic_auth (line 87) | def _show_for_basic_auth(values: dict[str, str]) -> bool: function _show_for_google_auth (line 91) | def _show_for_google_auth(values: dict[str, str]) -> bool: function _show_if_play_alarm_enabled (line 95) | def _show_if_play_alarm_enabled(values: dict[str, str]) -> bool: function _show_if_signed_in (line 99) | def _show_if_signed_in(values: dict[str, str]) -> bool: function _show_if_signed_out (line 103) | def _show_if_signed_out(values: dict[str, str]) -> bool: function _show_if_play_rest_enabled (line 107) | def _show_if_play_rest_enabled(values: dict[str, str]) -> bool: function _show_if_madelene (line 111) | def _show_if_madelene(values: dict[str, str]) -> bool: function _show_if_play_tick_enabled (line 115) | def _show_if_play_tick_enabled(values: dict[str, str]) -> bool: function _show_for_flatpak (line 119) | def _show_for_flatpak(values: dict[str, str]) -> bool: function _hide_for_sandbox (line 123) | def _hide_for_sandbox(values: dict[str, str]) -> bool: function _is_tiling_wm (line 127) | def _is_tiling_wm() -> bool: function prepare_file_for_writing (line 134) | def prepare_file_for_writing(filename): class AbstractSettings (line 138) | class AbstractSettings(AbstractEventEmitter, ABC): method __init__ (line 144) | def __init__(self, method invoke_callback (line 339) | def invoke_callback(self, fn: Callable, **kwargs) -> None: method set (line 343) | def set(self, values: dict[str, str], force_fire=False) -> None: method is_set (line 347) | def is_set(self, name: str) -> bool: method get (line 351) | def get(self, name: str) -> str: method clear (line 356) | def clear(self) -> None: method location (line 360) | def location(self) -> str: method get_username (line 363) | def get_username(self) -> str: method is_team_supported (line 370) | def is_team_supported(self) -> bool: method is_remote_source (line 373) | def is_remote_source(self) -> bool: method get_fullname (line 376) | def get_fullname(self) -> str: method get_work_duration (line 379) | def get_work_duration(self) -> float: method get_rest_duration (line 382) | def get_rest_duration(self) -> float: method get_categories (line 385) | def get_categories(self) -> Iterable[str]: method get_settings (line 388) | def get_settings(self, category) -> Iterable[tuple[str, str, str, str,... method _get_property (line 402) | def _get_property(self, option_id, n) -> str: method hide (line 409) | def hide(self, option_id: str) -> None: method get_type (line 420) | def get_type(self, option_id) -> str: method get_display_name (line 423) | def get_display_name(self, option_id) -> str: method get_configuration (line 426) | def get_configuration(self, option_id) -> list[any]: method reset_to_defaults (line 429) | def reset_to_defaults(self) -> None: method is_e2e_encryption_enabled (line 439) | def is_e2e_encryption_enabled(self) -> bool: method is_keyring_enabled (line 446) | def is_keyring_enabled(self) -> bool: method get_auto_theme (line 450) | def get_auto_theme(self) -> str: method get_theme (line 453) | def get_theme(self) -> str: method update_default (line 457) | def update_default(self, name: str, value: str) -> None: method init_audio_outputs (line 463) | def init_audio_outputs(self): method init_gradients (line 467) | def init_gradients(self): method init_fonts (line 471) | def init_fonts(self): method init_appearance (line 475) | def init_appearance(self): method init_network_access (line 479) | def init_network_access(self): FILE: src/fk/core/abstract_strategy.py class AbstractStrategy (line 31) | class AbstractStrategy(ABC, Generic[TRoot]): method __init__ (line 39) | def __init__(self, method get_name (line 53) | def get_name(self) -> str: method get_when (line 58) | def get_when(self) -> datetime.datetime: method get_user_identity (line 61) | def get_user_identity(self) -> str: method replace_user_identity (line 64) | def replace_user_identity(self, user_identity: str) -> None: method get_sequence (line 67) | def get_sequence(self) -> int: method update_sequence (line 70) | def update_sequence(self, new_seq: int) -> None: method encryptable (line 73) | def encryptable(self) -> bool: method requires_sealing (line 77) | def requires_sealing(self) -> bool: method execute (line 82) | def execute(self, method get_params (line 87) | def get_params(self): method execute_another (line 92) | def execute_another(self, method get_user (line 115) | def get_user(self, data: Tenant, fail_if_not_found: bool = True) -> Us... FILE: src/fk/core/abstract_timer.py class AbstractTimer (line 21) | class AbstractTimer(ABC): method schedule (line 23) | def schedule(self, method cancel (line 31) | def cancel(self) -> None: FILE: src/fk/core/abstract_timer_display.py class AbstractTimerDisplay (line 30) | class AbstractTimerDisplay: method timer (line 41) | def timer(self) -> TimerData: method __init__ (line 44) | def __init__(self, method _set_mode (line 59) | def _set_mode(self, mode): method _on_source_changed (line 77) | def _on_source_changed(self, event: str, source: AbstractEventSource) ... method initialized (line 91) | def initialized(self): method _on_timer_initialized (line 95) | def _on_timer_initialized(self, **kwargs) -> None: method _on_tick (line 105) | def _on_tick(self, **kwargs) -> None: method _on_work_start (line 134) | def _on_work_start(self, timer: TimerData, **kwargs) -> None: method _on_work_complete (line 140) | def _on_work_complete(self, pomodoro: Pomodoro, **kwargs) -> None: method _on_rest_complete (line 146) | def _on_rest_complete(self, pomodoro: Pomodoro, **kwargs) -> None: method _on_workitem_complete_or_delete (line 154) | def _on_workitem_complete_or_delete(self, workitem: Workitem, **kwargs... method _on_pomodoro_remove (line 160) | def _on_pomodoro_remove(self, workitem: Workitem, **kwargs) -> None: method tick (line 168) | def tick(self, pomodoro: Pomodoro, state_text: str, my_value: float, m... method mode_changed (line 171) | def mode_changed(self, old_mode: str, new_mode: str) -> None: method kill (line 174) | def kill(self) -> None: FILE: src/fk/core/backlog.py class Backlog (line 26) | class Backlog(AbstractDataContainer[Workitem, 'User']): method __init__ (line 30) | def __init__(self, method __str__ (line 38) | def __str__(self): method get_running_workitem (line 41) | def get_running_workitem(self) -> Tuple[Workitem, Pomodoro] | Tuple[No... method get_incomplete_workitems (line 48) | def get_incomplete_workitems(self) -> Iterable[Workitem]: method is_today (line 53) | def is_today(self) -> bool: method get_owner (line 58) | def get_owner(self) -> 'User': method get_start_date (line 61) | def get_start_date(self) -> datetime.datetime | None: method update_start_date (line 64) | def update_start_date(self, when: datetime.datetime) -> None: method to_dict (line 68) | def to_dict(self) -> dict: FILE: src/fk/core/backlog_strategies.py class CreateBacklogStrategy (line 31) | class CreateBacklogStrategy(AbstractStrategy[Tenant]): method get_backlog_uid (line 35) | def get_backlog_uid(self) -> str: method __init__ (line 38) | def __init__(self, method execute (line 49) | def execute(self, class DeleteBacklogStrategy (line 72) | class DeleteBacklogStrategy(AbstractStrategy[Tenant]): method get_backlog_uid (line 75) | def get_backlog_uid(self) -> str: method __init__ (line 78) | def __init__(self, method requires_sealing (line 88) | def requires_sealing(self) -> bool: method execute (line 91) | def execute(self, class RenameBacklogStrategy (line 124) | class RenameBacklogStrategy(AbstractStrategy[Tenant]): method get_backlog_uid (line 128) | def get_backlog_uid(self) -> str: method __init__ (line 131) | def __init__(self, method execute (line 142) | def execute(self, class ReorderBacklogStrategy (line 164) | class ReorderBacklogStrategy(AbstractStrategy[Tenant]): method get_backlog_uid (line 168) | def get_backlog_uid(self) -> str: method __init__ (line 171) | def __init__(self, method execute (line 182) | def execute(self, FILE: src/fk/core/ephemeral_event_source.py class EphemeralEventSource (line 32) | class EphemeralEventSource(AbstractEventSource[TRoot]): method __init__ (line 36) | def __init__(self, method start (line 47) | def start(self, mute_events=True) -> None: method _append (line 62) | def _append(self, strategies: list[AbstractStrategy[TRoot]]) -> None: method get_name (line 66) | def get_name(self) -> str: method get_data (line 69) | def get_data(self) -> TRoot: method clone (line 72) | def clone(self, new_root: TRoot, existing_strategies: Iterable[Abstrac... method disconnect (line 77) | def disconnect(self): method send_ping (line 80) | def send_ping(self) -> str | None: method can_connect (line 83) | def can_connect(self): method dump (line 86) | def dump(self): method repair (line 90) | def repair(self) -> tuple[list[str], str | None]: FILE: src/fk/core/event_source_factory.py class EventSourceFactory (line 28) | class EventSourceFactory(Generic[TRoot]): method __init__ (line 32) | def __init__(self): method is_valid (line 35) | def is_valid(self, name: str) -> bool: method get_producer (line 38) | def get_producer(self, name: str) -> Callable[[AbstractSettings, Abstr... method register_producer (line 41) | def register_producer(self, method get_event_source_factory (line 47) | def get_event_source_factory() -> EventSourceFactory[Tenant]: FILE: src/fk/core/event_source_holder.py class EventSourceHolder (line 33) | class EventSourceHolder(AbstractEventEmitter, Generic[TRoot]): method __init__ (line 38) | def __init__(self, settings: AbstractSettings, cryptograph: AbstractCr... method close_current_source (line 45) | def close_current_source(self) -> None: method request_new_source (line 52) | def request_new_source(self) -> AbstractEventSource[TRoot]: method get_source (line 78) | def get_source(self) -> AbstractEventSource[TRoot] | None: method get_settings (line 81) | def get_settings(self) -> AbstractSettings: FILE: src/fk/core/events.py class EmittedEvent (line 96) | class EmittedEvent: method __init__ (line 100) | def __init__(self, event: str, emitter: object): method __str__ (line 104) | def __str__(self): function set_emitter_added_callback (line 119) | def set_emitter_added_callback(callback: Callable[[object], None]) -> None: function register_event (line 124) | def register_event(event: str, emitter: object): function get_all_events (line 134) | def get_all_events() -> set[str]: FILE: src/fk/core/fernet_cryptograph.py class FernetCryptograph (line 29) | class FernetCryptograph(AbstractCryptograph): method __init__ (line 32) | def __init__(self, settings: AbstractSettings): method _create_fernet (line 38) | def _create_fernet(self, cached_key) -> Fernet: method _on_key_changed (line 57) | def _on_key_changed(self) -> None: method encrypt (line 60) | def encrypt(self, s: str) -> str: method decrypt (line 65) | def decrypt(self, s: str) -> str: FILE: src/fk/core/file_event_source.py class FileEventSource (line 46) | class FileEventSource(AbstractEventSource[TRoot]): method __init__ (line 52) | def __init__(self, method get_last_strategy (line 70) | def get_last_strategy(self) -> AbstractStrategy | None: method _on_file_change (line 73) | def _on_file_change(self, filename: str) -> None: method _get_filename (line 108) | def _get_filename(self) -> str: method _is_watch_changes (line 111) | def _is_watch_changes(self) -> bool: method start (line 114) | def start(self, mute_events: bool = True, fail_early: bool = False) ->... method _process_from_existing (line 121) | def _process_from_existing(self, fail_early: bool) -> None: method _process_from_file (line 156) | def _process_from_file(self, mute_events=True) -> None: method repair (line 212) | def repair(self) -> tuple[list[str], str | None]: method _overwrite_file (line 446) | def _overwrite_file(self, strategies: Iterable[AbstractStrategy], log:... method _append (line 460) | def _append(self, strategies: list[AbstractStrategy]) -> None: method get_name (line 474) | def get_name(self) -> str: method get_data (line 477) | def get_data(self) -> TRoot: method _count_valid_strategies (line 480) | def _count_valid_strategies(self) -> int: method compress (line 491) | def compress(self) -> list[str]: method clone (line 518) | def clone(self, new_root: TRoot, existing_strategies: Iterable[Abstrac... method disconnect (line 525) | def disconnect(self): method send_ping (line 529) | def send_ping(self) -> str | None: method can_connect (line 532) | def can_connect(self): FILE: src/fk/core/import_export.py function _export_message_processed (line 45) | def _export_message_processed(source: AbstractEventSource[TRoot], function _export_completed (line 61) | def _export_completed(source: AbstractEventSource[TRoot], function compressed_strategies (line 69) | def compressed_strategies(source: AbstractEventSource[TRoot]) -> Iterabl... function merge_strategies (line 158) | def merge_strategies(source: AbstractEventSource[TRoot], function _export_compressed (line 305) | def _export_compressed(source: AbstractEventSource[TRoot], function export (line 316) | def export(source: AbstractEventSource[TRoot], function create_export_serializer (line 355) | def create_export_serializer(source: AbstractEventSource[TRoot], encrypt... function import_ (line 364) | def import_(source: AbstractEventSource[TRoot], function import_github_issues (line 394) | def import_github_issues(source: AbstractEventSource[TRoot], function import_simple (line 477) | def import_simple(source: AbstractEventSource[TRoot], function _merge_sources (line 539) | def _merge_sources(existing_source, function import_classic (line 561) | def import_classic(source: AbstractEventSource[TRoot], FILE: src/fk/core/integration_executor.py class IntegrationExecutor (line 31) | class IntegrationExecutor: method __init__ (line 35) | def __init__(self, settings: AbstractSettings): method _on_emitter_added (line 43) | def _on_emitter_added(self, emitter: object): method _on_setting_changed (line 46) | def _on_setting_changed(self, new_values: dict[str, str], **kwargs): method _resync_subscriptions_from_settings (line 50) | def _resync_subscriptions_from_settings(self) -> None: method _sync_subscriptions (line 53) | def _sync_subscriptions(self, new_conf: dict[str, str]) -> None: method on_event (line 78) | def on_event(self, full_event, **kwargs): FILE: src/fk/core/interruption.py class Interruption (line 26) | class Interruption(AbstractDataItem['Pomodoro']): method __init__ (line 31) | def __init__(self, method __str__ (line 43) | def __str__(self): method get_reason (line 49) | def get_reason(self) -> str | None: method get_duration (line 52) | def get_duration(self) -> datetime.timedelta | None: method is_void (line 55) | def is_void(self) -> bool: method get_parent (line 60) | def get_parent(self) -> 'Pomodoro': method dump (line 63) | def dump(self, indent: str = '', mask_uid: bool = False, mask_last_mod... method to_dict (line 69) | def to_dict(self) -> dict: method __eq__ (line 76) | def __eq__(self, other: Interruption) -> bool: FILE: src/fk/core/mock_settings.py function invoke_direct (line 25) | def invoke_direct(fn, **kwargs): class MockSettings (line 29) | class MockSettings(AbstractSettings): method __init__ (line 32) | def __init__(self, filename=None, username=None, source_type="local"): method get (line 47) | def get(self, name: str) -> str: method is_set (line 53) | def is_set(self, name: str) -> bool: method set (line 56) | def set(self, values: dict[str, str], force_fire=False) -> None: method location (line 72) | def location(self) -> str: method clear (line 75) | def clear(self) -> None: method get_displayed_settings (line 78) | def get_displayed_settings(self) -> list[str]: method is_keyring_enabled (line 92) | def is_keyring_enabled(self) -> bool: method get_auto_theme (line 95) | def get_auto_theme(self) -> str: method init_gradients (line 98) | def init_gradients(self): method init_audio_outputs (line 101) | def init_audio_outputs(self): method init_fonts (line 104) | def init_fonts(self): method init_appearance (line 107) | def init_appearance(self): method init_network_access (line 110) | def init_network_access(self): FILE: src/fk/core/no_cryptograph.py class NoCryptograph (line 20) | class NoCryptograph(AbstractCryptograph): method __init__ (line 21) | def __init__(self, settings: AbstractSettings): method _on_key_changed (line 26) | def _on_key_changed(self) -> None: method encrypt (line 29) | def encrypt(self, s: str) -> str: method decrypt (line 32) | def decrypt(self, s: str) -> str: FILE: src/fk/core/pomodoro.py class Pomodoro (line 33) | class Pomodoro(AbstractDataContainer[Interruption, 'Workitem']): method __init__ (line 44) | def __init__(self, method __str__ (line 64) | def __str__(self): method update_work_duration (line 76) | def update_work_duration(self, work_duration: float) -> None: method get_state (line 82) | def get_state(self) -> str: method get_work_start_date (line 85) | def get_work_start_date(self) -> datetime.datetime: method get_rest_start_date (line 88) | def get_rest_start_date(self) -> datetime.datetime: method update_rest_duration (line 94) | def update_rest_duration(self, rest_duration: float) -> None: method seal (line 103) | def seal(self, when: datetime.datetime) -> None: method void (line 136) | def void(self, when: datetime.datetime) -> None: method start_work (line 147) | def start_work(self, when: datetime.datetime) -> None: method start_rest (line 156) | def start_rest(self, when: datetime.datetime) -> None: method is_running (line 164) | def is_running(self) -> bool: method is_startable (line 167) | def is_startable(self) -> bool: method is_working (line 170) | def is_working(self) -> bool: method is_resting (line 173) | def is_resting(self) -> bool: method is_long_break (line 176) | def is_long_break(self) -> bool: method is_finished (line 179) | def is_finished(self) -> bool: method get_elapsed_work_duration (line 182) | def get_elapsed_work_duration(self, when: datetime.datetime = None) ->... method get_elapsed_rest_duration (line 196) | def get_elapsed_rest_duration(self, when: datetime.datetime = None) ->... method get_work_duration (line 208) | def get_work_duration(self, when: datetime.datetime = None) -> float: method get_rest_duration (line 221) | def get_rest_duration(self) -> float: method get_type (line 227) | def get_type(self): method remaining_time_in_current_state (line 230) | def remaining_time_in_current_state(self, when: datetime.datetime | No... method remaining_minutes_in_current_state_str (line 246) | def remaining_minutes_in_current_state_str(self, when: datetime.dateti... method planned_end_of_work (line 256) | def planned_end_of_work(self) -> datetime.datetime: method planned_end_of_rest (line 264) | def planned_end_of_rest(self) -> datetime.datetime: method get_parent (line 272) | def get_parent(self) -> 'Workitem': method dump (line 275) | def dump(self, indent: str = '', mask_uid: bool = False, mask_last_mod... method add_interruption (line 286) | def add_interruption(self, reason: str | None, duration: datetime.time... method is_planned (line 290) | def is_planned(self) -> bool: method get_timer (line 293) | def get_timer(self) -> 'TimerData': method to_dict (line 296) | def to_dict(self) -> dict: FILE: src/fk/core/pomodoro_strategies.py class AddPomodoroStrategy (line 31) | class AddPomodoroStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 37) | def get_workitem_uid(self) -> str: method __init__ (line 40) | def __init__(self, method execute (line 53) | def execute(self, class RemovePomodoroStrategy (line 93) | class RemovePomodoroStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 97) | def get_workitem_uid(self) -> str: method requires_sealing (line 100) | def requires_sealing(self) -> bool: method __init__ (line 103) | def __init__(self, method execute (line 114) | def execute(self, class AddInterruptionStrategy (line 157) | class AddInterruptionStrategy(AbstractStrategy[Tenant]): method requires_sealing (line 162) | def requires_sealing(self) -> bool: method get_workitem_uid (line 165) | def get_workitem_uid(self) -> str: method __init__ (line 168) | def __init__(self, method execute (line 183) | def execute(self, FILE: src/fk/core/sandbox.py function get_sandbox_type (line 20) | def get_sandbox_type() -> str | None: FILE: src/fk/core/simple_serializer.py class SimpleSerializer (line 31) | class SimpleSerializer(AbstractSerializer[str, TRoot]): method __init__ (line 40) | def __init__(self, settings: AbstractSettings, cryptograph: AbstractCr... method escape_parameter (line 44) | def escape_parameter(value): method serialize (line 47) | def serialize(self, s: AbstractStrategy) -> str: method deserialize (line 61) | def deserialize(self, t: str) -> AbstractStrategy[TRoot] | None: method __str__ (line 96) | def __str__(self): FILE: src/fk/core/strategy_factory.py function strategy (line 28) | def strategy(cls: Type[AbstractStrategy[TRoot]]): FILE: src/fk/core/tag.py class Tag (line 28) | class Tag(AbstractDataItem['Tags']): method __init__ (line 31) | def __init__(self, method __str__ (line 40) | def __str__(self): method get_workitems (line 43) | def get_workitems(self) -> Set[Workitem]: method add_workitem (line 46) | def add_workitem(self, workitem: Workitem) -> None: method remove_workitem (line 49) | def remove_workitem(self, workitem: Workitem) -> None: method dump (line 52) | def dump(self, indent: str = '', mask_uid: bool = False, mask_last_mod... FILE: src/fk/core/tags.py function sanitize_tag (line 22) | def sanitize_tag(tag: str) -> str: class Tags (line 26) | class Tags(AbstractDataContainer[Tag, 'User']): method __init__ (line 27) | def __init__(self, user: 'User'): method __str__ (line 33) | def __str__(self): method dump (line 36) | def dump(self, indent: str = '', mask_uid: bool = False, mask_last_mod... FILE: src/fk/core/tenant.py class Tenant (line 25) | class Tenant(AbstractDataContainer[User, None]): method __init__ (line 31) | def __init__(self, settings: AbstractSettings): method get_settings (line 45) | def get_settings(self) -> AbstractSettings: method get_user (line 48) | def get_user(self, identity: str) -> User: method get_current_user (line 51) | def get_current_user(self) -> User: FILE: src/fk/core/timer.py class PomodoroTimer (line 32) | class PomodoroTimer(AbstractEventEmitter): method timer (line 39) | def timer(self) -> TimerData: method __init__ (line 45) | def __init__(self, method _on_source_changed (line 60) | def _on_source_changed(self, event: str, source: AbstractEventSource): method _refresh (line 67) | def _refresh(self, event: str | None = None, when: datetime.datetime |... method _schedule_tick (line 99) | def _schedule_tick(self) -> None: method _handle_tick (line 103) | def _handle_tick(self, params: dict | None, when: datetime.datetime | ... method _schedule_transition (line 114) | def _schedule_transition(self, method _handle_transition (line 125) | def _handle_transition(self, params: dict | None, when: datetime.datet... method _handle_pomodoro_work_start (line 149) | def _handle_pomodoro_work_start(self, method _handle_pomodoro_rest_start (line 161) | def _handle_pomodoro_rest_start(self, method _handle_pomodoro_complete (line 173) | def _handle_pomodoro_complete(self, FILE: src/fk/core/timer_data.py class TimerData (line 26) | class TimerData(AbstractDataItem['User']): method __init__ (line 37) | def __init__(self, method get_running_pomodoro (line 50) | def get_running_pomodoro(self) -> Pomodoro | None: method get_running_workitem (line 53) | def get_running_workitem(self) -> Workitem | None: method get_state (line 56) | def get_state(self) -> str: method idle (line 59) | def idle(self, when: datetime.datetime | None = None) -> None: method work (line 69) | def work(self, pomodoro: Pomodoro, work_duration: float, when: datetim... method _refresh_today (line 83) | def _refresh_today(self, when: datetime.datetime | None = None): method rest (line 92) | def rest(self, rest_duration: float, when: datetime.datetime | None = ... method is_working (line 113) | def is_working(self) -> bool: method is_resting (line 116) | def is_resting(self) -> bool: method is_idling (line 119) | def is_idling(self) -> bool: method is_ticking (line 122) | def is_ticking(self) -> bool: method get_planned_duration (line 125) | def get_planned_duration(self) -> int: method get_remaining_duration (line 128) | def get_remaining_duration(self) -> float: method get_next_state_change (line 131) | def get_next_state_change(self) -> datetime.datetime | None: method format_remaining_duration (line 135) | def format_remaining_duration(self) -> str: method format_elapsed_work_duration (line 141) | def format_elapsed_work_duration(self, when: datetime.datetime | None ... method format_elapsed_rest_duration (line 149) | def format_elapsed_rest_duration(self, when: datetime.datetime | None ... method __str__ (line 157) | def __str__(self) -> str: method update_remaining_duration (line 166) | def update_remaining_duration(self, when: datetime.datetime | None): method to_dict (line 175) | def to_dict(self) -> dict: method get_pomodoro_in_series (line 185) | def get_pomodoro_in_series(self) -> int: FILE: src/fk/core/timer_strategies.py class StartTimerStrategy (line 32) | class StartTimerStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 37) | def get_workitem_uid(self) -> str: method requires_sealing (line 40) | def requires_sealing(self) -> bool: method __init__ (line 43) | def __init__(self, method get_workitem (line 62) | def get_workitem(self, method execute (line 79) | def execute(self, class StopTimerStrategy (line 124) | class StopTimerStrategy(AbstractStrategy[Tenant]): method __init__ (line 125) | def __init__(self, method requires_sealing (line 134) | def requires_sealing(self) -> bool: method execute (line 137) | def execute(self, class TimerRingInternalStrategy (line 187) | class TimerRingInternalStrategy(AbstractStrategy[Tenant]): method __init__ (line 188) | def __init__(self, method execute (line 197) | def execute(self, class StartWorkStrategy (line 256) | class StartWorkStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 261) | def get_workitem_uid(self) -> str: method requires_sealing (line 264) | def requires_sealing(self) -> bool: method __init__ (line 267) | def __init__(self, method execute (line 282) | def execute(self, class VoidPomodoroStrategy (line 294) | class VoidPomodoroStrategy(AbstractStrategy[Tenant]): method __init__ (line 297) | def __init__(self, method requires_sealing (line 307) | def requires_sealing(self) -> bool: method execute (line 310) | def execute(self, class FinishTrackingStrategy (line 326) | class FinishTrackingStrategy(AbstractStrategy[Tenant]): method __init__ (line 327) | def __init__(self, method requires_sealing (line 336) | def requires_sealing(self) -> bool: method execute (line 339) | def execute(self, FILE: src/fk/core/user.py class User (line 27) | class User(AbstractDataContainer[Backlog, 'Tenant']): method __init__ (line 32) | def __init__(self, method __str__ (line 43) | def __str__(self): method get_identity (line 46) | def get_identity(self) -> str: method is_system_user (line 49) | def is_system_user(self) -> bool: method get_state (line 53) | def get_state(self, when: datetime.datetime) -> (str, int): method get_tags (line 64) | def get_tags(self) -> Tags: method get_timer (line 67) | def get_timer(self) -> TimerData: method dump (line 70) | def dump(self, indent: str = '', mask_uid: bool = False, mask_last_mod... method to_dict (line 75) | def to_dict(self) -> dict: FILE: src/fk/core/user_strategies.py function is_system_user (line 28) | def is_system_user(user_identity: str): class CreateUserStrategy (line 34) | class CreateUserStrategy(AbstractStrategy[Tenant]): method get_target_user_identity (line 38) | def get_target_user_identity(self) -> str: method __init__ (line 41) | def __init__(self, method execute (line 52) | def execute(self, class DeleteUserStrategy (line 73) | class DeleteUserStrategy(AbstractStrategy[Tenant]): method get_target_user_identity (line 76) | def get_target_user_identity(self) -> str: method requires_sealing (line 79) | def requires_sealing(self) -> bool: method __init__ (line 82) | def __init__(self, method execute (line 92) | def execute(self, class RenameUserStrategy (line 125) | class RenameUserStrategy(AbstractStrategy[Tenant]): method get_target_user_identity (line 129) | def get_target_user_identity(self) -> str: method __init__ (line 132) | def __init__(self, method execute (line 143) | def execute(self, class AutoSealInternalStrategy (line 167) | class AutoSealInternalStrategy(AbstractStrategy[Tenant]): method __init__ (line 168) | def __init__(self, method requires_sealing (line 177) | def requires_sealing(self) -> bool: method execute (line 180) | def execute(self, FILE: src/fk/core/workitem.py class Interval (line 31) | class Interval: method __init__ (line 37) | def __init__(self, started: datetime.datetime, work_duration: float, r... method end (line 43) | def end(self, when: datetime.datetime): method get_started (line 46) | def get_started(self) -> datetime.datetime: method is_ended_manually (line 49) | def is_ended_manually(self) -> bool: method get_ended (line 52) | def get_ended(self) -> datetime.datetime: method get_work_duration (line 55) | def get_work_duration(self) -> float: method get_rest_duration (line 58) | def get_rest_duration(self) -> float: method __str__ (line 61) | def __str__(self) -> str: method __eq__ (line 64) | def __eq__(self, other: Interval) -> bool: class Workitem (line 71) | class Workitem(AbstractDataContainer[Pomodoro, 'Backlog']): method __init__ (line 78) | def __init__(self, method __str__ (line 89) | def __str__(self): method seal (line 103) | def seal(self, target_state: str, when: datetime.datetime) -> None: method add_pomodoro (line 110) | def add_pomodoro(self, method remove_pomodoro (line 135) | def remove_pomodoro(self, pomodoro: Pomodoro) -> None: method is_running (line 138) | def is_running(self) -> bool: method has_running_pomodoro (line 141) | def has_running_pomodoro(self) -> bool: method get_running_pomodoro (line 144) | def get_running_pomodoro(self) -> Pomodoro | None: method is_sealed (line 150) | def is_sealed(self) -> bool: method is_planned (line 153) | def is_planned(self) -> bool: method is_startable (line 160) | def is_startable(self) -> bool: method start (line 167) | def start(self, when: datetime.datetime) -> None: method add_interval (line 172) | def add_interval(self, start: datetime.datetime, work_duration: float,... method end_interval (line 175) | def end_interval(self, when: datetime.datetime): method dump (line 178) | def dump(self, indent: str = '', mask_uid: bool = False, mask_last_mod... method get_work_start_date (line 185) | def get_work_start_date(self) -> datetime.datetime: method get_incomplete_pomodoros (line 188) | def get_incomplete_pomodoros(self) -> Iterable[Pomodoro]: method get_tags (line 193) | def get_tags(self) -> Set[str]: method get_display_name (line 199) | def get_display_name(self) -> str: method get_short_display_name (line 202) | def get_short_display_name(self) -> str: method get_total_elapsed_time (line 205) | def get_total_elapsed_time(self) -> datetime.timedelta: method is_tracker (line 209) | def is_tracker(self) -> bool: method get_intervals (line 215) | def get_intervals(self) -> Iterable[Interval]: method to_dict (line 218) | def to_dict(self) -> dict: FILE: src/fk/core/workitem_strategies.py class CreateWorkitemStrategy (line 34) | class CreateWorkitemStrategy(AbstractStrategy[Tenant]): method get_backlog_uid (line 39) | def get_backlog_uid(self) -> str: method get_workitem_uid (line 42) | def get_workitem_uid(self) -> str: method __init__ (line 45) | def __init__(self, method execute (line 57) | def execute(self, class DeleteWorkitemStrategy (line 100) | class DeleteWorkitemStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 103) | def get_workitem_uid(self) -> str: method __init__ (line 106) | def __init__(self, method requires_sealing (line 116) | def requires_sealing(self) -> bool: method execute (line 119) | def execute(self, class RenameWorkitemStrategy (line 162) | class RenameWorkitemStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 166) | def get_workitem_uid(self) -> str: method __init__ (line 169) | def __init__(self, method execute (line 180) | def execute(self, class CompleteWorkitemStrategy (line 245) | class CompleteWorkitemStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 249) | def get_workitem_uid(self) -> str: method requires_sealing (line 252) | def requires_sealing(self) -> bool: method __init__ (line 255) | def __init__(self, method execute (line 266) | def execute(self, class ReorderWorkitemStrategy (line 307) | class ReorderWorkitemStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 311) | def get_workitem_uid(self) -> str: method __init__ (line 314) | def __init__(self, method execute (line 325) | def execute(self, class MoveWorkitemStrategy (line 352) | class MoveWorkitemStrategy(AbstractStrategy[Tenant]): method get_workitem_uid (line 356) | def get_workitem_uid(self) -> str: method get_backlog_uid (line 359) | def get_backlog_uid(self) -> str: method __init__ (line 362) | def __init__(self, method execute (line 373) | def execute(self, FILE: src/fk/desktop/application.py function setting_requires_new_source (line 76) | def setting_requires_new_source(name: str) -> bool: class Application (line 85) | class Application(QApplication, AbstractEventEmitter): method __init__ (line 100) | def __init__(self, args: [str]): method _get_versions (line 200) | def _get_versions(self): method _initialize_logger (line 208) | def _initialize_logger(self): method _check_upgrade (line 244) | def _check_upgrade(self, event: str, when: datetime.datetime | None = ... method initialize_source (line 259) | def initialize_source(self): method _register_source_producers (line 262) | def _register_source_producers(self): method _on_source_changed (line 283) | def _on_source_changed(self, event: str, source: AbstractEventSource): method is_e2e_mode (line 293) | def is_e2e_mode(self): method is_hide_on_start (line 296) | def is_hide_on_start(self): method is_screenshot_mode (line 301) | def is_screenshot_mode(self): method is_testing_mode (line 304) | def is_testing_mode(self): method _on_went_offline (line 307) | def _on_went_offline(self, event, after: int, last_received: datetime.... method _on_went_online (line 312) | def _on_went_online(self, event, ping: int) -> None: method get_settings (line 316) | def get_settings(self): method get_source_holder (line 319) | def get_source_holder(self): method get_theme_variables (line 322) | def get_theme_variables(self) -> dict[str, str]: method get_icon_theme (line 335) | def get_icon_theme(self): method refresh_theme_and_fonts (line 339) | def refresh_theme_and_fonts(self): method _load_embedded_font (line 364) | def _load_embedded_font(self): method _initialize_fonts (line 371) | def _initialize_fonts(self) -> (QFont, QFont): method _auto_resize (line 400) | def _auto_resize(self) -> int: method on_exception (line 411) | def on_exception(self, exc_type, exc_value, exc_trace): method bad_file_for_file_source (line 432) | def bad_file_for_file_source(self): method get_main_font (line 442) | def get_main_font(self): method get_header_font (line 445) | def get_header_font(self): method get_row_height (line 448) | def get_row_height(self): method _before_settings_changed (line 451) | def _before_settings_changed(self, event: str, old_values: dict[str, s... method _after_settings_changed (line 459) | def _after_settings_changed(self, event: str, old_values: dict[str, st... method is_another_instance_running (line 495) | def is_another_instance_running(self) -> bool: method show_settings_dialog (line 504) | def show_settings_dialog(self): method repair_file_event_source (line 517) | def repair_file_event_source(self, _, callback: Callable) -> bool: method compress_file_event_source (line 547) | def compress_file_event_source(self, _, callback: Callable) -> bool: method delete_account (line 579) | def delete_account(self, _, callback: Callable) -> bool: method generate_gradient (line 608) | def generate_gradient(self, _, callback: Callable) -> bool: method sign_in (line 617) | def sign_in(self, _, callback: Callable) -> bool: method sign_out (line 633) | def sign_out(self, _, callback: Callable) -> bool: method define_actions (line 648) | def define_actions(actions: Actions): method quit_local (line 667) | def quit_local(self): method show_import_wizard (line 670) | def show_import_wizard(self): method show_export_wizard (line 674) | def show_export_wizard(self): method show_about (line 678) | def show_about(self): method toggle_toolbar (line 681) | def toggle_toolbar(self, state: bool): method get_heartbeat (line 684) | def get_heartbeat(self) -> Heartbeat: method check_version (line 687) | def check_version(self, event: str, when: datetime.datetime | None = N... method show_stats (line 703) | def show_stats(self, event: str = None) -> None: method show_work_summary (line 709) | def show_work_summary(self, event: str = None) -> None: method on_new_version (line 712) | def on_new_version(self, event: str, current: Version, latest: Version... method is_dark_theme (line 736) | def is_dark_theme(self): FILE: src/fk/desktop/config_wizard.py function wrap_in_widget (line 39) | def wrap_in_widget(widget: QWidget): class PageConfigFocus (line 50) | class PageConfigFocus(QWizardPage): method __init__ (line 59) | def __init__(self, application: Application, actions: Actions): method _handle_tick (line 113) | def _handle_tick(self, params: dict | None = None, when: datetime.date... method get_setting (line 120) | def get_setting(self) -> str: method unsubscribe (line 123) | def unsubscribe(self) -> None: class FakeTrayIcon (line 129) | class FakeTrayIcon(TrayIcon): method __init__ (line 134) | def __init__(self, method setIcon (line 152) | def setIcon(self, icon: QIcon | QPixmap) -> None: method showMessage (line 160) | def showMessage(self, title: str, msg: str, icon: QIcon = None, **_) -... method setToolTip (line 163) | def setToolTip(self, tip: str) -> None: method setContextMenu (line 166) | def setContextMenu(self, menu: QMenu) -> None: class PageConfigIcons (line 170) | class PageConfigIcons(QWizardPage): method __init__ (line 177) | def __init__(self, application: Application, actions: Actions): method _create_icons (line 222) | def _create_icons(self, container: QWidget, kind: str, cls: Type[Abstr... method get_setting (line 270) | def get_setting(self) -> str: class ConfigWizard (line 281) | class ConfigWizard(QWizard): method __init__ (line 288) | def __init__(self, application: Application, actions: Actions, parent:... method _on_finish (line 306) | def _on_finish(self): method unsubscribe (line 312) | def unsubscribe(self): method hideEvent (line 315) | def hideEvent(self, event: QHideEvent) -> None: FILE: src/fk/desktop/desktop.py function get_timer_ui_mode (line 58) | def get_timer_ui_mode() -> str: function pin_if_needed (line 63) | def pin_if_needed(always_on_top_setting: str): function to_focus_mode (line 79) | def to_focus_mode(**kwargs) -> None: function from_focus_mode (line 102) | def from_focus_mode(**_) -> None: function update_tables_visibility (line 110) | def update_tables_visibility() -> None: function update_mode (line 118) | def update_mode(timer_ticking: bool) -> None: function recreate_tray_icon (line 139) | def recreate_tray_icon(flavor: str, show_tray_icon_setting: str) -> None: function on_settings_changed (line 158) | def on_settings_changed(event: str, old_values: dict[str, str], new_valu... class MainWindow (line 196) | class MainWindow: method __init__ (line 197) | def __init__(self): method toggle_focus_mode (line 200) | def toggle_focus_mode(self, state: bool): method toggle_pin_window (line 206) | def toggle_pin_window(self, state: bool): method toggle_main_window (line 210) | def toggle_main_window(self): method show_search (line 229) | def show_search(self): method show_tutorial (line 232) | def show_tutorial(self): method on_upgrade (line 236) | def on_upgrade(self, from_version: Version): method toggle_backlogs (line 245) | def toggle_backlogs(self, enabled): method toggle_users (line 248) | def toggle_users(self, enabled): method define_actions (line 252) | def define_actions(actions: Actions): function _on_workitem_complete (line 294) | def _on_workitem_complete(workitem: Workitem, timer: TimerData): function _on_source_changed (line 298) | def _on_source_changed(event: str, source: AbstractEventSource): FILE: src/fk/desktop/desktop_strategies.py class AuthenticateStrategy (line 35) | class AuthenticateStrategy(AbstractStrategy[Tenant]): method __init__ (line 39) | def __init__(self, method encryptable (line 50) | def encryptable(self) -> bool: method execute (line 53) | def execute(self, class ReplayStrategy (line 62) | class ReplayStrategy(AbstractStrategy): method __init__ (line 65) | def __init__(self, method encryptable (line 75) | def encryptable(self) -> bool: method execute (line 78) | def execute(self, class ReplayCompletedStrategy (line 87) | class ReplayCompletedStrategy(AbstractStrategy): method __init__ (line 88) | def __init__(self, method encryptable (line 97) | def encryptable(self) -> bool: method requires_sealing (line 100) | def requires_sealing(self) -> bool: method execute (line 103) | def execute(self, class ErrorStrategy (line 112) | class ErrorStrategy(AbstractStrategy): method __init__ (line 116) | def __init__(self, method encryptable (line 127) | def encryptable(self) -> bool: method execute (line 130) | def execute(self, class PongStrategy (line 183) | class PongStrategy(AbstractStrategy): method __init__ (line 186) | def __init__(self, method encryptable (line 196) | def encryptable(self) -> bool: method execute (line 199) | def execute(self, class PingStrategy (line 211) | class PingStrategy(AbstractStrategy): method __init__ (line 214) | def __init__(self, method encryptable (line 224) | def encryptable(self) -> bool: method execute (line 227) | def execute(self, class DeleteAccountStrategy (line 236) | class DeleteAccountStrategy(AbstractStrategy): method __init__ (line 239) | def __init__(self, method encryptable (line 249) | def encryptable(self) -> bool: method execute (line 252) | def execute(self, FILE: src/fk/desktop/export_wizard.py class PageExportIntro (line 36) | class PageExportIntro(QWizardPage): method __init__ (line 40) | def __init__(self): class PageExportSettings (line 50) | class PageExportSettings(QWizardPage): method isComplete (line 60) | def isComplete(self): method __init__ (line 63) | def __init__(self, settings: AbstractSettings): class PageExportProgress (line 103) | class PageExportProgress(QWizardPage): method isComplete (line 111) | def isComplete(self): method __init__ (line 114) | def __init__(self, source: AbstractEventSource): method initializePage (line 130) | def initializePage(self): method finish (line 133) | def finish(self): method start (line 149) | def start(self): class ExportWizard (line 162) | class ExportWizard(QWizard): method __init__ (line 171) | def __init__(self, source: AbstractEventSource, parent: QWidget | None): method set_filename (line 190) | def set_filename(self, filename): method set_encrypted (line 193) | def set_encrypted(self, encrypted): method set_compressed (line 196) | def set_compressed(self, compressed): FILE: src/fk/desktop/import_wizard.py class PageImportIntro (line 35) | class PageImportIntro(QWizardPage): method __init__ (line 47) | def __init__(self): method get_selected_import_type (line 95) | def get_selected_import_type(self) -> str: class PageImportSettings (line 106) | class PageImportSettings(QWizardPage): method isComplete (line 124) | def isComplete(self): method __init__ (line 133) | def __init__(self, get_type: Callable[[], str]): method _reset (line 138) | def _reset(self): method cleanupPage (line 155) | def cleanupPage(self): method initializePage (line 158) | def initializePage(self): method _init_for_file (line 175) | def _init_for_file(self, layout_v): method _init_for_csv (line 207) | def _init_for_csv(self, layout_v): method _init_for_github (line 239) | def _init_for_github(self, layout_v): method _init_for_other (line 276) | def _init_for_other(self, layout_v): method get_settings (line 281) | def get_settings(self) -> dict[str, any]: class PageImportProgress (line 314) | class PageImportProgress(QWizardPage): method isComplete (line 323) | def isComplete(self): method __init__ (line 326) | def __init__(self, method initializePage (line 334) | def initializePage(self): method finish_for_file (line 353) | def finish_for_file(self): method finish (line 363) | def finish(self, callback: Callable[[], None] | None = None): method _send_request (line 374) | def _send_request(self, method _import_from_file (line 408) | def _import_from_file(self): method _import_from_csv (line 418) | def _import_from_csv(self): method _import_from_github (line 459) | def _import_from_github(self): method start (line 497) | def start(self): class ImportWizard (line 507) | class ImportWizard(QWizard): method __init__ (line 513) | def __init__(self, source_holder: EventSourceHolder, parent: QWidget |... FILE: src/fk/desktop/interruption_dialog.py class InterruptionDialog (line 27) | class InterruptionDialog(QDialog): method __init__ (line 33) | def __init__(self, method hideEvent (line 69) | def hideEvent(self, event: QHideEvent) -> None: method _on_pomodoro_complete (line 74) | def _on_pomodoro_complete(self, **_) -> None: method _on_action (line 79) | def _on_action(self, role: QDialogButtonBox.ButtonRole): method get_reason (line 87) | def get_reason(self) -> str: FILE: src/fk/desktop/settings.py function _from_total_seconds (line 36) | def _from_total_seconds(total_seconds: int) -> QTime: class SettingsDialog (line 43) | class SettingsDialog(QDialog): method __init__ (line 51) | def __init__(self, method _init_sign_out_button (line 101) | def _init_sign_out_button(self): method _on_action (line 110) | def _on_action(self, role: QDialogButtonBox.ButtonRole): method _computed_values (line 129) | def _computed_values(self) -> dict[str, str]: method _on_value_changed (line 135) | def _on_value_changed(self, option_id, new_value): method _recompute_visibility (line 150) | def _recompute_visibility(self, option_id, new_value): method _set_buttons_state (line 159) | def _set_buttons_state(self, is_enabled: bool): method _save_settings (line 163) | def _save_settings(self) -> bool: method do_browse (line 178) | def do_browse(edit: QLineEdit) -> None: method do_browse_simple (line 182) | def do_browse_simple(preselected: str, callback: Callable[[str], None]... method display_key_warning (line 191) | def display_key_warning(name: str) -> bool: method _display_option (line 210) | def _display_option(self, method _handle_button_click (line 490) | def _handle_button_click(self, option_id: str): method _value_changed_externally (line 505) | def _value_changed_externally(self, name: str, value: str): method _create_tab (line 509) | def _create_tab(self, tabs: QTabWidget, settings) -> QWidget: FILE: src/fk/desktop/stats_window.py class StatsWindow (line 30) | class StatsWindow(QObject): method __init__ (line 52) | def __init__(self, method _init_colors (line 125) | def _init_colors(self, theme_variables: dict[str, str]) -> None: method _style_chart (line 130) | def _style_chart(self) -> None: method _time_delta_for_period (line 145) | def _time_delta_for_period(self, period: str, date: datetime.datetime,... method _drop_time (line 189) | def _drop_time(date: datetime.datetime, period: str, start: bool): method _substep_delta_for_period (line 229) | def _substep_delta_for_period(self, period: str, date: datetime.dateti... method _prev (line 243) | def _prev(self): method _next (line 248) | def _next(self): method _format_date (line 254) | def _format_date(date: datetime.datetime): method _update_chart (line 257) | def _update_chart(self, period: str, to: datetime.datetime) -> None: method _create_checkable_action (line 297) | def _create_checkable_action(self, name: str, shortcut: str) -> QAction: method _create_simple_action (line 307) | def _create_simple_action(self, name: str, callback: Callable) -> QAct... method _reset_to (line 315) | def _reset_to(self, period): method select_period (line 318) | def select_period(self, period: str) -> None: method _rotate (line 326) | def _rotate(lst: list, n: int) -> list: method extract_data (line 329) | def extract_data(self, group: str, period_from: datetime.datetime, per... method show (line 408) | def show(self): FILE: src/fk/desktop/tutorial.py function _get_row_position (line 40) | def _get_row_position(widget: QAbstractItemView, x: float, row: int, col... class Tutorial (line 48) | class Tutorial: method __init__ (line 56) | def __init__(self, method _subscribe (line 89) | def _subscribe(self): method _unsubscribe (line 94) | def _unsubscribe(self): method _on_event (line 102) | def _on_event(self, event: str, **kwargs): method _on_setting_changed (line 108) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _mark_completed (line 113) | def _mark_completed(self, step: str) -> None: method _is_to_complete (line 125) | def _is_to_complete(self, step: str) -> bool: method _before_source_changed (line 128) | def _before_source_changed(self, event: str, source: AbstractEventSour... method _after_source_changed (line 135) | def _after_source_changed(self, event: str, source: AbstractEventSourc... method _get_toolbar_button_position (line 140) | def _get_toolbar_button_position(self, action_name: str, arrow: str): method _on_messages (line 154) | def _on_messages(self, complete: Callable, skip: Callable, **kwargs) -... method _on_backlog_create (line 165) | def _on_backlog_create(self, complete: Callable, skip: Callable, **kwa... method _on_backlog_rename (line 176) | def _on_backlog_rename(self, complete: Callable, skip: Callable, **kwa... method _on_workitem_create (line 187) | def _on_workitem_create(self, complete: Callable, skip: Callable, **kw... method _on_workitem_rename (line 199) | def _on_workitem_rename(self, complete: Callable, skip: Callable, work... method _on_pomodoro_add (line 210) | def _on_pomodoro_add(self, complete: Callable, skip: Callable, workite... method _on_pomodoro_remove (line 223) | def _on_pomodoro_remove(self, complete: Callable, skip: Callable, work... method _on_pomodoro_work_start (line 235) | def _on_pomodoro_work_start(self, complete: Callable, skip: Callable, ... method _on_pomodoro_complete (line 260) | def _on_pomodoro_complete(self, complete: Callable, skip: Callable, po... method _on_workitem_complete (line 290) | def _on_workitem_complete(self, complete: Callable, skip: Callable, **... FILE: src/fk/desktop/work_summary_window.py function _format_date (line 38) | def _format_date(date: datetime.datetime): function _format_duration (line 42) | def _format_duration(duration: datetime.timedelta): class Formatter (line 46) | class Formatter(ABC): method header (line 48) | def header(self, include_durations: bool, include_backlogs: bool) -> str: method week (line 52) | def week(self, text: str) -> str: method day (line 56) | def day(self, text: str) -> str: method workitem_plaintext (line 59) | def workitem_plaintext(self, text: str, duration: datetime.timedelta =... method workitem (line 67) | def workitem(self, text: str, duration: datetime.timedelta = None, bac... method footer (line 71) | def footer(self) -> str: class MarkdownFormatter (line 75) | class MarkdownFormatter(Formatter): method header (line 76) | def header(self, include_durations: bool, include_backlogs: bool) -> str: method week (line 79) | def week(self, text: str) -> str: method day (line 82) | def day(self, text: str) -> str: method workitem (line 85) | def workitem(self, text: str, duration: datetime.timedelta = None, bac... method footer (line 88) | def footer(self) -> str: class OrgModeFormatter (line 92) | class OrgModeFormatter(Formatter): method header (line 93) | def header(self, include_durations: bool, include_backlogs: bool) -> str: method week (line 100) | def week(self, text: str) -> str: method day (line 103) | def day(self, text: str) -> str: method workitem (line 106) | def workitem(self, text: str, duration: datetime.timedelta = None, bac... method footer (line 109) | def footer(self) -> str: class MarkdownTableFormatter (line 113) | class MarkdownTableFormatter(Formatter): method __init__ (line 117) | def __init__(self): method header (line 121) | def header(self, include_durations: bool, include_backlogs: bool) -> str: method week (line 125) | def week(self, text: str) -> str: method day (line 129) | def day(self, text: str) -> str: method workitem (line 133) | def workitem(self, text: str, duration: datetime.timedelta = None, bac... method footer (line 136) | def footer(self) -> str: class PlaintextFormatter (line 140) | class PlaintextFormatter(Formatter): method header (line 141) | def header(self, include_durations: bool, include_backlogs: bool) -> str: method week (line 144) | def week(self, text: str) -> str: method day (line 147) | def day(self, text: str) -> str: method workitem (line 150) | def workitem(self, text: str, duration: datetime.timedelta = None, bac... method footer (line 153) | def footer(self) -> str: class CsvFormatter (line 157) | class CsvFormatter(Formatter): method __init__ (line 161) | def __init__(self): method header (line 165) | def header(self, include_durations: bool, include_backlogs: bool) -> str: method week (line 178) | def week(self, text: str) -> str: method day (line 182) | def day(self, text: str) -> str: method workitem (line 186) | def workitem(self, text: str, duration: datetime.timedelta = None, bac... method footer (line 195) | def footer(self) -> str: class JsonFormatter (line 199) | class JsonFormatter(Formatter): method __init__ (line 204) | def __init__(self): method header (line 209) | def header(self, include_durations: bool, include_backlogs: bool) -> str: method week (line 213) | def week(self, text: str) -> str: method day (line 218) | def day(self, text: str) -> str: method workitem (line 223) | def workitem(self, text: str, duration: datetime.timedelta = None, bac... method footer (line 232) | def footer(self) -> str: class XmlFormatter (line 236) | class XmlFormatter(Formatter): method __init__ (line 241) | def __init__(self): method header (line 246) | def header(self, include_durations: bool, include_backlogs: bool) -> str: method week (line 249) | def week(self, text: str) -> str: method day (line 255) | def day(self, text: str) -> str: method workitem (line 261) | def workitem(self, text: str, duration: datetime.timedelta = None, bac... method footer (line 273) | def footer(self) -> str: class WorkSummaryWindow (line 278) | class WorkSummaryWindow(QObject): method __init__ (line 289) | def __init__(self, parent: QWidget, source: AbstractEventSource): method _save_settings (line 348) | def _save_settings(self): method _load_settings (line 358) | def _load_settings(self): method _extract_data (line 377) | def _extract_data(self) -> dict[datetime.date, dict[str, list[datetime... method _display_formatted (line 401) | def _display_formatted(self) -> None: method _format_data (line 408) | def _format_data(self, include_durations: bool, include_backlogs: bool... method show (line 493) | def show(self): method _get_file_extension (line 496) | def _get_file_extension(self) -> str: method _export_to_file (line 514) | def _export_to_file(self, filename: str): method _on_action (line 528) | def _on_action(self, role: QDialogButtonBox.ButtonRole): FILE: src/fk/e2e/abstract_e2e_test.py class AbstractE2eTest (line 46) | class AbstractE2eTest(ABC): method __init__ (line 62) | def __init__(self, app: Application): method _get_test_cases (line 77) | def _get_test_cases(self): method _run (line 85) | async def _run(self): method _update_log_for_method (line 127) | def _update_log_for_method(self, name: str, value: str): method _append_to_system_out_for_method (line 131) | def _append_to_system_out_for_method(self, line: str): method init_log (line 138) | def init_log(self) -> None: method close_log (line 159) | def close_log(self) -> None: method info (line 175) | def info(self, txt): method error (line 179) | def error(self, e: Exception): method _get_row_position (line 184) | def _get_row_position(self, widget: QAbstractItemView, row: int, col: ... method mouse_click_row (line 187) | async def mouse_click_row(self, widget: QAbstractItemView, row: int, c... method mouse_doubleclick_row (line 191) | async def mouse_doubleclick_row(self, widget: QAbstractItemView, row: ... method mouse_click (line 195) | async def mouse_click(self, widget: QWidget, pos: QPoint, left_button:... method mouse_doubleclick (line 218) | async def mouse_doubleclick(self, widget: QWidget, pos: QPoint = QPoin... method keypress (line 229) | def keypress(self, key: int, ctrl: bool = False, widget: QWidget = None): method close_modal (line 239) | def close_modal(self, ok: bool = True): method type_text (line 248) | def type_text(self, text: str): method get_focused (line 257) | def get_focused(self) -> QWidget: method get_application (line 260) | def get_application(self) -> Application: method window (line 263) | def window(self) -> QWidget: method click_button (line 273) | def click_button(self, text: str = None, name: str = None): method check_checkbox (line 280) | def check_checkbox(self, checked: bool = True, text: str = None, name:... method check_radiobutton (line 287) | def check_radiobutton(self, checked: bool = True, text: str = None, na... method execute_action (line 294) | def execute_action(self, name: str) -> None: method is_action_enabled (line 298) | def is_action_enabled(self, name: str) -> bool: method custom_settings (line 301) | def custom_settings(self) -> dict[str, str]: method start (line 304) | def start(self) -> None: method setup (line 307) | def setup(self) -> None: method teardown (line 310) | def teardown(self) -> None: method instant_pause (line 313) | async def instant_pause(self) -> None: method longer_pause (line 316) | async def longer_pause(self) -> None: method on_exception (line 323) | def on_exception(self, exc_type, exc_value, exc_trace): method take_screenshot (line 327) | def take_screenshot(self, name: str): method center_window (line 380) | def center_window(self): FILE: src/fk/e2e/backlog_e2e.py class BacklogE2eTest (line 19) | class BacklogE2eTest(AbstractE2eTest): method __init__ (line 20) | def __init__(self, app: Application): method custom_settings (line 23) | def custom_settings(self) -> dict[str, str]: method teardown (line 39) | def teardown(self) -> None: method _new_backlog (line 43) | async def _new_backlog(self, name: str) -> None: method _start_pomodoro (line 50) | async def _start_pomodoro(self) -> None: method _finish_tracking (line 54) | async def _finish_tracking(self) -> None: method _wait_pomodoro_complete (line 58) | async def _wait_pomodoro_complete(self) -> None: method _wait_mid_pomodoro (line 63) | async def _wait_mid_pomodoro(self) -> None: method _complete_workitem (line 66) | async def _complete_workitem(self) -> None: method _void_pomodoro (line 70) | async def _void_pomodoro(self) -> None: method _add_pomodoro (line 76) | async def _add_pomodoro(self) -> None: method _remove_pomodoro (line 80) | async def _remove_pomodoro(self) -> None: method _new_workitem (line 84) | async def _new_workitem(self, name: str, pomodoros: int = 0) -> None: method _find_workitem (line 93) | async def _find_workitem(self, name: str) -> None: method _select_backlog (line 106) | async def _select_backlog(self, name: str) -> int: method assert_actions_enabled (line 116) | def assert_actions_enabled(self, names: list[str]) -> None: method assert_actions_disabled (line 120) | def assert_actions_disabled(self, names: list[str]) -> None: method test_01_create_backlogs (line 124) | async def test_01_create_backlogs(self): method test_02_actions_visibility (line 224) | async def test_02_actions_visibility(self): method test_03_renames (line 400) | async def test_03_renames(self): FILE: src/fk/e2e/screenshot.py class Screenshot (line 31) | class Screenshot: method __init__ (line 35) | def __init__(self): method _check_method (line 57) | def _check_method(method: Callable[[str], None]) -> bool: method take_screen (line 74) | def take_screen(self, name: str) -> str: method take_window (line 82) | def take_window(self, name: str, window: QWidget) -> str: method _take_scrot (line 97) | def _take_scrot(filename: str) -> None: method _take_imagemagick1 (line 104) | def _take_imagemagick1(filename: str) -> None: method _take_imagemagick2 (line 111) | def _take_imagemagick2(filename: str) -> None: method _take_gnome_screenshot (line 119) | def _take_gnome_screenshot(filename: str) -> None: method _take_flameshot (line 125) | def _take_flameshot(filename: str) -> None: method _take_xwd (line 132) | def _take_xwd(filename: str) -> None: method _take_xfce4_screenshooter (line 142) | def _take_xfce4_screenshooter(filename: str) -> None: method _take_ksnip (line 149) | def _take_ksnip(filename: str) -> None: method _take_spectacle (line 156) | def _take_spectacle(filename: str) -> None: method _take_spectacle_active (line 165) | def _take_spectacle_active(filename: str) -> None: method _take_screencapture (line 174) | def _take_screencapture(filename: str) -> None: method _take_nircmd (line 179) | def _take_nircmd(filename: str) -> None: method _take_powershell (line 185) | def _take_powershell(filename: str, window_id: int | None = None) -> N... FILE: src/fk/e2e/screenshots_e2e.py class ScreenshotE2eTest (line 28) | class ScreenshotE2eTest(AbstractE2eTest): method __init__ (line 29) | def __init__(self, app: Application): method setup (line 32) | def setup(self) -> None: method custom_settings (line 40) | def custom_settings(self) -> dict[str, str]: method teardown (line 70) | def teardown(self) -> None: method _new_backlog (line 74) | async def _new_backlog(self, name: str) -> None: method _start_pomodoro (line 81) | async def _start_pomodoro(self) -> None: method _wait_pomodoro_complete (line 85) | async def _wait_pomodoro_complete(self) -> None: method _wait_mid_pomodoro (line 90) | async def _wait_mid_pomodoro(self) -> None: method _wait_long_pomodoro (line 93) | async def _wait_long_pomodoro(self) -> None: method _complete_workitem (line 96) | async def _complete_workitem(self, name: str) -> None: method _void_pomodoro (line 103) | async def _void_pomodoro(self, name: str) -> None: method _stop_tracking (line 111) | async def _stop_tracking(self) -> None: method _add_pomodoro (line 115) | async def _add_pomodoro(self) -> None: method _remove_pomodoro (line 119) | async def _remove_pomodoro(self) -> None: method _new_workitem (line 123) | async def _new_workitem(self, name: str, pomodoros: int = 0) -> None: method _find_workitem (line 132) | async def _find_workitem(self, name: str) -> None: method _select_backlog (line 145) | async def _select_backlog(self, name: str) -> int: method _select_tag (line 156) | async def _select_tag(self, name: str) -> bool: method test_01_screenshots (line 166) | async def test_01_screenshots(self): method _generate_pomodoros_for_stats (line 481) | def _generate_pomodoros_for_stats(self): method _emulate_year (line 491) | def _emulate_year(self, workitem: Workitem, start_date: datetime.datet... method _emulate_day (line 497) | def _emulate_day(self, workitem: Workitem, start_date: datetime.dateti... FILE: src/fk/qt/about_window.py class AboutWindow (line 29) | class AboutWindow(QObject): method __init__ (line 35) | def __init__(self, parent: QWidget | None): method show (line 47) | def show(self): method _handle_tick (line 92) | def _handle_tick(self, params: dict | None, when: datetime.datetime | ... FILE: src/fk/qt/abstract_drop_model.py class DropPlaceholderItem (line 35) | class DropPlaceholderItem(QStandardItem): method __init__ (line 36) | def __init__(self, original: AbstractDataItem, original_display: str, ... class AbstractDropModel (line 48) | class AbstractDropModel(QStandardItemModel): method __init__ (line 52) | def __init__(self, method supportedDropActions (line 60) | def supportedDropActions(self) -> Qt.DropAction: method supportedDragActions (line 63) | def supportedDragActions(self) -> Qt.DropAction: method move_drop_placeholder (line 66) | def move_drop_placeholder(self, index: QModelIndex | None): method restore_order (line 91) | def restore_order(self) -> int: method dropMimeData (line 100) | def dropMimeData(self, data: QMimeData, action: Qt.DropAction, row: in... method get_primary_type (line 124) | def get_primary_type(self) -> str: method get_secondary_type (line 127) | def get_secondary_type(self) -> str | None: method reorder (line 131) | def reorder(self, to_index: int, uid: str): method adopt_foreign_item (line 134) | def adopt_foreign_item(self, target: AbstractDataItem, uid: str) -> bool: method handle_rename (line 137) | def handle_rename(self, item: QStandardItem, strategy_class: type[Abst... method canDropMimeData (line 155) | def canDropMimeData(self, data: QMimeData, action: Qt.DropAction, row:... method mimeTypes (line 158) | def mimeTypes(self): method mimeData (line 162) | def mimeData(self, indexes): method item_for_object (line 173) | def item_for_object(self, obj: AbstractDataItem) -> list[QStandardItem]: FILE: src/fk/qt/abstract_item_delegate.py function get_padding (line 22) | def get_padding(option: QStyleOptionViewItem) -> int: class AbstractItemDelegate (line 26) | class AbstractItemDelegate(QItemDelegate): method __init__ (line 31) | def __init__(self, method paint_background (line 41) | def paint_background(self, painter: QPainter, option: QStyleOptionView... FILE: src/fk/qt/abstract_tableview.py class AbstractTableView (line 41) | class AbstractTableView(QTableView, AbstractEventEmitter, Generic[TUpstr... method __init__ (line 52) | def __init__(self, method _on_setting_changed (line 100) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _update_row_height (line 104) | def _update_row_height(self, new_height: int): method _on_source_changed (line 108) | def _on_source_changed(self, event: str, source: AbstractEventSource) ... method _on_data_loaded (line 114) | def _on_data_loaded(self, event: str, source: AbstractEventSource) -> ... method define_actions (line 120) | def define_actions(actions: Actions): method upstream_selected (line 123) | def upstream_selected(self, upstream: TUpstream | None) -> None: method get_current (line 132) | def get_current(self) -> TDownstream | None: method update_actions (line 138) | def update_actions(self, selected: TDownstream | None) -> None: method _on_current_changed (line 141) | def _on_current_changed(self, selected: QModelIndex | None, deselected... method paintEvent (line 158) | def paintEvent(self, e): method select (line 185) | def select(self, data: TDownstream) -> QModelIndex: method deselect (line 199) | def deselect(self) -> None: method dragLeaveEvent (line 210) | def dragLeaveEvent(self, event: QDragLeaveEvent): method dragEnterEvent (line 217) | def dragEnterEvent(self, event: QDragEnterEvent): method dragMoveEvent (line 225) | def dragMoveEvent(self, event: QDragMoveEvent): FILE: src/fk/qt/actions.py function update_toggle_action_icon (line 28) | def update_toggle_action_icon(icon1: str, icon2: str, action: QAction) -... class Actions (line 35) | class Actions: method __init__ (line 43) | def __init__(self, window: QWidget, settings: AbstractSettings): method update_from_settings (line 51) | def update_from_settings(self, serialized: str): method add (line 59) | def add(self, method _call (line 99) | def _call(self, name: str, member: Callable, checked: bool = None): method bind (line 109) | def bind(self, domain: str, obj: object): method __getitem__ (line 112) | def __getitem__(self, name: str) -> QAction: method __contains__ (line 115) | def __contains__(self, name: str) -> bool: method __iter__ (line 118) | def __iter__(self) -> Iterable[str]: method __len__ (line 121) | def __len__(self) -> int: method values (line 124) | def values(self) -> Iterable[QAction]: method keys (line 127) | def keys(self) -> Iterable[str]: method get_settings (line 130) | def get_settings(self): method all_actions_defined (line 133) | def all_actions_defined(self) -> None: method _on_theme_change (line 140) | def _on_theme_change(self, icon1: str, icon2: str, action: QAction): FILE: src/fk/qt/app_version.py function get_current_version (line 31) | def get_current_version() -> Version: function _success (line 44) | def _success(reply: QNetworkReply, callback: Callable[[Version, str], No... function _error (line 60) | def _error(err: QNetworkReply.NetworkError, callback: Callable[[Version,... function get_latest_version (line 65) | def get_latest_version(parent: QObject, callback: Callable[[Version], No... FILE: src/fk/qt/audio_player.py class AudioPlayer (line 34) | class AudioPlayer(QObject): method __init__ (line 40) | def __init__(self, method _on_source_changed (line 51) | def _on_source_changed(self, event: str, source: AbstractEventSource): method _on_setting_changed (line 59) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _reset (line 71) | def _reset(self): method _set_volume (line 93) | def _set_volume(self, setting: str): method _play_audio (line 109) | def _play_audio(self, event: str, pomodoro: Pomodoro, timer: TimerData... method _start_ticking (line 141) | def _start_ticking(self, event: str = None, **kwargs) -> None: method _seek_when_ready (line 156) | def _seek_when_ready(self, elapsed_ms: int = 0): method _start_rest_sound (line 173) | def _start_rest_sound(self, pomodoro: Pomodoro) -> None: method _start_what_is_needed (line 192) | def _start_what_is_needed(self) -> None: FILE: src/fk/qt/backlog_model.py class BacklogItem (line 43) | class BacklogItem(QStandardItem): method __init__ (line 46) | def __init__(self, backlog: Backlog): method update_display (line 61) | def update_display(self): method update_font (line 64) | def update_font(self): method __lt__ (line 68) | def __lt__(self, other: BacklogItem): class BacklogModel (line 72) | class BacklogModel(AbstractDropModel): method __init__ (line 75) | def __init__(self, method _on_source_changed (line 84) | def _on_source_changed(self, event: str, source: AbstractEventSource): method _backlog_added (line 91) | def _backlog_added(self, backlog: Backlog, **kwargs) -> None: method _backlog_removed (line 94) | def _backlog_removed(self, backlog: Backlog, **kwargs) -> None: method _backlog_renamed (line 101) | def _backlog_renamed(self, backlog: Backlog, **kwargs) -> None: method _schedule_at_midnight (line 108) | def _schedule_at_midnight(self): method _at_midnight (line 117) | def _at_midnight(self, params: dict | None, when: datetime.datetime | ... method _backlog_reordered (line 123) | def _backlog_reordered(self, backlog: Backlog, new_index: int, carry: ... method load (line 135) | def load(self, user: User | None) -> None: method get_primary_type (line 142) | def get_primary_type(self) -> str: method get_secondary_type (line 145) | def get_secondary_type(self) -> str: method item_for_object (line 148) | def item_for_object(self, backlog: Backlog) -> list[QStandardItem]: method reorder (line 151) | def reorder(self, to_index: int, uid: str): method adopt_foreign_item (line 157) | def adopt_foreign_item(self, backlog: Backlog, workitem_uid: str) -> b... FILE: src/fk/qt/backlog_tableview.py class BacklogTableView (line 43) | class BacklogTableView(AbstractTableView[User, Backlog]): method __init__ (line 47) | def __init__(self, method _lock_ui (line 69) | def _lock_ui(self, event, after: int, last_received: datetime.datetime... method _unlock_ui (line 72) | def _unlock_ui(self, event, ping: int) -> None: method _on_source_changed (line 75) | def _on_source_changed(self, event: str, source: AbstractEventSource) ... method _init_menu (line 95) | def _init_menu(self, actions: Actions) -> QMenu: method upstream_selected (line 109) | def upstream_selected(self, user: User) -> None: method _update_actions_if_needed (line 114) | def _update_actions_if_needed(self, workitem: Workitem): method update_actions (line 121) | def update_actions(self, selected: Backlog) -> None: method _on_new_backlog (line 146) | def _on_new_backlog(self, backlog: Backlog, carry: any = None, **kwargs): method _on_messages (line 153) | def _on_messages(self, event: str, source: AbstractEventSource) -> None: method define_actions (line 161) | def define_actions(actions: Actions): method create_backlog (line 190) | def create_backlog(self) -> str: method create_backlog_from_incomplete (line 197) | def create_backlog_from_incomplete(self) -> str: method rename_selected_backlog (line 225) | def rename_selected_backlog(self) -> None: method delete_selected_backlog (line 231) | def delete_selected_backlog(self) -> None: method dump_selected_backlog (line 243) | def dump_selected_backlog(self) -> None: FILE: src/fk/qt/backlog_widget.py class BacklogWidget (line 31) | class BacklogWidget(QWidget): method __init__ (line 37) | def __init__(self, method _on_setting_changed (line 73) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _on_selection (line 77) | def _on_selection(self, backlog_or_tag: Backlog | Tag): method get_table (line 84) | def get_table(self) -> BacklogTableView: method get_tags (line 87) | def get_tags(self) -> TagsWidget: FILE: src/fk/qt/configurable_toolbar.py class ConfigurableToolBar (line 25) | class ConfigurableToolBar(QToolBar): method __init__ (line 28) | def __init__(self, parent: QWidget, actions: Actions, name: str): method _on_setting_changed (line 38) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _hide (line 42) | def _hide(self, pos: QPoint): method mousePressEvent (line 52) | def mousePressEvent(self, event: QMouseEvent) -> None: method get_button_geometry (line 63) | def get_button_geometry(self, action_name: str) -> QRect | None: FILE: src/fk/qt/connection_widget.py class ConnectionWidget (line 29) | class ConnectionWidget(QToolButton): method __init__ (line 33) | def __init__(self, parent: QWidget, application: Application): method _update_connection_state (line 41) | def _update_connection_state(self, is_connected: bool) -> None: method _on_source_changed (line 52) | def _on_source_changed(self, event: str, source: AbstractEventSource): FILE: src/fk/qt/flow_layout.py class FlowLayout (line 9) | class FlowLayout(QLayout): method __init__ (line 10) | def __init__(self, parent=None): method __del__ (line 14) | def __del__(self): method addItem (line 19) | def addItem(self, item): method count (line 22) | def count(self): method itemAt (line 25) | def itemAt(self, index): method takeAt (line 30) | def takeAt(self, index): method removeWidget (line 35) | def removeWidget(self, widget: QWidget): method widgets (line 43) | def widgets(self): method expandingDirections (line 46) | def expandingDirections(self): method hasHeightForWidth (line 49) | def hasHeightForWidth(self): method heightForWidth (line 52) | def heightForWidth(self, width): method setGeometry (line 56) | def setGeometry(self, rect): method sizeHint (line 60) | def sizeHint(self): method minimumSize (line 63) | def minimumSize(self): method _do_layout (line 72) | def _do_layout(self, rect, test_only): FILE: src/fk/qt/focus_widget.py function complete_item (line 44) | def complete_item(item: Workitem, parent: QWidget, source: AbstractEvent... class FocusWidget (line 60) | class FocusWidget(QWidget, AbstractTimerDisplay): method __init__ (line 75) | def __init__(self, method set_flavor (line 136) | def set_flavor(self, flavor): method kill (line 216) | def kill(self): method _initialize_hint_label (line 221) | def _initialize_hint_label(self) -> QLabel: method update_fonts (line 227) | def update_fonts(self): method define_actions (line 231) | def define_actions(actions: Actions): method _create_button (line 238) | def _create_button(self, method reset (line 251) | def reset(self, text: str = 'Idle', subtext: str = "It's time for the ... method eye_candy (line 264) | def eye_candy(self): method paintEvent (line 274) | def paintEvent(self, event): method _update_colors (line 297) | def _update_colors(self): method _on_setting_changed (line 303) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _on_fonts_changed (line 313) | def _on_fonts_changed(self, event, header_font, **kwargs): method _void_pomodoro (line 316) | def _void_pomodoro(self) -> None: method _interruption (line 341) | def _interruption(self) -> None: method _finish_tracking (line 364) | def _finish_tracking(self) -> None: method _next_pomodoro (line 368) | def _next_pomodoro(self) -> None: method _complete_item (line 373) | def _complete_item(self) -> None: method tick (line 377) | def tick(self, pomodoro: Pomodoro, state_text: str, my_value: float, m... method mode_changed (line 381) | def mode_changed(self, old_mode: str, new_mode: str) -> None: method _apply_size_policy (line 430) | def _apply_size_policy(self): method _timer_clicked (line 437) | def _timer_clicked(self, pos: QPoint) -> None: method mousePressEvent (line 457) | def mousePressEvent(self, event: QMouseEvent) -> None: method mouseMoveEvent (line 460) | def mouseMoveEvent(self, event: QMouseEvent) -> None: method mouseReleaseEvent (line 464) | def mouseReleaseEvent(self, event: QMouseEvent) -> None: method mouseDoubleClickEvent (line 467) | def mouseDoubleClickEvent(self, event: QMouseEvent) -> None: FILE: src/fk/qt/heartbeat.py class Heartbeat (line 29) | class Heartbeat(AbstractEventEmitter): method __init__ (line 41) | def __init__(self, source_holder: EventSourceHolder, every_ms: int, th... method _reset (line 52) | def _reset(self) -> None: method _on_source_changed (line 61) | def _on_source_changed(self, event: str, source: AbstractEventSource): method start (line 67) | def start(self, event) -> None: method _send_ping (line 74) | def _send_ping(self, params: dict | None, when: datetime.datetime | No... method _on_pong (line 89) | def _on_pong(self, event, uid, carry) -> None: method stop (line 107) | def stop(self) -> None: method is_online (line 110) | def is_online(self) -> bool: method is_offline (line 113) | def is_offline(self) -> bool: method get_last_ping (line 117) | def get_last_ping(self) -> int: FILE: src/fk/qt/info_overlay.py class InfoOverlay (line 23) | class InfoOverlay(QFrame): method __init__ (line 28) | def __init__(self, method eventFilter (line 99) | def eventFilter(self, watched: QObject, event: QEvent) -> bool: method get_text (line 105) | def get_text(self): method mousePressEvent (line 108) | def mousePressEvent(self, event: QMouseEvent) -> None: method close (line 111) | def close(self): class InfoOverlayContent (line 123) | class InfoOverlayContent(QWidget): method __init__ (line 124) | def __init__(self, function show_info_overlay (line 193) | def show_info_overlay(parent, function show_tutorial (line 214) | def show_tutorial(parent, function show_tutorial_overlay (line 248) | def show_tutorial_overlay(parent, FILE: src/fk/qt/oauth.py class AuthenticationRecord (line 37) | class AuthenticationRecord: method __str__ (line 44) | def __str__(self): function _fix_parameters (line 52) | def _fix_parameters(stage, parameters): function authenticate (line 64) | def authenticate(parent: QObject, callback: Callable[[AuthenticationReco... function get_id_token (line 69) | def get_id_token(parent: QObject, callback: Callable[[AuthenticationReco... function open_url (line 74) | def open_url(url: QUrl | str) -> None: function _perform_flow (line 81) | def _perform_flow(parent: QObject, callback: Callable[[AuthenticationRec... function _extract_email (line 106) | def _extract_email(id_token: str) -> str: function _error (line 113) | def _error(err, flow: QOAuth2AuthorizationCodeFlow, callback: Callable[[... function _granted (line 117) | def _granted(flow: QOAuth2AuthorizationCodeFlow, callback: Callable[[Aut... FILE: src/fk/qt/pomodoro_delegate.py class PomodoroDelegate (line 36) | class PomodoroDelegate(AbstractItemDelegate): method _get_renderer (line 43) | def _get_renderer(self, name): method __init__ (line 48) | def __init__(self, method paint (line 66) | def paint(self, painter: QPainter, option: QStyleOptionViewItem, index... FILE: src/fk/qt/progress_widget.py class ProgressWidget (line 26) | class ProgressWidget(QWidget): method __init__ (line 29) | def __init__(self, method _on_source_changed (line 43) | def _on_source_changed(self, event: str, source: AbstractEventSource) ... method update_progress (line 51) | def update_progress(self, backlog_or_tag: Backlog | Tag | None) -> None: FILE: src/fk/qt/qt_filesystem_watcher.py class QtFilesystemWatcher (line 23) | class QtFilesystemWatcher(AbstractFilesystemWatcher): method __init__ (line 27) | def __init__(self): method watch (line 32) | def watch(self, filename: str, callback: Callable[[str], None]): method unwatch (line 38) | def unwatch(self, filename: str) -> None: method unwatch_all (line 43) | def unwatch_all(self) -> None: method _on_file_change (line 47) | def _on_file_change(self, filename: str) -> None: FILE: src/fk/qt/qt_invoker.py class InvokeEvent (line 19) | class InvokeEvent(QEvent): method __init__ (line 22) | def __init__(self, fn, **kwargs): class Invoker (line 28) | class Invoker(QObject): method event (line 29) | def event(self, e): function invoke_in_main_thread (line 37) | def invoke_in_main_thread(fn, **kwargs): FILE: src/fk/qt/qt_settings.py function _check_keyring (line 37) | def _check_keyring() -> bool: class QtSettings (line 41) | class QtSettings(AbstractSettings): method __init__ (line 47) | def __init__(self, app_name: str = 'flowkeeper-desktop'): method _display_warning_if_needed (line 77) | def _display_warning_if_needed(self) -> None: method _disable_connected_sources (line 97) | def _disable_connected_sources(self) -> None: method _disable_secrets (line 107) | def _disable_secrets(self) -> None: method set (line 117) | def set(self, values: dict[str, str], force_fire=False) -> None: method load_secret (line 153) | def load_secret(self) -> dict[str, str]: method get (line 157) | def get(self, name: str) -> str: method is_set (line 172) | def is_set(self, name: str) -> bool: method location (line 182) | def location(self) -> str: method clear (line 185) | def clear(self) -> None: method is_keyring_enabled (line 193) | def is_keyring_enabled(self) -> bool: method get_auto_theme (line 196) | def get_auto_theme(self) -> str: method init_audio_outputs (line 203) | def init_audio_outputs(self): method init_gradients (line 219) | def init_gradients(self): method init_fonts (line 238) | def init_fonts(self): method init_appearance (line 245) | def init_appearance(self): method init_network_access (line 258) | def init_network_access(self): FILE: src/fk/qt/qt_timer.py class QExtendedTimer (line 28) | class QExtendedTimer(QTimer): method __init__ (line 29) | def __init__(self, parent: QObject | None = None): method customEvent (line 32) | def customEvent(self, event: QEvent) -> None: method schedule_start (line 36) | def schedule_start(self, ms: float) -> None: class QtTimer (line 45) | class QtTimer(AbstractTimer): method __init__ (line 52) | def __init__(self, name: str, parent: QObject | None = None): method _call (line 59) | def _call(self) -> None: method schedule (line 66) | def schedule(self, method cancel (line 79) | def cancel(self): FILE: src/fk/qt/render/abstract_timer_renderer.py function rotate_point (line 28) | def rotate_point(x: float, y: float, cx: float, cy: float, phi: float) -... class AbstractTimerRenderer (line 35) | class AbstractTimerRenderer(QObject): method __init__ (line 47) | def __init__(self, method set_colors (line 63) | def set_colors(self, bg_color: QColor, fg_color: QColor): method reset (line 68) | def reset(self) -> None: method set_values (line 75) | def set_values(self, method paint (line 88) | def paint(self, painter: QPainter, rect: QRect) -> None: method has_idle_display (line 92) | def has_idle_display(self) -> bool: method has_next_display (line 96) | def has_next_display(self) -> bool: method eventFilter (line 99) | def eventFilter(self, widget: QtWidgets.QWidget, event: QtCore.QEvent)... method repaint (line 109) | def repaint(self, painter: QPainter = None, rect: QRect = None) -> None: method get_mode (line 115) | def get_mode(self): FILE: src/fk/qt/render/classic_timer_renderer.py class ClassicTimerRenderer (line 25) | class ClassicTimerRenderer(AbstractTimerRenderer): method __init__ (line 26) | def __init__(self, method clip (line 34) | def clip(self, painter: QtGui.QPainter, rect: QtCore.QRectF | None, en... method clear_pie_outline (line 44) | def clear_pie_outline(self, painter: QtGui.QPainter, rect: QtCore.QRec... method draw_sector (line 50) | def draw_sector(self, method draw_points (line 72) | def draw_points(self, method has_idle_display (line 86) | def has_idle_display(self) -> bool: method has_next_display (line 89) | def has_next_display(self) -> bool: method paint (line 92) | def paint(self, painter: QtGui.QPainter, rect: QtCore.QRectF) -> None: FILE: src/fk/qt/render/minimal_timer_renderer.py class MinimalTimerRenderer (line 25) | class MinimalTimerRenderer(AbstractTimerRenderer): method __init__ (line 26) | def __init__(self, method _dial_pen (line 34) | def _dial_pen(self, th: float) -> QPen: method _next_brush (line 61) | def _next_brush(self) -> QBrush: method _hand_pen (line 72) | def _hand_pen(self, th: float) -> QPen: method has_idle_display (line 77) | def has_idle_display(self) -> bool: method has_next_display (line 80) | def has_next_display(self) -> bool: method paint (line 83) | def paint(self, painter: QtGui.QPainter, rect: QtCore.QRect) -> None: FILE: src/fk/qt/resize_event_filter.py class ResizeEventFilter (line 24) | class ResizeEventFilter(QMainWindow): method __init__ (line 32) | def __init__(self, method resize_completed (line 50) | def resize_completed(self): method eventFilter (line 65) | def eventFilter(self, widget: QObject, event: QEvent) -> bool: method restore_size (line 77) | def restore_size(self) -> None: method save_splitter_size (line 84) | def save_splitter_size(self, new_width: int, index: int) -> None: FILE: src/fk/qt/search_completer.py class SearchBar (line 29) | class SearchBar(QtWidgets.QLineEdit): method __init__ (line 36) | def __init__(self, method _on_source_changed (line 55) | def _on_source_changed(self, event: str, source: AbstractEventSource) ... method _select (line 59) | def _select(self, index: QModelIndex): method show (line 70) | def show(self) -> None: method eventFilter (line 93) | def eventFilter(self, widget: QtCore.QObject, event: QtCore.QEvent) ->... method hide_completed (line 99) | def hide_completed(self, hide: bool) -> None: FILE: src/fk/qt/tags_widget.py class TagsWidget (line 31) | class TagsWidget(QFrame, AbstractEventEmitter): method __init__ (line 36) | def __init__(self, parent: QWidget, application: Application): method _add_tag (line 52) | def _add_tag(self, tag: Tag, event: str = None, carry: any = None) -> ... method deselect (line 62) | def deselect(self) -> None: method _on_tag_toggled (line 69) | def _on_tag_toggled(self, widget: QPushButton, is_checked: bool, tag: ... method _delete_tag (line 99) | def _delete_tag(self, tag: Tag, event: str, carry: any = None) -> None: method _find_tag (line 116) | def _find_tag(self, uid: str) -> Tag: method update_visibility (line 119) | def update_visibility(self, from_settings: bool = None) -> None: method _init_tags (line 130) | def _init_tags(self, source: AbstractEventSource, event: str = None) -... method _on_source_changed (line 138) | def _on_source_changed(self, event: str, source: AbstractEventSource): FILE: src/fk/qt/theme_change_event_filter.py class ThemeChangeEventFilter (line 27) | class ThemeChangeEventFilter(QMainWindow): method __init__ (line 35) | def __init__(self, method eventFilter (line 43) | def eventFilter(self, widget: QObject, event: QEvent) -> bool: FILE: src/fk/qt/threaded_event_source.py class ThreadedEventSource (line 36) | class ThreadedEventSource(AbstractEventSource[TRoot]): method __init__ (line 41) | def __init__(self, wrapped: AbstractEventSource[TRoot], app: 'Applicat... method start (line 47) | def start(self, mute_events=True) -> None: method get_data (line 62) | def get_data(self) -> TRoot: method get_name (line 65) | def get_name(self) -> str: method _append (line 68) | def _append(self, strategies: list[AbstractStrategy]) -> None: method clone (line 71) | def clone(self, new_root: TRoot) -> ThreadedEventSource[TRoot]: method on (line 74) | def on(self, event_pattern: str, callback: Callable, last: bool = Fals... method unsubscribe (line 77) | def unsubscribe(self, callback: Callable) -> None: method unsubscribe_one (line 80) | def unsubscribe_one(self, callback: Callable, event_pattern: str) -> N... method cancel (line 83) | def cancel(self, event_pattern: str) -> None: method unmute (line 86) | def unmute(self) -> None: method mute (line 89) | def mute(self) -> None: method get_config_parameter (line 92) | def get_config_parameter(self, name: str) -> str: method set_config_parameters (line 95) | def set_config_parameters(self, values: dict[str, str]) -> None: method execute (line 98) | def execute(self, method execute_prepared_strategy (line 108) | def execute_prepared_strategy(self, method users (line 114) | def users(self) -> Iterable[User]: method backlogs (line 117) | def backlogs(self) -> Iterable[Backlog]: method tags (line 120) | def tags(self) -> Iterable[Tag]: method workitems (line 123) | def workitems(self) -> Iterable[Workitem]: method pomodoros (line 126) | def pomodoros(self) -> Iterable[Pomodoro]: method find_workitem (line 129) | def find_workitem(self, uid: str) -> Workitem | None: method find_tag (line 132) | def find_tag(self, uid: str) -> Tag | None: method find_backlog (line 135) | def find_backlog(self, uid: str) -> Backlog | None: method find_user (line 138) | def find_user(self, identity: str) -> User | None: method disconnect (line 141) | def disconnect(self): method send_ping (line 144) | def send_ping(self) -> str | None: method can_connect (line 147) | def can_connect(self): method repair (line 150) | def repair(self) -> tuple[list[str], str | None]: method compress (line 153) | def compress(self): method get_last_sequence (line 156) | def get_last_sequence(self): method get_init_strategy (line 159) | def get_init_strategy(self, emit: Callable[[str, dict[str, any], any],... FILE: src/fk/qt/timer_widget.py class TimerWidget (line 28) | class TimerWidget(QWidget): method __init__ (line 36) | def __init__(self, method _init_renderer (line 72) | def _init_renderer(self, flavor): method _init_timer_display (line 87) | def _init_timer_display(self): method fg_color (line 92) | def fg_color(self): method bg_color (line 96) | def bg_color(self): method fg_color (line 100) | def fg_color(self, new_fg_color): method bg_color (line 106) | def bg_color(self, new_bg_color): method reset (line 111) | def reset(self): method set_values (line 115) | def set_values(self, method get_last_values (line 131) | def get_last_values(self) -> dict(): method mousePressEvent (line 134) | def mousePressEvent(self, event: QMouseEvent) -> None: FILE: src/fk/qt/tray_icon.py class TrayIcon (line 32) | class TrayIcon(QSystemTrayIcon, AbstractTimerDisplay): method __init__ (line 41) | def __init__(self, method _initialize_menu (line 73) | def _initialize_menu(self): method kill (line 90) | def kill(self): method reset (line 94) | def reset(self): method _tray_clicked (line 102) | def _tray_clicked(self) -> None: method paint (line 111) | def paint(self) -> None: method tick (line 120) | def tick(self, pomodoro: Pomodoro, state_text: str, my_value: float, m... method mode_changed (line 125) | def mode_changed(self, old_mode: str, new_mode: str) -> None: FILE: src/fk/qt/user_model.py class UserModel (line 28) | class UserModel(QtGui.QStandardItemModel): method __init__ (line 32) | def __init__(self, parent: QtCore.QObject, source_holder: EventSourceH... method _on_source_changed (line 39) | def _on_source_changed(self, event: str, source: AbstractEventSource): method _on_messages (line 45) | def _on_messages(self, event: str, source: AbstractEventSource) -> None: method _user_added (line 48) | def _user_added(self, event: str, user: User) -> None: method _user_removed (line 53) | def _user_removed(self, event: str, user: User) -> None: method _user_renamed (line 60) | def _user_renamed(self, event: str, user: User, old_name: str, new_nam... method set_row (line 67) | def set_row(self, i: int, user: User) -> None: method load (line 86) | def load(self, app: Tenant) -> None: FILE: src/fk/qt/user_tableview.py class UserTableView (line 29) | class UserTableView(AbstractTableView[Tenant, User]): method __init__ (line 30) | def __init__(self, method _on_source_changed (line 47) | def _on_source_changed(self, event: str, source: AbstractEventSource) ... method update_actions (line 53) | def update_actions(self, selected: User) -> None: method define_actions (line 57) | def define_actions(actions: Actions): method upstream_selected (line 60) | def upstream_selected(self, upstream: Tenant) -> None: method _on_messages (line 64) | def _on_messages(self, event: str, source: AbstractEventSource) -> None: FILE: src/fk/qt/websocket_event_source.py class WebsocketEventSource (line 45) | class WebsocketEventSource(AbstractEventSource[TRoot]): method __init__ (line 54) | def __init__(self, method _on_error (line 79) | def _on_error(self, s: str, e: enum) -> None: method _connection_lost (line 83) | def _connection_lost(self) -> None: method connect (line 94) | def connect(self) -> None: method start (line 108) | def start(self, mute_events=True) -> None: method _on_message (line 113) | def _on_message(self, message: str) -> None: method _authenticate_with_google_and_replay (line 159) | def _authenticate_with_google_and_replay(self) -> None: method _replay_after_auth (line 163) | def _replay_after_auth(self, auth: AuthenticationRecord) -> None: method replay (line 190) | def replay(self) -> None: method _append (line 208) | def _append(self, strategies: list[AbstractStrategy]) -> None: method get_name (line 215) | def get_name(self) -> str: method get_data (line 218) | def get_data(self) -> TRoot: method clone (line 221) | def clone(self, new_root: TRoot) -> WebsocketEventSource[TRoot]: method disconnect (line 227) | def disconnect(self): method send_ping (line 231) | def send_ping(self) -> str | None: method can_connect (line 245) | def can_connect(self): method repair (line 248) | def repair(self) -> tuple[list[str], str | None]: FILE: src/fk/qt/workitem_model.py class WorkitemPlanned (line 38) | class WorkitemPlanned(QStandardItem): method __init__ (line 41) | def __init__(self, workitem: Workitem, font: QtGui.QFont): method update_planned (line 52) | def update_planned(self): method update_font (line 56) | def update_font(self, font: QtGui.QFont): class WorkitemTitle (line 60) | class WorkitemTitle(QStandardItem): method __init__ (line 63) | def __init__(self, workitem: Workitem, font: QtGui.QFont): method update_display (line 72) | def update_display(self): method update_flags (line 76) | def update_flags(self): method update_font (line 84) | def update_font(self, font: QtGui.QFont): function hhmm (line 88) | def hhmm(when: datetime.datetime) -> str: class WorkitemPomodoro (line 92) | class WorkitemPomodoro(QStandardItem): method __init__ (line 96) | def __init__(self, workitem: Workitem, row_height: int): method _list_interruptions (line 107) | def _list_interruptions(self, pomodoro: Pomodoro, res: list[str]) -> N... method _format_tooltip (line 113) | def _format_tooltip(self) -> str: method update_display (line 150) | def update_display(self): class WorkitemModel (line 170) | class WorkitemModel(AbstractDropModel): method __init__ (line 178) | def __init__(self, parent: QtWidgets.QWidget, source_holder: EventSour... method _on_setting_changed (line 193) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _update_row_height (line 197) | def _update_row_height(self, new_height: int): method _on_source_changed (line 207) | def _on_source_changed(self, event: str, source: AbstractEventSource): method _workitem_belongs_here (line 221) | def _workitem_belongs_here(self, workitem: Workitem) -> bool: method _add_workitem (line 226) | def _add_workitem(self, workitem: Workitem) -> None: method _find_workitem (line 229) | def _find_workitem(self, workitem: Workitem) -> int: method _remove_if_found (line 236) | def _remove_if_found(self, workitem: Workitem) -> None: method _workitem_created (line 241) | def _workitem_created(self, workitem: Workitem, **kwargs) -> None: method _workitem_deleted (line 245) | def _workitem_deleted(self, workitem: Workitem, **kwargs) -> None: method _workitem_renamed (line 249) | def _workitem_renamed(self, workitem: Workitem, old_name: str, new_nam... method _workitem_reordered (line 260) | def _workitem_reordered(self, workitem: Workitem, new_index: int, carr... method _workitem_moved (line 271) | def _workitem_moved(self, workitem: Workitem, old_backlog: Backlog, ne... method _workitem_changed (line 279) | def _workitem_changed(self, workitem: Workitem, **kwargs) -> None: method get_row_height (line 300) | def get_row_height(self): method load (line 303) | def load(self, backlog_or_tag: Backlog | Tag) -> None: method hide_completed (line 321) | def hide_completed(self, hide: bool) -> None: method get_backlog_or_tag (line 325) | def get_backlog_or_tag(self) -> Backlog | Tag | None: method get_primary_type (line 328) | def get_primary_type(self) -> str: method _get_font (line 331) | def _get_font(self, workitem: Workitem) -> QtGui.QFont: method item_for_object (line 338) | def item_for_object(self, workitem: Workitem) -> list[QStandardItem]: method reorder (line 346) | def reorder(self, to_index: int, uid: str): method repaint_workitem (line 364) | def repaint_workitem(self, workitem: Workitem): FILE: src/fk/qt/workitem_state_delegate.py class WorkitemStateDelegate (line 25) | class WorkitemStateDelegate(AbstractItemDelegate): method __init__ (line 28) | def __init__(self, method paint (line 38) | def paint(self, painter: QPainter, option: QStyleOptionViewItem, index... FILE: src/fk/qt/workitem_tableview.py class WorkitemTableView (line 45) | class WorkitemTableView(AbstractTableView[Backlog | Tag, Workitem]): method __init__ (line 49) | def __init__(self, method _on_setting_changed (line 75) | def _on_setting_changed(self, event: str, old_values: dict[str, str], ... method _is_tags_enabled (line 80) | def _is_tags_enabled(self) -> bool: method _configure_delegate (line 83) | def _configure_delegate(self): method _update_actions_if_needed (line 119) | def _update_actions_if_needed(self, workitem: Workitem): method _on_source_changed (line 124) | def _on_source_changed(self, event: str, source: AbstractEventSource) ... method _init_menu (line 137) | def _init_menu(self, actions: Actions) -> QMenu: method define_actions (line 154) | def define_actions(actions: Actions): method upstream_selected (line 170) | def upstream_selected(self, backlog_or_tag: Backlog | Tag | None) -> N... method update_actions (line 176) | def update_actions(self, selected: Workitem | None) -> None: method create_workitem (line 194) | def create_workitem(self) -> None: method _on_new_workitem (line 215) | def _on_new_workitem(self, workitem: Workitem, **kwargs): method rename_selected_workitem (line 220) | def rename_selected_workitem(self) -> None: method delete_selected_workitem (line 226) | def delete_selected_workitem(self) -> None: method start_selected_workitem (line 238) | def start_selected_workitem(self) -> None: method complete_selected_workitem (line 244) | def complete_selected_workitem(self) -> None: method add_pomodoro (line 248) | def add_pomodoro(self) -> None: method remove_pomodoro (line 258) | def remove_pomodoro(self) -> None: method _toggle_hide_completed_workitems (line 267) | def _toggle_hide_completed_workitems(self, checked: bool) -> None: method _resize (line 272) | def _resize(self) -> None: method _on_tick (line 281) | def _on_tick(self, timer: TimerData, counter: int, event: str) -> None: FILE: src/fk/qt/workitem_text_delegate.py class WorkitemTextDelegate (line 29) | class WorkitemTextDelegate(AbstractItemDelegate): method __init__ (line 32) | def __init__(self, method _format_html (line 41) | def _format_html(self, workitem: Workitem, is_placeholder: bool) -> str: method paint (line 50) | def paint(self, painter: QPainter, option: QStyleOptionViewItem, index... method sizeHint (line 66) | def sizeHint(self, option, index) -> QSize: FILE: src/fk/qt/workitem_widget.py class WorkitemWidget (line 34) | class WorkitemWidget(QWidget): method __init__ (line 38) | def __init__(self, method get_table (line 74) | def get_table(self) -> WorkitemTableView: method upstream_selected (line 77) | def upstream_selected(self, backlog_or_tag: Backlog | Tag | None) -> N... method on_setting_changed (line 80) | def on_setting_changed(self, event: str, old_values: dict[str, str], n... FILE: src/fk/tests/abstract_test_case.py class AbstractTestCase (line 23) | class AbstractTestCase(TestCase, abc.ABC): method assert_events (line 24) | def assert_events(self, FILE: src/fk/tests/data_generator.py function lorem_ipsum (line 45) | def lorem_ipsum() -> str: function lorem_ipsum_backlog (line 49) | def lorem_ipsum_backlog() -> str: function emulate (line 53) | def emulate(days: int, user: str) -> Iterable[AbstractStrategy]: FILE: src/fk/tests/test_backlogs.py function _create_sample_backlog (line 38) | def _create_sample_backlog(existing: Tenant | None = None) -> Tenant: class TestBacklogs (line 50) | class TestBacklogs(TestCase): method setUp (line 56) | def setUp(self) -> None: method tearDown (line 64) | def tearDown(self) -> None: method test_initialize (line 67) | def test_initialize(self): method _assert_backlog (line 72) | def _assert_backlog(self, backlog1: Backlog, user: User): method test_create_backlogs (line 81) | def test_create_backlogs(self): method test_execute_prepared (line 92) | def test_execute_prepared(self): method test_create_duplicate_backlog_failure (line 104) | def test_create_duplicate_backlog_failure(self): method test_rename_nonexistent_backlog_failure (line 109) | def test_rename_nonexistent_backlog_failure(self): method test_rename_backlog (line 115) | def test_rename_backlog(self): method test_delete_nonexistent_backlog_failure (line 121) | def test_delete_nonexistent_backlog_failure(self): method test_delete_backlog (line 127) | def test_delete_backlog(self): method test_today (line 135) | def test_today(self): method test_events_create_backlog (line 146) | def test_events_create_backlog(self): method test_events_delete_backlog (line 176) | def test_events_delete_backlog(self): method test_events_rename_backlog (line 213) | def test_events_rename_backlog(self): method test_create_backlog_strategy_basic (line 233) | def test_create_backlog_strategy_basic(self): method test_create_backlog_strategy_already_exists (line 249) | def test_create_backlog_strategy_already_exists(self): method test_create_backlog_strategy_same_name (line 254) | def test_create_backlog_strategy_same_name(self): method test_create_backlog_independent_users_same_uid (line 268) | def test_create_backlog_independent_users_same_uid(self): FILE: src/fk/tests/test_events.py class TestEmitter (line 27) | class TestEmitter(AbstractEventEmitter): method __init__ (line 30) | def __init__(self, method action (line 38) | def action(self, value: str, carry: str = None): method wrong_emit (line 43) | def wrong_emit(self): class TestEvents (line 47) | class TestEvents(AbstractTestCase): method setUp (line 48) | def setUp(self): method test_events_basic (line 51) | def test_events_basic(self): method test_callback_invoker (line 62) | def test_callback_invoker(self): method test_cancel_one (line 79) | def test_cancel_one(self): method test_unsubscribe (line 91) | def test_unsubscribe(self): method test_unsubscribe_one (line 100) | def test_unsubscribe_one(self): method test_firing_order (line 113) | def test_firing_order(self): FILE: src/fk/tests/test_file_event_source.py class FilteringSerializer (line 37) | class FilteringSerializer(AbstractSerializer): method __init__ (line 41) | def __init__(self, another: AbstractSerializer, strategy_filter: Calla... method serialize (line 46) | def serialize(self, s: AbstractStrategy) -> T: method deserialize (line 49) | def deserialize(self, t: str) -> AbstractStrategy | None: function _create_filtered_source (line 55) | def _create_filtered_source(strategy_filter: Callable[[AbstractStrategy]... function _test_repair (line 69) | def _test_repair(strategy_filter: Callable[[AbstractStrategy], bool], class TestFileEventSource (line 87) | class TestFileEventSource(TestCase): method setUp (line 93) | def setUp(self) -> None: method tearDown (line 101) | def tearDown(self) -> None: method test_initialize (line 104) | def test_initialize(self): method test_repair_strip_create_backlog (line 109) | def test_repair_strip_create_backlog(self): method test_repair_strip_create_workitem (line 123) | def test_repair_strip_create_workitem(self): method test_repair_no_op (line 146) | def test_repair_no_op(self): FILE: src/fk/tests/test_import_export.py function _skip_first (line 52) | def _skip_first(dump: str, skip_rows: int) -> str: class TestImportExport (line 56) | class TestImportExport(TestCase): method _init_source_temp (line 67) | def _init_source_temp(self): method setUp (line 72) | def setUp(self) -> None: method tearDown (line 87) | def tearDown(self) -> None: method _register_source_producers (line 91) | def _register_source_producers(self): method test_initialize (line 99) | def test_initialize(self): method _execute_import (line 112) | def _execute_import(self, ignore_errors: bool, merge: bool, repair: bo... method _execute_export (line 141) | def _execute_export(self, compress: bool, filename: str) -> (int, int): method test_import_classic_ok (line 168) | def test_import_classic_ok(self): method test_import_classic_twice_error (line 178) | def test_import_classic_twice_error(self): method test_import_classic_twice_ignore_errors (line 182) | def test_import_classic_twice_ignore_errors(self): method _compare_imported_and_original_dumps (line 205) | def _compare_imported_and_original_dumps(self): method test_import_smart_ok (line 211) | def test_import_smart_ok(self): method test_import_smart_twice_ok (line 216) | def test_import_smart_twice_ok(self): method test_import_classic_in_halves_correct_order (line 221) | def test_import_classic_in_halves_correct_order(self): method test_export_simple_ok (line 248) | def test_export_simple_ok(self): method test_export_compressed_ok (line 260) | def test_export_compressed_ok(self): method test_import_github_ok (line 272) | def test_import_github_ok(self): method test_import_simple_ok (line 331) | def test_import_simple_ok(self): method test_backlog_to_json (line 359) | def test_backlog_to_json(self): FILE: src/fk/tests/test_pomodoros.py class TestPomodoros (line 39) | class TestPomodoros(TestCase): method setUp (line 45) | def setUp(self) -> None: method tearDown (line 53) | def tearDown(self) -> None: method _assert_workitem (line 56) | def _assert_workitem(self, workitem1: Workitem, user: User, backlog: B... method _standard_backlog (line 68) | def _standard_backlog(self) -> (User, Backlog): method _standard_workitem (line 74) | def _standard_workitem(self) -> (User, Backlog, Workitem): method _standard_pomodoro (line 80) | def _standard_pomodoro(self, n: int, type: str = POMODORO_TYPE_NORMAL)... method test_add_pomodoro (line 116) | def test_add_pomodoro(self): method test_add_pomodoro_errors (line 148) | def test_add_pomodoro_errors(self): method test_remove_pomodoro_errors (line 168) | def test_remove_pomodoro_errors(self): method test_add_remove_stack (line 200) | def test_add_remove_stack(self): method _assert_pomodoro_and_timer (line 223) | def _assert_pomodoro_and_timer(self, method test_planned_unplanned_pomodoro (line 320) | def test_planned_unplanned_pomodoro(self): method test_start_work_normal_ok (line 329) | def test_start_work_normal_ok(self): method test_start_work_tracker_ok (line 338) | def test_start_work_tracker_ok(self): method test_start_work_tracker_raises (line 347) | def test_start_work_tracker_raises(self): method test_auto_seal_shortly_from_work (line 358) | def test_auto_seal_shortly_from_work(self): method test_auto_seal_shortly_from_rest (line 367) | def test_auto_seal_shortly_from_rest(self): method test_auto_seal_long_after_from_work (line 377) | def test_auto_seal_long_after_from_work(self): method test_auto_seal_too_early (line 386) | def test_auto_seal_too_early(self): method test_auto_seal_twice (line 394) | def test_auto_seal_twice(self): method test_auto_seal_unneeded (line 405) | def test_auto_seal_unneeded(self): method test_auto_seal_strategies (line 413) | def test_auto_seal_strategies(self): method test_auto_seal_tracker (line 417) | def test_auto_seal_tracker(self): method test_auto_seal_long_break (line 426) | def test_auto_seal_long_break(self): FILE: src/fk/tests/test_settings.py class TestSettings (line 28) | class TestSettings(TestCase): method setUp (line 34) | def setUp(self) -> None: method tearDown (line 42) | def tearDown(self) -> None: method test_defaults (line 45) | def test_defaults(self): method test_invalid_setting (line 51) | def test_invalid_setting(self): method test_categories (line 55) | def test_categories(self): method test_get_set (line 71) | def test_get_set(self): method test_clear (line 77) | def test_clear(self): method test_reset (line 85) | def test_reset(self): method test_location (line 92) | def test_location(self): method test_shortcuts (line 95) | def test_shortcuts(self): method test_visibility (line 115) | def test_visibility(self): FILE: src/fk/tests/test_tags.py class TestTags (line 37) | class TestTags(TestCase): method setUp (line 43) | def setUp(self) -> None: method _standard_backlog (line 52) | def _standard_backlog(self) -> (User, Backlog): method _add_workitem (line 58) | def _add_workitem(self, name: str, uid: str = 'w11') -> Workitem: method _delete_workitem (line 63) | def _delete_workitem(self, uid: str) -> None: method _rename_workitem (line 66) | def _rename_workitem(self, uid: str, new_name: str) -> None: method tearDown (line 69) | def tearDown(self) -> None: method test_create_workitem_without_tags (line 73) | def test_create_workitem_without_tags(self): method test_create_workitem_with_tags (line 84) | def test_create_workitem_with_tags(self): method test_delete_workitem (line 123) | def test_delete_workitem(self): method test_rename_workitem (line 144) | def test_rename_workitem(self): method test_event_source (line 186) | def test_event_source(self): method test_workitem_accessors (line 210) | def test_workitem_accessors(self): method test_find_tags (line 231) | def test_find_tags(self): method test_different_users (line 246) | def test_different_users(self): method test_file_event_source (line 313) | def test_file_event_source(self): method test_tags_class (line 342) | def test_tags_class(self): method test_tag_deleted_event (line 355) | def test_tag_deleted_event(self): method test_tag_content_changed_event (line 386) | def test_tag_content_changed_event(self): FILE: src/fk/tests/test_users.py class TestUsers (line 33) | class TestUsers(TestCase): method setUp (line 39) | def setUp(self) -> None: method tearDown (line 47) | def tearDown(self) -> None: method _assert_user (line 50) | def _assert_user(self, user: User): method _create_standard_user (line 58) | def _create_standard_user(self): method test_create_user (line 62) | def test_create_user(self): method test_create_user_unauthorized_failure (line 67) | def test_create_user_unauthorized_failure(self): method test_create_duplicate_user_failure (line 71) | def test_create_duplicate_user_failure(self): method test_rename_nonexistent_user_failure (line 75) | def test_rename_nonexistent_user_failure(self): method test_rename_user (line 81) | def test_rename_user(self): method test_delete_nonexistent_user_failure (line 87) | def test_delete_nonexistent_user_failure(self): method test_delete_user (line 93) | def test_delete_user(self): method test_events_create_user (line 99) | def test_events_create_user(self): method test_events_delete_user (line 121) | def test_events_delete_user(self): method test_events_rename_user (line 148) | def test_events_rename_user(self): FILE: src/fk/tests/test_utils.py function check_timestamp (line 35) | def check_timestamp(t: datetime.datetime, n: int) -> bool: function predefined_datetime (line 39) | def predefined_datetime(n: int) -> datetime.datetime: function predefined_uid (line 43) | def predefined_uid(n: int) -> str: function noop_emit (line 47) | def noop_emit(event: str, params: dict[str, any], carry: any) -> None: function test_user (line 51) | def test_user(n: int) -> User: function test_users (line 60) | def test_users() -> dict[str, User]: function test_settings (line 68) | def test_settings(n: int) -> AbstractSettings: function test_data (line 72) | def test_data() -> Tenant: function epyc (line 80) | def epyc() -> datetime.datetime: function one_of (line 87) | def one_of(seq: list[_T]) -> _T: function randint (line 91) | def randint(a: int, b: int) -> int: function random (line 95) | def random() -> float: function rand_normal (line 104) | def rand_normal(a: int, b: int) -> int: function shuffle (line 108) | def shuffle(seq: list[_T]) -> list[_T]: FILE: src/fk/tests/test_workitems.py class TestWorkitems (line 37) | class TestWorkitems(TestCase): method setUp (line 43) | def setUp(self) -> None: method tearDown (line 51) | def tearDown(self) -> None: method _assert_workitem (line 54) | def _assert_workitem(self, workitem1: Workitem, user: User, backlog: B... method _standard_backlog (line 66) | def _standard_backlog(self) -> (User, Backlog): method test_create_workitems (line 72) | def test_create_workitems(self): method test_create_workitems_with_tags (line 83) | def test_create_workitems_with_tags(self): method test_execute_prepared (line 122) | def test_execute_prepared(self): method test_create_duplicate_workitem_failure (line 134) | def test_create_duplicate_workitem_failure(self): method test_rename_nonexistent_workitem_failure (line 140) | def test_rename_nonexistent_workitem_failure(self): method test_rename_workitem (line 147) | def test_rename_workitem(self): method test_delete_nonexistent_workitem_failure (line 153) | def test_delete_nonexistent_workitem_failure(self): method test_delete_workitem (line 160) | def test_delete_workitem(self): method test_complete_workitem_basic (line 169) | def test_complete_workitem_basic(self): method test_complete_workitem_with_two_pomodoros (line 185) | def test_complete_workitem_with_two_pomodoros(self): method test_complete_workitem_invalid_state (line 192) | def test_complete_workitem_invalid_state(self): method test_complete_workitem_twice (line 198) | def test_complete_workitem_twice(self): method test_rename_completed_workitem (line 205) | def test_rename_completed_workitem(self): method test_add_pomodoro_to_completed_workitem (line 212) | def test_add_pomodoro_to_completed_workitem(self): method test_delete_completed_workitem (line 219) | def test_delete_completed_workitem(self): method test_start_completed_workitem (line 226) | def test_start_completed_workitem(self): method test_events_create_workitem (line 242) | def test_events_create_workitem(self): method test_events_delete_workitem (line 266) | def test_events_delete_workitem(self): method test_events_complete_workitem (line 301) | def test_events_complete_workitem(self): method test_events_rename_workitem (line 337) | def test_events_rename_workitem(self): method _create_workitems_for_reorder_tests (line 365) | def _create_workitems_for_reorder_tests(self): method _assert_workitem_order (line 373) | def _assert_workitem_order(self, backlog: Backlog, order: str): method test_reorder_workitem_up_normal (line 376) | def test_reorder_workitem_up_normal(self): method test_move_workitems_ok (line 380) | def test_move_workitems_ok(self): FILE: src/fk/tools/cli.py function strategy (line 35) | def strategy(cls: Type[AbstractStrategy], function dump (line 43) | def dump(obj: object) -> None: function list_backlogs (line 46) | def list_backlogs(source: AbstractEventSource[Tenant], uid: str | None, ... function execute (line 61) | def execute(callback: Callable[[AbstractEventSource[Tenant]], None]) -> ... function default (line 69) | def default(args) -> None: function backlog (line 72) | def backlog(args) -> None: FILE: src/fk/tools/minimal_common.py class MinimalCommon (line 32) | class MinimalCommon: method main_loop (line 41) | def main_loop(self): method _on_messages (line 55) | def _on_messages(self, event: str, source: AbstractEventSource) -> None: method _on_source_changed (line 59) | def _on_source_changed(self, event: str, source: AbstractEventSource): method __init__ (line 65) | def __init__(self, callback: Callable = None, initialize_source: bool ... method get_actions (line 78) | def get_actions(self): method get_app (line 81) | def get_app(self): method get_settings (line 84) | def get_settings(self): method get_window (line 87) | def get_window(self): method get_source (line 90) | def get_source(self): FILE: src/fk/tools/minimal_tray.py function tick (line 43) | def tick(): FILE: src/fk/tools/minimal_tutorial.py function get_tutorial_step (line 23) | def get_tutorial_step(step: int, widget: QWidget) -> (str, QPoint, str): FILE: src/fk/tools/minimal_update.py function update (line 27) | def update(latest: Version, changelog: str): FILE: src/fk/tools/minimal_users.py function on_data (line 21) | def on_data(root: Tenant): FILE: src/fk/tools/minimal_workitems.py function select_first_backlog (line 21) | def select_first_backlog(data: Tenant):