@@ -107,6 +107,8 @@ constexpr std::chrono::microseconds ZOOM_LEVELS[] = {
107107 8h,
108108 24h,
109109 7 * 24h,
110+ 30 * 24h,
111+ 365 * 24h,
110112};
111113
112114constexpr std::array<string_fragment, ZOOM_COUNT> lnav_zoom_strings = {
@@ -120,6 +122,8 @@ constexpr std::array<string_fragment, ZOOM_COUNT> lnav_zoom_strings = {
120122 " 8-hour" _frag,
121123 " 1-day" _frag,
122124 " 1-week" _frag,
125+ " 1-month" _frag,
126+ " 1-year" _frag,
123127};
124128
125129inline attr_line_t &
@@ -2232,71 +2236,76 @@ com_zoom_to(exec_context& ec,
22322236 std::vector<std::string>& args)
22332237{
22342238 std::string retval;
2239+ std::optional<int > zoom_level;
22352240
2236- if (ec.ec_dry_run ) {
2237- } else if (args.size () > 1 ) {
2238- bool found = false ;
2239-
2240- for (size_t lpc = 0 ; lpc < lnav_zoom_strings.size () && !found; lpc++) {
2241- if (lnav_zoom_strings[lpc].iequal (args[1 ])) {
2242- auto & ss = *lnav_data.ld_spectro_source ;
2243- timeval old_time;
2244-
2245- lnav_data.ld_zoom_level = lpc;
2246-
2247- auto & hist_view = lnav_data.ld_views [LNV_HISTOGRAM];
2248-
2249- if (hist_view.get_inner_height () > 0 ) {
2250- auto old_time_opt = lnav_data.ld_hist_source2 .time_for_row (
2251- lnav_data.ld_views [LNV_HISTOGRAM].get_top ());
2252- if (old_time_opt) {
2253- old_time = old_time_opt.value ().ri_time ;
2254- rebuild_hist ();
2255- lnav_data.ld_hist_source2 .row_for_time (old_time) |
2256- [](auto new_top) {
2257- lnav_data.ld_views [LNV_HISTOGRAM].set_top (
2258- new_top);
2259- };
2260- }
2261- }
2262-
2263- auto & spectro_view = lnav_data.ld_views [LNV_SPECTRO];
2264-
2265- if (spectro_view.get_inner_height () > 0 ) {
2266- auto old_time_opt
2267- = lnav_data.ld_spectro_source ->time_for_row (
2268- lnav_data.ld_views [LNV_SPECTRO]
2269- .get_selection ()
2270- .value_or (0_vl));
2271- ss.ss_granularity = ZOOM_LEVELS[lnav_data.ld_zoom_level ];
2272- ss.invalidate ();
2273- spectro_view.reload_data ();
2274- if (old_time_opt) {
2275- lnav_data.ld_spectro_source ->row_for_time (
2276- old_time_opt.value ().ri_time )
2277- | [](auto new_top) {
2278- lnav_data.ld_views [LNV_SPECTRO].set_selection (
2279- new_top);
2280- };
2281- }
2282- }
2241+ if (args.size () == 1 ) {
2242+ auto um = lnav::console::user_message::error (" expecting a zoom level" )
2243+ .with_snippets (ec.ec_source )
2244+ .with_help (attr_line_t (" available levels: " )
2245+ .join (lnav_zoom_strings, " , " ))
2246+ .move ();
2247+ return Err (um);
2248+ }
22832249
2284- lnav_data.ld_view_stack .set_needs_update ();
2250+ for (size_t lpc = 0 ; lpc < lnav_zoom_strings.size () && !zoom_level; lpc++) {
2251+ if (lnav_zoom_strings[lpc].iequal (args[1 ])) {
2252+ zoom_level = lpc;
2253+ }
2254+ }
22852255
2286- found = true ;
2256+ if (!zoom_level) {
2257+ auto um = lnav::console::user_message::error (
2258+ attr_line_t (" invalid zoom level: " )
2259+ .append (lnav::roles::symbol (args[1 ])))
2260+ .with_snippets (ec.ec_source )
2261+ .with_help (attr_line_t (" available levels: " )
2262+ .join (lnav_zoom_strings, " , " ))
2263+ .move ();
2264+ return Err (um);
2265+ }
2266+ if (!ec.ec_dry_run ) {
2267+ auto & ss = *lnav_data.ld_spectro_source ;
2268+ timeval old_time;
2269+
2270+ lnav_data.ld_zoom_level = zoom_level.value ();
2271+
2272+ auto & hist_view = lnav_data.ld_views [LNV_HISTOGRAM];
2273+
2274+ if (hist_view.get_inner_height () > 0 ) {
2275+ auto old_time_opt = lnav_data.ld_hist_source2 .time_for_row (
2276+ lnav_data.ld_views [LNV_HISTOGRAM].get_top ());
2277+ if (old_time_opt) {
2278+ old_time = old_time_opt.value ().ri_time ;
2279+ rebuild_hist ();
2280+ lnav_data.ld_hist_source2 .row_for_time (old_time) |
2281+ [](auto new_top) {
2282+ lnav_data.ld_views [LNV_HISTOGRAM].set_top (new_top);
2283+ };
22872284 }
22882285 }
22892286
2290- if (!found) {
2291- auto um = lnav::console::user_message::error (
2292- attr_line_t (" invalid zoom level: " )
2293- .append (lnav::roles::symbol (args[1 ])))
2294- .with_snippets (ec.ec_source )
2295- .with_help (attr_line_t (" available levels: " )
2296- .join (lnav_zoom_strings, " , " ))
2297- .move ();
2298- return Err (um);
2287+ auto & spectro_view = lnav_data.ld_views [LNV_SPECTRO];
2288+
2289+ if (spectro_view.get_inner_height () > 0 ) {
2290+ auto old_time_opt = lnav_data.ld_spectro_source ->time_for_row (
2291+ lnav_data.ld_views [LNV_SPECTRO].get_selection ().value_or (0_vl));
2292+ ss.ss_granularity = ZOOM_LEVELS[lnav_data.ld_zoom_level ];
2293+ ss.invalidate ();
2294+ spectro_view.reload_data ();
2295+ if (old_time_opt) {
2296+ lnav_data.ld_spectro_source ->row_for_time (
2297+ old_time_opt.value ().ri_time )
2298+ |
2299+ [](auto new_top) {
2300+ lnav_data.ld_views [LNV_SPECTRO].set_selection (new_top);
2301+ };
2302+ }
22992303 }
2304+
2305+ lnav_data.ld_view_stack .set_needs_update ();
2306+
2307+ retval = fmt::format (FMT_STRING (" info: set zoom-level to {}" ),
2308+ lnav_zoom_strings[zoom_level.value ()]);
23002309 }
23012310
23022311 return Ok (retval);
0 commit comments