quinjet 0.0.74

A fast, live, keyboard-first Git source-control interface for the terminal
#[cfg_attr(not(test), expect(clippy::wildcard_imports, reason = "shared"))]
use super::*;

impl App {
    pub(super) fn request_pull_request_prefetch(&mut self, effects: &mut Vec<AppEffect>) {
        if self.pull_request_prefetching
            || !self.tab_active
            || self.view != View::PullRequests
            || self.pull_request_section != PullRequestSection::Files
            || self.pull_request_file_view != PullRequestFileView::AllFiles
        {
            return;
        }
        let Some(workspace_generation) = self.pull_request_workspace_generation else {
            return;
        };
        let mut batch_bytes = 0_usize;
        let mut paths = Vec::new();
        for path in &self.pull_request_viewport_paths {
            if paths.len() >= PULL_REQUEST_PREFETCH_BATCH {
                break;
            }
            if !self.pull_request_file_needs_patch(path)
                || self.preview_file_collapsed(&path.to_string_lossy())
            {
                continue;
            }
            let Some(file) = self
                .pull_request_files
                .iter()
                .find(|file| &file.path == path)
            else {
                continue;
            };
            let estimate = estimated_patch_bytes(file.counts);
            if !paths.is_empty()
                && batch_bytes.saturating_add(estimate) > PULL_REQUEST_PREFETCH_BYTE_BUDGET
            {
                break;
            }
            batch_bytes = batch_bytes.saturating_add(estimate);
            paths.push(path.clone());
        }
        if paths.is_empty() {
            return;
        }
        self.pull_request_prefetching = true;
        self.pull_request_prefetch_paths.clone_from(&paths);
        effects.push(AppEffect::Git(Box::new(
            WorkerCommand::LoadPullRequestFileBatch {
                workspace_generation,
                paths,
            },
        )));
    }
}