1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00

Add excludeDir to extension interface

Without this, the mechanism to exclude a directory from indexing is a
bit strange.  I had to use the `scanDirectory.after` hook, then remove
elements from the `output.directories` array.

In order to make the extension hook a bit more developer-friendly,
I also changed the arguments to the `excludeDir` function to be a
dictionary instead of just an array (or tuple?) of strings.
This commit is contained in:
Matthew Blythe 2024-03-05 01:52:00 -07:00
parent f5f34c55f3
commit 5852dac1ad
3 changed files with 19 additions and 12 deletions

View File

@ -54,6 +54,7 @@ export class ExtensionManager implements IObjectManager {
invalidateDirectoryCovers: new ExtensionEvent(),
},
DiskManager: {
excludeDir: new ExtensionEvent(),
scanDirectory: new ExtensionEvent()
},
ImageRenderer: {

View File

@ -73,6 +73,11 @@ export interface IExtensionEvents {
* photos, videos and metafiles
*/
DiskManager: {
excludeDir: IExtensionEvent<[{
name: string,
parentDirRelativeName: string,
parentDirAbsoluteName: string
}], boolean>,
scanDirectory: IExtensionEvent<[
string,
DirectoryScanSettings], ParentDirectoryDTO>

View File

@ -49,19 +49,20 @@ export class DiskManager {
return path.basename(dirPath);
}
public static async excludeDir(
@ExtensionDecorator(e => e.gallery.DiskManager.excludeDir)
public static async excludeDir(dir: {
name: string,
relativeDirectoryName: string,
absoluteDirectoryName: string
): Promise<boolean> {
parentDirRelativeName: string,
parentDirAbsoluteName: string
}): Promise<boolean> {
if (
Config.Indexing.excludeFolderList.length === 0 &&
Config.Indexing.excludeFileList.length === 0
) {
return false;
}
const absoluteName = path.normalize(path.join(absoluteDirectoryName, name));
const relativeName = path.normalize(path.join(relativeDirectoryName, name));
const absoluteName = path.normalize(path.join(dir.parentDirAbsoluteName, dir.name));
const relativeName = path.normalize(path.join(dir.parentDirRelativeName, dir.name));
for (const exclude of Config.Indexing.excludeFolderList) {
if (exclude.startsWith('/')) {
@ -73,7 +74,7 @@ export class DiskManager {
return true;
}
} else {
if (exclude === name) {
if (exclude === dir.name) {
return true;
}
}
@ -155,11 +156,11 @@ export class DiskManager {
if (
settings.noDirectory === true ||
settings.coverOnly === true ||
(await DiskManager.excludeDir(
file,
relativeDirectoryName,
absoluteDirectoryName
))
(await DiskManager.excludeDir({
name: file,
parentDirRelativeName: relativeDirectoryName,
parentDirAbsoluteName: absoluteDirectoryName
}))
) {
continue;
}