pigallery2: Extension configuration is broken

Describe the bug

The values from extension.config.getConfig() no longer reflect what is present in config.json, nor what is shown on the admin page.

Screenshots (optional)

This is present in my config.json:

    "Extensions": {
        "enabled": true,
        "//[folder]": "Folder where the app stores all extensions. Individual extensions live in their own sub-folders.",
        "folder": "/app/data/config/extensions",
        "extensions": [
            {
                "enabled": true,
                "//[path]": "Folder where the app stores all extensions. Individual extensions live in their own sub-folders.",
                "path": "dk-extension",
                "configs": {
                    "//[digikamShowCollection]": "DigiKam Directory Category",
                    "digikamShowCollection": "Public",
                    "//[digikamDbType]": "DigiKam Database Type (MySQL or SQLite)",
                    "digikamDbType": "MySQL",
                    "//[digikamSqliteDb]": "DigiKam SQLite DB filename",
                    "digikamSqliteDb": "/app/data/digikam/digikam.db",
                    "//[digikamMysqlHost]": "DigiKam MySQL DB hostname",
                    "digikamMysqlHost": "192.168.42.3",
                    "//[digikamMysqlPort]": "DigiKam MySQL DB port",
                    "digikamMysqlPort": 3306,
                    "//[digikamMysqlDb]": "DigiKam MySQL DB name",
                    "digikamMysqlDb": "digikam",
                    "//[digikamMysqlUser]": "DigiKam MySQL DB username",
                    "digikamMysqlUser": "dk_ro",
                    "//[digikamMysqlPassword]": "DigiKam MySQL DB password",
                    "digikamMysqlPassword": "redacted"
                }
            }
        ],
        "//[cleanUpUnusedTables]": "Automatically removes all tables from the DB that are not used anymore.",
        "cleanUpUnusedTables": true
    },

This is what the admin page shows:

image

Server logs (optional)

When I have the extension dump the extension.config.getConfig() object, the state has the default values, not my real values:

pigallery2_dev  |   __state: {
pigallery2_dev  |     digikamShowCollection: {
pigallery2_dev  |       description: 'DigiKam Directory Category',
pigallery2_dev  |       type: 'string',
pigallery2_dev  |       value: 'Public',
pigallery2_dev  |       default: 'Public',
pigallery2_dev  |       hardDefault: 'Public'
pigallery2_dev  |     },
pigallery2_dev  |     digikamDbType: {
pigallery2_dev  |       tags: [Object],
pigallery2_dev  |       description: 'DigiKam Database Type (MySQL or SQLite)',
pigallery2_dev  |       type: 'string',
pigallery2_dev  |       value: 'MySQL',
pigallery2_dev  |       default: 'MySQL',
pigallery2_dev  |       hardDefault: 'MySQL'
pigallery2_dev  |     },
pigallery2_dev  |     digikamSqliteDb: {
pigallery2_dev  |       description: 'DigiKam SQLite DB filename',
pigallery2_dev  |       type: 'string',
pigallery2_dev  |       value: '/app/data/digikam/digikam.db',
pigallery2_dev  |       default: '/app/data/digikam/digikam.db',
pigallery2_dev  |       hardDefault: '/app/data/digikam/digikam.db'
pigallery2_dev  |     },
pigallery2_dev  |     digikamMysqlHost: {
pigallery2_dev  |       description: 'DigiKam MySQL DB hostname',
pigallery2_dev  |       type: 'string',
pigallery2_dev  |       value: 'localhost',
pigallery2_dev  |       default: 'localhost',
pigallery2_dev  |       hardDefault: 'localhost'
pigallery2_dev  |     },
pigallery2_dev  |     digikamMysqlPort: {
pigallery2_dev  |       description: 'DigiKam MySQL DB port',
pigallery2_dev  |       type: 'float',
pigallery2_dev  |       value: 3306,
pigallery2_dev  |       default: 3306,
pigallery2_dev  |       hardDefault: 3306
pigallery2_dev  |     },
pigallery2_dev  |     digikamMysqlDb: {
pigallery2_dev  |       description: 'DigiKam MySQL DB name',
pigallery2_dev  |       type: 'string',
pigallery2_dev  |       value: 'digikam',
pigallery2_dev  |       default: 'digikam',
pigallery2_dev  |       hardDefault: 'digikam'
pigallery2_dev  |     },
pigallery2_dev  |     digikamMysqlUser: {
pigallery2_dev  |       description: 'DigiKam MySQL DB username',
pigallery2_dev  |       type: 'string',
pigallery2_dev  |       value: 'digikam',
pigallery2_dev  |       default: 'digikam',
pigallery2_dev  |       hardDefault: 'digikam'
pigallery2_dev  |     },
pigallery2_dev  |     digikamMysqlPassword: {
pigallery2_dev  |       description: 'DigiKam MySQL DB password',
pigallery2_dev  |       type: 'string',
pigallery2_dev  |       value: 'password',
pigallery2_dev  |       default: 'password',
pigallery2_dev  |       hardDefault: 'password'
pigallery2_dev  |     }
pigallery2_dev  |   },

Environment (please complete the following information):

  • OS: Server & browser: Ubuntu 22.04
  • Browser: Firefox

Used app version: Compiled from source: github commit 3811fc3c

About this issue

  • Original URL
  • State: open
  • Created 4 months ago
  • Comments: 23 (23 by maintainers)

Commits related to this issue

Most upvoted comments

It looks like loadExtensionList in ExtensionManager.ts used to add any directories it found into Config.Extensions.extensions, but it doesn’t do that anymore. This feels like the root cause of these issues I mentioned:

When starting from an empty config, the admin page doesn’t populate anything.

it still wouldn’t load the extension. In fact, it didn’t even recognize that a new extension had been added at all!

I haven’t examined the most recent refactor of the extension loading code, so maybe the process to discover new extensions happens somewhere else now?