Skip to content

File-by-file: Add an action to re-read the note ID from the URL

Thomas Randolph requested to merge tor/feature/fbf-load-note-from-hash into master

What does this MR do and why?

Adds an action to read the note ID fragment from the URL and load the correct file for that ID.

Why

Context

For #337263 (closed).

We are making File-by-file view mode much more useful by only fetching the single file that you are trying to view at any time.

In extreme cases, if the file you are viewing is the last in a long list (say 100s or 1000s of files), batch-loading the diffs could introduce an extremely noticeable delay before your single file is loaded and displays while the app loads tons of files you have no interest in.

The above issue - and this chain of MRs - will resolve that problem by loading only the file needed to display.

Specifics

As noted in the Specifics of !113940 (merged), we will need to regularly re-check which note is being viewed to load the correct file and potentially scroll to the right file.

In the case of file-by-file mode, we'll need to check if the appropriate file is loaded any time the notes data changes, because it's possible to not have ever loaded the file that a particular note points to.

This action fills that gap by reading the hash from the URL (which used to only happen once on load) and then - if we're in file-by-file mode - triggering a fetch of that file.
As noted in the commit message, that fetch will quickly short-circuit if the file has already been loaded, which means no extra network or CPU power will be expended.

Roadmap

This MR is one of a set of changes that will eventually implement this feature.

Phase 1 - Preparation

Status MR Purpose
🚀 Merged !112515 (merged) Adds the API access we need for the more surgical data
🚀 Merged !112516 (merged) Switches to using our initial metadata representation of the MR for many operations
🚀 Merged !113941 (merged) Marks metadata files as loaded so future uses don't try to load them again

Phase 2 - New Abilities

Status MR Purpose
🚀 Merged !113940 (merged) Adds helpers to re-retrieve the hash from the URL since it only needed to be fetched once before
🚀 Merged !113937 (merged) Adds an action to fetch and store a single file versus the existing full diff batch loading
🚀 Merged !114009 (merged) Add a getter to check the files marked in !113941 (merged) to simplify "already-loaded" guard clauses
🚀 Merged !114024 (merged) Add an action to scroll to a file async (and load it if necessary)
We are here 👉🏻 !114170 (merged) Adds an action to re-check the note hash from the URL and potentially fetch the appropriate file

Phase 3 - Implementation

Status MR Purpose
🛠 In Dev !111895 (merged) Adds the feature that will only load the proper file when necessary to display it

Screenshots or screen recordings

N/A, all backstage

How to set up and validate locally

Since this code isn't yet used, there's nothing to validate other than running the unit tests.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Thomas Randolph

Merge request reports