4WO3ZJM2RNYZCBPS7FGYAEBELYD57OSS7LEUYCWGZBCAY272SNQQC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC IQDCHWCP47LL46EXQLQGHQPGFYIHQLMQBHA57RWJCIOX5UEUIQAQC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC UB2ITZJSDADVINSQEZ3HA6PVGA7OA6JYFG5GMSO7Y7LOXJC4FI7AC EC3TVL4X6VZZVLOKUN63LC73ADPHBHMZO7QMDXGX2ZPURVI4B4XQC KT5UYXGKEEXUHURNOYFVIG7WQ3Y3SJZMM2TP4OSW6NXSXQ5XXRHAC S2NVIFXRFER4SRA37WCT5XTXHDHAL5WIGGKY4A4XOTPLTKTZSRGQC W7IUT3ZVMFH77IGKLAL7WX7IVVTGTY3FKEJ3WHMP3KI37B6NENLQC YBJRDOTCX3ZRDB5EVXJBR55FX3CADCSIGMYWNYVC2PD5W3GXR3DQC 2VUX5BTDKHX3TJ677NW34H5WLSWH35C3PU46C7MXCN5O7PAZVXNQC A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC Z2CJPWZECB4PH6DI6Q2DEZIZJ3E2C3IXR3FGBXOLGAP6NVEX2ZDAC D7A7MSIHJS3IAOLEPK52M4CZLDPLO7JB3Y62XACT2AM6UUCPQ6BAC UCBNZULEO6OIEV3RZCAPP6ICALAR7JIS2LLG7IRSX6PVYMFQT5AAC } => ChangedFile {path: Some(local.path.clone()),diff: ChangedFileDiff::Edit,},
} => {let path = Some(local.path.clone());let line = local.line;let deleted = if let change::Atom::EdgeMap(map) = change {map.edges.first().map(|edge| edge.flag.is_deleted()).unwrap_or_default()} else {false};// TODO: This fn isn't public in upstream pijul, contriblet contents =get_change_contents(repo_changes, change, &diff.contents).unwrap();ChangedFile {path,diff: ChangedFileDiff::Edit {line,deleted,contents,},}}
let tasks = Task::batch([repo_task, repo_msg_out_task, load_id_task]);
let (untracked_file_load_tx, untracked_file_load_rx) =watch::channel("".to_string());let untracked_file_load_rx =WatchStream::from_changes(untracked_file_load_rx);let repo_path_clone = repo_path.clone();let untracked_file_load_task = Task::run(untracked_file_load_rx.map(move |path| (repo_path_clone.clone(), path)).then(|(repo_path, path)| async {load_untracked_file(repo_path, path).await}),|msg| msg,);let tasks = Task::batch([repo_task,repo_msg_out_task,load_id_task,untracked_file_load_task,]);
match &selection {cursor::Selection::UntrackedFile { path, .. } => {// Load the filestate.untracked_file_load_tx.send(path.clone()).unwrap();state.untracked_file_contents =Some(UntrackedFileContents::Loading {path: path.clone(),});}cursor::Selection::ChangedFile { .. } => {}}
Message::LoadedUntrackedFile { path, data } => {match &state.untracked_file_contents {Some(UntrackedFileContents::Loading { path: loading_path }) => {if &path == loading_path {state.untracked_file_contents =Some(UntrackedFileContents::Loaded { path, data });}}// Reloaded fileSome(UntrackedFileContents::Loaded {path: loaded_path,..}) => {if &path == loaded_path {state.untracked_file_contents =Some(UntrackedFileContents::Loaded { path, data });}}None => {}}Task::none()}
cursor::Selection::UntrackedFile { ix: _, path } => repo.untracked_files.iter().enumerate().find(|(_ix, file_path)| *file_path == path).map(|(ix, path)| cursor::Selection::UntrackedFile {ix,path: path.clone(),}),
cursor::Selection::UntrackedFile { ix: _, path } => {state.untracked_file_load_tx.send(path.clone()).unwrap();repo.untracked_files.iter().enumerate().find(|(_ix, file_path)| *file_path == path).map(|(ix, path)| {cursor::Selection::UntrackedFile {ix,path: path.clone(),}})}
};let selection_details = match state.cursor.selection.as_ref() {Some(cursor::Selection::UntrackedFile { path, .. }) => {debug_assert!(repo.untracked_files.contains(path));let diff = match &state.untracked_file_contents {Some(UntrackedFileContents::Loaded {path: loaded_path,data,}) if loaded_path == path =>// TODO: use encoding{el(scrollable(text(str::from_utf8(data).unwrap_or("Not UTF-8"),)).width(Length::Fill))}_ => el(text("Loading...")),};el(column([el(text("Diff:")), diff]))}Some(cursor::Selection::ChangedFile { path, .. }) => {if let Some(path) = path {debug_assert!(repo.changed_files.iter().any(|file| file.path.as_ref() == Some(path)));}el(row([]))}None => el(row([])),