@@ -51,6 +51,7 @@ const PERIODS: &[(&str, &str)] = &[
5151 ( "week" , "7 Days" ) ,
5252 ( "30days" , "30 Days" ) ,
5353 ( "month" , "This Month" ) ,
54+ ( "all" , "All Time" ) ,
5455] ;
5556
5657fn period_to_index ( p : & str ) -> usize {
@@ -59,6 +60,7 @@ fn period_to_index(p: &str) -> usize {
5960 "week" => 1 ,
6061 "30days" => 2 ,
6162 "month" => 3 ,
63+ "all" => 4 ,
6264 _ => 1 ,
6365 }
6466}
@@ -69,6 +71,7 @@ fn period_str(p: Period) -> &'static str {
6971 Period :: Week => "week" ,
7072 Period :: ThirtyDays => "30days" ,
7173 Period :: Month => "month" ,
74+ Period :: All => "all" ,
7275 }
7376}
7477
@@ -153,7 +156,10 @@ where
153156 Ok ( ( ) )
154157}
155158
156- pub fn get_date_range ( period : & str ) -> DateRange {
159+ pub fn get_date_range ( period : & str ) -> Option < DateRange > {
160+ if period == "all" {
161+ return None ;
162+ }
157163 let now = Local :: now ( ) ;
158164 let today_start = now
159165 . date_naive ( )
@@ -196,7 +202,7 @@ pub fn get_date_range(period: &str) -> DateRange {
196202 . unwrap ( ) ,
197203 } ;
198204
199- DateRange { start, end }
205+ Some ( DateRange { start, end } )
200206}
201207
202208pub struct App {
@@ -323,7 +329,7 @@ impl App {
323329 let tx = tx. clone ( ) ;
324330 std:: thread:: spawn ( move || {
325331 let projects = parse_all_sessions (
326- Some ( & date_range) ,
332+ date_range. as_ref ( ) ,
327333 filter. as_deref ( ) ,
328334 & HashMap :: new ( ) ,
329335 )
@@ -481,7 +487,7 @@ pub fn run(period: Period, provider: &str, refresh: Option<u64>) -> Result<()> {
481487 let tx2 = tx. clone ( ) ;
482488 std:: thread:: spawn ( move || {
483489 let projects = parse_all_sessions (
484- Some ( & date_range) ,
490+ date_range. as_ref ( ) ,
485491 filter. as_deref ( ) ,
486492 & HashMap :: new ( ) ,
487493 )
@@ -634,6 +640,12 @@ pub fn run(period: Period, provider: &str, refresh: Option<u64>) -> Result<()> {
634640 app. switch_to ( & tx) ;
635641 }
636642 }
643+ KeyCode :: Char ( '5' ) => {
644+ if app. period_idx != 4 {
645+ app. period_idx = 4 ;
646+ app. switch_to ( & tx) ;
647+ }
648+ }
637649 KeyCode :: Left | KeyCode :: Char ( '<' ) => {
638650 if app. last_switch . elapsed ( ) > Duration :: from_millis ( 120 ) {
639651 app. period_idx =
@@ -789,7 +801,7 @@ fn run_render_once(period: Period, provider: &str) -> Result<()> {
789801
790802 let date_range = get_date_range ( period_str ( period) ) ;
791803 let filter = if provider == "all" { None } else { Some ( provider) } ;
792- app. projects = crate :: parser:: parse_all_sessions ( Some ( & date_range) , filter, pre_stats)
804+ app. projects = crate :: parser:: parse_all_sessions ( date_range. as_ref ( ) , filter, pre_stats)
793805 . unwrap_or_default ( ) ;
794806 app. loading = false ;
795807
@@ -904,7 +916,7 @@ pub fn run_static_sync(period: Period, provider: &str) -> Result<()> {
904916 // orthogonal to this cleanup.
905917 let date_range = get_date_range ( period_str ( period) ) ;
906918 let filter = if provider == "all" { None } else { Some ( provider) } ;
907- let agg = parse_all_sessions_static ( Some ( & date_range) , filter) . unwrap_or_default ( ) ;
919+ let agg = parse_all_sessions_static ( date_range. as_ref ( ) , filter) . unwrap_or_default ( ) ;
908920
909921 let mut buf: Vec < u8 > = Vec :: with_capacity ( 1024 ) ;
910922 render_static_aggregate_into ( & mut buf, period, & agg) ;
@@ -959,7 +971,7 @@ fn run_static(period: Period, provider: &str) -> Result<()> {
959971 } else {
960972 Some ( provider)
961973 } ;
962- let projects = parse_all_sessions ( Some ( & date_range) , filter, & HashMap :: new ( ) )
974+ let projects = parse_all_sessions ( date_range. as_ref ( ) , filter, & HashMap :: new ( ) )
963975 . unwrap_or_default ( ) ;
964976 render_static ( period, & projects) ;
965977 Ok ( ( ) )
0 commit comments