4ELJZGRJNL6FXB33QTYDNPY57JA3WZPUXKLQRTGSLDM7W65PD3YQC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC EC3TVL4X6VZZVLOKUN63LC73ADPHBHMZO7QMDXGX2ZPURVI4B4XQC YBJRDOTCX3ZRDB5EVXJBR55FX3CADCSIGMYWNYVC2PD5W3GXR3DQC A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC 4WO3ZJM2RNYZCBPS7FGYAEBELYD57OSS7LEUYCWGZBCAY272SNQQC V55EAIWQXWER2HWKZHPJBV7DDJMSPSPWSO3FSSAYODJHVDBHUN6QC NRCUG4R2NIM2ANIETSUZ7WZDXFOOCMJ73ROP5MDYJA4RUT4PYA4QC ZVI4AWERNOTDJ3765HJXRBZT57XPNKVONQ6TGOGNPOL2VN42KMJQC OQ6HSAWHIRTAIIWMDGCTIOK47JDY7QVVAHLRDA2R5TTJKNSBFCWQC NWJD6VM6POMYKQTTPP3X6LVCWU3FHLDRIHMCSC2PPUT7JWNY42LAC AHWWRC73FXLSUDAJBU5UU76MZETHD3DSGJ7OLZPFEHXBDJ733QNAC UJPRF6DASB6TLFQSUZETOMCUVXIE5TXMCKWXMZR5SNE3IYCX4PMQC TEI5NQ3SCTU6JQIPU62B2AUXWRFSEU6DZYJG5T526G666VV5XXPAC JE44NYHM4QORCRKOF33QM42EDT7SBCPTULWGT6IVDL3D5LUHQXLAC ONRCENKTUB4JJMPXNAQQYEWDYD54TAGOLWH742GF4EH3KTHV7YLQC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC let log_file_selection =|log_entry: &repo::LogEntry,file_ix: usize,hash: pijul::Hash|-> (cursor::LogChangeFileSelection, Task<Message>) {let path = log_entry.file_paths.get(file_ix).unwrap().clone();// Request to get the difflet id = repo::LogFileId {change_hash: hash,path: path.clone(),};let task =Task::done(Message::ToRepo(repo::MsgIn::GetLogFileDiff { id }));
let log_file_selection = |log_entry: &repo::LogEntry,file_ix: usize,hash: pijul::Hash|-> cursor::LogChangeFileSelection {let path = log_entry.file_paths.get(file_ix).unwrap().clone();
let selection =if repo.log.len().saturating_sub(1)== log_ix{if !repo.untracked_files.is_empty() {let ix = 0;
let (selection, task) = if repo.log.len().saturating_sub(1)== log_ix{if !repo.untracked_files.is_empty() {let ix = 0;let selection =
)} else if !repo.changed_files.is_empty(){let ix = 0;changed_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,)} else {let ix = 0;log_selection(repo, ix)}
);(selection, Task::none())} else if !repo.changed_files.is_empty() {let ix = 0;let selection = changed_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,);(selection, Task::none())
let selection = if !repo.untracked_files.is_empty() {let ix = 0;Some(untracked_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,))} else if !repo.changed_files.is_empty() {let ix = 0;Some(changed_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,))} else if !repo.log.is_empty() {let ix = repo.log.len() - 1;Some(log_selection(repo, ix))} else {None};(selection, Task::none())
let (selection, task) =if !repo.untracked_files.is_empty() {let ix = 0;let selection = Some(untracked_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,));(selection, Task::none())} else if !repo.changed_files.is_empty() {let ix = 0;let selection = Some(changed_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,));(selection, Task::none())} else if !repo.log.is_empty() {let ix = repo.log.len() - 1;let (selection, task) = log_selection(repo, ix);(Some(selection), task)} else {(None, Task::none())};(selection, task)
cursor::Select::LogChange { ix, hash, message } => (Some(cursor::Selection::LogChange {ix,hash,message,file: None,}),Task::none(),),
cursor::Select::LogChange { ix, hash, message } => {// Request to get the diffslet task = Task::done(Message::ToRepo(repo::MsgIn::GetChangeDiffs { hash },));(Some(cursor::Selection::LogChange {ix,hash,message,diffs: None,file: None,}),Task::none(),)}
{Some((ix, entry)) => {let file_and_task = file.and_then(|file| {entry.file_paths.iter().enumerate().find(|(_ix, path)| *path == &file.path).map(|(ix, path)| {// Request to get the difflet id = repo::LogFileId {change_hash: hash,path: path.clone(),};let task = Task::done(Message::ToRepo(repo::MsgIn::GetLogFileDiff { id }));(cursor::LogChangeFileSelection {ix,path: path.clone(),diff: None,}, task)})
.map(|(ix, entry)| {let file = file.and_then(|file| {entry.file_paths.iter().enumerate().find(|(_ix, path)| *path == &file.path).map(|(ix, path)| {cursor::LogChangeFileSelection {ix,path: path.clone(),}})});cursor::Selection::LogChange {ix,hash: entry.hash,message,diffs: None,file,}
let (file, task) = match file_and_task {Some((file, task)) => (Some(file), task),None => (None, Task::none()),};(Some(cursor::Selection::LogChange {ix,hash: entry.hash,message,file,}),task,)}None => (None, Task::none()),};
let repo::LogFileId { change_hash, path } = id;if *selected_hash == change_hash && *selected_path == path {// NOTE: using unknown encoding as we don't yet have the// filelet file = diff::init_file(diff::FileContent::UnknownEncoding,Some(&diffs),);*diff = Some((diff::State::default(), file));
if *selected_hash == hash {let diffs = diffs.into_iter().map(|(path, diffs)| {// NOTE: using unknown encoding as we don't yet have// the file for past// changeslet file = diff::init_file(diff::FileContent::UnknownEncoding,Some(&diffs),);(path, (file, diff::State::default()))}).collect();*selection_diffs = Some(diffs);