Skip to content

Commit 4688b66

Browse files
authored
Merge pull request #126 from droppyjs/feat/storage-provider
feat(storage): move storage to provider
2 parents 9e69343 + 9ff9f9d commit 4688b66

20 files changed

Lines changed: 841 additions & 712 deletions

File tree

packages/client/lib/client.js

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -726,9 +726,9 @@ function uploadBlob(view, blob) {
726726

727727
function upload(view, fd, files) {
728728
let rename = false;
729-
if (view[0].currentData && Object.keys(view[0].currentData).length) {
729+
if (view[0].currentData?.length) {
730730
let conflict = false;
731-
const existingFiles = Object.keys(view[0].currentData);
731+
const existingFiles = view[0].currentData.map((file) => file.name);
732732

733733
for (const file of files) {
734734
if (existingFiles.includes(file)) {
@@ -1198,16 +1198,20 @@ function checkPathOverflow(view) {
11981198

11991199
function getTemplateEntries(view, data) {
12001200
const entries = [];
1201-
Object.keys(data).forEach((name) => {
1202-
const split = data[name].split("|");
1203-
const type = split[0];
1204-
const mtime = Number(split[1]) * 1e3;
1205-
const size = Number(split[2]);
1201+
data.forEach((file) => {
1202+
const type =
1203+
file.type === "file"
1204+
? "f"
1205+
: file.type === "directory"
1206+
? "d"
1207+
: file.type;
1208+
const mtime = Number(file.mtime) * 1e3;
1209+
const size = Number(file.size);
12061210
// Preserve filenames exactly as received from the server (no Unicode normalization).
12071211

12081212
const entry = {
1209-
name,
1210-
sortname: name.replace(/['"]/g, "_").toLowerCase(),
1213+
name: file.name,
1214+
sortname: file.name.replace(/['"]/g, "_").toLowerCase(),
12111215
type,
12121216
mtime,
12131217
age: timeDifference(mtime),
@@ -1216,25 +1220,25 @@ function getTemplateEntries(view, data) {
12161220
id:
12171221
(view[0].currentFolder === "/"
12181222
? "/"
1219-
: `${view[0].currentFolder}/`) + name,
1220-
sprite: getSpriteClass(fileExtension(name)),
1223+
: `${view[0].currentFolder}/`) + file.name,
1224+
sprite: getSpriteClass(fileExtension(file.name)),
12211225
classes: "",
12221226
};
12231227

1224-
if (Object.keys(droppy.audioTypes).includes(fileExtension(name))) {
1228+
if (Object.keys(droppy.audioTypes).includes(fileExtension(file.name))) {
12251229
entry.classes = "playable";
12261230
entry.playable = true;
12271231
} else if (
1228-
Object.keys(droppy.videoTypes).includes(fileExtension(name))
1232+
Object.keys(droppy.videoTypes).includes(fileExtension(file.name))
12291233
) {
12301234
entry.classes = "viewable viewable-video";
12311235
entry.viewableVideo = true;
12321236
} else if (
1233-
Object.keys(droppy.imageTypes).includes(fileExtension(name))
1237+
Object.keys(droppy.imageTypes).includes(fileExtension(file.name))
12341238
) {
12351239
entry.classes = "viewable viewable-image";
12361240
entry.viewableImage = true;
1237-
} else if (fileExtension(name) === "pdf") {
1241+
} else if (fileExtension(file.name) === "pdf") {
12381242
entry.classes = "viewable viewable-pdf";
12391243
entry.viewablePdf = true;
12401244
}

packages/server/src/commands/clipboard.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
import fs from "node:fs";
21
import escRe from "escape-string-regexp";
32

4-
import filetree from "../services/filetree/index.js";
53
import log from "../services/log/index.js";
4+
import storage from "../services/storage/index.js";
65
import { utils } from "../utils/index.js";
7-
86
import type { CommandHandler } from "./index.js";
97

108
interface ClipboardMessage {
@@ -42,18 +40,21 @@ export const CLIPBOARD: CommandHandler<ClipboardMessage> = {
4240
return sendError(sid, vId, "Can't copy directory into itself");
4341
}
4442

45-
fs.stat(utils.addFilesPath(msg.data.dst), async (err, stats) => {
46-
if ((!err && stats) || msg.data.src === msg.data.dst) {
47-
utils.getNewPath(utils.addFilesPath(msg.data.dst), (newDst) => {
48-
filetree.clipboard(
49-
msg.data.src,
50-
utils.removeFilesPath(newDst),
51-
msg.data.type,
52-
);
53-
});
54-
} else {
55-
filetree.clipboard(msg.data.src, msg.data.dst, msg.data.type);
56-
}
57-
});
43+
const destinationExists = await storage.exists(
44+
utils.addFilesPath(msg.data.dst),
45+
);
46+
47+
let destination = msg.data.dst;
48+
if (destinationExists || msg.data.src === msg.data.dst) {
49+
destination = utils.removeFilesPath(
50+
utils.addFilesPath(msg.data.dst),
51+
);
52+
}
53+
54+
if (msg.data.type === "cut") {
55+
storage.move(msg.data.src, destination);
56+
} else if (msg.data.type === "copy") {
57+
storage.copy(msg.data.src, destination);
58+
}
5859
},
5960
};

packages/server/src/commands/createFile.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import filetree from "../services/filetree/index.js";
21
import log from "../services/log/index.js";
2+
import storage from "../services/storage/index.js";
33

44
import type { CommandHandler } from "./index.js";
55

@@ -25,7 +25,7 @@ export const CREATE_FILE: CommandHandler<CreateFileMessage> = {
2525
}
2626

2727
try {
28-
await filetree.mk(msg.data);
28+
await storage.makeFile(msg.data);
2929
} catch (err) {
3030
log.error(ws, null, err);
3131
const error = err instanceof Error ? err : new Error(String(err));

packages/server/src/commands/createFiles.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import path from "node:path";
22

3-
import filetree from "../services/filetree/index.js";
43
import log from "../services/log/index.js";
4+
import storage from "../services/storage/index.js";
55
import { utils } from "../utils/index.js";
6-
76
import type { CommandHandler } from "./index.js";
87

98
interface CreateFilesMessage {
@@ -31,8 +30,8 @@ export const CREATE_FILES: CommandHandler<CreateFilesMessage> = {
3130

3231
for (const file of msg.data.files) {
3332
try {
34-
await filetree.mkdir(utils.addFilesPath(path.dirname(file)));
35-
await filetree.mk(utils.addFilesPath(file));
33+
await storage.makekDir(utils.addFilesPath(path.dirname(file)));
34+
await storage.makeFile(utils.addFilesPath(file));
3635
} catch (err) {
3736
log.error(ws, null, err);
3837
sendError(sid, vId, `Error creating file`);

packages/server/src/commands/createFolder.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import filetree from "../services/filetree/index.js";
21
import log from "../services/log/index.js";
2+
import storage from "../services/storage/index.js";
33

44
import type { CommandHandler } from "./index.js";
55

@@ -26,7 +26,7 @@ export const CREATE_FOLDER: CommandHandler<CreateFolderMessage> = {
2626
}
2727

2828
try {
29-
await filetree.mkdir(msg.data);
29+
await storage.makekDir(msg.data);
3030
} catch (err) {
3131
log.error(ws, null, err);
3232
const error = err instanceof Error ? err : new Error(String(err));

packages/server/src/commands/createFolders.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import filetree from "../services/filetree/index.js";
21
import log from "../services/log/index.js";
2+
import storage from "../services/storage/index.js";
33
import { utils } from "../utils/index.js";
44
import type { CommandHandler } from "./index.js";
55

@@ -30,7 +30,7 @@ export const CREATE_FOLDERS: CommandHandler<CreateFoldersMessage> = {
3030

3131
for (const folder of msg.data.folders) {
3232
try {
33-
await filetree.mkdir(utils.addFilesPath(folder));
33+
await storage.makekDir(utils.addFilesPath(folder));
3434
} catch (err) {
3535
log.error(ws, null, err);
3636
sendError(sid, vId, `Error creating folder ${folder}`);

packages/server/src/commands/deleteFile.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import filetree from "../services/filetree/index.js";
21
import log from "../services/log/index.js";
2+
import storage from "../services/storage/index.js";
33

44
import type { CommandHandler } from "./index.js";
55

@@ -42,7 +42,7 @@ export const DELETE_FILE: CommandHandler<DeleteFileMessage> = {
4242
log.info(ws, null, `Deleting: ${path}`);
4343

4444
try {
45-
await filetree.del(path);
45+
await storage.delete(path);
4646
} catch (err) {
4747
log.info(ws, null, `Error deleting file: ${path}`);
4848
log.error(err);

packages/server/src/commands/getMedia.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import path from "node:path";
22
import { imageSize } from "image-size";
33

4-
import filetree from "../services/filetree/index.js";
54
import log from "../services/log/index.js";
5+
import storage from "../services/storage/index.js";
66
import { utils } from "../utils/index.js";
7-
87
import type { CommandHandler } from "./index.js";
98

109
interface GetMediaMessage {
@@ -35,18 +34,23 @@ export const GET_MEDIA: CommandHandler<GetMediaMessage> = {
3534
}
3635

3736
const allExts = exts.img.concat(exts.vid).concat(exts.pdf);
38-
const files = filetree.lsFilter(dir, utils.extensionRe(allExts));
39-
if (!files) {
37+
const files = (
38+
await storage.listDir(dir, utils.extensionRe(allExts))
39+
).filter((entry) => entry.type === "file");
40+
if (!files.length) {
4041
return sendError(sid, vId, "No displayable files in directory");
4142
}
4243

4344
const mediaFiles = await Promise.all(
4445
files.map((file) => {
4546
return new Promise((resolve) => {
46-
if (utils.extensionRe(exts.pdf).test(file)) {
47-
resolve({ pdf: true, src: file });
48-
} else if (utils.extensionRe(exts.img).test(file)) {
49-
const input = path.join(utils.addFilesPath(dir), file);
47+
if (utils.extensionRe(exts.pdf).test(file.name)) {
48+
resolve({ pdf: true, src: file.name });
49+
} else if (utils.extensionRe(exts.img).test(file.name)) {
50+
const input = path.join(
51+
utils.addFilesPath(dir),
52+
file.name,
53+
);
5054
imageSize(input, (err, dims) => {
5155
let width: number | undefined,
5256
height: number | undefined;
@@ -68,13 +72,13 @@ export const GET_MEDIA: CommandHandler<GetMediaMessage> = {
6872
}
6973

7074
resolve({
71-
src: file,
75+
src: file.name,
7276
w: width ? width : 0,
7377
h: height ? height : 0,
7478
});
7579
});
7680
} else {
77-
resolve({ video: true, src: file });
81+
resolve({ video: true, src: file.name });
7882
}
7983
});
8084
}),

packages/server/src/commands/reloadDirectory.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import filetree from "../services/filetree/index.js";
1+
import storage from "../services/storage/index.js";
22

33
import type { CommandHandler } from "./index.js";
44

@@ -15,7 +15,7 @@ export const RELOAD_DIRECTORY: CommandHandler<ReloadDirectoryMessage> = {
1515
return;
1616
}
1717

18-
await filetree.updateDir(msg.data.dir);
18+
await storage.refreshDir(msg.data.dir);
1919

2020
sendFiles(sid, vId);
2121
},

packages/server/src/commands/rename.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
// @ts-nocheck
21
import db from "../services/db/index.js";
3-
import filetree from "../services/filetree/index.js";
42
import log from "../services/log/index.js";
3+
import storage from "../services/storage/index.js";
54

65
import type { CommandHandler } from "./index.js";
76

@@ -43,13 +42,13 @@ export const RENAME: CommandHandler<RenameMessage> = {
4342
}
4443

4544
try {
46-
await filetree.move(rSrc, rDst);
45+
await storage.move(rSrc, rDst);
4746
} catch (err) {
4847
log.error(ws, null, err);
4948
sendError(
5049
sid,
5150
vId,
52-
`Error renaming ${rSrc} to ${rDst}: ${err.message}`,
51+
`Error renaming ${rSrc} to ${rDst}: ${err instanceof Error ? err.message : String(err)}`,
5352
);
5453
return;
5554
}
@@ -61,6 +60,6 @@ export const RENAME: CommandHandler<RenameMessage> = {
6160
{ location: rDst },
6261
);
6362

64-
log.info(ws, null, `Share link updated: ${link} -> ${rDst}`);
63+
log.info(ws, null, `Share link updated: ${rSrc} -> ${rDst}`);
6564
},
6665
};

0 commit comments

Comments
 (0)