AMPZ2BXK4IGUZO3OPBRSJ6Z4GI5K4PRFMLUGTR6AP4FKKRWQG7LQC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC IQDCHWCP47LL46EXQLQGHQPGFYIHQLMQBHA57RWJCIOX5UEUIQAQC 3GZPRZXCRGJ3I2XY7HYEUXLPGH57D5WNWVT4CI5AN4ZSJFBOQLLAC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC UB2ITZJSDADVINSQEZ3HA6PVGA7OA6JYFG5GMSO7Y7LOXJC4FI7AC KT5UYXGKEEXUHURNOYFVIG7WQ3Y3SJZMM2TP4OSW6NXSXQ5XXRHAC S2NVIFXRFER4SRA37WCT5XTXHDHAL5WIGGKY4A4XOTPLTKTZSRGQC W7IUT3ZVMFH77IGKLAL7WX7IVVTGTY3FKEJ3WHMP3KI37B6NENLQC YBJRDOTCX3ZRDB5EVXJBR55FX3CADCSIGMYWNYVC2PD5W3GXR3DQC 2VUX5BTDKHX3TJ677NW34H5WLSWH35C3PU46C7MXCN5O7PAZVXNQC A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC Z2CJPWZECB4PH6DI6Q2DEZIZJ3E2C3IXR3FGBXOLGAP6NVEX2ZDAC D7A7MSIHJS3IAOLEPK52M4CZLDPLO7JB3Y62XACT2AM6UUCPQ6BAC 4WO3ZJM2RNYZCBPS7FGYAEBELYD57OSS7LEUYCWGZBCAY272SNQQC BJXUYQ2YQMVULJITT5FEA6NERJVLWFKEAWSBYZVIB7KAT27KOWBAC CFYW3HGZN5O4IHGLUTUDYG7Y5FXDYPV4H2RIUA7R746PSHO7T32AC W4LFX7IHQ7SDX67ATSGWDB5IN6472ZJDBKY2XZ54SBJEYD5GAT5QC PTFDJ567XGGF26TE7KVQT7WPZIWV737DBO24VFIPEWPVAVKEKADQC fn try_decode_contents(raw: Vec<u8>, encoding: &Option<Encoding>) -> Contents {match encoding {Some(encoding) => {let decoded = encoding.decode(&raw);Contents::Decoded(decoded.to_string())}None => {if raw.len() <= MAX_LEN_BASE64_DISPLAY {let encoded =format!("b{}", data_encoding::BASE64.encode(&raw));Contents::ShortBase64(encoded)} else {Contents::UnknownEncoding(raw)}}}}
use iced::widget::{self, button, column, horizontal_rule, row, scrollable, text, text_editor,};
use iced::widget::{self, button, column, row, scrollable, text, text_editor};
}}Task::none()}Message::ChangedFileContentsAction { file, ix, action } => {// Read-onlyif !action.is_edit() {if let Some(contents) =state.changed_files_contents.get_mut(&file){if let Some(content) = contents.get_mut(ix) {match content {Some(FileEditorContent::Decoded(content)) => {content.perform(action);}_ => panic!("Unexpected content: {content:?}"),}}
}}}fn changed_files_contents(changed_files: &repo::ChangedFiles,) -> ChangedFilesContents {changed_files.iter().map(|(file, diffs)| {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)),repo::ChangedFileDiff::Replacement => None,repo::ChangedFileDiff::SolveOrderConflict => None,repo::ChangedFileDiff::UnsolveOrderConflict => None,repo::ChangedFileDiff::ResurrectZombines => None,repo::ChangedFileDiff::AddRoot => None,repo::ChangedFileDiff::DelRoot => None,}).collect();(file.clone(), contents)}).collect()}fn contents_to_file_editor_content(contents: &repo::Contents,) -> FileEditorContent {match contents {repo::Contents::Decoded(content) => {FileEditorContent::Decoded(text_editor::Content::with_text(content))
let changed_file = repo.changed_files.iter().nth(*ix).unwrap();let diff = "todo";
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)});
el(horizontal_rule(1)),el(text("Untracked:")),untracked_files,el(horizontal_rule(1)),el(text("Changes:")),changed_files,el(horizontal_rule(1)),
el(column([el(text("Untracked files:")), untracked_files])),el(column([el(text("Changed files:")), changed_files])),
fn view_diff<'a>(diff: &'a repo::ChangedFileDiff,content: &'a Option<FileEditorContent>,file: &'a String,ix: usize,) -> Element<'a, Message> {match content {Some(content) => match content {FileEditorContent::Decoded(content) => el(text_editor(content).on_action(move |action| Message::ChangedFileContentsAction {file: file.clone(),ix,action,})),FileEditorContent::ShortBase64(short) => el(text(short)),FileEditorContent::UnknownEncoding => el(text(format!("{diff:?}"))),},None => el(text(format!("{diff:?}"))),}}