client: refactor drive stream API code

This commit is contained in:
Johann150 2023-04-01 23:11:36 +02:00
parent 24db102679
commit 83fec649ea
Signed by untrusted user: Johann150
GPG key ID: 9EE6577A2A06F8F1

View file

@ -158,40 +158,6 @@ watch($$(folder), () => {
} }
}); });
function onStreamDriveFileCreated(file: foundkey.entities.DriveFile) {
addFile(file, true);
}
function onStreamDriveFileUpdated(file: foundkey.entities.DriveFile) {
const current = folder?.id ?? null;
if (current !== file.folderId) {
removeFile(file);
} else {
addFile(file, true);
}
}
function onStreamDriveFileDeleted(fileId: string) {
removeFile(fileId);
}
function onStreamDriveFolderCreated(createdFolder: foundkey.entities.DriveFolder) {
addFolder(createdFolder, true);
}
function onStreamDriveFolderUpdated(updatedFolder: foundkey.entities.DriveFolder) {
const current = folder?.id ?? null;
if (current !== updatedFolder.parentId) {
removeFolder(updatedFolder);
} else {
addFolder(updatedFolder, true);
}
}
function onStreamDriveFolderDeleted(folderId: string) {
removeFolder(folderId);
}
function onDragover(ev: DragEvent): any { function onDragover(ev: DragEvent): any {
if (!ev.dataTransfer) return; if (!ev.dataTransfer) return;
@ -450,31 +416,16 @@ function move(target?: string | foundkey.entities.DriveFolder) {
}); });
} }
function addFolder(folderToAdd: foundkey.entities.DriveFolder, unshift = false) { function addOrUpdate(itemToAdd: foundkey.entities.DriveFolder | foundkey.entities.DriveFile) {
const current = folder?.id ?? null; const current = folder?.id ?? null;
if (current !== folderToAdd.parentId) return; const addInto = 'parentId' in itemToAdd ? itemToAdd.parentId : itemToAdd.folderId;
if (current !== addInto) return;
const exist = paginationElem.items.some(f => f.id === folderToAdd.id); const exist = paginationElem.items.some(f => f.id === itemToAdd.id);
if (exist) { if (exist) {
paginationElem.updateItem(folderToAdd.id, () => folderToAdd); paginationElem.updateItem(itemToAdd.id, () => itemToAdd);
} else if (unshift) {
paginationElem.prepend(folderToAdd);
} else { } else {
paginationElem.append(folderToAdd); paginationElem.prepend(itemToAdd);
}
}
function addFile(fileToAdd: foundkey.entities.DriveFile, unshift = false) {
const current = folder?.id ?? null;
if (current !== fileToAdd.folderId) return;
const exist = paginationElem.items.some(f => f.id === fileToAdd.id);
if (exist) {
paginationElem.updateItem(fileToAdd.id, () => fileToAdd);
} else if (unshift) {
paginationElem.prepend(fileToAdd);
} else {
paginationElem.append(fileToAdd);
} }
} }
@ -551,12 +502,12 @@ function onContextmenu(ev: MouseEvent) {
} }
onMounted(() => { onMounted(() => {
connection.on('fileCreated', onStreamDriveFileCreated); connection.on('fileCreated', addOrUpdate);
connection.on('fileUpdated', onStreamDriveFileUpdated); connection.on('fileUpdated', addOrUpdate);
connection.on('fileDeleted', onStreamDriveFileDeleted); connection.on('fileDeleted', removeFile);
connection.on('folderCreated', onStreamDriveFolderCreated); connection.on('folderCreated', addOrUpdate);
connection.on('folderUpdated', onStreamDriveFolderUpdated); connection.on('folderUpdated', addOrUpdate);
connection.on('folderDeleted', onStreamDriveFolderDeleted); connection.on('folderDeleted', removeFolder);
if (props.initialFolder) { if (props.initialFolder) {
move(props.initialFolder); move(props.initialFolder);