VQ3THWJJWXPH77ZYMYKNLUGUYBMYAOWOW2EJ5VYSF7WGUKQXVCVQC ZD56BUSUGTPPDSHHTOC2H5RJJG4FUUUPOSM2BHRY3UA5D6OA43XQC A6Z4O6RC33HYWP7JIVQ6FDWE4EOCQWQTIGENK2WAHUGSHDDLSA7QC 5ZRDYL6KIQPUI3ZZETH5KJ64N6RUF7KYM3P6Q6HER5XVJZ7GZ4WQC WAOGSCOJ5A372BZKHEYD2BCDBCENNVLFYW3INKUOOAZMDADDIFIQC EJPSD5XO43DWUBBZGNQMY4TMCAXL5EWCGX3OEHUERQ5GRASGWQLQC 7WCB5YQJJZIPUAFHTCQBWNI6ZM5XMIQJAKTLYTR7NOR5NKESRMDQC LFEMJYYDO45ASMQSOJ3TNID7B5UZXDHB3NWFZJXWOAWNBS6GMDEAC ODCT4QJNJLQTDNFPIF7HX4XCFTEXZBESG3PTD276O7TWB7MSGWMQC UTDTZCTXAAP6AHENYQP7MOQ5QNIKKXN34NV2ONWEGM4HA4FU637AC TEDT26JQBWGATVTY6HZTIOGFR6BXW2BHSUKUTXTA7HOXARRQ5D6AC BJ3CYLUTYL3ODCU7XIQ2YIBQ6GMHP4IQ7HYMD4YCOPFRYEIYNWKQC YRGDFHABL6BRX55ZWIBGXX3ZX2R4WUV4BELP7JMW5AZX54P5BBIQC LPSUBGUBMG2QHJJSAWQ35SZIMUR62R6ODPWBS7TSNNXJ5UJCNABQC 5BAPU7K6DRZD2DYLIW3GKD2SIM6ANP7RYWGDJ6JCGHB37MHJUMTAC TMDH7GPVR3J7OEIELEE7RM7KXBA5IMFBCCVJTEGGMLYJZZCOLJ6QC T4UECD3SERZLQMSESSATEHQEPFDIZGMMWY35EPV6JV2WOYMR7JRQC J3AD2D2JARNRC6FTSWZUXEH54ZBBQFVUL45DXH2QLHOSJGY2NMFQC BGOQFXP7U2HKLOJUUFV5BT6AUHNCYP3VGJPOIAODU4IXHUQBREIQC L3COZCOYACNNCM2Q32PUGFUYMOZTLNV4VXZKZR6PQYUHI3D2V3EQC IOXNOVX2FJWPCEFVUHA5FEKIZJQT45R7VBAA43EPAKKVF5IWF4GAC XQDYES5MDSTFO7OPUPCRQLLQ6NAVELJOCCLSS6YE7TI6QDDFANDQC YVPFT7XIRBDWBF2WAAYPY5HBFPWN5EYOUG2LQFROHA2VRAUUQYUAC 6E6MSENZAZE7RGL4QBQD3MIAURXE5R3HINFWTNLOASJYVNHVOUMAC E7HE2UFTIOINUJQBRVCIG5GMANK6XWOYFX2ZHA73QJ6RW627G55QC DNTMUCMOH4BRNMQAVCHDM2XESAJIKWTZW344CVHOQIJBWXJWCOMAC O46EFE5J4KQLD2YQURNCDL5C42WIGVAINUWWZC3CTQDC4A5Q6IPAC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC 23SFYK4Q5NKBPJG53PQNPWQH6UOUU2YKJEL7RLXYBRLJOJYV7AWQC OPXFZKEBDHZZLXEJ2JRDYBOJH6YIN7UZNZYHVHMWMQVDTE2ZD53QC MYGIBRRHHXPKVRAMQQRJTZH74L2XOK3SF7J57JPCRKSVRLZ2D6NQC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC MsgIn::Pull { channel } => {let result = pull(&internal_state.path, &channel).await;let _ = msg_out_tx.send(MsgOut::Pulled { channel, result });
MsgIn::Pull { remote, channel } => {let result = pull(&internal_state.path, &remote, &channel).await;let _ = msg_out_tx.send(MsgOut::Pulled {remote,channel,result,});
remote,
selecting_remote,sub_menu,);}},model::SubMenu::Pull {opt: Some(opt),remote: _,selecting_remote,} => match opt {model::PullOption::SelectingRemote => {return pull_selecting_remote(state,*window_size,allowed_actions,report,selecting_remote,
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::SubMenuPushSelectRemote,)}fn pull_selecting_remote<'a>(
view_selecting_remote(state,window_size,allowed_actions,report,remote,sub_menu,Msg::SubMenuPullSelectRemote,)}fn view_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>,on_select: impl FnOnce(String) -> Msg + Copy + 'static,) -> Element<'a, Msg, Theme> {
keys_str: "r",keys: ModKeys::One(ModKey {key: Key::Character("r".into()),mods: Mods::NONE,}),label: "select remote",msg: Some(FilteredMsg::SubMenuPushOption(model::PushOption::SelectingRemote,)),
keys_str: "Enter | S-f",keys: ModKeys::Two(ModKey {key: Key::Named(Named::Enter),mods: Mods::NONE,},ModKey {key: Key::Character("f".into()),mods: Mods::SHIFT,},),label: "confirm pull",msg: Some(FilteredMsg::Confirm),
}model::SubMenu::Pull => {// TODO add optionsvec![Binding {keys_str: "Enter | S-f",keys: ModKeys::Two(ModKey {key: Key::Named(Named::Enter),mods: Mods::NONE,},ModKey {key: Key::Character("f".into()),mods: Mods::SHIFT,},),label: "confirm pull",msg: Some(FilteredMsg::Confirm),},cancel(),]
fn select_remote(msg: Option<FilteredMsg>) -> Binding {Binding {keys_str: "r",keys: ModKeys::One(ModKey {key: Key::Character("r".into()),mods: Mods::NONE,}),label: "select remote",msg,}}
Some(model::SubMenu::Pull) => pull(state, model, sub_menu),
Some(model::SubMenu::Pull {remote,selecting_remote,opt,}) => {if opt.is_some() {*sub_menu = Some(model::SubMenu::Pull {remote: selecting_remote.clone(),selecting_remote: None,opt: None,});Task::none()} else {pull(state, model, sub_menu, report, remote.clone())}}
msg, remote, opt, repo,
msg,selecting_remote,opt,repo,);}}model::SubMenu::Pull {remote: _,selecting_remote,opt: Some(opt),} => {if let Some(ReadyState { repo, .. }) =model::is_ready_mut(model){return sub_menu_pull_opt_selection(msg,selecting_remote,opt,repo,
model::PushOption::SelectingRemote => match msg {selection::Msg::PressDir(dir) => match dir {selection::Dir::Down => {if let Some(current) = remote {let ix =names.iter().enumerate().find_map(|(ix, name)| {(*name == current).then_some(ix)});if let Some(ix) = ix&& ix < names.len().saturating_sub(1){*remote = names.into_iter().nth(ix + 1).cloned();return Task::none();}
model::PushOption::SelectingRemote => {remote_selection(msg, remote, remote_names)}}}fn sub_menu_pull_opt_selection(msg: selection::Msg,remote: &mut Option<String>,opt: &mut model::PullOption,repo: &mut repo::State,) -> Task<Msg> {let repo::Remotes { default, other } = &repo.remotes;let remote_names: Vec<_> = default.iter().chain(other).collect();match opt {model::PullOption::SelectingRemote => {remote_selection(msg, remote, remote_names)}}}fn remote_selection(msg: selection::Msg,remote: &mut Option<String>,remote_names: Vec<&String>,) -> Task<Msg> {match msg {selection::Msg::PressDir(dir) => match dir {selection::Dir::Down => {if let Some(current) = remote {let ix = remote_names.iter().enumerate().find_map(|(ix, name)| (*name == current).then_some(ix),);if let Some(ix) = ix&& ix < remote_names.len().saturating_sub(1){*remote = remote_names.into_iter().nth(ix + 1).cloned();return Task::none();
selection::Dir::Up => {if let Some(current) = remote {let ix =names.iter().enumerate().find_map(|(ix, name)| {(*name == current).then_some(ix)});if let Some(ix) = ix&& ix > 0{*remote = names.into_iter().nth(ix - 1).cloned();return Task::none();}
*remote = remote_names.into_iter().next().cloned();}selection::Dir::Up => {if let Some(current) = remote {let ix = remote_names.iter().enumerate().find_map(|(ix, name)| (*name == current).then_some(ix),);if let Some(ix) = ix&& ix > 0{*remote = remote_names.into_iter().nth(ix - 1).cloned();return Task::none();
jobs.insert(model::Job::Pull {channel: repo.channel.clone(),});state.repo_tx_in.send(repo::MsgIn::Pull {
if let Some(remote) =remote.clone().or_else(|| repo.remotes.default.clone()){jobs.insert(model::Job::Pull {remote: remote.clone(),