web: open the catalogue without a version another tab can block
This commit is contained in:
@@ -6,7 +6,6 @@ import {
|
||||
getPhoto,
|
||||
listEditedIds,
|
||||
listFolders,
|
||||
listDirs,
|
||||
listPhotos,
|
||||
pickFolder,
|
||||
readPhotoFile,
|
||||
@@ -69,8 +68,10 @@ export function Library() {
|
||||
const [folders, setFolders] = useState<LibraryFolder[]>([]);
|
||||
const [ready, setReady] = useState<Set<string>>(new Set());
|
||||
const [photos, setPhotos] = useState<LibraryPhoto[]>([]);
|
||||
// The folders a scan has walked into. A roll's own shape is on screen from the
|
||||
// first pass, before the frames under its folders have been read.
|
||||
// The folders the scan in flight has walked into: a roll's own shape is on
|
||||
// screen from the first pass, before the frames under its folders are read.
|
||||
// What a scan found is not filed away — the next visit draws the folders that
|
||||
// hold frames, and the next scan names the rest again.
|
||||
const [dirs, setDirs] = useState<LibraryDir[]>([]);
|
||||
const [edited, setEdited] = useState<Set<string>>(new Set());
|
||||
// Which tree node is open, which frame is up, and which of the two middle
|
||||
@@ -111,10 +112,9 @@ export function Library() {
|
||||
const [loaded, setLoaded] = useState(false);
|
||||
|
||||
const reload = useCallback(async () => {
|
||||
const [rows, edits, dirs] = await Promise.all([listPhotos(), listEditedIds(), listDirs()]);
|
||||
const [rows, edits] = await Promise.all([listPhotos(), listEditedIds()]);
|
||||
setPhotos(rows);
|
||||
setEdited(edits);
|
||||
setDirs(dirs);
|
||||
}, []);
|
||||
|
||||
// The catalogue outlives the tab; the permission to read those folders does
|
||||
@@ -189,6 +189,7 @@ export function Library() {
|
||||
folder,
|
||||
(p) => {
|
||||
setProgress(p);
|
||||
setDirs(p.dirs);
|
||||
if (p.done === 0 || Date.now() - last > 700) {
|
||||
last = Date.now();
|
||||
void reload();
|
||||
@@ -198,6 +199,7 @@ export function Library() {
|
||||
() => jumpRef.current
|
||||
);
|
||||
setNote(t('lib.scanned', { folder: folder.name, added: result.added, total: result.total }));
|
||||
setDirs(result.dirs);
|
||||
await reload();
|
||||
} catch {
|
||||
setNote(t('lib.failed'));
|
||||
@@ -257,6 +259,7 @@ export function Library() {
|
||||
await removeFolder(folder.name);
|
||||
const rest = folders.filter((f) => f.name !== folder.name);
|
||||
setFolders(rest);
|
||||
setDirs((prev) => prev.filter((d) => d.folder !== folder.name));
|
||||
setNode(rest[0]?.name ?? null);
|
||||
await reload();
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user