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}