[office/tellico] /: Add option for preview size and increase default from 128 to 256
Robby Stephenson
null at kde.org
Thu Dec 25 01:56:39 GMT 2025
Git commit f0c3995833f8be42e9aa70b5b97ecca8ceef7b5c by Robby Stephenson.
Committed on 25/12/2025 at 01:56.
Pushed by rstephenson into branch 'master'.
Add option for preview size and increase default from 128 to 256
M +4 -0 ChangeLog
M +18 -8 doc/hacking.docbook
M +7 -5 src/core/netaccess.cpp
M +1 -0 src/core/netaccess.h
M +27 -24 src/translators/filereader.cpp
M +5 -0 src/translators/filereader.h
M +4 -40 src/translators/filereaderbook.cpp
M +0 -6 src/translators/filereaderbook.h
M +2 -34 src/translators/filereadervideo.cpp
M +0 -5 src/translators/filereadervideo.h
https://invent.kde.org/office/tellico/-/commit/f0c3995833f8be42e9aa70b5b97ecca8ceef7b5c
diff --git a/ChangeLog b/ChangeLog
index bb0d3ec25..647c45c73 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2025-12-24 Robby Stephenson <robby at periapsis.org>
+
+ * Added option to change file preview size and increased default to 256.
+
2025-11-25 Robby Stephenson <robby at periapsis.org>
* Fixed bug with XML generation for user-locale (Bug 512581).
diff --git a/doc/hacking.docbook b/doc/hacking.docbook
index b05661df2..dce6e12c6 100644
--- a/doc/hacking.docbook
+++ b/doc/hacking.docbook
@@ -359,6 +359,24 @@ This setting is for the location of the lyxpipe for sending bibliographic citati
</sect3>
</sect2>
+<sect2 id="file-reader-options">
+<title>[File Reader Options]</title>
+
+<para>These settings should be placed in the <emphasis>File Reader Options</emphasis> group.</para>
+
+<sect3>
+<title>Preview Size</title>
+
+<para>This setting is for the maximum size of the generated file preview.</para>
+</sect3>
+
+<sect3>
+<title>Example</title>
+<informalexample>
+<para><userinput>Preview Size=523</userinput></para>
+</informalexample>
+</sect3>
+</sect2>
</sect1>
<sect1 id="bibtex-translation">
@@ -379,12 +397,4 @@ When bibtex files are imported or exported, certain characters are translated be
</sect1>
-<sect1 id="xslt-tricks">
-<title>XSLT Tricks</title>
-
-<para>
-Here are some tips for writing XSLT to parse &appname; &XML; data: (TBD).
-</para>
-</sect1>
-
</chapter>
diff --git a/src/core/netaccess.cpp b/src/core/netaccess.cpp
index 4a5bfc507..8218d3c3f 100644
--- a/src/core/netaccess.cpp
+++ b/src/core/netaccess.cpp
@@ -40,6 +40,7 @@
static QStringList* tmpfiles = nullptr;
+QStringList Tellico::NetAccess::s_defaultPreviewPlugins;
QString Tellico::NetAccess::s_lastErrorMessage;
using Tellico::NetAccess;
@@ -105,11 +106,12 @@ QPixmap NetAccess::filePreview(const QUrl& url, int size) {
QPixmap NetAccess::filePreview(const KFileItem& item, int size) {
NetAccess netaccess;
- // the default plugins are not used by default (what???)
- // the default ones are in config settings instead, so ignore that
- const QStringList plugins = KIO::PreviewJob::defaultPlugins();
- KIO::PreviewJob* previewJob = KIO::filePreview(KFileItemList() << item, QSize(size, size),
- &plugins);
+ // the default plugins are not used by default, preferring
+ // ones are in config settings instead, so ignore that
+ if(s_defaultPreviewPlugins.isEmpty()) {
+ s_defaultPreviewPlugins = KIO::PreviewJob::defaultPlugins();
+ }
+ auto previewJob = KIO::filePreview({item}, QSize(size, size), &s_defaultPreviewPlugins);
connect(previewJob, &KIO::PreviewJob::gotPreview,
&netaccess, &Tellico::NetAccess::slotPreview);
diff --git a/src/core/netaccess.h b/src/core/netaccess.h
index c49888090..765975c2f 100644
--- a/src/core/netaccess.h
+++ b/src/core/netaccess.h
@@ -51,6 +51,7 @@ private Q_SLOTS:
private:
QPixmap m_preview;
+ static QStringList s_defaultPreviewPlugins;
static QString s_lastErrorMessage;
};
diff --git a/src/translators/filereader.cpp b/src/translators/filereader.cpp
index bc8ff2340..ad0ba25b9 100644
--- a/src/translators/filereader.cpp
+++ b/src/translators/filereader.cpp
@@ -36,12 +36,37 @@
#include <KFileMetaData/Extractor>
#include <KFileMetaData/SimpleExtractionResult>
#endif
+#include <KSharedConfig>
+#include <KConfigGroup>
#include <QDir>
#include <QIcon>
namespace {
- static const int FILE_PREVIEW_SIZE = 128;
+ static const int FILE_PREVIEW_SIZE = 256;
+ static const int FILE_ICON_SIZE = 128;
+}
+
+QString Tellico::AbstractFileReader::getCoverImage(const KFileItem& fi_) {
+ QPixmap pixmap;
+ if(useFilePreview()) {
+ KConfigGroup cfg(KSharedConfig::openConfig(), QLatin1String("File Reader Options"));
+ const auto previewSize = cfg.readEntry("Preview Size", FILE_PREVIEW_SIZE);
+ pixmap = Tellico::NetAccess::filePreview(fi_, previewSize);
+ }
+ if(pixmap.isNull()) {
+ if(iconImageId.contains(fi_.iconName())) {
+ return iconImageId.value(fi_.iconName());
+ } else {
+ pixmap = QIcon::fromTheme(fi_.iconName()).pixmap(QSize(FILE_ICON_SIZE, FILE_ICON_SIZE));
+ const QString id = ImageFactory::addImage(pixmap, QStringLiteral("PNG"));
+ if(!id.isEmpty()) {
+ iconImageId.insert(fi_.iconName(), id);
+ }
+ return id;
+ }
+ }
+ return ImageFactory::addImage(pixmap, QStringLiteral("PNG"));
}
using Tellico::FileReaderMetaData;
@@ -76,8 +101,6 @@ public:
QString volume;
QStringList metaIgnore;
- // cache the icon image ids to avoid repeated creation of Data::Image objects
- QHash<QString, QString> iconImageId;
#ifdef HAVE_KFILEMETADATA
QHash<KFileMetaData::Property::Property, QString> propertyNameHash;
#endif
@@ -156,27 +179,7 @@ bool FileReaderFile::populate(Data::EntryPtr entry, const KFileItem& item) {
entry->setField(metainfo, strings.join(FieldFormat::rowDelimiterString()));
#endif
- QPixmap pixmap;
- if(useFilePreview()) {
- pixmap = Tellico::NetAccess::filePreview(item, FILE_PREVIEW_SIZE);
- }
- if(pixmap.isNull()) {
- if(d->iconImageId.contains(item.iconName())) {
- entry->setField(icon, d->iconImageId.value(item.iconName()));
- } else {
- pixmap = QIcon::fromTheme(item.iconName()).pixmap(QSize(FILE_PREVIEW_SIZE, FILE_PREVIEW_SIZE));
- const QString id = ImageFactory::addImage(pixmap, QStringLiteral("PNG"));
- if(!id.isEmpty()) {
- entry->setField(icon, id);
- d->iconImageId.insert(item.iconName(), id);
- }
- }
- } else {
- const QString id = ImageFactory::addImage(pixmap, QStringLiteral("PNG"));
- if(!id.isEmpty()) {
- entry->setField(icon, id);
- }
- }
+ entry->setField(icon, getCoverImage(item));
return true;
}
diff --git a/src/translators/filereader.h b/src/translators/filereader.h
index 2641f54c8..827d7a81e 100644
--- a/src/translators/filereader.h
+++ b/src/translators/filereader.h
@@ -53,9 +53,14 @@ public:
virtual bool populate(Data::EntryPtr entry, const KFileItem& fileItem) = 0;
+protected:
+ QString getCoverImage(const KFileItem& fileItem);
+
private:
QUrl m_url;
bool m_useFilePreview;
+ // cache the icon image ids to avoid repeated creation of Data::Image objects
+ QHash<QString, QString> iconImageId;
};
class FileReaderMetaData : public AbstractFileReader {
diff --git a/src/translators/filereaderbook.cpp b/src/translators/filereaderbook.cpp
index 2c004d916..c8b82e9d6 100644
--- a/src/translators/filereaderbook.cpp
+++ b/src/translators/filereaderbook.cpp
@@ -40,21 +40,9 @@
#include <QDomDocument>
#include <QImageReader>
-namespace {
- static const int FILE_PREVIEW_SIZE = 128;
-}
-
using Tellico::FileReaderBook;
-class FileReaderBook::Private {
-public:
- Private() = default;
-
- // cache the icon image ids to avoid repeated creation of Data::Image objects
- QHash<QString, QString> iconImageId;
-};
-
-FileReaderBook::FileReaderBook(const QUrl& url_) : FileReaderMetaData(url_), d(new Private) {
+FileReaderBook::FileReaderBook(const QUrl& url_) : FileReaderMetaData(url_) {
}
FileReaderBook::~FileReaderBook() = default;
@@ -86,8 +74,9 @@ bool FileReaderBook::populate(Data::EntryPtr entry, const KFileItem& item) {
entry->setField(QStringLiteral("binding"), i18n("E-Book"));
// does it have a cover yet?
- if(entry->field(QStringLiteral("cover")).isEmpty()) {
- setCover(entry, item);
+ const QString cover = QStringLiteral("cover");
+ if(entry->field(cover).isEmpty()) {
+ entry->setField(cover, getCoverImage(item));
}
return true;
}
@@ -327,28 +316,3 @@ bool FileReaderBook::readMeta(Data::EntryPtr entry, const KFileItem& item) {
return true;
#endif
}
-
-void FileReaderBook::setCover(Data::EntryPtr entry, const KFileItem& item) {
- const QString cover = QStringLiteral("cover");
- QPixmap pixmap;
- if(useFilePreview()) {
- pixmap = Tellico::NetAccess::filePreview(item, FILE_PREVIEW_SIZE);
- }
- if(pixmap.isNull()) {
- if(d->iconImageId.contains(item.iconName())) {
- entry->setField(cover, d->iconImageId.value(item.iconName()));
- } else {
- pixmap = QIcon::fromTheme(item.iconName()).pixmap(QSize(FILE_PREVIEW_SIZE, FILE_PREVIEW_SIZE));
- const QString id = ImageFactory::addImage(pixmap, QStringLiteral("PNG"));
- if(!id.isEmpty()) {
- entry->setField(cover, id);
- d->iconImageId.insert(item.iconName(), id);
- }
- }
- } else {
- const QString id = ImageFactory::addImage(pixmap, QStringLiteral("PNG"));
- if(!id.isEmpty()) {
- entry->setField(cover, id);
- }
- }
-}
diff --git a/src/translators/filereaderbook.h b/src/translators/filereaderbook.h
index 1624bdf46..c8b3bbd6a 100644
--- a/src/translators/filereaderbook.h
+++ b/src/translators/filereaderbook.h
@@ -29,7 +29,6 @@
namespace Tellico {
-class FileReaderBookPrivate;
class FileReaderBook : public FileReaderMetaData {
public:
FileReaderBook(const QUrl& u);
@@ -40,11 +39,6 @@ public:
private:
bool readEpub(Data::EntryPtr entry, const KFileItem& fileItem);
bool readMeta(Data::EntryPtr entry, const KFileItem& fileItem);
- void setCover(Data::EntryPtr entry, const KFileItem& fileItem);
-
- class Private;
- friend class Private;
- std::unique_ptr<Private> d;
};
}
diff --git a/src/translators/filereadervideo.cpp b/src/translators/filereadervideo.cpp
index b00b06b53..0514fc06d 100644
--- a/src/translators/filereadervideo.cpp
+++ b/src/translators/filereadervideo.cpp
@@ -39,21 +39,9 @@
#include <QFileInfo>
#include <QDomDocument>
-namespace {
- static const int FILE_PREVIEW_SIZE = 128;
-}
-
using Tellico::FileReaderVideo;
-class FileReaderVideo::Private {
-public:
- Private() = default;
-
- // cache the icon image ids to avoid repeated creation of Data::Image objects
- QHash<QString, QString> iconImageId;
-};
-
-FileReaderVideo::FileReaderVideo(const QUrl& url_) : FileReaderMetaData(url_), d(new Private) {
+FileReaderVideo::FileReaderVideo(const QUrl& url_) : FileReaderMetaData(url_) {
}
FileReaderVideo::~FileReaderVideo() = default;
@@ -137,27 +125,7 @@ bool FileReaderVideo::populate(Data::EntryPtr entry, const KFileItem& item) {
const QString id = ImageFactory::addImage(QUrl::fromLocalFile(posterFile), true /* quiet */);
entry->setField(cover, id);
} else {
- QPixmap pixmap;
- if(useFilePreview()) {
- pixmap = Tellico::NetAccess::filePreview(item, FILE_PREVIEW_SIZE);
- }
- if(pixmap.isNull()) {
- if(d->iconImageId.contains(item.iconName())) {
- entry->setField(cover, d->iconImageId.value(item.iconName()));
- } else {
- pixmap = QIcon::fromTheme(item.iconName()).pixmap(QSize(FILE_PREVIEW_SIZE, FILE_PREVIEW_SIZE));
- const QString id = ImageFactory::addImage(pixmap, QStringLiteral("PNG"));
- if(!id.isEmpty()) {
- entry->setField(cover, id);
- d->iconImageId.insert(item.iconName(), id);
- }
- }
- } else {
- const QString id = ImageFactory::addImage(pixmap, QStringLiteral("PNG"));
- if(!id.isEmpty()) {
- entry->setField(cover, id);
- }
- }
+ entry->setField(cover, getCoverImage(item));
}
return true;
diff --git a/src/translators/filereadervideo.h b/src/translators/filereadervideo.h
index d229c7000..cd3166d08 100644
--- a/src/translators/filereadervideo.h
+++ b/src/translators/filereadervideo.h
@@ -29,7 +29,6 @@
namespace Tellico {
-class FileReaderVideoPrivate;
class FileReaderVideo : public FileReaderMetaData {
public:
FileReaderVideo(const QUrl& u);
@@ -39,10 +38,6 @@ public:
private:
bool populateNfo(Data::EntryPtr entry, const QString& nfoFile);
-
- class Private;
- friend class Private;
- std::unique_ptr<Private> d;
};
}
More information about the kde-doc-english
mailing list