1
1
use re_auth:: client:: AuthDecorator ;
2
- use re_chunk:: Chunk ;
2
+ use re_chunk:: { Chunk , TimelineName } ;
3
3
use re_log_types:: {
4
- BlueprintActivationCommand , EntryId , LogMsg , SetStoreInfo , StoreId , StoreInfo , StoreKind ,
5
- StoreSource ,
4
+ AbsoluteTimeRange , BlueprintActivationCommand , EntryId , LogMsg , SetStoreInfo , StoreId ,
5
+ StoreInfo , StoreKind , StoreSource ,
6
6
} ;
7
7
use re_protos:: cloud:: v1alpha1:: GetChunksRequest ;
8
8
use re_protos:: cloud:: v1alpha1:: ext:: { Query , QueryLatestAt , QueryRange } ;
@@ -21,13 +21,16 @@ use crate::{
21
21
///
22
22
/// If you're not in a ui context you can safely ignore these.
23
23
pub enum UiCommand {
24
- SetLoopSelection {
25
- recording_id : re_log_types:: StoreId ,
26
- timeline : re_log_types:: Timeline ,
27
- time_range : re_log_types:: AbsoluteTimeRangeF ,
24
+ AddValidTimeRange {
25
+ store_id : StoreId ,
26
+
27
+ /// If `None`, signals that all timelines are entirely valid.
28
+ timeline : Option < TimelineName > ,
29
+ time_range : AbsoluteTimeRange ,
28
30
} ,
31
+
29
32
SetUrlFragment {
30
- recording_id : re_log_types :: StoreId ,
33
+ store_id : StoreId ,
31
34
fragment : re_uri:: Fragment ,
32
35
} ,
33
36
}
@@ -428,6 +431,7 @@ pub async fn stream_blueprint_and_partition_from_server(
428
431
cloned_from : None ,
429
432
store_source : StoreSource :: Unknown ,
430
433
store_version : None ,
434
+ is_partial : false ,
431
435
} ;
432
436
433
437
stream_partition_from_server (
@@ -460,13 +464,6 @@ pub async fn stream_blueprint_and_partition_from_server(
460
464
re_log:: debug!( "No blueprint dataset found for {uri}" ) ;
461
465
}
462
466
463
- let store_info = StoreInfo {
464
- store_id : recording_store_id,
465
- cloned_from : None ,
466
- store_source : StoreSource :: Unknown ,
467
- store_version : None ,
468
- } ;
469
-
470
467
let re_uri:: DatasetPartitionUri {
471
468
origin : _,
472
469
dataset_id,
@@ -475,6 +472,14 @@ pub async fn stream_blueprint_and_partition_from_server(
475
472
fragment,
476
473
} = uri;
477
474
475
+ let store_info = StoreInfo {
476
+ store_id : recording_store_id,
477
+ cloned_from : None ,
478
+ store_source : StoreSource :: Unknown ,
479
+ store_version : None ,
480
+ is_partial : time_range. is_some ( ) ,
481
+ } ;
482
+
478
483
stream_partition_from_server (
479
484
& mut client,
480
485
store_info,
@@ -563,17 +568,27 @@ async fn stream_partition_from_server(
563
568
564
569
let store_id = store_info. store_id . clone ( ) ;
565
570
566
- if let Some ( on_ui_cmd) = on_ui_cmd {
571
+ // Send UI commands for recording (as opposed to blueprint) stores.
572
+ if let Some ( on_ui_cmd) = on_ui_cmd
573
+ && store_info. store_id . is_recording ( )
574
+ {
567
575
if let Some ( time_range) = time_range {
568
- on_ui_cmd ( UiCommand :: SetLoopSelection {
569
- recording_id : store_id. clone ( ) ,
570
- timeline : time_range. timeline ,
576
+ on_ui_cmd ( UiCommand :: AddValidTimeRange {
577
+ store_id : store_id. clone ( ) ,
578
+ timeline : Some ( * time_range. timeline . name ( ) ) ,
571
579
time_range : time_range. into ( ) ,
572
580
} ) ;
581
+ } else {
582
+ on_ui_cmd ( UiCommand :: AddValidTimeRange {
583
+ store_id : store_id. clone ( ) ,
584
+ timeline : None ,
585
+ time_range : AbsoluteTimeRange :: EVERYTHING ,
586
+ } ) ;
573
587
}
588
+
574
589
if !fragment. is_empty ( ) {
575
590
on_ui_cmd ( UiCommand :: SetUrlFragment {
576
- recording_id : store_id. clone ( ) ,
591
+ store_id : store_id. clone ( ) ,
577
592
fragment,
578
593
} ) ;
579
594
}
0 commit comments