Add support for loading image plugins through the settings folder of the apps.

This commit is contained in:
luisangelsm
2026-03-14 09:23:20 +01:00
parent 3709b6e737
commit 754ea0c2f6
9 changed files with 52 additions and 3 deletions

View File

@ -15,6 +15,9 @@ Version counting is based on semantic versioning (Major.Feature.Patch)
* Add a theme editor and support for custom themes.
* Add an application language setting with a system default option in YACReader and YACReaderLibrary.
### All apps
* Add support for user-installed Qt image format plugins via the shared `plugins/imageformats` folder in the YACReader settings directory.
## 9.16.4
### YACReaderLibrary

View File

@ -114,6 +114,7 @@ int main(int argc, char *argv[])
app.setApplicationName("YACReader");
app.setOrganizationName("YACReader");
YACReader::initializeSharedPluginPaths();
auto *appearanceConfig = new AppearanceConfiguration(
YACReader::getSettingsPath() + "/YACReader.ini", qApp);

View File

@ -140,6 +140,7 @@ int main(int argc, char **argv)
app.setApplicationName("YACReaderLibrary");
app.setOrganizationName("YACReader");
app.setApplicationVersion(VERSION);
YACReader::initializeSharedPluginPaths();
// Theme initialization
auto *appearanceConfig = new AppearanceConfiguration(

View File

@ -48,6 +48,7 @@ int main(int argc, char **argv)
app.setApplicationName("YACReaderLibrary");
app.setOrganizationName("YACReader");
YACReader::initializeSharedPluginPaths();
QString buildNumber = ".0";

View File

@ -1,5 +1,7 @@
#include "global_info_provider.h"
#include "yacreader_global.h"
#include <QImageReader>
#include <QPaintDevice>
#include <QtCore>
@ -24,6 +26,7 @@ QString YACReader::getGlobalInfo()
text.append("\nAPP INFORMATION\n");
QString supportedImageFormats = QImageReader::supportedImageFormats().join(", ");
text.append(QString("Image formats supported: %1\n").arg(supportedImageFormats));
text.append(QString("User image plugin folder: %1\n").arg(YACReader::getImageFormatsPluginsPath()));
// append if sqlite driver is available
#ifdef YACREADER_LIBRARY
text.append(QString("SQLite driver available: %1\n").arg(QSqlDatabase::isDriverAvailable("QSQLITE") ? "yes" : "no"));

View File

@ -12,6 +12,40 @@ QString YACReader::getSettingsPath()
return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
}
QString YACReader::getCommonSettingsPath()
{
const auto organizationName = QCoreApplication::organizationName().trimmed();
const auto basePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
if (organizationName.isEmpty())
return basePath;
return QDir(basePath).filePath(organizationName);
}
QString YACReader::getCommonSettingsFilePath()
{
return QDir(getCommonSettingsPath()).filePath("YACReaderCommon.ini");
}
QString YACReader::getPluginsPath()
{
return QDir(getCommonSettingsPath()).filePath("plugins");
}
QString YACReader::getImageFormatsPluginsPath()
{
return QDir(getPluginsPath()).filePath("imageformats");
}
void YACReader::initializeSharedPluginPaths()
{
QDir().mkpath(getImageFormatsPluginsPath());
const QString pluginsPath = QDir(getPluginsPath()).absolutePath();
QCoreApplication::addLibraryPath(pluginsPath);
}
QString YACReader::colorToName(LabelColors colors)
{
switch (colors) {

View File

@ -103,6 +103,11 @@ QDataStream &operator<<(QDataStream &stream, const OpenComicSource &source);
QDataStream &operator>>(QDataStream &stream, OpenComicSource &source);
QString getSettingsPath();
QString getCommonSettingsPath();
QString getCommonSettingsFilePath();
QString getPluginsPath();
QString getImageFormatsPluginsPath();
void initializeSharedPluginPaths();
QString colorToName(LabelColors colors);
QString labelColorToRGBString(LabelColors color);
QLibrary *load7zLibrary();

View File

@ -7,9 +7,7 @@ YACReader::WhatsNewController::WhatsNewController() { }
void YACReader::WhatsNewController::showWhatsNewIfNeeded(QWidget *fromParent)
{
QSettings commonSettings(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) +
"/YACReader/YACReaderCommon.ini",
QSettings::IniFormat);
QSettings commonSettings(YACReader::getCommonSettingsFilePath(), QSettings::IniFormat);
if (commonSettings.value("LAST_VERSION_INSTALLED").toString() != VERSION) {
showWhatsNew(fromParent);

View File

@ -57,6 +57,9 @@ YACReader::WhatsNewDialog::WhatsNewDialog(QWidget *parent)
" &#8226; Add a theme editor and support for custom themes<br/>"
" &#8226; Add an application language setting with a system default option in YACReader and YACReaderLibrary<br/>"
"<br/>"
"<span style=\"font-weight:600\">All apps</span><br/>"
" &#8226; Add support for user-installed Qt image format plugins via the shared <i>plugins/imageformats</i> folder in the YACReader settings directory<br/>"
"<br/>"
"I hope you enjoy the new update. Please, if you like YACReader consider to become a patron in <a href=\"https://www.patreon.com/yacreader\" style=\"color:%1;\">Patreon</a> "
"or donate some money using <a href=\"https://www.paypal.com/donate?business=5TAMNQCDDMVP8&item_name=Support+YACReader\" style=\"color:%1;\">Pay-Pal</a> and help keeping the project alive. "
"Remember that there is an iOS version available in the <a href=\"https://apps.apple.com/app/id635717885\" style=\"color:%1;\">Apple App Store</a>, "