allow to set record description

[?]
Aug 14, 2025, 11:52 AM
AZ5D2LQUSYVWVEP7ISFDSZTMZ65UEHZATILMDQ4TYLCKJH4Q3TIAC

Dependencies

  • [2] UB2ITZJS refresh changed files on FS changes
  • [3] W7IUT3ZV start recording impl
  • [4] YBJRDOTC make all repo actions async
  • [5] A5YBC77V record!
  • [6] BJXUYQ2Y show untracked file contents in read-only text editor
  • [7] V55EAIWQ add src file LRU cache
  • [8] ZVI4AWER woot contents_diff
  • [9] ONRCENKT rm unnecessary state from repo's internal state
  • [10] BFN2VHZS refactor file stuff into sub-mod
  • [11] 23SFYK4Q big view refactor into a new crate
  • [12] OPXFZKEB view tests setup
  • [13] MYGIBRRH wip custom theme
  • [14] 3BK22XE5 add a test for hover btn and more refactors
  • [15] VCNKFNUF app init test
  • [16] ACDXXAX2 refactor main's updates into smaller fns
  • [17] FVA36HBV restart repo manager task if it crashes
  • [18] I56UGW7U make record test, fix log update
  • [19] X6AK4QPX finish recording test
  • [20] ESMM3FEL test selection reindexing
  • [21] SWDPAGF6 test channel name
  • [22] KQ3P3QRL update comments
  • [23] FL2ULDJN test record
  • [24] 2LWMGRUM test diff
  • [25] I2AG42PA new cols layout
  • [26] SASAN2XC use nav-scrollable
  • [27] 3TLPJ57B alt scroll via context and couple fixes
  • [28] WXQBBQ2A update nightly
  • [29] UR4J677R nav for log changes and refactors
  • [30] A6Z4O6RC actions menu
  • [31] JZXYSIYD channel selection!
  • [32] OJPGHVC3 entire log!
  • [33] 3XRG4BB6 rewritten nav-scrollable!
  • [34] WAOGSCOJ very nice refactor, wip adding channels logs
  • [35] WH57EHNM update tests
  • [36] EJPSD5XO shared allowed actions conditions between update and view
  • [37] YK3MOJJL chonky refactor, wip other channels logs & diffs
  • [38] PSKE5G36 view description of change
  • [39] 7WCB5YQJ refactor msgs and modules
  • [40] KM5PSZ4A watch repo once loaded
  • [41] KEPKF3WO unify diffs handling, simplify view
  • [42] YYKXNBFL test: add untracked file
  • [43] KWTBNTO3 diffs selection and scrolling
  • [44] XIASAP3G clippy
  • [45] 4WO3ZJM2 show untracked files' contents
  • [46] 7SSBM4UQ view: refactor repo view
  • [47] 5ZRDYL6K fork channel, fix recording esc key
  • [48] ZIUHKVJK update tests
  • [49] PTWZYQFR use nav-scrollable for repo status
  • [50] JE44NYHM display log files diffs
  • [51] UF5NJKAS test load repo
  • [52] 6YZAVBWU Initial commit
  • [53] DXAYDIMQ update to latest pijul
  • [54] AMPZ2BXK show changed files diffs (only Edit atm)
  • [55] 7BLZN73O add a key to refresh repo
  • [56] NWJD6VM6 mv libflowers libflorescence
  • [57] WT3GA27P add cursor with selection
  • [58] HC7ROIBC move main diffs state out of cursor
  • [59] TSFQFCB2 test got repo change
  • [60] D7A7MSIH allow to defer or abandon record, add buttons
  • [61] YKHE3XMW refactor diffs handling
  • [62] S2NVIFXR allow to enter record msg
  • [63] OC6DLIZ3 test record when nothing to record
  • [*] SWWE2R6M display basic repo stuff
  • [*] WGID4LS4 absolutely slayed testing with iced task

