Y5ATDI2HRWTTYJAVUR7SVWQVB4ZKKDZF3UVE4JJQFZ7RX7H7VPJQC IQDCHWCP47LL46EXQLQGHQPGFYIHQLMQBHA57RWJCIOX5UEUIQAQC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC EC3TVL4X6VZZVLOKUN63LC73ADPHBHMZO7QMDXGX2ZPURVI4B4XQC YBJRDOTCX3ZRDB5EVXJBR55FX3CADCSIGMYWNYVC2PD5W3GXR3DQC 4WO3ZJM2RNYZCBPS7FGYAEBELYD57OSS7LEUYCWGZBCAY272SNQQC BJXUYQ2YQMVULJITT5FEA6NERJVLWFKEAWSBYZVIB7KAT27KOWBAC CFYW3HGZN5O4IHGLUTUDYG7Y5FXDYPV4H2RIUA7R746PSHO7T32AC AMPZ2BXK4IGUZO3OPBRSJ6Z4GI5K4PRFMLUGTR6AP4FKKRWQG7LQC NOB64XMRXRLXGYS4JMGTFQMH5KMD7DHSTQ4YYBZ73E4PICW7QBQAC AXSXZQDGLPSLBYY3WEI5CCJFWFY33HPRVW6QQFL46OKWZH4G4YSAC RPCIGCNSMPYGTMTUXJRIJG76L2WLRDHGJJZHE4DJ4UT5RPNZRNPAC V55EAIWQXWER2HWKZHPJBV7DDJMSPSPWSO3FSSAYODJHVDBHUN6QC NRCUG4R2NIM2ANIETSUZ7WZDXFOOCMJ73ROP5MDYJA4RUT4PYA4QC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC FileEditorContent::Decoded(content) => {content.text().as_bytes().len()}FileEditorContent::ShortBase64(string) => {string.as_bytes().len()}
FileEditorContent::Decoded(content) => content.text().len(),FileEditorContent::ShortBase64(string) => string.len(),
let changed_file_selection = |repo: &repo::State,ix: usize,src_files_cache: &mut SrcFilesCache,src_file_load_tx: &watch::Sender<String>|-> cursor::Selection {let path = repo.changed_files.iter().nth(ix).map(|(k, _v)| k).unwrap().clone();
let changed_file_selection =|changed_files_contents: &ChangedFilesContents,ix: usize,src_files_cache: &mut SrcFilesCache,src_file_load_tx: &watch::Sender<String>|-> cursor::Selection {let (path, diffs) = changed_files_contents.iter().nth(ix).unwrap();
load_src_file_if_not_cached(&mut state.src_files_cache,&state.src_file_load_tx,path,);
let diffs = state.changed_files_contents.get(path).unwrap();if any_diff_has_contents(diffs) {load_src_file_if_not_cached(&mut state.src_files_cache,&state.src_file_load_tx,path,);}
if let Some(content) = contents.get_mut(ix) {match content {Some(FileEditorContent::Decoded(content)) => {content.perform(action);}_ => panic!("Unexpected content: {content:?}"),}}
todo!()// if let Some(content) = contents.get_mut(ix) {// match content {// Some(FileEditorContent::Decoded(content)) => {// content.perform(action);// }// _ => panic!("Unexpected content: {content:?}"),// }// }
load_src_file_if_not_cached(&mut state.src_files_cache,&state.src_file_load_tx,&path,);
let diffs =state.changed_files_contents.get(path).unwrap();if any_diff_has_contents(diffs) {load_src_file_if_not_cached(&mut state.src_files_cache,&state.src_file_load_tx,path,);}
let contents = diffs.iter().map(|diff| match diff {repo::ChangedFileDiff::Move => None,repo::ChangedFileDiff::Del => None,repo::ChangedFileDiff::Undel => None,repo::ChangedFileDiff::Add => None,repo::ChangedFileDiff::SolveNameConflict => None,repo::ChangedFileDiff::UnsolveNameConflict => None,repo::ChangedFileDiff::Edit {line: _,deleted: _,contents,} => Some(contents_to_file_editor_content(contents)),// TODO: there are 2 contents! Maybe make the `ChangedFileContents` an enumrepo::ChangedFileDiff::Replacement {line: _,change_contents,replacement_contents,} => None,repo::ChangedFileDiff::SolveOrderConflict => None,repo::ChangedFileDiff::UnsolveOrderConflict => None,repo::ChangedFileDiff::ResurrectZombines => None,repo::ChangedFileDiff::AddRoot => None,repo::ChangedFileDiff::DelRoot => None,}).collect();
let contents =diffs.iter().map(changed_file_diff_from_repo).collect();
fn changed_file_diff_from_repo(value: &repo::ChangedFileDiff,) -> ChangedFileDiff {match value {repo::ChangedFileDiff::Move => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::Move,),repo::ChangedFileDiff::Del => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::Del,),repo::ChangedFileDiff::Undel => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::Undel,),repo::ChangedFileDiff::Add => {ChangedFileDiff::WithContents(ChangedFileDiffWithContents::Add)}repo::ChangedFileDiff::SolveNameConflict => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::SolveNameConflict,)}repo::ChangedFileDiff::UnsolveNameConflict => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::UnsolveNameConflict,)}repo::ChangedFileDiff::Edit {line,deleted,contents,} => ChangedFileDiff::WithContents(ChangedFileDiffWithContents::Edit {line: *line,deleted: *deleted,contents: contents_to_file_editor_content(contents),}),repo::ChangedFileDiff::Replacement {line,change_contents,replacement_contents,} => ChangedFileDiff::WithContents(ChangedFileDiffWithContents::Replacement {line: *line,change_contents: contents_to_file_editor_content(change_contents,),replacement_contents: contents_to_file_editor_content(replacement_contents,),},),repo::ChangedFileDiff::SolveOrderConflict => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::SolveOrderConflict,)}repo::ChangedFileDiff::UnsolveOrderConflict => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::UnsolveOrderConflict,)}repo::ChangedFileDiff::ResurrectZombines => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::ResurrectZombines,)}repo::ChangedFileDiff::AddRoot => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::AddRoot,),repo::ChangedFileDiff::DelRoot => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::DelRoot,),}}
Some(cursor::Selection::ChangedFile { path, ix }) => {let (file_name, diffs) =repo.changed_files.iter().nth(*ix).unwrap();let file_editor_contents =state.changed_files_contents.get(file_name).unwrap();let diffs = diffs.iter().enumerate().map(|(ix, diff)| {let file_editor_content =file_editor_contents.get(ix).unwrap();view_diff(diff, file_editor_content, file_name, ix)});
Some(cursor::Selection::ChangedFile { path, ix: _ }) => {let diffs = state.changed_files_contents.get(path).unwrap();let _src_file_contents: Option<text_editor::Content> =if any_diff_has_contents(diffs) {// TODO: load file contents from cacheNone} else {None};let diffs = [el(text("TODO"))];
fn view_diff<'a>(diff: &'a repo::ChangedFileDiff,content: &'a Option<FileEditorContent>,file: &'a str,ix: usize,) -> Element<'a, Message> {let change_type = diff.to_string();let content = match content {Some(content) => match content {FileEditorContent::Decoded(content) => el(text_editor(content).on_action(move |action| Message::ChangedFileContentsAction {file: file.to_owned(),ix,action,})),FileEditorContent::ShortBase64(short) => el(text(short)),FileEditorContent::UnknownEncoding => el(text(format!("{diff:?}"))),},None => el(text(format!("{diff:?}"))),};el(column([el(text(change_type)), content]))}