pub struct AppState {Show 287 fields
pub app_mode: AppMode,
pub input: String,
pub results: Vec<PackageItem>,
pub all_results: Vec<PackageItem>,
pub results_backup_for_toggle: Option<Vec<PackageItem>>,
pub selected: usize,
pub details: PackageDetails,
pub list_state: ListState,
pub modal: Modal,
pub previous_modal: Option<Modal>,
pub dry_run: bool,
pub recent: LruCache<String, String>,
pub history_state: ListState,
pub focus: Focus,
pub last_input_change: Instant,
pub last_saved_value: Option<String>,
pub recent_path: PathBuf,
pub recent_dirty: bool,
pub latest_query_id: u64,
pub next_query_id: u64,
pub search_cache_query: Option<String>,
pub search_cache_fuzzy: bool,
pub search_cache_results: Option<Vec<PackageItem>>,
pub details_cache: HashMap<String, PackageDetails>,
pub cache_path: PathBuf,
pub cache_dirty: bool,
pub news_read_urls: HashSet<String>,
pub news_read_path: PathBuf,
pub news_read_dirty: bool,
pub news_read_ids: HashSet<String>,
pub news_read_ids_path: PathBuf,
pub news_read_ids_dirty: bool,
pub news_items: Vec<NewsFeedItem>,
pub news_results: Vec<NewsFeedItem>,
pub news_loading: bool,
pub news_ready: bool,
pub news_selected: usize,
pub news_list_state: ListState,
pub news_search_input: String,
pub news_search_caret: usize,
pub news_search_select_anchor: Option<usize>,
pub news_recent: LruCache<String, String>,
pub news_recent_path: PathBuf,
pub news_recent_dirty: bool,
pub news_history_pending: Option<String>,
pub news_history_pending_at: Option<Instant>,
pub news_history_last_saved: Option<String>,
pub news_filter_show_arch_news: bool,
pub news_filter_show_advisories: bool,
pub news_filter_show_pkg_updates: bool,
pub news_filter_show_aur_updates: bool,
pub news_filter_show_aur_comments: bool,
pub news_filter_installed_only: bool,
pub news_filter_read_status: NewsReadFilter,
pub news_filter_arch_rect: Option<(u16, u16, u16, u16)>,
pub news_filter_advisory_rect: Option<(u16, u16, u16, u16)>,
pub news_filter_installed_rect: Option<(u16, u16, u16, u16)>,
pub news_filter_updates_rect: Option<(u16, u16, u16, u16)>,
pub news_filter_aur_updates_rect: Option<(u16, u16, u16, u16)>,
pub news_filter_aur_comments_rect: Option<(u16, u16, u16, u16)>,
pub news_filter_read_rect: Option<(u16, u16, u16, u16)>,
pub news_max_age_days: Option<u32>,
pub show_news_history_pane: bool,
pub show_news_bookmarks_pane: bool,
pub news_sort_mode: NewsSortMode,
pub news_bookmarks: Vec<NewsBookmark>,
pub news_bookmarks_path: PathBuf,
pub news_bookmarks_dirty: bool,
pub news_content_cache: HashMap<String, String>,
pub news_content_cache_path: PathBuf,
pub news_content_cache_dirty: bool,
pub news_content: Option<String>,
pub news_content_loading: bool,
pub news_content_loading_since: Option<Instant>,
pub news_content_debounce_timer: Option<Instant>,
pub news_content_scroll: u16,
pub news_feed_path: PathBuf,
pub news_seen_pkg_versions: HashMap<String, String>,
pub news_seen_pkg_versions_path: PathBuf,
pub news_seen_pkg_versions_dirty: bool,
pub news_seen_aur_comments: HashMap<String, String>,
pub news_seen_aur_comments_path: PathBuf,
pub news_seen_aur_comments_dirty: bool,
pub announcements_read_ids: HashSet<String>,
pub announcement_read_path: PathBuf,
pub announcement_dirty: bool,
pub last_startup_timestamp: Option<String>,
pub last_startup_path: PathBuf,
pub install_list: Vec<PackageItem>,
pub install_state: ListState,
pub remove_list: Vec<PackageItem>,
pub remove_state: ListState,
pub downgrade_list: Vec<PackageItem>,
pub downgrade_state: ListState,
pub install_path: PathBuf,
pub install_dirty: bool,
pub last_install_change: Option<Instant>,
pub install_list_names: HashSet<String>,
pub remove_list_names: HashSet<String>,
pub downgrade_list_names: HashSet<String>,
pub show_recent_pane: bool,
pub show_install_pane: bool,
pub show_keybinds_footer: bool,
pub pane_find: Option<String>,
pub search_normal_mode: bool,
pub fuzzy_search_enabled: bool,
pub search_caret: usize,
pub search_select_anchor: Option<usize>,
pub official_index_path: PathBuf,
pub loading_index: bool,
pub details_focus: Option<String>,
pub scroll_moves: u32,
pub ring_resume_at: Option<Instant>,
pub need_ring_prefetch: bool,
pub url_button_rect: Option<(u16, u16, u16, u16)>,
pub vt_url_rect: Option<(u16, u16, u16, u16)>,
pub install_import_rect: Option<(u16, u16, u16, u16)>,
pub install_export_rect: Option<(u16, u16, u16, u16)>,
pub arch_status_text: String,
pub arch_status_rect: Option<(u16, u16, u16, u16)>,
pub arch_status_color: ArchStatusColor,
pub updates_count: Option<usize>,
pub updates_list: Vec<String>,
pub updates_button_rect: Option<(u16, u16, u16, u16)>,
pub news_button_rect: Option<(u16, u16, u16, u16)>,
pub updates_loading: bool,
pub refresh_updates: bool,
pub pending_updates_modal: bool,
pub faillock_locked: bool,
pub faillock_lockout_until: Option<SystemTime>,
pub faillock_remaining_minutes: Option<u32>,
pub pkgb_button_rect: Option<(u16, u16, u16, u16)>,
pub pkgb_check_button_rect: Option<(u16, u16, u16, u16)>,
pub pkgb_reload_button_rect: Option<(u16, u16, u16, u16)>,
pub pkgb_visible: bool,
pub pkgb_text: Option<String>,
pub pkgb_package_name: Option<String>,
pub pkgb_reload_requested_at: Option<Instant>,
pub pkgb_reload_requested_for: Option<String>,
pub pkgb_scroll: u16,
pub pkgb_rect: Option<(u16, u16, u16, u16)>,
pub comments_button_rect: Option<(u16, u16, u16, u16)>,
pub comments_visible: bool,
pub comments: Vec<AurComment>,
pub comments_package_name: Option<String>,
pub comments_fetched_at: Option<Instant>,
pub comments_scroll: u16,
pub comments_rect: Option<(u16, u16, u16, u16)>,
pub comments_loading: bool,
pub comments_error: Option<String>,
pub comments_urls: Vec<(u16, u16, u16, String)>,
pub comments_authors: Vec<(u16, u16, u16, String)>,
pub comments_dates: Vec<(u16, u16, u16, String)>,
pub toast_message: Option<String>,
pub toast_expires_at: Option<Instant>,
pub layout_left_pct: u16,
pub layout_center_pct: u16,
pub layout_right_pct: u16,
pub keymap: KeyMap,
pub locale: String,
pub translations: TranslationMap,
pub translations_fallback: TranslationMap,
pub results_rect: Option<(u16, u16, u16, u16)>,
pub details_rect: Option<(u16, u16, u16, u16)>,
pub details_scroll: u16,
pub recent_rect: Option<(u16, u16, u16, u16)>,
pub install_rect: Option<(u16, u16, u16, u16)>,
pub downgrade_rect: Option<(u16, u16, u16, u16)>,
pub mouse_disabled_in_details: bool,
pub last_mouse_pos: Option<(u16, u16)>,
pub mouse_capture_enabled: bool,
pub news_rect: Option<(u16, u16, u16, u16)>,
pub news_list_rect: Option<(u16, u16, u16, u16)>,
pub announcement_rect: Option<(u16, u16, u16, u16)>,
pub announcement_urls: Vec<(u16, u16, u16, String)>,
pub pending_announcements: Vec<RemoteAnnouncement>,
pub pending_news: Option<Vec<NewsItem>>,
pub trigger_startup_news_fetch: bool,
pub updates_modal_rect: Option<(u16, u16, u16, u16)>,
pub updates_modal_content_rect: Option<(u16, u16, u16, u16)>,
pub help_scroll: u16,
pub help_rect: Option<(u16, u16, u16, u16)>,
pub preflight_tab_rects: [Option<(u16, u16, u16, u16)>; 5],
pub preflight_content_rect: Option<(u16, u16, u16, u16)>,
pub sort_mode: SortMode,
pub installed_packages_mode: InstalledPackagesMode,
pub sort_menu_open: bool,
pub sort_button_rect: Option<(u16, u16, u16, u16)>,
pub news_age_button_rect: Option<(u16, u16, u16, u16)>,
pub sort_menu_rect: Option<(u16, u16, u16, u16)>,
pub sort_menu_auto_close_at: Option<Instant>,
pub sort_cache_repo_name: Option<Vec<usize>>,
pub sort_cache_aur_popularity: Option<Vec<usize>>,
pub sort_cache_signature: Option<u64>,
pub options_menu_open: bool,
pub options_button_rect: Option<(u16, u16, u16, u16)>,
pub options_menu_rect: Option<(u16, u16, u16, u16)>,
pub panels_menu_open: bool,
pub panels_button_rect: Option<(u16, u16, u16, u16)>,
pub panels_menu_rect: Option<(u16, u16, u16, u16)>,
pub config_menu_open: bool,
pub config_button_rect: Option<(u16, u16, u16, u16)>,
pub config_menu_rect: Option<(u16, u16, u16, u16)>,
pub artix_filter_menu_open: bool,
pub artix_filter_menu_rect: Option<(u16, u16, u16, u16)>,
pub collapsed_menu_open: bool,
pub collapsed_menu_button_rect: Option<(u16, u16, u16, u16)>,
pub collapsed_menu_rect: Option<(u16, u16, u16, u16)>,
pub installed_only_mode: bool,
pub right_pane_focus: RightPaneFocus,
pub package_marker: PackageMarker,
pub results_filter_show_aur: bool,
pub results_filter_show_core: bool,
pub results_filter_show_extra: bool,
pub results_filter_show_multilib: bool,
pub results_filter_show_eos: bool,
pub results_filter_show_cachyos: bool,
pub results_filter_show_artix: bool,
pub results_filter_show_artix_omniverse: bool,
pub results_filter_show_artix_universe: bool,
pub results_filter_show_artix_lib32: bool,
pub results_filter_show_artix_galaxy: bool,
pub results_filter_show_artix_world: bool,
pub results_filter_show_artix_system: bool,
pub results_filter_show_manjaro: bool,
pub results_filter_aur_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_core_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_extra_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_multilib_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_eos_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_cachyos_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_artix_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_artix_omniverse_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_artix_universe_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_artix_lib32_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_artix_galaxy_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_artix_world_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_artix_system_rect: Option<(u16, u16, u16, u16)>,
pub results_filter_manjaro_rect: Option<(u16, u16, u16, u16)>,
pub fuzzy_indicator_rect: Option<(u16, u16, u16, u16)>,
pub refresh_installed_until: Option<Instant>,
pub next_installed_refresh_at: Option<Instant>,
pub pending_install_names: Option<Vec<String>>,
pub pending_remove_names: Option<Vec<String>>,
pub install_list_deps: Vec<DependencyInfo>,
pub remove_preflight_summary: Vec<ReverseRootSummary>,
pub remove_cascade_mode: CascadeMode,
pub deps_resolving: bool,
pub deps_cache_path: PathBuf,
pub deps_cache_dirty: bool,
pub install_list_files: Vec<PackageFileInfo>,
pub files_resolving: bool,
pub files_cache_path: PathBuf,
pub files_cache_dirty: bool,
pub install_list_services: Vec<ServiceImpact>,
pub services_resolving: bool,
pub services_cache_path: PathBuf,
pub services_cache_dirty: bool,
pub service_resolve_now: bool,
pub active_service_request: Option<u64>,
pub next_service_request_id: u64,
pub services_pending_signature: Option<(PreflightAction, Vec<String>)>,
pub pending_service_plan: Vec<ServiceImpact>,
pub install_list_sandbox: Vec<SandboxInfo>,
pub sandbox_resolving: bool,
pub sandbox_cache_path: PathBuf,
pub sandbox_cache_dirty: bool,
pub preflight_summary_items: Option<(Vec<PackageItem>, PreflightAction)>,
pub preflight_deps_items: Option<(Vec<PackageItem>, PreflightAction)>,
pub preflight_files_items: Option<Vec<PackageItem>>,
pub preflight_services_items: Option<Vec<PackageItem>>,
pub preflight_sandbox_items: Option<Vec<PackageItem>>,
pub preflight_summary_resolving: bool,
pub preflight_deps_resolving: bool,
pub preflight_files_resolving: bool,
pub preflight_services_resolving: bool,
pub preflight_sandbox_resolving: bool,
pub last_logged_preflight_deps_state: Option<(usize, bool, bool)>,
pub preflight_cancelled: Arc<AtomicBool>,
pub pending_executor_request: Option<ExecutorRequest>,
pub pending_post_summary_items: Option<(Vec<PackageItem>, Option<bool>)>,
pub pending_exec_header_chips: Option<PreflightHeaderChips>,
pub pending_custom_command: Option<String>,
pub pending_update_commands: Option<Vec<String>>,
pub pending_aur_update_command: Option<String>,
pub pending_executor_password: Option<String>,
pub pending_file_sync_result: Option<FileSyncResult>,
}Expand description
Global application state shared by the event, networking, and UI layers.
This structure is mutated frequently in response to input and background updates. Certain subsets are persisted to disk to preserve user context across runs (e.g., recent searches, details cache, install list).
Fields§
§app_mode: AppModeCurrent top-level mode (package management vs news feed).
input: StringCurrent search input text.
results: Vec<PackageItem>Current search results, most relevant first.
all_results: Vec<PackageItem>Unfiltered results as last received from the search worker.
results_backup_for_toggle: Option<Vec<PackageItem>>Backup of results when toggling to installed-only view.
selected: usizeIndex into results that is currently highlighted.
details: PackageDetailsDetails for the currently highlighted result.
list_state: ListStateList selection state for the search results list.
modal: ModalActive modal dialog, if any.
previous_modal: Option<Modal>Previous modal state (used to restore when closing help/alert modals).
dry_run: boolIf true, show install steps without executing side effects.
recent: LruCache<String, String>Previously executed queries stored as an LRU cache (keyed case-insensitively).
history_state: ListStateList selection state for the Recent pane.
focus: FocusWhich pane is currently focused.
last_input_change: InstantTimestamp of the last input edit, used for debouncing or throttling.
last_saved_value: Option<String>Last value persisted for the input field, to avoid redundant writes.
recent_path: PathBufPath where recent searches are persisted as JSON.
recent_dirty: boolDirty flag indicating recent needs to be saved.
latest_query_id: u64Identifier of the latest query whose results are being displayed.
next_query_id: u64Next query identifier to allocate.
search_cache_query: Option<String>Cached search query text (None if cache is empty or invalid).
search_cache_fuzzy: boolWhether fuzzy mode was used for cached query.
search_cache_results: Option<Vec<PackageItem>>Cached search results (None if cache is empty or invalid).
details_cache: HashMap<String, PackageDetails>Cache of details keyed by package name.
cache_path: PathBufPath where the details cache is persisted as JSON.
cache_dirty: boolDirty flag indicating details_cache needs to be saved.
news_read_urls: HashSet<String>Set of Arch news item URLs the user has marked as read.
news_read_path: PathBufPath where the read news URLs are persisted as JSON.
news_read_dirty: boolDirty flag indicating news_read_urls needs to be saved.
news_read_ids: HashSet<String>Set of news feed item IDs the user has marked as read.
news_read_ids_path: PathBufPath where the read news IDs are persisted as JSON.
news_read_ids_dirty: boolDirty flag indicating news_read_ids needs to be saved.
news_items: Vec<NewsFeedItem>News feed items currently loaded.
news_results: Vec<NewsFeedItem>Filtered/sorted news results shown in the UI.
news_loading: boolWhether the news feed is currently loading.
news_ready: boolWhether news are ready to be viewed (loading complete and news available).
news_selected: usizeSelected index within news results.
news_list_state: ListStateList state for news results pane.
news_search_input: StringNews search input text.
news_search_caret: usizeCaret position within news search input.
news_search_select_anchor: Option<usize>Selection anchor within news search input.
news_recent: LruCache<String, String>LRU cache of recent news searches (case-insensitive key).
news_recent_path: PathBufPath where news recent searches are persisted.
news_recent_dirty: boolDirty flag indicating news_recent needs to be saved.
news_history_pending: Option<String>Pending news search awaiting debounce before saving to history.
news_history_pending_at: Option<Instant>Timestamp when the pending news search was last updated.
news_history_last_saved: Option<String>Last news search saved to history (prevents duplicate saves).
news_filter_show_arch_news: boolWhether to show Arch news items.
news_filter_show_advisories: boolWhether to show security advisories.
news_filter_show_pkg_updates: boolWhether to show installed package update items.
news_filter_show_aur_updates: boolWhether to show AUR package update items.
news_filter_show_aur_comments: boolWhether to show AUR comment items.
news_filter_installed_only: boolWhether to restrict advisories to installed packages.
news_filter_read_status: NewsReadFilterRead/unread filter for the News Feed list.
news_filter_arch_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for Arch news filter chip in news title.
news_filter_advisory_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for security advisory filter chip in news title.
news_filter_installed_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for installed-only advisory filter chip in news title.
news_filter_updates_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for installed update filter chip in news title.
news_filter_aur_updates_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for AUR update filter chip in news title.
news_filter_aur_comments_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for AUR comment filter chip in news title.
news_filter_read_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for read/unread filter chip in news title.
news_max_age_days: Option<u32>Maximum age of news items in days (None = unlimited).
show_news_history_pane: boolWhether to show the news history pane in News mode.
show_news_bookmarks_pane: boolWhether to show the news bookmarks pane in News mode.
news_sort_mode: NewsSortModeSort mode for news results.
news_bookmarks: Vec<NewsBookmark>Saved news/bookmarked items with cached content.
news_bookmarks_path: PathBufPath where news bookmarks are persisted.
news_bookmarks_dirty: boolDirty flag indicating news_bookmarks needs to be saved.
news_content_cache: HashMap<String, String>Cache of fetched news article content (URL -> content).
news_content_cache_path: PathBufPath where the news content cache is persisted.
news_content_cache_dirty: boolDirty flag indicating news_content_cache needs to be saved.
news_content: Option<String>Currently displayed news content (for the selected item).
news_content_loading: boolWhether news content is currently being fetched.
news_content_loading_since: Option<Instant>When the current news content load started (for timeout/logging).
news_content_debounce_timer: Option<Instant>Debounce timer for news content requests - tracks when user selected current item. Only requests content after 0.5 seconds of staying on the same item.
news_content_scroll: u16Scroll offset for news content details.
news_feed_path: PathBufPath where the cached news feed is persisted.
news_seen_pkg_versions: HashMap<String, String>Last-seen versions for installed packages (dedup for update feed items).
news_seen_pkg_versions_path: PathBufPath where last-seen package versions are persisted.
news_seen_pkg_versions_dirty: boolDirty flag indicating news_seen_pkg_versions needs to be saved.
news_seen_aur_comments: HashMap<String, String>Last-seen AUR comment identifiers per installed package.
news_seen_aur_comments_path: PathBufPath where last-seen AUR comments are persisted.
news_seen_aur_comments_dirty: boolDirty flag indicating news_seen_aur_comments needs to be saved.
announcements_read_ids: HashSet<String>Set of announcement IDs the user has marked as read. Tracks both version strings (e.g., “v0.6.0”) and remote announcement IDs.
announcement_read_path: PathBufPath where the read announcement IDs are persisted as JSON.
announcement_dirty: boolDirty flag indicating announcements_read_ids needs to be saved.
last_startup_timestamp: Option<String>Timestamp of the previous TUI startup (format: YYYYMMDD:HHMMSS).
Used to determine what news/updates need fresh fetching vs cached data.
last_startup_path: PathBufPath where the last startup timestamp is persisted.
install_list: Vec<PackageItem>Packages selected for installation.
install_state: ListStateList selection state for the Install pane.
remove_list: Vec<PackageItem>Separate list of packages selected for removal (active in installed-only mode).
remove_state: ListStateList selection state for the Remove pane.
downgrade_list: Vec<PackageItem>Separate list of packages selected for downgrade (shown in installed-only mode).
downgrade_state: ListStateList selection state for the Downgrade pane.
install_path: PathBufPath where the install list is persisted as JSON.
install_dirty: boolDirty flag indicating install_list needs to be saved.
last_install_change: Option<Instant>Timestamp of the most recent change to the install list for throttling disk writes.
install_list_names: HashSet<String>HashSet of package names in install list for O(1) membership checking.
remove_list_names: HashSet<String>HashSet of package names in remove list for O(1) membership checking.
downgrade_list_names: HashSet<String>HashSet of package names in downgrade list for O(1) membership checking.
show_recent_pane: boolWhether the Recent pane is visible in the middle row.
show_install_pane: boolWhether the Install/Remove pane is visible in the middle row.
Whether to show the keybindings footer in the details pane.
pane_find: Option<String>Optional, transient find pattern used by pane-local search (“/”).
search_normal_mode: boolWhether Search pane is in Normal mode (Vim-like navigation) instead of Insert mode.
fuzzy_search_enabled: boolWhether fuzzy search is enabled (fzf-style matching) instead of normal substring search.
search_caret: usizeCaret position (in characters) within the Search input.
Always clamped to the range 0..=input.chars().count().
search_select_anchor: Option<usize>Selection anchor (in characters) for the Search input when selecting text.
When None, no selection is active. When Some(i), the selected range is
between min(i, search_caret) and max(i, search_caret) (exclusive upper bound).
official_index_path: PathBufPath to the persisted official package index used for fast offline lookups.
loading_index: boolWhether the application is currently generating the official index.
details_focus: Option<String>Name of the package whose details are being emphasized in the UI, if any.
scroll_moves: u32Smooth scrolling accumulator for prefetch heuristics.
ring_resume_at: Option<Instant>Timestamp at which to resume ring prefetching, if paused.
need_ring_prefetch: boolWhether a ring prefetch is needed soon.
Rectangle of the clickable URL button in terminal cell coordinates.
vt_url_rect: Option<(u16, u16, u16, u16)>Rectangle of the clickable VirusTotal API URL in the setup modal (x, y, w, h).
install_import_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Install pane bottom “Import” button (x, y, w, h).
install_export_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Install pane bottom “Export” button (x, y, w, h).
arch_status_text: StringLatest fetched status message from status.archlinux.org.
arch_status_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the status label (x, y, w, h).
arch_status_color: ArchStatusColorOptional status color indicator (e.g., operational vs. current incident).
updates_count: Option<usize>Number of available package updates, if checked.
updates_list: Vec<String>Sorted list of package names with available updates.
Clickable rectangle for the updates button (x, y, w, h).
Clickable rectangle for the news button in News mode (x, y, w, h).
updates_loading: boolWhether updates check is currently in progress.
refresh_updates: boolFlag to trigger refresh of updates list after package installation/update.
pending_updates_modal: boolFlag to indicate that Updates modal should open after refresh completes.
faillock_locked: boolWhether the user account is currently locked out.
faillock_lockout_until: Option<SystemTime>Timestamp when the lockout will expire (if locked).
faillock_remaining_minutes: Option<u32>Remaining lockout time in minutes (if locked).
Rectangle of the clickable “Show PKGBUILD” in terminal cell coordinates.
Rectangle of the clickable “Copy PKGBUILD” button in PKGBUILD title.
Rectangle of the clickable “Reload PKGBUILD” button in PKGBUILD title.
pkgb_visible: boolWhether the PKGBUILD viewer is visible (details pane split in half).
pkgb_text: Option<String>The fetched PKGBUILD text when available.
pkgb_package_name: Option<String>Name of the package that the PKGBUILD is currently for.
pkgb_reload_requested_at: Option<Instant>Timestamp when PKGBUILD reload was last requested (for debouncing).
pkgb_reload_requested_for: Option<String>Name of the package for which PKGBUILD reload was requested (for debouncing).
pkgb_scroll: u16Scroll offset (lines) for the PKGBUILD viewer.
pkgb_rect: Option<(u16, u16, u16, u16)>Content rectangle of the PKGBUILD viewer (x, y, w, h) when visible.
Rectangle of the clickable “Show comments” / “Hide comments” button in terminal cell coordinates.
comments_visible: boolWhether the comments viewer is visible (details pane split).
comments: Vec<AurComment>The fetched comments data when available.
comments_package_name: Option<String>Name of the package that the comments are currently for.
comments_fetched_at: Option<Instant>Timestamp when comments were last fetched (for cache invalidation).
comments_scroll: u16Scroll offset (lines) for the comments viewer.
comments_rect: Option<(u16, u16, u16, u16)>Content rectangle of the comments viewer (x, y, w, h) when visible.
comments_loading: boolWhether comments are currently being fetched.
comments_error: Option<String>Error message if comments fetch failed.
comments_urls: Vec<(u16, u16, u16, String)>URLs in comments with their screen positions for click detection.
Vector of (x, y, width, url_string) tuples.
Author names in comments with their screen positions for click detection.
Vector of (x, y, width, username) tuples.
comments_dates: Vec<(u16, u16, u16, String)>Dates in comments with their screen positions and URLs for click detection.
Vector of (x, y, width, url_string) tuples.
toast_message: Option<String>Optional short-lived info message rendered at the bottom-right corner.
toast_expires_at: Option<Instant>Deadline (Instant) after which the toast is automatically hidden.
layout_left_pct: u16Left pane width percentage.
layout_center_pct: u16Center pane width percentage.
layout_right_pct: u16Right pane width percentage.
keymap: KeyMapResolved key bindings from user settings
locale: StringResolved locale code (e.g., “de-DE”, “en-US”)
translations: TranslationMapTranslation map for the current locale
translations_fallback: TranslationMapFallback translation map (English) for missing keys
results_rect: Option<(u16, u16, u16, u16)>Inner content rectangle of the Results list (x, y, w, h).
details_rect: Option<(u16, u16, u16, u16)>Inner content rectangle of the Package Info details pane (x, y, w, h).
details_scroll: u16Scroll offset (lines) for the Package Info details pane.
recent_rect: Option<(u16, u16, u16, u16)>Inner content rectangle of the Recent pane list (x, y, w, h).
install_rect: Option<(u16, u16, u16, u16)>Inner content rectangle of the Install pane list (x, y, w, h).
downgrade_rect: Option<(u16, u16, u16, u16)>Inner content rectangle of the Downgrade subpane when visible.
mouse_disabled_in_details: boolWhether mouse capture is temporarily disabled to allow text selection in details.
last_mouse_pos: Option<(u16, u16)>Last observed mouse position (column, row) in terminal cells.
mouse_capture_enabled: boolWhether global terminal mouse capture is currently enabled.
news_rect: Option<(u16, u16, u16, u16)>Outer rectangle of the News modal (including borders) when visible.
news_list_rect: Option<(u16, u16, u16, u16)>Inner list rectangle for clickable news rows.
announcement_rect: Option<(u16, u16, u16, u16)>Outer rectangle of the Announcement modal (including borders) when visible.
announcement_urls: Vec<(u16, u16, u16, String)>URLs in announcement content with their screen positions for click detection.
Vector of (x, y, width, url_string) tuples.
pending_announcements: Vec<RemoteAnnouncement>Pending remote announcements to show after current announcement is dismissed.
pending_news: Option<Vec<NewsItem>>Pending news to show after all announcements are dismissed.
trigger_startup_news_fetch: boolFlag to trigger startup news fetch after NewsSetup is completed.
updates_modal_rect: Option<(u16, u16, u16, u16)>Outer rectangle of the Updates modal (including borders) when visible.
updates_modal_content_rect: Option<(u16, u16, u16, u16)>Inner content rectangle for scrollable updates list.
help_scroll: u16Scroll offset (lines) for the Help modal content.
help_rect: Option<(u16, u16, u16, u16)>Inner content rectangle of the Help modal (x, y, w, h) for hit-testing.
preflight_tab_rects: [Option<(u16, u16, u16, u16)>; 5]Clickable rectangles for preflight tabs (x, y, w, h) - Summary, Deps, Files, Services, Sandbox.
preflight_content_rect: Option<(u16, u16, u16, u16)>Inner content rectangle of the preflight modal (x, y, w, h) for hit-testing package groups.
sort_mode: SortModeCurrent sort mode for results.
installed_packages_mode: InstalledPackagesModeFilter mode for installed packages (leaf only vs all explicit).
Whether the sort dropdown is currently visible.
Clickable rectangle for the sort button in the Results title (x, y, w, h).
Clickable rectangle for the news age toggle button (x, y, w, h).
Inner content rectangle of the sort dropdown menu when visible (x, y, w, h).
Deadline after which the sort dropdown auto-closes.
sort_cache_repo_name: Option<Vec<usize>>Cached sort order for RepoThenName mode (indices into results).
sort_cache_aur_popularity: Option<Vec<usize>>Cached sort order for AurPopularityThenOfficial mode (indices into results).
sort_cache_signature: Option<u64>Signature of results used to validate caches (order-insensitive hash of names).
Whether the options dropdown is currently visible.
Clickable rectangle for the options button in the Results title (x, y, w, h).
Inner content rectangle of the options dropdown menu when visible (x, y, w, h).
Whether the panels dropdown is currently visible.
Clickable rectangle for the panels button in the Results title (x, y, w, h).
Inner content rectangle of the panels dropdown menu when visible (x, y, w, h).
Whether the Config/Lists dropdown is currently visible.
Clickable rectangle for the Config/Lists button in the Results title (x, y, w, h).
Inner content rectangle of the Config/Lists dropdown menu when visible (x, y, w, h).
Whether the Artix filter dropdown is currently visible.
Inner content rectangle of the Artix filter dropdown menu when visible (x, y, w, h).
Whether the collapsed menu dropdown is currently visible.
Clickable rectangle for the collapsed menu button in the Results title (x, y, w, h).
Inner content rectangle of the collapsed menu dropdown when visible (x, y, w, h).
installed_only_mode: boolWhether Results is currently showing only explicitly installed packages.
right_pane_focus: RightPaneFocusWhich right subpane is focused when installed-only mode splits the pane.
package_marker: PackageMarkerVisual marker style for packages added to lists (user preference cached at startup).
results_filter_show_aur: boolWhether to include AUR packages in the Results view.
results_filter_show_core: boolWhether to include packages from the core repo in the Results view.
results_filter_show_extra: boolWhether to include packages from the extra repo in the Results view.
results_filter_show_multilib: boolWhether to include packages from the multilib repo in the Results view.
results_filter_show_eos: boolWhether to include packages from the eos repo in the Results view.
results_filter_show_cachyos: boolWhether to include packages from cachyos* repos in the Results view.
results_filter_show_artix: boolWhether to include packages from Artix Linux repos in the Results view.
results_filter_show_artix_omniverse: boolWhether to include packages from Artix omniverse repo in the Results view.
results_filter_show_artix_universe: boolWhether to include packages from Artix universe repo in the Results view.
results_filter_show_artix_lib32: boolWhether to include packages from Artix lib32 repo in the Results view.
results_filter_show_artix_galaxy: boolWhether to include packages from Artix galaxy repo in the Results view.
results_filter_show_artix_world: boolWhether to include packages from Artix world repo in the Results view.
results_filter_show_artix_system: boolWhether to include packages from Artix system repo in the Results view.
results_filter_show_manjaro: boolWhether to include packages labeled as manjaro in the Results view.
results_filter_aur_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the AUR filter toggle in the Results title (x, y, w, h).
results_filter_core_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the core filter toggle in the Results title (x, y, w, h).
results_filter_extra_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the extra filter toggle in the Results title (x, y, w, h).
results_filter_multilib_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the multilib filter toggle in the Results title (x, y, w, h).
results_filter_eos_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the EOS filter toggle in the Results title (x, y, w, h).
results_filter_cachyos_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the CachyOS filter toggle in the Results title (x, y, w, h).
results_filter_artix_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Artix filter toggle in the Results title (x, y, w, h).
results_filter_artix_omniverse_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Artix omniverse filter toggle in the Results title (x, y, w, h).
results_filter_artix_universe_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Artix universe filter toggle in the Results title (x, y, w, h).
results_filter_artix_lib32_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Artix lib32 filter toggle in the Results title (x, y, w, h).
results_filter_artix_galaxy_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Artix galaxy filter toggle in the Results title (x, y, w, h).
results_filter_artix_world_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Artix world filter toggle in the Results title (x, y, w, h).
results_filter_artix_system_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Artix system filter toggle in the Results title (x, y, w, h).
results_filter_manjaro_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the Manjaro filter toggle in the Results title (x, y, w, h).
fuzzy_indicator_rect: Option<(u16, u16, u16, u16)>Clickable rectangle for the fuzzy search mode indicator in the Search title (x, y, w, h).
refresh_installed_until: Option<Instant>If Some, keep polling pacman/yay to refresh installed/explicit caches until this time.
next_installed_refresh_at: Option<Instant>Next scheduled time to poll caches while refresh_installed_until is active.
pending_install_names: Option<Vec<String>>Names of packages we just triggered to install; when all appear installed, clear Install list.
pending_remove_names: Option<Vec<String>>Names of packages we just triggered to remove; when all disappear, append to removed log.
install_list_deps: Vec<DependencyInfo>Cached resolved dependencies for the current install list (updated in background).
remove_preflight_summary: Vec<ReverseRootSummary>Reverse dependency summary for the current remove preflight modal (populated on demand).
remove_cascade_mode: CascadeModeSelected cascade removal mode for upcoming removals.
deps_resolving: boolWhether dependency resolution is currently in progress.
deps_cache_path: PathBufPath where the dependency cache is persisted as JSON.
deps_cache_dirty: boolDirty flag indicating install_list_deps needs to be saved.
install_list_files: Vec<PackageFileInfo>Cached resolved file changes for the current install list (updated in background).
files_resolving: boolWhether file resolution is currently in progress.
files_cache_path: PathBufPath where the file cache is persisted as JSON.
files_cache_dirty: boolDirty flag indicating install_list_files needs to be saved.
install_list_services: Vec<ServiceImpact>Cached resolved service impacts for the current install list (updated in background).
services_resolving: boolWhether service impact resolution is currently in progress.
services_cache_path: PathBufPath where the service cache is persisted as JSON.
services_cache_dirty: boolDirty flag indicating install_list_services needs to be saved.
service_resolve_now: boolFlag requesting that the runtime schedule service impact resolution for the active Preflight modal.
active_service_request: Option<u64>Identifier of the active service impact resolution request, if any.
next_service_request_id: u64Monotonic counter used to tag service impact resolution requests.
services_pending_signature: Option<(PreflightAction, Vec<String>)>Signature of the package set currently queued for service impact resolution.
pending_service_plan: Vec<ServiceImpact>Service restart decisions captured during the Preflight Services tab.
install_list_sandbox: Vec<SandboxInfo>Cached resolved sandbox information for the current install list (updated in background).
sandbox_resolving: boolWhether sandbox resolution is currently in progress.
sandbox_cache_path: PathBufPath where the sandbox cache is persisted as JSON.
sandbox_cache_dirty: boolDirty flag indicating install_list_sandbox needs to be saved.
preflight_summary_items: Option<(Vec<PackageItem>, PreflightAction)>Packages to resolve for preflight summary computation.
preflight_deps_items: Option<(Vec<PackageItem>, PreflightAction)>Packages to resolve for preflight dependency analysis (with action for forward/reverse).
preflight_files_items: Option<Vec<PackageItem>>Packages to resolve for preflight file analysis.
preflight_services_items: Option<Vec<PackageItem>>Packages to resolve for preflight service analysis.
preflight_sandbox_items: Option<Vec<PackageItem>>AUR packages to resolve for preflight sandbox analysis (subset only).
preflight_summary_resolving: boolWhether preflight summary computation is in progress.
preflight_deps_resolving: boolWhether preflight dependency resolution is in progress.
preflight_files_resolving: boolWhether preflight file resolution is in progress.
preflight_services_resolving: boolWhether preflight service resolution is in progress.
preflight_sandbox_resolving: boolWhether preflight sandbox resolution is in progress.
last_logged_preflight_deps_state: Option<(usize, bool, bool)>Last preflight dependency log state to suppress duplicate tick logs.
preflight_cancelled: Arc<AtomicBool>Cancellation flag for preflight operations (set to true when modal closes).
pending_executor_request: Option<ExecutorRequest>Pending executor request to be sent when PreflightExec modal is ready.
pending_post_summary_items: Option<(Vec<PackageItem>, Option<bool>)>Pending post-summary computation request (items and success flag to compute summary for).
pending_exec_header_chips: Option<PreflightHeaderChips>Header chips to use when transitioning to PreflightExec modal.
pending_custom_command: Option<String>Custom command to execute after password prompt (for special packages like paru/yay/semgrep-bin).
pending_update_commands: Option<Vec<String>>Update commands to execute after password prompt (for system update).
pending_aur_update_command: Option<String>AUR update command to execute conditionally if pacman fails (for system update).
pending_executor_password: Option<String>Password obtained from password prompt, stored temporarily for reinstall confirmation flow.
pending_file_sync_result: Option<FileSyncResult>File database sync result from background thread (checked in tick handler).
Implementations§
Source§impl AppState
impl AppState
Sourcepub fn recent_values(&self) -> Vec<String>
pub fn recent_values(&self) -> Vec<String>
What: Return recent searches in most-recent-first order.
Inputs:
self: Application state containing the recent LRU cache.
Output:
- Vector of recent search strings ordered from most to least recent.
Details:
- Clones stored values; limited to
RECENT_CAPACITY.
Sourcepub fn recent_value_at(&self, index: usize) -> Option<String>
pub fn recent_value_at(&self, index: usize) -> Option<String>
What: Fetch a recent search by positional index.
Inputs:
index: Zero-based position in most-recent-first ordering.
Output:
Some(String)when the index is valid;Noneotherwise.
Details:
- Uses the LRU iterator, so
index == 0is the most recent entry.
Sourcepub fn remove_recent_at(&mut self, index: usize) -> Option<String>
pub fn remove_recent_at(&mut self, index: usize) -> Option<String>
What: Remove a recent search at the provided position.
Inputs:
index: Zero-based position in most-recent-first ordering.
Output:
Some(String)containing the removed value when found;Noneotherwise.
Details:
- Resolves the cache key via iteration, then pops it to maintain LRU invariants.
Sourcepub fn add_news_bookmark(&mut self, bookmark: NewsBookmark)
pub fn add_news_bookmark(&mut self, bookmark: NewsBookmark)
What: Add or replace a news bookmark, marking state dirty.
Inputs:
bookmark: Bookmark to insert (deduped byitem.id).
Output:
- None (mutates bookmarks and dirty flag).
Sourcepub fn remove_news_bookmark_at(&mut self, index: usize) -> Option<NewsBookmark>
pub fn remove_news_bookmark_at(&mut self, index: usize) -> Option<NewsBookmark>
What: Remove a news bookmark at a position.
Inputs:
index: Zero-based index into bookmarks vector.
Output:
- Removed bookmark if present.
Sourcepub fn news_recent_values(&self) -> Vec<String>
pub fn news_recent_values(&self) -> Vec<String>
What: Return recent news searches in most-recent-first order.
Inputs:
self: Application state containing the news recent LRU cache.
Output:
- Vector of recent news search strings ordered from most to least recent.
Details:
- Clones stored values; limited by the configured recent capacity.
Sourcepub fn news_recent_value_at(&self, index: usize) -> Option<String>
pub fn news_recent_value_at(&self, index: usize) -> Option<String>
What: Fetch a recent news search by positional index.
Inputs:
index: Zero-based position in most-recent-first ordering.
Output:
Some(String)when the index is valid;Noneotherwise.
Details:
- Uses the LRU iterator, so
index == 0is the most recent entry.
Sourcepub fn load_news_recent_items(&mut self, items: &[String])
pub fn load_news_recent_items(&mut self, items: &[String])
What: Replace the news recent cache with the provided most-recent-first entries.
Inputs:
items: Slice of recent news search strings ordered from most to least recent.
Output:
- None (mutates
self.news_recent).
Details:
- Clears existing entries, enforces configured capacity, and preserves ordering by inserting from least-recent to most-recent.
Sourcepub fn remove_news_recent_at(&mut self, index: usize) -> Option<String>
pub fn remove_news_recent_at(&mut self, index: usize) -> Option<String>
What: Remove a recent news search at the provided position.
Inputs:
index: Zero-based position in most-recent-first ordering.
Output:
Some(String)containing the removed value when found;Noneotherwise.
Details:
- Resolves the cache key via iteration, then pops it to maintain LRU invariants.
Sourcepub fn load_recent_items(&mut self, items: &[String])
pub fn load_recent_items(&mut self, items: &[String])
What: Replace the recent cache with the provided most-recent-first entries.
Inputs:
items: Slice of recent search strings ordered from most to least recent.
Output:
- None (mutates
self.recent).
Details:
- Clears existing entries, enforces configured capacity, and preserves ordering by inserting from least-recent to most-recent.
Sourcepub fn refresh_news_results(&mut self)
pub fn refresh_news_results(&mut self)
What: Recompute news results applying filters, search, age cutoff, and sorting.
Inputs:
self: Mutable application state containing news items and filter fields.
Output:
- Updates
news_results, selection state, and recent news searches.
Trait Implementations§
Source§impl Default for AppState
impl Default for AppState
Source§fn default() -> Self
fn default() -> Self
What: Construct a default, empty AppState with initialized paths, selection states, and timers.
Inputs:
- None.
Output:
- Returns an
AppStateinstance with sensible defaults for all fields.
Details:
- Delegates initialization to helper functions that group related fields logically.
- Initializes paths for persisted data (recent searches, cache, news, install list, etc.) under the configured lists directory.
- Sets selection indices to zero, result buffers to empty, and UI flags to default visibility states.
- All repository filters default to showing everything.
- Initializes timers, scroll positions, and modal states to their default values.
Auto Trait Implementations§
impl Freeze for AppState
impl RefUnwindSafe for AppState
impl Send for AppState
impl Sync for AppState
impl Unpin for AppState
impl UnwindSafe for AppState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more