self.ensure_enough_rendered();
self.after_setting_pos();
}
+
+ fn try_extend(&mut self, client: &mut Client) -> Result<(), ClientError> {
+ let action = match self.contents.source.try_extend(client) {
+ Ok(any_new) => {
+ self.rendered.remove(&self.contents.first_index());
+ if let Some(i) = self.contents.extender_index() {
+ self.rendered.remove(&i);
+ }
+
+ if !any_new {
+ // Can't extend this any further into the past
+ self.contents.extender = None;
+ if self.pos.item() < self.contents.origin {
+ self.coarsen_pos();
+ if self.pos.item() <
+ self.contents.first_index()
+ {
+ self.pos = FilePosition::Coarse(
+ self.contents.first_index());
+ }
+ }
+ }
+
+ self.contents.update_items(client);
+ Ok(())
+ }
+ Err(e) => Err(e),
+ };
+
+ self.ensure_enough_rendered();
+ action
+ }
}
impl<Type: FileType, Source: FileDataSource>
}
Pr('0') | Home => {
if self.at_top() && self.contents.extender.is_some() {
- let action = match self.contents.source.try_extend(client) {
- Ok(any_new) => {
- self.rendered.remove(&self.contents.first_index());
- if let Some(i) = self.contents.extender_index() {
- self.rendered.remove(&i);
- }
-
- if !any_new {
- // Can't extend this any further into the past
- // FIXME: this is not tested yet
- self.contents.extender = None;
- if self.pos.item() < self.contents.origin {
- self.coarsen_pos();
- if self.pos.item() <
- self.contents.first_index()
- {
- self.pos = FilePosition::Coarse(
- self.contents.first_index());
- }
- }
- }
-
- self.contents.update_items(client);
- LogicalAction::Nothing
- }
+ match self.try_extend(client) {
+ Ok(_) => LogicalAction::Nothing,
Err(e) => LogicalAction::Error(e),
- };
- self.ensure_enough_rendered();
- action
+ }
} else {
self.goto_top();
LogicalAction::Nothing