diff options
Diffstat (limited to 'server/lib/files-cache/shared/abstract-simple-file-cache.ts')
-rw-r--r-- | server/lib/files-cache/shared/abstract-simple-file-cache.ts | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/server/lib/files-cache/shared/abstract-simple-file-cache.ts b/server/lib/files-cache/shared/abstract-simple-file-cache.ts new file mode 100644 index 000000000..6fab322cd --- /dev/null +++ b/server/lib/files-cache/shared/abstract-simple-file-cache.ts | |||
@@ -0,0 +1,30 @@ | |||
1 | import { remove } from 'fs-extra' | ||
2 | import { logger } from '../../../helpers/logger' | ||
3 | import memoizee from 'memoizee' | ||
4 | |||
5 | type GetFilePathResult = { isOwned: boolean, path: string, downloadName?: string } | undefined | ||
6 | |||
7 | export abstract class AbstractSimpleFileCache <T> { | ||
8 | |||
9 | getFilePath: (params: T) => Promise<GetFilePathResult> | ||
10 | |||
11 | abstract getFilePathImpl (params: T): Promise<GetFilePathResult> | ||
12 | |||
13 | // Load and save the remote file, then return the local path from filesystem | ||
14 | protected abstract loadRemoteFile (key: string): Promise<GetFilePathResult> | ||
15 | |||
16 | init (max: number, maxAge: number) { | ||
17 | this.getFilePath = memoizee(this.getFilePathImpl, { | ||
18 | maxAge, | ||
19 | max, | ||
20 | promise: true, | ||
21 | dispose: (result?: GetFilePathResult) => { | ||
22 | if (result && result.isOwned !== true) { | ||
23 | remove(result.path) | ||
24 | .then(() => logger.debug('%s removed from %s', result.path, this.constructor.name)) | ||
25 | .catch(err => logger.error('Cannot remove %s from cache %s.', result.path, this.constructor.name, { err })) | ||
26 | } | ||
27 | } | ||
28 | }) | ||
29 | } | ||
30 | } | ||