simplified logic a bit
This commit is contained in:
parent
70b163cf81
commit
445b21975a
@ -53,8 +53,7 @@ impl std::iter::Iterator for State {
|
|||||||
pub enum DeferredEvent {
|
pub enum DeferredEvent {
|
||||||
Quit,
|
Quit,
|
||||||
NewRepo(String),
|
NewRepo(String),
|
||||||
TagPrevious,
|
LoadMoreTags,
|
||||||
TagNext,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Ui {
|
impl Ui {
|
||||||
@ -88,35 +87,15 @@ impl Ui {
|
|||||||
let mut ui = ui.lock().unwrap();
|
let mut ui = ui.lock().unwrap();
|
||||||
ui.tags = list;
|
ui.tags = list;
|
||||||
}
|
}
|
||||||
Ok(DeferredEvent::TagPrevious) => {
|
Ok(DeferredEvent::LoadMoreTags) if !fetching_tags.load(Ordering::Relaxed) => {
|
||||||
let mut ui = ui.lock().unwrap();
|
fetching_tags.store(true, Ordering::Relaxed);
|
||||||
ui.tags.previous();
|
|
||||||
ui.details = ui.tags.create_detail_widget();
|
|
||||||
}
|
|
||||||
Ok(DeferredEvent::TagNext) => {
|
|
||||||
let mut tags_copy = {
|
let mut tags_copy = {
|
||||||
let mut ui = ui.lock().unwrap();
|
let mut ui = ui.lock().unwrap();
|
||||||
match ui.tags.next() {
|
ui.info.set_text("Fetching more tags...");
|
||||||
None => {
|
sender.send(UiEvent::RefreshOnNewData)?;
|
||||||
// return early, also releases lock
|
ui.tags.clone()
|
||||||
ui.details = ui.tags.create_detail_widget();
|
|
||||||
sender.send(UiEvent::RefreshOnNewData)?;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Some(_) if !fetching_tags.load(Ordering::Relaxed) => {
|
|
||||||
fetching_tags.store(true, Ordering::Relaxed);
|
|
||||||
ui.info.set_text("Fetching more tags...");
|
|
||||||
sender.send(UiEvent::RefreshOnNewData)?;
|
|
||||||
ui.tags.clone()
|
|
||||||
}
|
|
||||||
Some(_) => {
|
|
||||||
// do nothing, as we are already fetching for new tags
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// fetching new tags
|
|
||||||
let sender_copy = sender.clone();
|
let sender_copy = sender.clone();
|
||||||
let ui_copy = ui.clone();
|
let ui_copy = ui.clone();
|
||||||
let fetching_tags_copy = fetching_tags.clone();
|
let fetching_tags_copy = fetching_tags.clone();
|
||||||
@ -139,6 +118,9 @@ impl Ui {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Ok(DeferredEvent::LoadMoreTags) => {
|
||||||
|
//do nothing, as we are fetching tags
|
||||||
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
let mut ui = ui.lock().unwrap();
|
let mut ui = ui.lock().unwrap();
|
||||||
ui.info.set_info(&e);
|
ui.info.set_info(&e);
|
||||||
@ -210,7 +192,7 @@ impl Ui {
|
|||||||
let (tags, state) = ui_data.tags.render(render_state);
|
let (tags, state) = ui_data.tags.render(render_state);
|
||||||
let more_chunks = Layout::default()
|
let more_chunks = Layout::default()
|
||||||
.direction(Direction::Horizontal)
|
.direction(Direction::Horizontal)
|
||||||
.constraints([Constraint::Min(15), Constraint::Length(28)].as_ref())
|
.constraints([Constraint::Min(15), Constraint::Length(29)].as_ref())
|
||||||
.split(chunks[1]);
|
.split(chunks[1]);
|
||||||
rect.render_stateful_widget(tags, more_chunks[0], state);
|
rect.render_stateful_widget(tags, more_chunks[0], state);
|
||||||
rect.render_widget(ui_data.details.render(), more_chunks[1]);
|
rect.render_widget(ui_data.details.render(), more_chunks[1]);
|
||||||
@ -252,12 +234,14 @@ impl Ui {
|
|||||||
}
|
}
|
||||||
//moving up on selecting tags
|
//moving up on selecting tags
|
||||||
Key::Up | Key::Char('k') if ui_data.state == State::SelectTag => {
|
Key::Up | Key::Char('k') if ui_data.state == State::SelectTag => {
|
||||||
deferred_sender.send(DeferredEvent::TagPrevious)?;
|
ui_data.tags.previous();
|
||||||
ui_data.details = ui_data.tags.create_detail_widget();
|
ui_data.details = ui_data.tags.create_detail_widget();
|
||||||
}
|
}
|
||||||
//moving down on selecting tags
|
//moving down on selecting tags
|
||||||
Key::Down | Key::Char('j') if ui_data.state == State::SelectTag => {
|
Key::Down | Key::Char('j') if ui_data.state == State::SelectTag => {
|
||||||
deferred_sender.send(DeferredEvent::TagNext)?;
|
if ui_data.tags.next().is_some() {
|
||||||
|
deferred_sender.send(DeferredEvent::LoadMoreTags).unwrap();
|
||||||
|
}
|
||||||
ui_data.details = ui_data.tags.create_detail_widget();
|
ui_data.details = ui_data.tags.create_detail_widget();
|
||||||
}
|
}
|
||||||
//append character on editing repository
|
//append character on editing repository
|
||||||
|
@ -58,8 +58,7 @@ impl std::iter::Iterator for State {
|
|||||||
pub enum DeferredEvent {
|
pub enum DeferredEvent {
|
||||||
Quit,
|
Quit,
|
||||||
NewRepo(String),
|
NewRepo(String),
|
||||||
TagPrevious,
|
LoadMoreTags,
|
||||||
TagNext,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Ui {
|
impl Ui {
|
||||||
@ -93,35 +92,15 @@ impl Ui {
|
|||||||
let mut ui = ui.lock().unwrap();
|
let mut ui = ui.lock().unwrap();
|
||||||
ui.tags = list;
|
ui.tags = list;
|
||||||
}
|
}
|
||||||
Ok(DeferredEvent::TagPrevious) => {
|
Ok(DeferredEvent::LoadMoreTags) if !fetching_tags.load(Ordering::Relaxed) => {
|
||||||
let mut ui = ui.lock().unwrap();
|
fetching_tags.store(true, Ordering::Relaxed);
|
||||||
ui.tags.previous();
|
|
||||||
ui.details = ui.tags.create_detail_widget();
|
|
||||||
}
|
|
||||||
Ok(DeferredEvent::TagNext) => {
|
|
||||||
let mut tags_copy = {
|
let mut tags_copy = {
|
||||||
let mut ui = ui.lock().unwrap();
|
let mut ui = ui.lock().unwrap();
|
||||||
match ui.tags.next() {
|
ui.info.set_text("Fetching more tags...");
|
||||||
None => {
|
sender.send(UiEvent::RefreshOnNewData)?;
|
||||||
// return early, also releases lock
|
ui.tags.clone()
|
||||||
ui.details = ui.tags.create_detail_widget();
|
|
||||||
sender.send(UiEvent::RefreshOnNewData)?;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Some(_) if !fetching_tags.load(Ordering::Relaxed) => {
|
|
||||||
fetching_tags.store(true, Ordering::Relaxed);
|
|
||||||
ui.info.set_text("Fetching more tags...");
|
|
||||||
sender.send(UiEvent::RefreshOnNewData)?;
|
|
||||||
ui.tags.clone()
|
|
||||||
}
|
|
||||||
Some(_) => {
|
|
||||||
// do nothing, as we are already fetching for new tags
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// fetching new tags
|
|
||||||
let sender_copy = sender.clone();
|
let sender_copy = sender.clone();
|
||||||
let ui_copy = ui.clone();
|
let ui_copy = ui.clone();
|
||||||
let fetching_tags_copy = fetching_tags.clone();
|
let fetching_tags_copy = fetching_tags.clone();
|
||||||
@ -144,6 +123,9 @@ impl Ui {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Ok(DeferredEvent::LoadMoreTags) => {
|
||||||
|
//do nothing, as we are fetching tags
|
||||||
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
let mut ui = ui.lock().unwrap();
|
let mut ui = ui.lock().unwrap();
|
||||||
ui.info.set_info(&e);
|
ui.info.set_info(&e);
|
||||||
@ -341,11 +323,15 @@ impl Ui {
|
|||||||
}
|
}
|
||||||
//moving up on selecting tags
|
//moving up on selecting tags
|
||||||
Key::Up | Key::Char('k') if ui_data.state == State::SelectTag => {
|
Key::Up | Key::Char('k') if ui_data.state == State::SelectTag => {
|
||||||
deferred_sender.send(DeferredEvent::TagPrevious).unwrap();
|
ui_data.tags.previous();
|
||||||
|
ui_data.details = ui_data.tags.create_detail_widget();
|
||||||
}
|
}
|
||||||
//moving down on selecting tags
|
//moving down on selecting tags
|
||||||
Key::Down | Key::Char('j') if ui_data.state == State::SelectTag => {
|
Key::Down | Key::Char('j') if ui_data.state == State::SelectTag => {
|
||||||
deferred_sender.send(DeferredEvent::TagNext).unwrap();
|
if ui_data.tags.next().is_some() {
|
||||||
|
deferred_sender.send(DeferredEvent::LoadMoreTags).unwrap();
|
||||||
|
}
|
||||||
|
ui_data.details = ui_data.tags.create_detail_widget();
|
||||||
}
|
}
|
||||||
//append character on editing repository
|
//append character on editing repository
|
||||||
Key::Char(key) if ui_data.state == State::EditRepo => {
|
Key::Char(key) if ui_data.state == State::EditRepo => {
|
||||||
|
Loading…
Reference in New Issue
Block a user