1
0
mirror of https://github.com/bpatrik/pigallery2.git synced 2024-12-23 01:27:14 +02: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(), invalidateDirectoryCovers: new ExtensionEvent(),
}, },
DiskManager: { DiskManager: {
excludeDir: new ExtensionEvent(),
scanDirectory: new ExtensionEvent() scanDirectory: new ExtensionEvent()
}, },
ImageRenderer: { ImageRenderer: {

View File

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

View File

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