update handling of deleted or restored trash items
This commit is contained in:
parent
c2063b64e4
commit
19c36861ae
|
@ -14,7 +14,7 @@ import { getCollection } from './collectionService';
|
||||||
import { EnteFile } from 'types/file';
|
import { EnteFile } from 'types/file';
|
||||||
|
|
||||||
import HTTPService from './HTTPService';
|
import HTTPService from './HTTPService';
|
||||||
import { EncryptedTrashItem, Trash, TrashItem } from 'types/trash';
|
import { EncryptedTrashItem, Trash } from 'types/trash';
|
||||||
|
|
||||||
const TRASH = 'file-trash';
|
const TRASH = 'file-trash';
|
||||||
const TRASH_TIME = 'trash-time';
|
const TRASH_TIME = 'trash-time';
|
||||||
|
@ -99,6 +99,7 @@ export const updateTrash = async (
|
||||||
'X-Auth-Token': token,
|
'X-Auth-Token': token,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
// #Perf: This can be optimized by running the decryption in parallel
|
||||||
for (const trashItem of resp.data.diff as EncryptedTrashItem[]) {
|
for (const trashItem of resp.data.diff as EncryptedTrashItem[]) {
|
||||||
const collectionID = trashItem.file.collectionID;
|
const collectionID = trashItem.file.collectionID;
|
||||||
let collection = collections.get(collectionID);
|
let collection = collections.get(collectionID);
|
||||||
|
@ -109,21 +110,22 @@ export const updateTrash = async (
|
||||||
...collections.values(),
|
...collections.values(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
let decryptedFile: EnteFile;
|
|
||||||
if (!trashItem.isDeleted && !trashItem.isRestored) {
|
if (!trashItem.isDeleted && !trashItem.isRestored) {
|
||||||
decryptedFile = await decryptFile(
|
const decryptedFile = await decryptFile(
|
||||||
trashItem.file,
|
trashItem.file,
|
||||||
collection.key
|
collection.key
|
||||||
);
|
);
|
||||||
}
|
|
||||||
updatedTrash.push({ ...trashItem, file: decryptedFile });
|
updatedTrash.push({ ...trashItem, file: decryptedFile });
|
||||||
|
} else {
|
||||||
|
updatedTrash = updatedTrash.filter(
|
||||||
|
(item) => item.file.id !== trashItem.file.id
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resp.data.diff.length) {
|
if (resp.data.diff.length) {
|
||||||
time = resp.data.diff.slice(-1)[0].updatedAt;
|
time = resp.data.diff.slice(-1)[0].updatedAt;
|
||||||
}
|
}
|
||||||
updatedTrash = removeDuplicates(updatedTrash);
|
|
||||||
updatedTrash = removeRestoredOrDeletedTrashItems(updatedTrash);
|
|
||||||
|
|
||||||
setFiles(
|
setFiles(
|
||||||
preservePhotoswipeProps(
|
preservePhotoswipeProps(
|
||||||
|
@ -146,28 +148,6 @@ export const updateTrash = async (
|
||||||
return currentTrash;
|
return currentTrash;
|
||||||
};
|
};
|
||||||
|
|
||||||
function removeDuplicates(trash: Trash) {
|
|
||||||
const latestVersionTrashItems = new Map<number, TrashItem>();
|
|
||||||
trash.forEach(({ file, updatedAt, ...rest }) => {
|
|
||||||
if (
|
|
||||||
!latestVersionTrashItems.has(file.id) ||
|
|
||||||
latestVersionTrashItems.get(file.id).updatedAt < updatedAt
|
|
||||||
) {
|
|
||||||
latestVersionTrashItems.set(file.id, { file, updatedAt, ...rest });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
trash = [];
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
for (const [_, trashedFile] of latestVersionTrashItems) {
|
|
||||||
trash.push(trashedFile);
|
|
||||||
}
|
|
||||||
return trash;
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeRestoredOrDeletedTrashItems(trash: Trash) {
|
|
||||||
return trash.filter((item) => !item.isDeleted && !item.isRestored);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getTrashedFiles(trash: Trash) {
|
export function getTrashedFiles(trash: Trash) {
|
||||||
return mergeMetadata(
|
return mergeMetadata(
|
||||||
trash.map((trashedFile) => ({
|
trash.map((trashedFile) => ({
|
||||||
|
|
Loading…
Reference in a new issue