* fix(files): guard file polling races - Ignore sub-millisecond mtime jitter on a same-size file so an unchanged open file no longer loops through reload and flickers. - Swap externally changed text content into the open editor in place instead of clearing the loaded path and showing the load spinner. - Read content only after metadata changed, confirm it with a second read, and skip the swap when the file is unchanged, the buffer is dirty, or a newer local write landed. - Keep the stat baseline unchanged when a poll cannot observe content so a failed read is retried rather than treated as unchanged. - Fall back to a full reload for images, PDFs, binaries, and files above the content-poll byte limit, and when a poll returns binary content. - Serialize polls and dispose the poller on unmount, file switch, and directory change. - Add a `fresh` file read option that bypasses the content cache and the HTTP cache. * fix(files): invalidate stale polls after diagram saves --------- Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
committed by
GitHub
co-authored by
Bohdan Triapitsyn
parent
a005215458
commit
7ea24e3c50
@@ -0,0 +1,16 @@
|
||||
type FileStatChangeInput = {
|
||||
size: number;
|
||||
mtimeMs?: number;
|
||||
};
|
||||
|
||||
// Some filesystems report sub-millisecond mtime jitter for unchanged files.
|
||||
const MIN_MTIME_CHANGE_MS = 1;
|
||||
|
||||
export const hasFileStatChanged = (
|
||||
previous: FileStatChangeInput,
|
||||
latest: FileStatChangeInput,
|
||||
): boolean => latest.size !== previous.size || (
|
||||
latest.mtimeMs !== undefined
|
||||
&& previous.mtimeMs !== undefined
|
||||
&& Math.abs(latest.mtimeMs - previous.mtimeMs) >= MIN_MTIME_CHANGE_MS
|
||||
);
|
||||
Reference in New Issue
Block a user