5ZM3J2J3LPIALWZNO5E5F6QOC325DADSKGY3W6TFDSQGEB5OPT7QC OQ6HSAWHIRTAIIWMDGCTIOK47JDY7QVVAHLRDA2R5TTJKNSBFCWQC WI2BVQ6JOJBM4OC5KSZBMTDPBWESIR7GD72B5TLO7H2SY7QBDHJAC 23SFYK4Q5NKBPJG53PQNPWQH6UOUU2YKJEL7RLXYBRLJOJYV7AWQC I2AG42PAVOII4V4TWDJV5ZVNDIHKBRDT254BFQLFUIY723TW6CCQC XHWLKCLDFUQFFHLFLFDC6WHK6RXRPQSXJG5AKGPER7R5AHVCRHUAC UR4J677RWA3OFG6HQTD46BUUE5YFPSBEFCJAEM5OMT4V5A7SBNNQC WAOGSCOJ5A372BZKHEYD2BCDBCENNVLFYW3INKUOOAZMDADDIFIQC EJPSD5XO43DWUBBZGNQMY4TMCAXL5EWCGX3OEHUERQ5GRASGWQLQC 7WCB5YQJJZIPUAFHTCQBWNI6ZM5XMIQJAKTLYTR7NOR5NKESRMDQC YGZ3VCW4OAJYPI2CYK3MTABNFY7Y2ENSSTFE5ZZ4K6HK57FCU3XQC UTDTZCTXAAP6AHENYQP7MOQ5QNIKKXN34NV2ONWEGM4HA4FU637AC YRGDFHABL6BRX55ZWIBGXX3ZX2R4WUV4BELP7JMW5AZX54P5BBIQC LPSUBGUBMG2QHJJSAWQ35SZIMUR62R6ODPWBS7TSNNXJ5UJCNABQC 5BAPU7K6DRZD2DYLIW3GKD2SIM6ANP7RYWGDJ6JCGHB37MHJUMTAC T4UECD3SERZLQMSESSATEHQEPFDIZGMMWY35EPV6JV2WOYMR7JRQC E7HE2UFTIOINUJQBRVCIG5GMANK6XWOYFX2ZHA73QJ6RW627G55QC DNTMUCMOH4BRNMQAVCHDM2XESAJIKWTZW344CVHOQIJBWXJWCOMAC O46EFE5J4KQLD2YQURNCDL5C42WIGVAINUWWZC3CTQDC4A5Q6IPAC VQ3THWJJWXPH77ZYMYKNLUGUYBMYAOWOW2EJ5VYSF7WGUKQXVCVQC OEBGSXWU7DKZTMIHOHJ6HECYMCPMOUIL7BVRWYTTTVASTEOB5QGQC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC XSZZB47UXR6KGYFZZQFQR63X2LDKOH6TPNNBRRGHUCI5JJ4JIWVAC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC model::SubMenu::CompareRemote {opt: Some(opt),remote: _,remote_channel: _,} => match opt {model::CompareRemoteOption::SelectingRemote { remote } => {return compare_remote_selecting_remote(state,*window_size,allowed_actions,report,remote,sub_menu,);}model::CompareRemoteOption::InputingRemoteChannel {channel: remote_channel,} => {return compare_remote_input_remote_channel(*window_size,allowed_actions,report,remote_channel,sub_menu,);}},
| model::SubMenu::InitRepo { .. }| model::SubMenu::ImportFromGit { .. }| model::SubMenu::Add { .. }| model::SubMenu::CompareRemote { .. } => {}
| model::SubMenu::InitRepo { path: _ }| model::SubMenu::ImportFromGit { path: _ }| model::SubMenu::Add { recursive: _ }| model::SubMenu::CompareRemote { opt: None, .. } => {}
fn compare_remote_selecting_remote<'a>(state: &'a model::State,window_size: iced::Size,allowed_actions: &'a [action::Binding],report: &'a report::Container,remote: &'a Option<String>,sub_menu: &'a Option<model::SubMenu>,) -> Element<'a, Msg, Theme> {view_selecting_remote(state,window_size,allowed_actions,report,remote,sub_menu,Msg::SubMenuCompareRemoteSelectRemote,)}fn compare_remote_input_remote_channel<'a>(window_size: iced::Size,allowed_actions: &'a [action::Binding],report: &'a report::Container,remote: &'a Option<String>,sub_menu: &'a Option<model::SubMenu>,) -> Element<'a, Msg, Theme> {view_input_remote_channel(window_size,allowed_actions,report,remote,sub_menu,Msg::SubMenuCompareRemoteInputRemoteChannel,)}
fn view_input_remote_channel<'a>(window_size: iced::Size,allowed_actions: &'a [action::Binding],report: &'a report::Container,channel: &'a Option<String>,sub_menu: &'a Option<model::SubMenu>,on_input: impl Fn(String) -> Msg + Copy + 'static,) -> Element<'a, Msg, Theme> {let main = el(column([view_header("Name of a remote channel:"),el(text("Hint: to view a changes from e.g. a discussion number 42 enter \"name:42\".")),el(text_input("",channel.as_ref().map(Cow::Borrowed).unwrap_or_default().as_ref(),).on_input(on_input)),]));let main = el(container(main).width(Length::Fill).height(Length::Fill));
model::SubMenu::Push {opt: _,remote: Some(remote),} => {actions_inner =actions_inner.push(el(text(format!("Remote: {remote}"))));
model::SubMenu::Push { opt: _, remote } => {if let Some(remote) = remote {actions_inner = actions_inner.push(el(text(format!("Remote: {remote}"))));}
actions_inner =actions_inner.push(el(text(format!("Remote: {remote}"))));
if let Some(remote) = remote {actions_inner = actions_inner.push(el(text(format!("Remote: {remote}"))));}if let Some(channel) = remote_channel {actions_inner = actions_inner.push(el(text(format!("Remote channel: {channel}"))));}
model::SubMenu::Push { remote: None, .. }| model::SubMenu::Pull { remote: None, .. }| model::SubMenu::ResetChange| model::SubMenu::InitRepo { .. }| model::SubMenu::ImportFromGit { .. }| model::SubMenu::Add { .. }| model::SubMenu::CompareRemote { .. } => {}
model::SubMenu::ResetChange| model::SubMenu::InitRepo { path: _ }| model::SubMenu::ImportFromGit { path: _ }| model::SubMenu::Add { recursive: _ } => {}
if let Some(record_dichotomy) =remotes.default.as_ref().and_then(|default_remote| {model::get_record_dichotomy(record_dichotomy,default_remote,channel,)})
if let selection::Unified::CompareRemote(Some(selection::CompareRemote {ix: _,hash: _,file: _,remote,remote_channel,},)) = selection&& let Some(record_dichotomy) = model::get_record_dichotomy(record_dichotomy,remote,remote_channel,)
#[derive(Clone, Debug, PartialEq, Eq, Hash)]pub enum CompareRemoteOption {SelectingRemote {/// Set while selecting remote and discarded on cancelremote: Option<String>,},InputingRemoteChannel {/// Set while selecting channel and discarded on cancelchannel: Option<String>,},}
Pull { remote: String, channel: String },Push { remote: String, channel: String },CompareRemote { remote: String, channel: String },
Pull {remote: String,channel: String,},Push {remote: String,channel: String,},CompareRemote {remote: String,remote_channel: String,},
// TODO select remote name// TODO select local and remote channelvec![Binding {keys_str: "Enter | S-c",keys: ModKeys::Two(ModKey {key: Key::Named(Named::Enter),mods: Mods::NONE,},ModKey {key: Key::Character("c".into()),mods: Mods::SHIFT,},),label: "compare default remote",msg: Some(FilteredMsg::Confirm),},cancel(),]
if let Some(opt) = opt {let confirm_label = match opt {model::CompareRemoteOption::SelectingRemote {..} => "confirm remote selection",model::CompareRemoteOption::InputingRemoteChannel {..} => "confirm channel input",};vec![confirm(confirm_label), down(), up(), cancel()]} else {vec![Binding {keys_str: "Enter | S-c",keys: ModKeys::Two(ModKey {key: Key::Named(Named::Enter),mods: Mods::NONE,},ModKey {key: Key::Character("c".into()),mods: Mods::SHIFT,},),label: "compare remote",msg: Some(FilteredMsg::Confirm),},select_remote(Some(FilteredMsg::SubMenuCompareRemoteOption(model::CompareRemoteOption::SelectingRemote {remote: None,},),)),select_remote_channel(Some(FilteredMsg::SubMenuCompareRemoteOption(model::CompareRemoteOption::InputingRemoteChannel {channel: None,},),)),cancel(),]}
let has_any_diff = remotes.default.as_ref().and_then(|default_remote| {model::get_record_dichotomy(record_dichotomy,default_remote,channel,)})
if let Some(selection::CompareRemote {ix: _,hash: _,file,remote,remote_channel,}) = compare_remote_selection{let has_any_diff = model::get_record_dichotomy(record_dichotomy,remote,remote_channel,)
if let Some(model::SubMenu::Pull { remote, .. }) = sub_menu {
if let Some(model::SubMenu::Pull {opt: Some(model::PullOption::SelectingRemote { remote }),..}) = sub_menu{*remote = Some(selection);}Task::none()}view::Msg::SubMenuCompareRemoteSelectRemote(selection) => {if let Some(model::SubMenu::CompareRemote {opt:Some(model::CompareRemoteOption::SelectingRemote { remote }),..}) = sub_menu{
Some(model::SubMenu::CompareRemote { remote, channel }) => {if let Some(ReadyState {
Some(model::SubMenu::CompareRemote {remote,remote_channel,opt,}) => {if let Some(opt) = opt {match opt {model::CompareRemoteOption::SelectingRemote {remote,} => {*sub_menu = Some(model::SubMenu::CompareRemote {remote: remote.clone(),remote_channel: remote_channel.clone(),opt: None,});Task::none()}model::CompareRemoteOption::InputingRemoteChannel {channel,} => {*sub_menu = Some(model::SubMenu::CompareRemote {remote: remote.clone(),remote_channel: channel.clone(),opt: None,});Task::none()}}} else if let Some(ReadyState {
| model::SubMenu::InitRepo { .. }| model::SubMenu::ImportFromGit { .. }| model::SubMenu::Add { .. }| model::SubMenu::CompareRemote { .. } => {}
| model::SubMenu::InitRepo { path: _ }| model::SubMenu::ImportFromGit { path: _ }| model::SubMenu::Add { recursive: _ } => {}
model::SubMenu::Push { .. }| model::SubMenu::Pull { .. }
model::SubMenu::CompareRemote {opt: Some(opt), ..} => {if let Some(ReadyState { repo, .. }) =model::is_ready_mut(model){return sub_menu_compare_remote_opt_selection(msg, opt, repo,);}}model::SubMenu::Push { opt: _, remote: _ }| model::SubMenu::Pull { opt: _, remote: _ }| model::SubMenu::CompareRemote {opt: _,remote: _,remote_channel: _,}
| model::SubMenu::InitRepo { .. }| model::SubMenu::ImportFromGit { .. }| model::SubMenu::Add { .. }| model::SubMenu::CompareRemote { .. } => {}
| model::SubMenu::InitRepo { path: _ }| model::SubMenu::ImportFromGit { path: _ }| model::SubMenu::Add { recursive: _ } => {}
*opt = Some(new_opt);}Task::none()}action::FilteredMsg::SubMenuCompareRemoteOption(mut new_opt) => {if let Some(model::SubMenu::CompareRemote {opt,remote,remote_channel,}) = sub_menu{let task = match &mut new_opt {model::CompareRemoteOption::SelectingRemote {remote: selecting_remote,} => {*selecting_remote = remote.clone();Task::none()}model::CompareRemoteOption::InputingRemoteChannel {channel: selecting_channel,} => {*selecting_channel = remote_channel.clone();task::widget_focus_next()}};
remote_selection(msg, remote, remote_names)}}}fn sub_menu_compare_remote_opt_selection(msg: selection::Msg,opt: &mut model::CompareRemoteOption,repo: &mut repo::State,) -> Task<Msg> {match opt {model::CompareRemoteOption::SelectingRemote { remote } => {let repo::Remotes { default, other } = &repo.remotes;let remote_names: Vec<_> = default.iter().chain(other).collect();