Skip to content

Commit 9222ab0

Browse files
committed
Ensure unique file entries
The Permanent backend currently has a bug where it will sometimes return duplicate records when getting folder contents. That is a bug, but we have the means to correct for it before the user is shown any kind of warning by simply de-duplicating file entries within a folder before returning them to the client. Issue #56 Filter duplicate results from the server
1 parent 6dd6676 commit 9222ab0

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

src/classes/PermanentFileSystem.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
getRecord,
88
} from '@permanentorg/sdk';
99
import {
10+
deduplicateFileEntries,
1011
generateAttributesForFile,
1112
generateAttributesForFolder,
1213
generateDefaultAttributes,
@@ -293,9 +294,9 @@ export class PermanentFileSystem {
293294
requestedPath,
294295
),
295296
);
296-
return [
297+
return deduplicateFileEntries([
297298
...folderFileEntities,
298299
...recordFileEntities,
299-
];
300+
]);
300301
}
301302
}

src/utils/deduplicateFileEntries.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import type { FileEntry } from 'ssh2';
2+
3+
const findFirstIndexOfFilename = (
4+
fileEntries: FileEntry[],
5+
filename: string,
6+
): number => fileEntries.findIndex(
7+
(fileEntry) => fileEntry.filename === filename,
8+
);
9+
10+
const isFirstInstanceOfItsFilename = (
11+
fileEntry: FileEntry,
12+
index: number,
13+
fileEntries: FileEntry[],
14+
): boolean => index === findFirstIndexOfFilename(
15+
fileEntries,
16+
fileEntry.filename,
17+
);
18+
19+
export const deduplicateFileEntries = (
20+
fileEntries: FileEntry[],
21+
): FileEntry[] => fileEntries.filter(isFirstInstanceOfItsFilename);

src/utils/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from './deduplicateFileEntries';
12
export * from './generateAttributesForFile';
23
export * from './generateAttributesForFolder';
34
export * from './generateDefaultAttributes';

0 commit comments

Comments
 (0)