Change contents

  • replacement in libflorescence/src/testing.rs at line 85
    [22.323][21.857:919](),[21.857][21.857:919]()
    repo::record(&internal, "Initialized".to_string(), skey);
    [22.323]
    [15.1856]
    repo::record(&internal, "Initialized".to_string(), None, skey);
  • edit in libflorescence/src/repo.rs at line 61
    [34.350]
    [34.350]
    desc: Option<String>,
  • replacement in libflorescence/src/repo.rs at line 282
    [4.2830][5.721:760]()
    MsgIn::Record { msg, sk } => {
    [4.2830]
    [18.526]
    MsgIn::Record { msg, desc, sk } => {
  • replacement in libflorescence/src/repo.rs at line 285
    [18.619][9.935:985](),[9.935][9.935:985]()
    record(&internal_state, msg, sk);
    [18.619]
    [18.620]
    record(&internal_state, msg, desc, sk);
  • replacement in libflorescence/src/repo.rs at line 500
    [23.237][21.2821:2899](),[21.2821][21.2821:2899]()
    pub(crate) fn record(state: &InternalState, message: String, sk: Arc<SKey>) {
    [23.237]
    [3.361]
    pub(crate) fn record(
    state: &InternalState,
    msg: String,
    desc: Option<String>,
    sk: Arc<SKey>,
    ) {
  • replacement in libflorescence/src/repo.rs at line 533
    [5.1182][5.1182:1199]()
    message,
    [5.1182]
    [5.1199]
    message: msg,
  • replacement in libflorescence/src/repo.rs at line 535
    [5.1216][5.1216:1285]()
    // TODO: allow to set description
    description: None,
    [5.1216]
    [5.1285]
    description: desc,
  • replacement in libflorescence/src/repo/test.rs at line 103
    [24.248][24.248:339]()
    std::fs::write(repo_path.join(DEFAULT_IGNORE_FILE), "some content")
    .unwrap();
    [24.248]
    [23.679]
    let file_path = DEFAULT_IGNORE_FILE;
    let full_file_path = repo_path.join(DEFAULT_IGNORE_FILE);
    std::fs::write(&full_file_path, "some content").unwrap();
  • replacement in libflorescence/src/repo/test.rs at line 109
    [23.799][23.799:862]()
    repo::record(&internal, "some message".to_string(), skey);
    [23.727]
    [23.862]
    let msg = "some message";
    repo::record(&internal, msg.to_string(), None, skey);
  • edit in libflorescence/src/repo/test.rs at line 114
    [23.964]
    [24.358]
    let repo::LogEntry {
    hash: _,
    message,
    description,
    file_paths,
    } = log.first().unwrap();
    assert_eq!(message, msg);
    assert_eq!(description, &None);
    assert_eq!(file_paths.len(), 1);
    assert_eq!(file_paths.first().unwrap(), file_path);
  • replacement in inflorescence_view/src/view.rs at line 8
    [33.2464][39.54:126]()
    use inflorescence_model::model::{Log, ReadyState, RecordMsg, SubState};
    [33.2464]
    [39.126]
    use inflorescence_model::model::{Log, ReadyState, RecordChanges, SubState};
  • edit in inflorescence_view/src/view.rs at line 31
    [36.371]
    [36.371]
    EditRecordDesc(text_editor::Action),
  • replacement in inflorescence_view/src/view.rs at line 36
    [36.407][34.3720:3740](),[11.15358][34.3720:3740]()
    pub fn view<'a, F>(
    [36.407]
    [36.408]
    pub fn main<'a, F>(
  • replacement in inflorescence_view/src/view.rs at line 98
    [34.4591][34.4591:4611]()
    record_msg,
    [34.4591]
    [34.4611]
    record_changes: record_msg,
  • replacement in inflorescence_view/src/view.rs at line 172
    [32.2433][29.3522:3598](),[29.3522][29.3522:3598]()
    if let Some(RecordMsg::Typing(msg_content)) = record_msg.as_ref() {
    [32.2433]
    [29.3598]
    if let Some(RecordChanges::Typing { msg, desc }) = record_msg.as_ref() {
  • replacement in inflorescence_view/src/view.rs at line 174
    [29.3622][29.3622:3803]()
    el(text_editor(msg_content)
    .placeholder("Type something here...")
    .on_action(Msg::EditRecordMsg)),
    el(row([
    [29.3622]
    [39.702]
    el(column([
    view_header("Short message:"),
    el(text_editor(msg)
    .placeholder("Type short message here...")
    .on_action(Msg::EditRecordMsg)),
    ])),
    view_header("Longer description (optional):"),
    el(column([el(text_editor(desc)
    .placeholder("Type longer description here...")
    .on_action(Msg::EditRecordDesc))])),
    el(column([el(row([
  • replacement in inflorescence_view/src/view.rs at line 194
    [30.1151][29.4027:4064](),[39.1160][29.4027:4064](),[36.1432][29.4027:4064](),[29.4027][29.4027:4064]()
    ])),
    ]))
    [39.1160]
    [29.4064]
    ]))])),
    ])
    .spacing(SPACING))
  • replacement in inflorescence_view/src/view.rs at line 223
    [34.6281][34.6281:6421]()
    view_diff_header(format!(
    "Untracked file {path} contents:"
    )),
    [34.6281]
    [34.6421]
    view_header(format!("Untracked file {path} contents:")),
  • replacement in inflorescence_view/src/view.rs at line 246
    [34.7339][34.7339:7419]()
    view_diff_header(format!("Changed file {path} diff:")),
    [34.7339]
    [34.7419]
    view_header(format!("Changed file {path} diff:")),
  • replacement in inflorescence_view/src/view.rs at line 302
    [25.916][29.5969:6043]()
    let depth = if let Some(RecordMsg::Typing(_)) = record_msg.as_ref() {
    [25.916]
    [25.996]
    let depth = if let Some(RecordChanges::Typing { .. }) = record_msg.as_ref()
    {
  • replacement in inflorescence_view/src/view.rs at line 439
    [34.12390][34.12390:12436]()
    view_diff_header(format!(
    [34.12390]
    [34.12436]
    view_header(format!(
  • replacement in inflorescence_view/src/view.rs at line 677
    [37.11950][37.11950:11996]()
    view_diff_header(format!(
    [37.11950]
    [37.11996]
    view_header(format!(
  • replacement in inflorescence_view/src/view.rs at line 840
    [34.16146][34.16146:16192]()
    view_diff_header(format!(
    [34.16146]
    [34.16192]
    view_header(format!(
  • replacement in inflorescence_view/src/view.rs at line 944
    [34.20176][39.2714:2739]()
    fn view_diff_header<'a>(
    [34.20176]
    [39.2739]
    fn view_header<'a>(
  • replacement in inflorescence_view/src/view.rs at line 1052
    [38.2258][38.2258:2322]()
    view_diff_header(format!("{short_hash} message:")),
    [38.2258]
    [38.2322]
    view_header(format!("{short_hash} message:")),
  • replacement in inflorescence_view/src/view.rs at line 1057
    [38.2472][39.3134:3184]()
    view_diff_header("Description:"),
    [38.2472]
    [38.2531]
    view_header("Description:"),
  • replacement in inflorescence_view/src/view.rs at line 1063
    [38.2674][38.2674:2730]()
    view_diff_header("Changed files:".to_string()),
    [38.2674]
    [38.2730]
    view_header("Changed files:".to_string()),
  • replacement in inflorescence_view/src/view/test.rs at line 1
    [12.4223][35.438:455]()
    use super::view;
    [12.4223]
    [14.932]
    use super::main;
  • replacement in inflorescence_view/src/view/test.rs at line 30
    [35.624][35.624:683]()
    let view = |state| view(state, |_id| None, window_id);
    [35.624]
    [12.4596]
    let view = |state| main(state, |_id| None, window_id);
  • replacement in inflorescence_view/src/view/test.rs at line 66
    [35.1094][35.1094:1125]()
    record_msg: default(),
    [35.1094]
    [35.1125]
    record_changes: default(),
  • replacement in inflorescence_view/src/view/test.rs at line 110
    [35.1569][35.1569:1600]()
    record_msg: default(),
    [35.1569]
    [35.1600]
    record_changes: default(),
  • replacement in inflorescence_view/src/view/test.rs at line 149
    [35.2380][35.2380:2411]()
    record_msg: default(),
    [35.2380]
    [35.2411]
    record_changes: default(),
  • replacement in inflorescence_view/src/theme.rs at line 346
    [13.5285][13.5285:5335]()
    placeholder: background.strong.color,
    [13.5285]
    [13.5335]
    placeholder: background.strongest.color,
  • replacement in inflorescence_model/src/model.rs at line 60
    [39.4986][39.4986:5025]()
    pub record_msg: Option<RecordMsg>,
    [39.4986]
    [39.5025]
    pub record_changes: Option<RecordChanges>,
  • replacement in inflorescence_model/src/model.rs at line 67
    [39.5191][39.5191:5280]()
    pub enum RecordMsg {
    Typing(text_editor::Content),
    Canceled { old_msg: String },
    [39.5191]
    [39.5280]
    pub enum RecordChanges {
    Typing {
    msg: text_editor::Content,
    desc: text_editor::Content,
    },
    Canceled {
    old_msg: String,
    old_desc: String,
    },
  • replacement in inflorescence_model/src/action.rs at line 1
    [36.3501][39.7079:7122]()
    use crate::model::{ReadyState, RecordMsg};
    [36.3501]
    [39.7122]
    use crate::model::{ReadyState, RecordChanges};
  • edit in inflorescence_model/src/action.rs at line 31
    [36.4320]
    [36.4320]
    FocusNext,
    FocusPrev,
  • edit in inflorescence_model/src/action.rs at line 68
    [36.5127]
    [36.5127]
    (FocusNext, FocusNext) => true,
    (FocusPrev, FocusPrev) => true,
  • edit in inflorescence_model/src/action.rs at line 83
    [36.5587]
    [36.5587]
    (FocusNext, _) => false,
    (FocusPrev, _) => false,
  • replacement in inflorescence_model/src/action.rs at line 166
    [36.7684][36.7684:7704]()
    key: "C-d",
    [36.7684]
    [36.7704]
    key: "C-p",
  • edit in inflorescence_model/src/action.rs at line 175
    [36.7922]
    [36.7922]
    let focus_next = || Binding {
    key: "TAB",
    label: "focus next",
    msg: Some(FilteredMsg::FocusNext),
    };
    let focus_prev = || Binding {
    key: "TAB",
    label: "focus previous",
    msg: Some(FilteredMsg::FocusPrev),
    };
  • edit in inflorescence_model/src/action.rs at line 234
    [36.8944][36.8944:9019]()
    let forking_channel = matches!(sub, SubState::ForkingChannel { .. });
  • edit in inflorescence_model/src/action.rs at line 262
    [36.10048]
    [36.10048]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 276
    [36.10450]
    [36.10450]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 288
    [36.10821]
    [36.10821]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 292
    [36.10864]
    [36.10864]
    ma.push(focus_next());
    ma.push(focus_prev());
  • edit in inflorescence_model/src/action.rs at line 327
    [37.20705]
    [37.20705]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 337
    [37.20994]
    [37.20994]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 347
    [36.11982]
    [37.21250]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 357
    [37.21510]
    [36.11982]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 371
    [36.12498]
    [36.12498]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 381
    [36.12804]
    [36.12804]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 391
    [36.13054]
    [36.13054]
    ma.push(fork_channel());
    ma.push(refresh_repo());
  • edit in inflorescence_model/src/action.rs at line 396
    [36.13072][36.13072:13150]()
    push_if(!forking_channel, fork_channel, ma);
    ma.push(refresh_repo());
  • replacement in inflorescence_model/src/action.rs at line 503
    [36.15219][36.15219:15239]()
    record_msg,
    [36.15219]
    [36.15239]
    record_changes,
  • replacement in inflorescence_model/src/action.rs at line 515
    [36.15498][36.15498:15640]()
    match record_msg {
    Some(RecordMsg::Typing(_)) => return SubState::Recording,
    Some(RecordMsg::Canceled { .. }) | None => {
    [36.15498]
    [36.15640]
    match record_changes {
    Some(RecordChanges::Typing { .. }) => return SubState::Recording,
    Some(RecordChanges::Canceled { .. }) | None => {
  • replacement in inflorescence/src/test.rs at line 6
    [39.8653][39.8653:8720]()
    use inflorescence_model::model::{ReadyState, RecordMsg, SubState};
    [39.8653]
    [39.8720]
    use inflorescence_model::model::{ReadyState, RecordChanges, SubState};
  • replacement in inflorescence/src/test.rs at line 34
    [15.2848][35.2944:2992]()
    assert_eq!(state.sub.repo_path, repo_path);
    [15.2848]
    [15.2892]
    assert_eq!(state.model.repo_path, repo_path);
  • replacement in inflorescence/src/test.rs at line 149
    [35.3337][35.3337:3388]()
    assert!(ready_state.record_msg.is_some());
    [35.3337]
    [35.3388]
    assert!(ready_state.record_changes.is_some());
  • replacement in inflorescence/src/test.rs at line 162
    [35.3446][35.3446:3497]()
    assert!(ready_state.record_msg.is_some());
    [35.3446]
    [35.3497]
    assert!(ready_state.record_changes.is_some());
  • replacement in inflorescence/src/test.rs at line 164
    [35.3522][35.3522:3609]()
    ready_state.record_msg.as_ref().unwrap(),
    RecordMsg::Typing(_)
    [35.3522]
    [35.3609]
    ready_state.record_changes.as_ref().unwrap(),
    RecordChanges::Typing { .. }
  • replacement in inflorescence/src/test.rs at line 167
    [35.3620][35.3620:3717]()
    if let RecordMsg::Typing(content) =
    ready_state.record_msg.as_ref().unwrap()
    [35.3620]
    [35.3717]
    if let RecordChanges::Typing { msg, desc } =
    ready_state.record_changes.as_ref().unwrap()
  • replacement in inflorescence/src/test.rs at line 170
    [35.3727][35.3727:3780]()
    assert_eq!(&content.text(), record_msg);
    [35.3727]
    [35.3780]
    assert_eq!(&msg.text(), record_msg);
    assert_eq!(&desc.text(), "");
  • replacement in inflorescence/src/test.rs at line 262
    [35.4476][35.4476:4527]()
    assert!(ready_state.record_msg.is_some());
    [35.4476]
    [35.4527]
    assert!(ready_state.record_changes.is_some());
  • replacement in inflorescence/src/test.rs at line 275
    [35.4585][35.4585:4636]()
    assert!(ready_state.record_msg.is_some());
    [35.4585]
    [35.4636]
    assert!(ready_state.record_changes.is_some());
  • replacement in inflorescence/src/test.rs at line 277
    [35.4661][35.4661:4748]()
    ready_state.record_msg.as_ref().unwrap(),
    RecordMsg::Typing(_)
    [35.4661]
    [35.4748]
    ready_state.record_changes.as_ref().unwrap(),
    RecordChanges::Typing { .. }
  • replacement in inflorescence/src/test.rs at line 280
    [35.4759][35.4759:4856]()
    if let RecordMsg::Typing(content) =
    ready_state.record_msg.as_ref().unwrap()
    [35.4759]
    [35.4856]
    if let RecordChanges::Typing { msg, desc } =
    ready_state.record_changes.as_ref().unwrap()
  • replacement in inflorescence/src/test.rs at line 283
    [35.4866][35.4866:4919]()
    assert_eq!(&content.text(), record_msg);
    [35.4866]
    [35.4919]
    assert_eq!(&msg.text(), record_msg);
    assert_eq!(&desc.text(), "");
  • replacement in inflorescence/src/test.rs at line 295
    [35.4987][35.4987:5038]()
    assert!(ready_state.record_msg.is_none());
    [35.4987]
    [35.5038]
    assert!(ready_state.record_changes.is_none());
  • replacement in inflorescence/src/test.rs at line 299
    [18.4699][18.4699:4744]()
    // Case: start -> edit -> defer -> start
    [18.4699]
    [19.2066]
    // Case: start -> edit msg -> defer -> start -> abandon
  • replacement in inflorescence/src/test.rs at line 308
    [35.5102][35.5102:5153]()
    assert!(ready_state.record_msg.is_some());
    [35.5102]
    [35.5153]
    assert!(ready_state.record_changes.is_some());
  • edit in inflorescence/src/test.rs at line 318
    [19.2446]
    [19.2446]
    );
    {
    let ready_state = get_ready_state(&state);
    assert!(ready_state.record_changes.is_some());
    assert_matches!(
    ready_state.record_changes.as_ref().unwrap(),
    RecordChanges::Typing { .. }
    );
    if let RecordChanges::Typing { msg, desc } =
    ready_state.record_changes.as_ref().unwrap()
    {
    assert_eq!(&msg.text(), record_msg);
    assert_eq!(&desc.text(), "");
    }
    }
    // Defer the record
    let _task = update(
    &mut state,
    Msg::View(view::Msg::Action(action::FilteredMsg::PostponeRecord)),
    );
    {
    let ready_state = get_ready_state(&state);
    assert!(ready_state.record_changes.is_some());
    assert_matches!(
    ready_state.record_changes.as_ref().unwrap(),
    RecordChanges::Canceled { old_msg, old_desc: _ } if old_msg == record_msg
    );
    }
    // Start again
    // Start a record - there's an an added file from previous case
    let _task = update(
    &mut state,
    Msg::View(view::Msg::Action(action::FilteredMsg::StartRecord)),
  • replacement in inflorescence/src/test.rs at line 356
    [35.5211][35.5211:5262]()
    assert!(ready_state.record_msg.is_some());
    [35.5211]
    [35.5262]
    assert!(ready_state.record_changes.is_some());
    assert!(ready_state.record_changes.is_some());
    assert_matches!(
    ready_state.record_changes.as_ref().unwrap(),
    RecordChanges::Typing{ msg, desc: _ } if msg.text() == record_msg
    );
    }
    // Abandon it
    let _task = update(
    &mut state,
    Msg::View(view::Msg::Action(action::FilteredMsg::DiscardRecord)),
    );
    {
    let ready_state = get_ready_state(&state);
    assert!(ready_state.record_changes.is_none());
    }
    // _________________________________________________________________________
    // Case: start -> edit desc -> defer -> start
    // Start a record - there's an an added file from previous case
    let _task = update(
    &mut state,
    Msg::View(view::Msg::Action(action::FilteredMsg::StartRecord)),
    );
    {
    let ready_state = get_ready_state(&state);
    assert!(ready_state.record_changes.is_some());
    }
    // Edit the record desc
    let record_desc = "Added honky tonk music";
    let _task = update(
    &mut state,
    Msg::View(view::Msg::EditRecordDesc(text_editor::Action::Edit(
    text_editor::Edit::Paste(Arc::new(record_msg.to_string())),
    ))),
    );
    {
    let ready_state = get_ready_state(&state);
    assert!(ready_state.record_changes.is_some());
  • replacement in inflorescence/src/test.rs at line 399
    [35.5287][35.5287:5374]()
    ready_state.record_msg.as_ref().unwrap(),
    RecordMsg::Typing(_)
    [35.5287]
    [35.5374]
    ready_state.record_changes.as_ref().unwrap(),
    RecordChanges::Typing { .. }
  • replacement in inflorescence/src/test.rs at line 402
    [35.5385][35.5385:5482]()
    if let RecordMsg::Typing(content) =
    ready_state.record_msg.as_ref().unwrap()
    [35.5385]
    [35.5482]
    if let RecordChanges::Typing { msg, desc } =
    ready_state.record_changes.as_ref().unwrap()
  • replacement in inflorescence/src/test.rs at line 405
    [35.5492][35.5492:5545]()
    assert_eq!(&content.text(), record_msg);
    [35.5492]
    [35.5545]
    assert_eq!(&msg.text(), "");
    assert_eq!(&desc.text(), record_desc);
  • replacement in inflorescence/src/test.rs at line 417
    [35.5613][35.5613:5664]()
    assert!(ready_state.record_msg.is_some());
    [35.5613]
    [35.5664]
    assert!(ready_state.record_changes.is_some());
  • replacement in inflorescence/src/test.rs at line 419
    [35.5689][35.5689:5812]()
    ready_state.record_msg.as_ref().unwrap(),
    RecordMsg::Canceled { old_msg } if old_msg == record_msg
    [35.5689]
    [35.5812]
    ready_state.record_changes.as_ref().unwrap(),
    RecordChanges::Canceled { old_msg, old_desc: _ } if old_msg == record_desc
  • replacement in inflorescence/src/test.rs at line 432
    [35.5887][35.5887:5989]()
    assert!(ready_state.record_msg.is_some());
    assert!(ready_state.record_msg.is_some());
    [35.5887]
    [35.5989]
    assert!(ready_state.record_changes.is_some());
    assert!(ready_state.record_changes.is_some());
  • replacement in inflorescence/src/test.rs at line 435
    [35.6014][35.6014:6131]()
    ready_state.record_msg.as_ref().unwrap(),
    RecordMsg::Typing(msg) if msg.text() == record_msg
    [35.6014]
    [35.6131]
    ready_state.record_changes.as_ref().unwrap(),
    RecordChanges::Typing{ msg: _, desc } if desc.text() == record_desc
  • edit in inflorescence/src/test.rs at line 439
    [35.6148]
    [18.4744]
    // Abandon it
    let _task = update(
    &mut state,
    Msg::View(view::Msg::Action(action::FilteredMsg::DiscardRecord)),
    );
    {
    let ready_state = get_ready_state(&state);
    assert!(ready_state.record_changes.is_none());
    }
  • replacement in inflorescence/src/test.rs at line 469
    [35.6206][35.6206:6257]()
    assert!(ready_state.record_msg.is_none());
    [35.6206]
    [35.6257]
    assert!(ready_state.record_changes.is_none());
  • replacement in inflorescence/src/test.rs at line 642
    [20.1063][35.6800:6917]()
    let SubState::Ready(ready_state) = &mut state.sub.sub else {
    panic!("Unexpected state: {:?}", state.sub)
    [20.1063]
    [35.6917]
    let SubState::Ready(ready_state) = &mut state.model.sub else {
    panic!("Unexpected state: {:?}", state.model)
  • replacement in inflorescence/src/test.rs at line 1014
    [35.10329][35.10329:10446]()
    let SubState::Ready(ready_state) = &state.sub.sub else {
    panic!("Unexpected state: {:?}", state.sub.sub)
    [35.10329]
    [35.10446]
    let SubState::Ready(ready_state) = &state.model.sub else {
    panic!("Unexpected state: {:?}", state.model.sub)
  • replacement in inflorescence/src/test.rs at line 1022
    [35.10551][35.10551:10668]()
    let state_dbg = format!("{:?}", state.sub.sub);
    let SubState::Ready(ready_state) = &mut state.sub.sub else {
    [35.10551]
    [35.10668]
    let state_dbg = format!("{:?}", state.model.sub);
    let SubState::Ready(ready_state) = &mut state.model.sub else {
  • replacement in inflorescence/src/main.rs at line 9
    [26.2366][39.11569:11637]()
    use inflorescence_model::model::{Log, Logs, ReadyState, RecordMsg};
    [26.2366]
    [39.11637]
    use inflorescence_model::model::{Log, Logs, ReadyState, RecordChanges};
  • replacement in inflorescence/src/main.rs at line 90
    [8.965][36.23560:23589]()
    let sub = model::State {
    [8.965]
    [36.23589]
    let model = model::State {
  • replacement in inflorescence/src/main.rs at line 104
    [10.164][36.23782:23799]()
    sub,
    [10.164]
    [2.1520]
    model,
  • replacement in inflorescence/src/main.rs at line 116
    [10.189][39.11719:11742]()
    sub: model::State,
    [10.189]
    [7.1025]
    model: model::State,
  • replacement in inflorescence/src/main.rs at line 137
    [11.25998][34.80071:80110]()
    match &mut state.sub.sub {
    [11.25998]
    [36.23910]
    match &mut state.model.sub {
  • replacement in inflorescence/src/main.rs at line 141
    [34.80301][36.23976:24052]()
    state.sub.sub = model::SubState::Ready(ReadyState {
    [34.80301]
    [34.80371]
    state.model.sub = model::SubState::Ready(ReadyState {
  • replacement in inflorescence/src/main.rs at line 146
    [34.80548][34.80548:80599]()
    record_msg: default(),
    [34.80548]
    [34.80599]
    record_changes: default(),
  • replacement in inflorescence/src/main.rs at line 166
    [17.321][34.81020:81092]()
    start_task_to_manage_repo(state.sub.repo_path.clone());
    [17.321]
    [17.389]
    start_task_to_manage_repo(state.model.repo_path.clone());
  • replacement in inflorescence/src/main.rs at line 183
    [36.24296][36.24296:24365]()
    state.sub.allowed_actions = action::get_allowed(&state.sub.sub);
    [36.24296]
    [36.24365]
    state.model.allowed_actions = action::get_allowed(&state.model.sub);
  • replacement in inflorescence/src/main.rs at line 194
    [37.58599][37.58599:58644]()
    }) = model::is_ready_mut(&mut state.sub)
    [37.58599]
    [37.58644]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 245
    [25.5165][34.82923:82965]()
    state.sub.window_size = size;
    [25.5165]
    [25.5203]
    state.model.window_size = size;
  • replacement in inflorescence/src/main.rs at line 278
    [39.11876][37.60026:60090](),[36.24554][37.60026:60090]()
    && !action::is_allowed(&state.sub.allowed_actions, msg)
    [39.11876]
    [36.24619]
    && !action::is_allowed(&state.model.allowed_actions, msg)
  • edit in inflorescence/src/main.rs at line 288
    [39.12019]
    [39.12019]
    view::Msg::EditRecordDesc(action) => edit_record_desc(state, action),
  • replacement in inflorescence/src/main.rs at line 293
    [36.25307][37.60210:60263]()
    }) = model::is_ready_mut(&mut state.sub)
    [36.25307]
    [36.25357]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 306
    [39.12284][39.12284:12337]()
    }) = model::is_ready_mut(&mut state.sub)
    [39.12284]
    [39.12337]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 335
    [34.83140][37.60292:60345]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.83140]
    [34.83190]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 377
    [34.83922][34.83922:83950]()
    record_msg,
    [34.83922]
    [34.83950]
    record_changes: record_msg,
  • replacement in inflorescence/src/main.rs at line 380
    [34.84007][37.60346:60399]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.84007]
    [31.18722]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 382
    [31.18736][34.84058:84248]()
    if let Some(RecordMsg::Typing(content)) = record_msg.as_ref() {
    *record_msg = Some(RecordMsg::Canceled {
    old_msg: content.text(),
    [31.18736]
    [34.84248]
    if let Some(RecordChanges::Typing { msg, desc }) =
    record_msg.as_ref()
    {
    *record_msg = Some(RecordChanges::Canceled {
    old_msg: msg.text(),
    old_desc: desc.text(),
  • replacement in inflorescence/src/main.rs at line 411
    [34.84946][37.60400:60453]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.84946]
    [34.84996]
    }) = model::is_ready_mut(&mut state.model)
  • edit in inflorescence/src/main.rs at line 428
    [39.13087]
    [39.13087]
    action::FilteredMsg::FocusNext => focus_next(state),
    action::FilteredMsg::FocusPrev => focus_prev(state),
  • replacement in inflorescence/src/main.rs at line 436
    [36.26154][37.60559:60612]()
    }) = model::is_ready_mut(&mut state.sub)
    [36.26154]
    [36.26204]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 447
    [34.85578][37.60613:60666]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.85578]
    [34.85628]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 465
    [34.85988][37.60760:60813]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.85988]
    [34.86038]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 490
    [37.61030][37.61030:61071]()
    }) = model::is_ready(&state.sub)
    [37.61030]
    [37.61071]
    }) = model::is_ready(&state.model)
  • replacement in inflorescence/src/main.rs at line 618
    [34.86701][37.64718:64763]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.86701]
    [31.19196]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 671
    [34.87603][37.64764:64809]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.87603]
    [31.19814]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 729
    [34.88525][34.88525:88554](),[34.88554][37.64810:64855]()
    repo, record_msg, ..
    }) = model::is_ready_mut(&mut state.sub)
    [34.88525]
    [34.88596]
    repo,
    record_changes,
    ..
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 736
    [16.4031][34.88646:88719]()
    } else if let Some(RecordMsg::Typing(_)) = record_msg.as_ref() {
    [16.4031]
    [16.4110]
    } else if let Some(RecordChanges::Typing { .. }) =
    record_changes.as_ref()
    {
  • replacement in inflorescence/src/main.rs at line 742
    [16.4225][34.88720:88772](),[34.88772][16.4283:4525](),[16.4283][16.4283:4525]()
    let content = match record_msg.take() {
    Some(RecordMsg::Canceled { old_msg }) => {
    text_editor::Content::with_text(&old_msg)
    }
    None | Some(RecordMsg::Typing(_)) => {
    text_editor::Content::new()
    [16.4225]
    [6.1071]
    let (msg, desc) = match record_changes.take() {
    Some(RecordChanges::Canceled { old_msg, old_desc }) => (
    text_editor::Content::with_text(&old_msg),
    text_editor::Content::with_text(&old_desc),
    ),
    None | Some(RecordChanges::Typing { .. }) => {
    (text_editor::Content::new(), text_editor::Content::new())
  • replacement in inflorescence/src/main.rs at line 751
    [16.4541][34.88773:88833]()
    *record_msg = Some(RecordMsg::Typing(content));
    [16.4541]
    [16.4606]
    *record_changes = Some(RecordChanges::Typing { msg, desc });
  • replacement in inflorescence/src/main.rs at line 764
    [34.88863][34.88863:88920]()
    record_msg: Some(RecordMsg::Typing(record_msg)),
    [34.88863]
    [34.88920]
    record_changes: Some(RecordChanges::Typing { msg, desc: _ }),
  • replacement in inflorescence/src/main.rs at line 766
    [34.88931][37.64856:64901]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.88931]
    [34.88973]
    }) = model::is_ready_mut(&mut state.model)
    {
    msg.perform(action);
    }
    Task::none()
    }
    fn edit_record_desc(
    state: &mut State,
    action: text_editor::Action,
    ) -> Task<Msg> {
    if let Some(ReadyState {
    record_changes: Some(RecordChanges::Typing { msg: _, desc }),
    ..
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 782
    [34.88979][16.4953:4989](),[16.4953][16.4953:4989]()
    record_msg.perform(action);
    [34.88979]
    [16.4989]
    desc.perform(action);
  • replacement in inflorescence/src/main.rs at line 789
    [34.89009][34.89009:89029]()
    record_msg,
    [34.89009]
    [34.89029]
    record_changes,
  • replacement in inflorescence/src/main.rs at line 794
    [34.89110][37.64902:64947](),[37.64947][35.10764:10830](),[34.89152][35.10764:10830]()
    }) = model::is_ready_mut(&mut state.sub)
    && let Some(RecordMsg::Typing(msg)) = record_msg.as_ref()
    [34.89110]
    [34.89152]
    }) = model::is_ready_mut(&mut state.model)
    && let Some(RecordChanges::Typing { msg, desc }) =
    record_changes.as_ref()
  • replacement in inflorescence/src/main.rs at line 798
    [34.89158][35.10831:10896]()
    let msg = msg.text();
    if msg.trim().is_empty() {
    [34.89158]
    [35.10896]
    let msg = msg.text().trim().to_string();
    let desc = desc.text();
    let desc = desc.trim();
    let desc = if desc.is_empty() {
    None
    } else {
    Some(desc.to_string())
    };
    if msg.is_empty() {
  • replacement in inflorescence/src/main.rs at line 814
    [35.11165][35.11165:11220]()
    .send(repo::MsgIn::Record { msg, sk })
    [35.11165]
    [35.11220]
    .send(repo::MsgIn::Record { msg, desc, sk })
  • replacement in inflorescence/src/main.rs at line 819
    [35.11335][35.11335:11367]()
    *record_msg = None;
    [35.11335]
    [31.20698]
    *record_changes = None;
  • replacement in inflorescence/src/main.rs at line 828
    [16.5886][34.90121:90170](),[34.90170][37.64948:64992](),[37.64992][35.11636:11702](),[34.90211][35.11636:11702]()
    if let Some(ReadyState { record_msg, .. }) =
    model::is_ready_mut(&mut state.sub)
    && let Some(RecordMsg::Typing(msg)) = record_msg.as_ref()
    [16.5886]
    [34.90211]
    if let Some(ReadyState { record_changes, .. }) =
    model::is_ready_mut(&mut state.model)
    && let Some(RecordChanges::Typing { msg, desc }) =
    record_changes.as_ref()
  • replacement in inflorescence/src/main.rs at line 834
    [35.11737][35.11737:11841]()
    *record_msg = if !old_msg.trim().is_empty() {
    Some(RecordMsg::Canceled { old_msg })
    [35.11737]
    [35.11841]
    let old_msg = old_msg.trim();
    let old_desc = desc.text();
    let old_desc = old_desc.trim();
    *record_changes = if !old_msg.is_empty() || !old_desc.is_empty() {
    let old_msg = old_msg.to_string();
    let old_desc = old_desc.to_string();
    Some(RecordChanges::Canceled { old_msg, old_desc })
  • replacement in inflorescence/src/main.rs at line 849
    [16.6236][34.90503:90552](),[34.90552][37.64993:65037](),[37.65037][35.11887:11954](),[34.90593][35.11887:11954]()
    if let Some(ReadyState { record_msg, .. }) =
    model::is_ready_mut(&mut state.sub)
    && let Some(RecordMsg::Typing(_msg)) = record_msg.as_ref()
    [16.6236]
    [34.90593]
    if let Some(ReadyState {
    record_changes: record_msg,
    ..
    }) = model::is_ready_mut(&mut state.model)
    && let Some(RecordChanges::Typing { .. }) = record_msg.as_ref()
  • edit in inflorescence/src/main.rs at line 860
    [16.6363]
    [34.90711]
    fn focus_next(state: &mut State) -> Task<Msg> {
    if let Some(ReadyState {
    record_changes: record_msg,
    ..
    }) = model::is_ready_mut(&mut state.model)
    && let Some(RecordChanges::Typing { .. }) = record_msg.as_ref()
    {
    task::widget_focus_next()
    } else {
    Task::none()
    }
    }
    fn focus_prev(state: &mut State) -> Task<Msg> {
    if let Some(ReadyState {
    record_changes: record_msg,
    ..
    }) = model::is_ready_mut(&mut state.model)
    && let Some(RecordChanges::Typing { .. }) = record_msg.as_ref()
    {
    task::widget_focus_previous()
    } else {
    Task::none()
    }
    }
  • replacement in inflorescence/src/main.rs at line 887
    [34.90783][34.90783:90814]()
    match &mut state.sub.sub {
    [34.90783]
    [36.26375]
    match &mut state.model.sub {
  • replacement in inflorescence/src/main.rs at line 889
    [36.26435][34.90868:90921](),[34.90868][34.90868:90921]()
    state.sub.sub = if user_ids.len() == 1 {
    [36.26435]
    [34.90921]
    state.model.sub = if user_ids.len() == 1 {
  • replacement in inflorescence/src/main.rs at line 896
    [34.91174][34.91174:91217]()
    record_msg: default(),
    [34.91174]
    [34.91217]
    record_changes: default(),
  • replacement in inflorescence/src/main.rs at line 938
    [16.8807][34.91741:91804]()
    .watch(&state.sub.repo_path, RecursiveMode::Recursive)
    [16.8807]
    [16.8866]
    .watch(&state.model.repo_path, RecursiveMode::Recursive)
  • replacement in inflorescence/src/main.rs at line 955
    [34.91920][34.91920:91951]()
    match &mut state.sub.sub {
    [34.91920]
    [36.26724]
    match &mut state.model.sub {
  • replacement in inflorescence/src/main.rs at line 965
    [34.92232][34.92232:92259]()
    record_msg: _,
    [34.92232]
    [34.92259]
    record_changes: _,
  • replacement in inflorescence/src/main.rs at line 1215
    [34.96461][37.65058:65103]()
    }) = model::is_ready_mut(&mut state.sub)
    [34.96461]
    [34.96503]
    }) = model::is_ready_mut(&mut state.model)
  • replacement in inflorescence/src/main.rs at line 1288
    [32.53345][37.66408:66489]()
    if let Some(ReadyState { logs, .. }) = model::is_ready_mut(&mut state.sub) {
    [32.53345]
    [34.100464]
    if let Some(ReadyState { logs, .. }) = model::is_ready_mut(&mut state.model)
    {
  • replacement in inflorescence/src/main.rs at line 1300
    [34.100663][37.66490:66571]()
    if let Some(ReadyState { logs, .. }) = model::is_ready_mut(&mut state.sub) {
    [34.100663]
    [34.101099]
    if let Some(ReadyState { logs, .. }) = model::is_ready_mut(&mut state.model)
    {
  • edit in inflorescence/src/main.rs at line 1360
    [36.28785]
    [31.24286]
    }
    Key::Named(key::Named::Tab) => {
    action(action::FilteredMsg::FocusNext)
  • edit in inflorescence/src/main.rs at line 1414
    [36.30051]
    [27.2131]
    }
    Key::Named(key::Named::Tab) if mods == Modifiers::SHIFT => {
    action(action::FilteredMsg::FocusPrev)
  • replacement in inflorescence/src/main.rs at line 1490
    [28.3737][39.16182:16198](),[39.16198][34.101199:101219](),[34.101199][34.101199:101219]()
    view::view(
    &state.sub,
    [28.3737]
    [34.101219]
    view::main(
    &state.model,
  • edit in inflorescence/src/file.rs at line 67
    [10.3795][37.67088:67123]()
    dbg!("LOAD", &id);
  • edit in iced_utils/src/task/wrappers.rs at line 73
    [26.10219]
    [26.10219]
    /// Focuses the previous focusable widget.
    pub fn widget_focus_previous<T>() -> Task<T> {
    #[cfg(not(any(test, feature = "testing")))]
    let task = iced::widget::focus_previous();
  • edit in iced_utils/src/task/wrappers.rs at line 79
    [26.10220]
    [26.10220]
    #[cfg(any(test, feature = "testing"))]
    let task = Task::none();
    task
    }