search: support wildcards
Massimo Melina committed
Feb 10, 2024 at 23:31 UTC
edcdefe1b3e9bfacfbbbed7a5f31e2f84f2d87a0
2 files changed
+3
-3
src/api.get_file_list.ts
+1
-1
@@ -31,7 +31,7 @@ export const get_file_list: ApiHandler = async ({ uri='/', offset, limit, search
31
return fail(HTTP_METHOD_NOT_ALLOWED)
32
offset = Number(offset)
33
limit = Number(limit)
34
- const filter = pattern2filter(search)
34
+ const filter = pattern2filter(String(search || ''))
35
const walker = walkNode(node, { ctx: admin ? undefined : ctx, onlyFolders, depth: search ? Infinity : 0 })
36
const onDirEntryHandlers = mapPlugins(plug => plug.onDirEntry)
37
const can_upload = admin || hasPermission(node, 'can_upload', ctx)
src/misc.ts
+2
-2
@@ -38,9 +38,9 @@ export function onFirstEvent(emitter:EventEmitter, events: string[], cb: (...arg
38
}
39
40
export function pattern2filter(pattern: string){
41
- const re = new RegExp(_.escapeRegExp(pattern), 'i')
41
+ const matcher = makeMatcher(pattern.includes('*') ? pattern : `*${pattern}*`) // if you specify *, we'll respect its position
42
return (s?:string) =>
43
- !s || !pattern || re.test(basename(s))
43
+ !s || !pattern || matcher(basename(s))
44
}
45
46
// install multiple handlers and returns a handy 'uninstall' function which requires no parameter. Pass a map {event:handler}