aboutsummaryrefslogtreecommitdiff
path: root/src/app/api.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/api.rs')
-rw-r--r--src/app/api.rs58
1 files changed, 40 insertions, 18 deletions
diff --git a/src/app/api.rs b/src/app/api.rs
index 02a61067..37b1f455 100644
--- a/src/app/api.rs
+++ b/src/app/api.rs
@@ -59,6 +59,44 @@ impl App {
response_rx.try_recv().ok()
}
+ pub(crate) fn handle_internal_event_with_render_impact(&mut self, ev: AppEvent) -> bool {
+ match ev {
+ AppEvent::GitStatusRefreshed {
+ results,
+ cache_updates,
+ } => self.handle_git_status_refreshed(results, cache_updates),
+ ev => {
+ self.handle_internal_event(ev);
+ true
+ }
+ }
+ }
+
+ fn handle_git_status_refreshed(
+ &mut self,
+ results: Vec<crate::workspace::WorkspaceGitStatus>,
+ cache_updates: Vec<(std::path::PathBuf, crate::workspace::GitStatusCacheEntry)>,
+ ) -> bool {
+ self.git_refresh_in_flight = false;
+ for (key, entry) in cache_updates {
+ self.git_status_cache.insert(key, entry);
+ }
+ if self.git_refresh_due_after_in_flight {
+ self.mark_git_status_refresh_due(Instant::now());
+ self.git_refresh_due_after_in_flight = false;
+ } else {
+ self.last_git_remote_status_refresh = Instant::now();
+ }
+ let changed = self
+ .state
+ .apply_workspace_git_statuses(&self.terminal_runtimes, results);
+ if changed {
+ self.render_dirty.store(true, Ordering::Release);
+ self.render_notify.notify_one();
+ }
+ changed
+ }
+
pub(crate) fn handle_internal_event(&mut self, ev: AppEvent) {
if let AppEvent::ClipboardWrite { content } = ev {
#[cfg(not(test))]
@@ -90,23 +128,7 @@ impl App {
cache_updates,
} = ev
{
- self.git_refresh_in_flight = false;
- for (key, entry) in cache_updates {
- self.git_status_cache.insert(key, entry);
- }
- if self.git_refresh_due_after_in_flight {
- self.mark_git_status_refresh_due(Instant::now());
- self.git_refresh_due_after_in_flight = false;
- } else {
- self.last_git_remote_status_refresh = Instant::now();
- }
- if self
- .state
- .apply_workspace_git_statuses(&self.terminal_runtimes, results)
- {
- self.render_dirty.store(true, Ordering::Release);
- self.render_notify.notify_one();
- }
+ self.handle_git_status_refreshed(results, cache_updates);
return;
}
@@ -270,7 +292,7 @@ impl App {
}
self.sync_full_lifecycle_authority_detection_pauses();
if terminal_cwd_reported {
- self.mark_git_status_refresh_due(Instant::now());
+ self.request_git_identity_refresh(Instant::now());
self.render_dirty.store(true, Ordering::Release);
self.render_notify.notify_one();
}