Skip to content

Commit 29471a7

Browse files
committed
dev: ll_readdir -> provider.readdir
1 parent 0ef1849 commit 29471a7

File tree

3 files changed

+46
-14
lines changed

3 files changed

+46
-14
lines changed

src/backend/src/filesystem/definitions/capabilities.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
const capabilityNames = [
2+
// PuterFS Capabilities
23
'thumbnail',
34
'uuid',
45
'operation-trace',
6+
'readdir-uuid-mode',
57

8+
// Standard Capabilities
69
'read',
710
'write',
8-
'case-sensitive',
911
'symlink',
10-
'unix-perms',
1112
'trash',
13+
14+
// Behavior Capabilities
15+
'case-sensitive',
16+
17+
// POSIX Capabilities
18+
'readdir-inode-numbers',
19+
'unix-perms',
1220
];
1321

1422
const fsCapabilities = {};

src/backend/src/filesystem/ll_operations/ll_readdir.js

+26-12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1818
*/
1919
const APIError = require("../../api/APIError");
20+
const fsCapabilities = require("../definitions/capabilities");
2021
const { TYPE_SYMLINK } = require("../FSNodeContext");
2122
const { RootNodeSelector } = require("../node/selectors");
2223
const { NodeUIDSelector, NodeChildSelector } = require("../node/selectors");
@@ -51,10 +52,7 @@ class LLReadDir extends LLFilesystemOperation {
5152
subject = target;
5253
}
5354

54-
const subject_uuid = await subject.get('uid');
55-
5655
const svc = context.get('services');
57-
const svc_fsentry = svc.get('fsEntryService');
5856
const svc_fs = svc.get('filesystem');
5957

6058
if ( subject.isRoot ) {
@@ -67,16 +65,32 @@ class LLReadDir extends LLFilesystemOperation {
6765
];
6866
}
6967

70-
this.checkpoint('before get direct descendants')
71-
const child_uuids = await svc_fsentry
72-
.fast_get_direct_descendants(subject_uuid);
73-
this.checkpoint('after get direct descendants')
74-
const children = await Promise.all(child_uuids.map(async uuid => {
75-
return await svc_fs.node(new NodeUIDSelector(uuid));
76-
}));
77-
this.checkpoint('after get children');
68+
const capabilities = subject.provider.get_capabilities();
69+
70+
// UUID Mode
71+
if ( capabilities.has(fsCapabilities.READDIR_UUID_MODE) ) {
72+
this.checkpoint('readdir uuid mode')
73+
const child_uuids = await subject.provider.readdir({
74+
context,
75+
node: subject,
76+
});
77+
this.checkpoint('after get direct descendants')
78+
const children = await Promise.all(child_uuids.map(async uuid => {
79+
return await svc_fs.node(new NodeUIDSelector(uuid));
80+
}));
81+
this.checkpoint('after get children');
82+
return children;
83+
}
84+
85+
// Conventional Mode
86+
const child_entries = subject.provider.readdir({
87+
context,
88+
node: subject,
89+
});
7890

79-
return children;
91+
return await Promise.all(child_entries.map(async entry => {
92+
return await svc_fs.node(new NodeChildSelector(subject, entry.name));
93+
}));
8094
}
8195
}
8296

src/backend/src/modules/puterfs/lib/PuterFSProvider.js

+10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class PuterFSProvider {
1212
fsCapabilities.THUMBNAIL,
1313
fsCapabilities.UUID,
1414
fsCapabilities.OPERATION_TRACE,
15+
fsCapabilities.READDIR_UUID_MODE,
1516

1617
fsCapabilities.READ,
1718
fsCapabilities.WRITE,
@@ -110,6 +111,15 @@ class PuterFSProvider {
110111

111112
return entry;
112113
}
114+
115+
async readdir ({ context, node }) {
116+
const uuid = await node.get('uid');
117+
const services = context.get('services');
118+
const svc_fsentry = services.get('fsEntryService');
119+
const child_uuids = await svc_fsentry
120+
.fast_get_direct_descendants(uuid);
121+
return child_uuids;
122+
}
113123
}
114124

115125
module.exports = {

0 commit comments

Comments
 (0)