1use super::AppState;
4use super::defaults;
5use super::defaults_cache;
6use std::collections::HashMap;
7
8impl Default for AppState {
9 #[allow(clippy::too_many_lines)] fn default() -> Self {
25 let (
26 recent_path,
27 cache_path,
28 news_read_path,
29 news_read_ids_path,
30 install_path,
31 official_index_path,
32 deps_cache_path,
33 files_cache_path,
34 services_cache_path,
35 announcement_read_path,
36 news_recent_path,
37 news_bookmarks_path,
38 ) = defaults::default_paths();
39 let news_feed_path = crate::theme::lists_dir().join("news_feed.json");
40 let news_content_cache_path = crate::theme::lists_dir().join("news_content_cache.json");
41 let news_seen_pkg_versions_path =
42 crate::theme::lists_dir().join("news_seen_pkg_updates.json");
43 let news_seen_aur_comments_path =
44 crate::theme::lists_dir().join("news_seen_aur_comments.json");
45 let news_seen_pkg_versions: HashMap<String, String> =
46 std::fs::read_to_string(&news_seen_pkg_versions_path)
47 .ok()
48 .and_then(|s| serde_json::from_str(&s).ok())
49 .unwrap_or_default();
50 let news_seen_aur_comments: HashMap<String, String> =
51 std::fs::read_to_string(&news_seen_aur_comments_path)
52 .ok()
53 .and_then(|s| serde_json::from_str(&s).ok())
54 .unwrap_or_default();
55
56 let last_startup_path = crate::theme::lists_dir().join("last_startup.txt");
58 let last_startup_timestamp = std::fs::read_to_string(&last_startup_path)
59 .ok()
60 .map(|s| s.trim().to_string())
61 .filter(|s| !s.is_empty());
62 let current_timestamp = chrono::Local::now().format("%Y%m%d:%H%M%S").to_string();
64 let _ = std::fs::write(&last_startup_path, ¤t_timestamp);
65 tracing::info!(
66 previous = ?last_startup_timestamp,
67 current = %current_timestamp,
68 "startup timestamp tracking"
69 );
70
71 let (
72 results_filter_show_aur,
73 results_filter_show_core,
74 results_filter_show_extra,
75 results_filter_show_multilib,
76 results_filter_show_eos,
77 results_filter_show_cachyos,
78 results_filter_show_artix,
79 results_filter_show_artix_omniverse,
80 results_filter_show_artix_universe,
81 results_filter_show_artix_lib32,
82 results_filter_show_artix_galaxy,
83 results_filter_show_artix_world,
84 results_filter_show_artix_system,
85 filter_rects,
86 ) = defaults::default_filters();
87 let [
88 results_filter_aur_rect,
89 results_filter_core_rect,
90 results_filter_extra_rect,
91 results_filter_multilib_rect,
92 results_filter_eos_rect,
93 results_filter_cachyos_rect,
94 results_filter_artix_rect,
95 results_filter_artix_omniverse_rect,
96 results_filter_artix_universe_rect,
97 results_filter_artix_lib32_rect,
98 results_filter_artix_galaxy_rect,
99 results_filter_artix_world_rect,
100 results_filter_artix_system_rect,
101 ] = filter_rects;
102
103 let (
104 input,
105 results,
106 all_results,
107 results_backup_for_toggle,
108 selected,
109 details,
110 list_state,
111 modal,
112 previous_modal,
113 dry_run,
114 focus,
115 last_input_change,
116 last_saved_value,
117 latest_query_id,
118 next_query_id,
119 search_cache_query,
120 search_cache_fuzzy,
121 search_cache_results,
122 ) = defaults::default_search_state();
123
124 let app_mode = defaults::default_app_mode();
125
126 let (
127 news_items,
128 news_results,
129 news_loading,
130 news_ready,
131 news_selected,
132 news_list_state,
133 news_search_input,
134 news_search_caret,
135 news_search_select_anchor,
136 news_recent,
137 news_recent_path,
138 news_recent_dirty,
139 news_filter_show_arch_news,
140 news_filter_show_advisories,
141 news_filter_show_pkg_updates,
142 news_filter_show_aur_updates,
143 news_filter_show_aur_comments,
144 news_filter_installed_only,
145 news_filter_read_status,
146 news_filter_arch_rect,
147 news_filter_advisory_rect,
148 news_filter_installed_rect,
149 news_filter_updates_rect,
150 news_filter_aur_updates_rect,
151 news_filter_aur_comments_rect,
152 news_filter_read_rect,
153 news_max_age_days,
154 show_news_history_pane,
155 show_news_bookmarks_pane,
156 news_sort_mode,
157 news_bookmarks,
158 news_bookmarks_path,
159 news_bookmarks_dirty,
160 news_content_cache,
161 news_content_cache_path,
162 news_content_cache_dirty,
163 news_content,
164 news_content_loading,
165 news_content_loading_since,
166 news_content_debounce_timer,
167 news_content_scroll,
168 news_history_pending,
169 news_history_pending_at,
170 news_history_last_saved,
171 ) = defaults::default_news_feed_state(
172 news_recent_path,
173 news_bookmarks_path,
174 &news_feed_path,
175 news_content_cache_path,
176 );
177
178 let (recent, history_state, recent_path, recent_dirty) =
179 defaults::default_recent_state(recent_path);
180
181 let (details_cache, cache_path, cache_dirty) =
182 defaults::default_details_cache_state(cache_path);
183
184 let (news_read_urls, news_read_path, news_read_dirty) =
185 defaults::default_news_state(news_read_path);
186
187 let (news_read_ids, news_read_ids_path, news_read_ids_dirty) =
188 defaults::default_news_read_ids_state(news_read_ids_path);
189
190 let (announcements_read_ids, announcement_read_path, announcement_dirty) =
191 defaults::default_announcement_state(announcement_read_path);
192
193 let (
194 install_list,
195 install_state,
196 remove_list,
197 remove_state,
198 downgrade_list,
199 downgrade_state,
200 install_path,
201 install_dirty,
202 last_install_change,
203 install_list_names,
204 remove_list_names,
205 downgrade_list_names,
206 ) = defaults::default_install_lists_state(install_path);
207
208 let (show_recent_pane, show_install_pane, show_keybinds_footer, pane_find) =
209 defaults::default_ui_visibility_state();
210
211 let (search_normal_mode, fuzzy_search_enabled, search_caret, search_select_anchor) =
212 defaults::default_search_input_state();
213
214 let (official_index_path, loading_index, details_focus) =
215 defaults::default_index_state(official_index_path);
216
217 let (scroll_moves, ring_resume_at, need_ring_prefetch) =
218 defaults::default_scroll_prefetch_state();
219
220 let (
221 url_button_rect,
222 vt_url_rect,
223 install_import_rect,
224 install_export_rect,
225 arch_status_text,
226 arch_status_rect,
227 arch_status_color,
228 updates_count,
229 updates_list,
230 updates_button_rect,
231 news_button_rect,
232 updates_loading,
233 refresh_updates,
234 pending_updates_modal,
235 faillock_locked,
236 faillock_lockout_until,
237 faillock_remaining_minutes,
238 ) = defaults::default_clickable_rects_state();
239
240 let (
241 pkgb_button_rect,
242 pkgb_check_button_rect,
243 pkgb_reload_button_rect,
244 pkgb_visible,
245 pkgb_text,
246 pkgb_package_name,
247 pkgb_reload_requested_at,
248 pkgb_reload_requested_for,
249 pkgb_scroll,
250 pkgb_rect,
251 ) = defaults::default_pkgbuild_state();
252
253 let (
254 comments_button_rect,
255 comments_visible,
256 comments,
257 comments_package_name,
258 comments_fetched_at,
259 comments_scroll,
260 comments_rect,
261 comments_loading,
262 comments_error,
263 comments_urls,
264 comments_authors,
265 comments_dates,
266 ) = defaults::default_comments_state();
267
268 let (toast_message, toast_expires_at) = defaults::default_toast_state();
269
270 let (
271 layout_left_pct,
272 layout_center_pct,
273 layout_right_pct,
274 keymap,
275 locale,
276 translations,
277 translations_fallback,
278 ) = defaults::default_settings_state();
279
280 let (
281 results_rect,
282 details_rect,
283 details_scroll,
284 recent_rect,
285 install_rect,
286 downgrade_rect,
287 mouse_disabled_in_details,
288 last_mouse_pos,
289 mouse_capture_enabled,
290 ) = defaults::default_mouse_hit_test_state();
291
292 let (
293 news_rect,
294 news_list_rect,
295 announcement_rect,
296 announcement_urls,
297 pending_announcements,
298 pending_news,
299 trigger_startup_news_fetch,
300 updates_modal_rect,
301 updates_modal_content_rect,
302 help_scroll,
303 help_rect,
304 preflight_tab_rects,
305 preflight_content_rect,
306 ) = defaults::default_modal_rects_state();
307
308 let (
309 sort_mode,
310 sort_menu_open,
311 sort_button_rect,
312 news_age_button_rect,
313 sort_menu_rect,
314 sort_menu_auto_close_at,
315 options_menu_open,
316 options_button_rect,
317 options_menu_rect,
318 panels_menu_open,
319 panels_button_rect,
320 panels_menu_rect,
321 config_menu_open,
322 artix_filter_menu_open,
323 artix_filter_menu_rect,
324 config_button_rect,
325 config_menu_rect,
326 collapsed_menu_open,
327 collapsed_menu_button_rect,
328 collapsed_menu_rect,
329 sort_cache_repo_name,
330 sort_cache_aur_popularity,
331 sort_cache_signature,
332 ) = defaults::default_sorting_menus_state();
333
334 let (installed_only_mode, right_pane_focus, package_marker) =
335 defaults::default_results_mode_state();
336
337 let (
338 refresh_installed_until,
339 next_installed_refresh_at,
340 pending_install_names,
341 pending_remove_names,
342 ) = defaults_cache::default_cache_refresh_state();
343
344 let (
345 install_list_deps,
346 remove_preflight_summary,
347 remove_cascade_mode,
348 deps_resolving,
349 deps_cache_path,
350 deps_cache_dirty,
351 ) = defaults_cache::default_deps_cache_state(deps_cache_path);
352
353 let (install_list_files, files_resolving, files_cache_path, files_cache_dirty) =
354 defaults_cache::default_files_cache_state(files_cache_path);
355
356 let (
357 install_list_services,
358 services_resolving,
359 services_cache_path,
360 services_cache_dirty,
361 service_resolve_now,
362 active_service_request,
363 next_service_request_id,
364 services_pending_signature,
365 pending_service_plan,
366 ) = defaults_cache::default_services_cache_state(services_cache_path);
367
368 let (install_list_sandbox, sandbox_resolving, sandbox_cache_path, sandbox_cache_dirty) =
369 defaults_cache::default_sandbox_cache_state();
370
371 let (
372 preflight_summary_items,
373 preflight_deps_items,
374 preflight_files_items,
375 preflight_services_items,
376 preflight_sandbox_items,
377 preflight_summary_resolving,
378 preflight_deps_resolving,
379 preflight_files_resolving,
380 preflight_services_resolving,
381 preflight_sandbox_resolving,
382 last_logged_preflight_deps_state,
383 preflight_cancelled,
384 ) = defaults_cache::default_preflight_state();
385
386 Self {
387 app_mode,
388 input,
389 results,
390 all_results,
391 results_backup_for_toggle,
392 selected,
393 details,
394 list_state,
395 modal,
396 previous_modal,
397 dry_run,
398 recent,
399 history_state,
400 focus,
401 last_input_change,
402 last_saved_value,
403 recent_path,
404 recent_dirty,
405 latest_query_id,
406 next_query_id,
407 search_cache_query,
408 search_cache_fuzzy,
409 search_cache_results,
410 details_cache,
411 cache_path,
412 cache_dirty,
413 news_read_urls,
414 news_read_path,
415 news_read_dirty,
416 news_read_ids,
417 news_read_ids_path,
418 news_read_ids_dirty,
419 news_items,
420 news_results,
421 news_loading,
422 news_ready,
423 news_selected,
424 news_list_state,
425 news_search_input,
426 news_search_caret,
427 news_search_select_anchor,
428 news_recent,
429 news_recent_path,
430 news_recent_dirty,
431 news_filter_show_arch_news,
432 news_filter_show_advisories,
433 news_filter_show_pkg_updates,
434 news_filter_show_aur_updates,
435 news_filter_show_aur_comments,
436 news_filter_installed_only,
437 news_filter_read_status,
438 news_filter_arch_rect,
439 news_filter_advisory_rect,
440 news_filter_installed_rect,
441 news_filter_updates_rect,
442 news_filter_aur_updates_rect,
443 news_filter_aur_comments_rect,
444 news_filter_read_rect,
445 news_max_age_days,
446 show_news_history_pane,
447 show_news_bookmarks_pane,
448 news_sort_mode,
449 news_bookmarks,
450 news_bookmarks_path,
451 news_bookmarks_dirty,
452 news_content_cache,
453 news_content_cache_path,
454 news_content_cache_dirty,
455 news_content,
456 news_content_loading,
457 news_content_loading_since,
458 news_content_debounce_timer,
459 news_content_scroll,
460 news_feed_path,
461 news_seen_pkg_versions,
462 news_seen_pkg_versions_path,
463 news_seen_pkg_versions_dirty: false,
464 news_seen_aur_comments,
465 news_seen_aur_comments_path,
466 news_seen_aur_comments_dirty: false,
467 news_history_pending,
468 news_history_pending_at,
469 news_history_last_saved,
470 announcements_read_ids,
471 announcement_read_path,
472 announcement_dirty,
473 last_startup_timestamp,
474 last_startup_path,
475 install_list,
476 install_state,
477 remove_list,
478 remove_state,
479 downgrade_list,
480 downgrade_state,
481 install_path,
482 install_dirty,
483 last_install_change,
484 install_list_names,
485 remove_list_names,
486 downgrade_list_names,
487 show_recent_pane,
488 show_install_pane,
489 show_keybinds_footer,
490 pane_find,
491 search_normal_mode,
492 fuzzy_search_enabled,
493 search_caret,
494 search_select_anchor,
495 official_index_path,
496 loading_index,
497 details_focus,
498 scroll_moves,
499 ring_resume_at,
500 need_ring_prefetch,
501 url_button_rect,
502 vt_url_rect,
503 install_import_rect,
504 install_export_rect,
505 arch_status_text,
506 arch_status_rect,
507 arch_status_color,
508 updates_count,
509 updates_list,
510 updates_button_rect,
511 news_button_rect,
512 updates_loading,
513 refresh_updates,
514 pending_updates_modal,
515 faillock_locked,
516 faillock_lockout_until,
517 faillock_remaining_minutes,
518 pkgb_button_rect,
519 pkgb_check_button_rect,
520 pkgb_reload_button_rect,
521 pkgb_visible,
522 pkgb_text,
523 pkgb_package_name,
524 pkgb_reload_requested_at,
525 pkgb_reload_requested_for,
526 pkgb_scroll,
527 pkgb_rect,
528 comments_button_rect,
529 comments_visible,
530 comments,
531 comments_package_name,
532 comments_fetched_at,
533 comments_scroll,
534 comments_rect,
535 comments_loading,
536 comments_error,
537 comments_urls,
538 comments_authors,
539 comments_dates,
540 toast_message,
541 toast_expires_at,
542 layout_left_pct,
543 layout_center_pct,
544 layout_right_pct,
545 keymap,
546 locale,
547 translations,
548 translations_fallback,
549 results_rect,
550 details_rect,
551 details_scroll,
552 recent_rect,
553 install_rect,
554 downgrade_rect,
555 mouse_disabled_in_details,
556 last_mouse_pos,
557 mouse_capture_enabled,
558 news_rect,
559 news_list_rect,
560 announcement_rect,
561 announcement_urls,
562 pending_announcements,
563 pending_news,
564 trigger_startup_news_fetch,
565 updates_modal_rect,
566 updates_modal_content_rect,
567 help_scroll,
568 help_rect,
569 preflight_tab_rects,
570 preflight_content_rect,
571 sort_mode,
572 installed_packages_mode: crate::state::types::InstalledPackagesMode::default(),
573 sort_menu_open,
574 sort_button_rect,
575 news_age_button_rect,
576 sort_menu_rect,
577 sort_menu_auto_close_at,
578 sort_cache_repo_name,
579 sort_cache_aur_popularity,
580 sort_cache_signature,
581 options_menu_open,
582 options_button_rect,
583 options_menu_rect,
584 panels_menu_open,
585 panels_button_rect,
586 panels_menu_rect,
587 config_menu_open,
588 artix_filter_menu_open,
589 artix_filter_menu_rect,
590 config_button_rect,
591 config_menu_rect,
592 collapsed_menu_open,
593 collapsed_menu_button_rect,
594 collapsed_menu_rect,
595 installed_only_mode,
596 right_pane_focus,
597 package_marker,
598 results_filter_show_aur,
599 results_filter_show_core,
600 results_filter_show_extra,
601 results_filter_show_multilib,
602 results_filter_show_eos,
603 results_filter_show_cachyos,
604 results_filter_show_artix,
605 results_filter_show_artix_omniverse,
606 results_filter_show_artix_universe,
607 results_filter_show_artix_lib32,
608 results_filter_show_artix_galaxy,
609 results_filter_show_artix_world,
610 results_filter_show_artix_system,
611 results_filter_show_manjaro: true,
612 results_filter_aur_rect,
613 results_filter_core_rect,
614 results_filter_extra_rect,
615 results_filter_multilib_rect,
616 results_filter_eos_rect,
617 results_filter_cachyos_rect,
618 results_filter_artix_rect,
619 results_filter_artix_omniverse_rect,
620 results_filter_artix_universe_rect,
621 results_filter_artix_lib32_rect,
622 results_filter_artix_galaxy_rect,
623 results_filter_artix_world_rect,
624 results_filter_artix_system_rect,
625 results_filter_manjaro_rect: None,
626 fuzzy_indicator_rect: None,
627 refresh_installed_until,
628 next_installed_refresh_at,
629 pending_install_names,
630 pending_remove_names,
631 install_list_deps,
632 remove_preflight_summary,
633 remove_cascade_mode,
634 deps_resolving,
635 deps_cache_path,
636 deps_cache_dirty,
637 install_list_files,
638 files_resolving,
639 files_cache_path,
640 files_cache_dirty,
641 install_list_services,
642 services_resolving,
643 services_cache_path,
644 services_cache_dirty,
645 service_resolve_now,
646 active_service_request,
647 next_service_request_id,
648 services_pending_signature,
649 pending_service_plan,
650 install_list_sandbox,
651 sandbox_resolving,
652 sandbox_cache_path,
653 sandbox_cache_dirty,
654 preflight_summary_items,
655 preflight_deps_items,
656 preflight_files_items,
657 preflight_services_items,
658 preflight_sandbox_items,
659 preflight_summary_resolving,
660 preflight_deps_resolving,
661 preflight_files_resolving,
662 preflight_services_resolving,
663 preflight_sandbox_resolving,
664 last_logged_preflight_deps_state,
665 preflight_cancelled,
666 pending_executor_request: None,
667 pending_exec_header_chips: None,
668 pending_post_summary_items: None,
669 pending_custom_command: None,
670 pending_update_commands: None,
671 pending_aur_update_command: None,
672 pending_executor_password: None,
673 pending_file_sync_result: None,
674 }
675 }
676}