From 998d57874d35736bc3cd86a76aac7e7254169f57 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Mon, 21 Aug 2023 00:34:54 +0300 Subject: [PATCH] kio: use QString instead of KUrl as argument for KFileMetaDataPlugin::metaData() for performance reasons (to not convert KUrl to QString from each plugin) Signed-off-by: Ivailo Monev --- kio/kio/kfilemetadata.cpp | 4 ++-- kio/kio/kfilemetadata.h | 5 ++--- kio/kio/kfilemetainfo.cpp | 3 ++- kio/metadata/kfilemetadata_djvulibre.cpp | 6 +++--- kio/metadata/kfilemetadata_djvulibre.h | 2 +- kio/metadata/kfilemetadata_epub.cpp | 10 ++++++---- kio/metadata/kfilemetadata_epub.h | 2 +- kio/metadata/kfilemetadata_exiv2.cpp | 4 ++-- kio/metadata/kfilemetadata_exiv2.h | 2 +- kio/metadata/kfilemetadata_ffmpeg.cpp | 10 ++++++---- kio/metadata/kfilemetadata_ffmpeg.h | 2 +- kio/metadata/kfilemetadata_freetype.cpp | 10 ++++++---- kio/metadata/kfilemetadata_freetype.h | 2 +- kio/metadata/kfilemetadata_poppler.cpp | 17 ++++++++--------- kio/metadata/kfilemetadata_poppler.h | 2 +- kio/metadata/kfilemetadata_spectre.cpp | 10 ++++++---- kio/metadata/kfilemetadata_spectre.h | 2 +- kio/metadata/kfilemetadata_taglib.cpp | 14 ++++++++------ kio/metadata/kfilemetadata_taglib.h | 2 +- 19 files changed, 59 insertions(+), 50 deletions(-) diff --git a/kio/kio/kfilemetadata.cpp b/kio/kio/kfilemetadata.cpp index 12963586..afcc4822 100644 --- a/kio/kio/kfilemetadata.cpp +++ b/kio/kio/kfilemetadata.cpp @@ -30,9 +30,9 @@ KFileMetaDataPlugin::~KFileMetaDataPlugin() { } -QList KFileMetaDataPlugin::metaData(const KUrl &url) +QList KFileMetaDataPlugin::metaData(const QString &path) { - Q_UNUSED(url); + Q_UNUSED(path); return QList(); } diff --git a/kio/kio/kfilemetadata.h b/kio/kio/kfilemetadata.h index 9e390bdb..1d09a1a0 100644 --- a/kio/kio/kfilemetadata.h +++ b/kio/kio/kfilemetadata.h @@ -20,12 +20,11 @@ #define KFILEMETADATA_H #include "kio_export.h" -#include "kurl.h" #include "kfilemetainfo.h" #include "kfilemetainfoitem.h" #include -#include +#include /*! Base class for plugins to retrieve file metadata. @@ -46,7 +45,7 @@ public: KFileMetaDataPlugin(QObject *parent = nullptr); ~KFileMetaDataPlugin(); - virtual QList metaData(const KUrl &url); + virtual QList metaData(const QString &path); }; #endif // KFILEMETADATA_H diff --git a/kio/kio/kfilemetainfo.cpp b/kio/kio/kfilemetainfo.cpp index ab910b2b..e0f759f3 100644 --- a/kio/kio/kfilemetainfo.cpp +++ b/kio/kio/kfilemetainfo.cpp @@ -72,6 +72,7 @@ void KFileMetaInfoPrivate::init(const QString &filename, const KUrl &url) // none of the plugins supports remote files if (url.isLocalFile()) { + const QString urlpath = url.toLocalFile(); KConfig config("kmetainformationrc", KConfig::NoGlobals); KConfigGroup pluginsgroup = config.group("Plugins"); const KMimeType::Ptr filemimetype = KMimeType::findByUrl(url); @@ -98,7 +99,7 @@ void KFileMetaInfoPrivate::init(const QString &filename, const KUrl &url) kDebug() << "Extracting metadata via" << kfmdname; KFileMetaDataPlugin *kfmdplugininstance = kfmdplugin->createInstance(); if (kfmdplugininstance) { - items.append(kfmdplugininstance->metaData(url)); + items.append(kfmdplugininstance->metaData(urlpath)); delete kfmdplugininstance; } else { kWarning() << "Could not create KFileMetaDataPlugin instance"; diff --git a/kio/metadata/kfilemetadata_djvulibre.cpp b/kio/metadata/kfilemetadata_djvulibre.cpp index de45973f..5ff49e53 100644 --- a/kio/metadata/kfilemetadata_djvulibre.cpp +++ b/kio/metadata/kfilemetadata_djvulibre.cpp @@ -39,16 +39,16 @@ KFileMetaDataDjVuLibrePlugin::~KFileMetaDataDjVuLibrePlugin() { } -QList KFileMetaDataDjVuLibrePlugin::metaData(const KUrl &url) +QList KFileMetaDataDjVuLibrePlugin::metaData(const QString &path) { QList result; - const QByteArray urlpath = url.toLocalFile().toUtf8(); + const QByteArray pathbytes = path.toUtf8(); ddjvu_context_t* djvuctx = ddjvu_context_create("kfilemetadata_djvulibre"); if (!djvuctx) { kWarning() << "Could not create DjVu context"; return result; } - ddjvu_document_t* djvudoc = ddjvu_document_create_by_filename_utf8(djvuctx, urlpath.constData(), FALSE); + ddjvu_document_t* djvudoc = ddjvu_document_create_by_filename_utf8(djvuctx, pathbytes.constData(), FALSE); if (!djvudoc) { kWarning() << "Could not create DjVu document"; ddjvu_context_release(djvuctx); diff --git a/kio/metadata/kfilemetadata_djvulibre.h b/kio/metadata/kfilemetadata_djvulibre.h index 77f2ad7e..745943e5 100644 --- a/kio/metadata/kfilemetadata_djvulibre.h +++ b/kio/metadata/kfilemetadata_djvulibre.h @@ -28,7 +28,7 @@ public: KFileMetaDataDjVuLibrePlugin(QObject* parent, const QVariantList &args); ~KFileMetaDataDjVuLibrePlugin(); - QList metaData(const KUrl &url) final; + QList metaData(const QString &path) final; }; #endif // KFILEMETADATA_DJVULIBRE_H diff --git a/kio/metadata/kfilemetadata_epub.cpp b/kio/metadata/kfilemetadata_epub.cpp index cc00e82c..969b81d8 100644 --- a/kio/metadata/kfilemetadata_epub.cpp +++ b/kio/metadata/kfilemetadata_epub.cpp @@ -20,6 +20,8 @@ #include "kpluginfactory.h" #include "kdebug.h" +#include + #include static QString getEPubMetadata(struct epub *epubdocument, enum epub_metadata epubmetadata) @@ -53,13 +55,13 @@ KFileMetaDataEPubPlugin::~KFileMetaDataEPubPlugin() { } -QList KFileMetaDataEPubPlugin::metaData(const KUrl &url) +QList KFileMetaDataEPubPlugin::metaData(const QString &path) { QList result; - const QByteArray urlpath = url.toLocalFile().toLocal8Bit(); - struct epub *epubdocument = epub_open(urlpath.constData(), 1); + const QByteArray pathbytes = QFile::encodeName(path); + struct epub *epubdocument = epub_open(pathbytes.constData(), 1); if (!epubdocument) { - kWarning() << "Could not open" << urlpath; + kWarning() << "Could not open" << pathbytes; return result; } const QString epubid = getEPubMetadata(epubdocument, EPUB_ID); diff --git a/kio/metadata/kfilemetadata_epub.h b/kio/metadata/kfilemetadata_epub.h index 48cdf57c..d64c4ab1 100644 --- a/kio/metadata/kfilemetadata_epub.h +++ b/kio/metadata/kfilemetadata_epub.h @@ -28,7 +28,7 @@ public: KFileMetaDataEPubPlugin(QObject* parent, const QVariantList &args); ~KFileMetaDataEPubPlugin(); - QList metaData(const KUrl &url) final; + QList metaData(const QString &path) final; }; #endif // KFILEMETADATA_EPUB_H diff --git a/kio/metadata/kfilemetadata_exiv2.cpp b/kio/metadata/kfilemetadata_exiv2.cpp index 71329228..be903188 100644 --- a/kio/metadata/kfilemetadata_exiv2.cpp +++ b/kio/metadata/kfilemetadata_exiv2.cpp @@ -39,10 +39,10 @@ KFileMetaDataExiv2Plugin::~KFileMetaDataExiv2Plugin() { } -QList KFileMetaDataExiv2Plugin::metaData(const KUrl &url) +QList KFileMetaDataExiv2Plugin::metaData(const QString &path) { QList result; - const KExiv2 kexiv2(url.toLocalFile()); + const KExiv2 kexiv2(path); foreach (const KExiv2Property &kexiv2property, kexiv2.metadata()) { // qDebug() << Q_FUNC_INFO << kexiv2property.name << kexiv2property.value; // for reference: diff --git a/kio/metadata/kfilemetadata_exiv2.h b/kio/metadata/kfilemetadata_exiv2.h index f0d1b6f8..30e9ae02 100644 --- a/kio/metadata/kfilemetadata_exiv2.h +++ b/kio/metadata/kfilemetadata_exiv2.h @@ -28,7 +28,7 @@ public: KFileMetaDataExiv2Plugin(QObject* parent, const QVariantList &args); ~KFileMetaDataExiv2Plugin(); - QList metaData(const KUrl &url) final; + QList metaData(const QString &path) final; }; #endif // KFILEMETADATA_EXIV2_H diff --git a/kio/metadata/kfilemetadata_ffmpeg.cpp b/kio/metadata/kfilemetadata_ffmpeg.cpp index 4491cf7d..8ae5e741 100644 --- a/kio/metadata/kfilemetadata_ffmpeg.cpp +++ b/kio/metadata/kfilemetadata_ffmpeg.cpp @@ -23,6 +23,8 @@ #include "kmimetype.h" #include "kdebug.h" +#include + extern "C" { #include #include @@ -42,14 +44,14 @@ KFileMetaDataFFmpegPlugin::~KFileMetaDataFFmpegPlugin() { } -QList KFileMetaDataFFmpegPlugin::metaData(const KUrl &url) +QList KFileMetaDataFFmpegPlugin::metaData(const QString &path) { QList result; - const QByteArray urlpath = url.toLocalFile().toLocal8Bit(); + const QByteArray pathbytes = QFile::encodeName(path); AVFormatContext *ffmpegcontext = NULL; - const int ffmpegresult = avformat_open_input(&ffmpegcontext, urlpath.constData(), NULL, NULL); + const int ffmpegresult = avformat_open_input(&ffmpegcontext, pathbytes.constData(), NULL, NULL); if (ffmpegresult != 0 || !ffmpegcontext) { - kWarning() << "Could not open" << urlpath; + kWarning() << "Could not open" << pathbytes; return result; } for (uint i = 0; i < ffmpegcontext->nb_streams; i++) { diff --git a/kio/metadata/kfilemetadata_ffmpeg.h b/kio/metadata/kfilemetadata_ffmpeg.h index 98025b49..53c0adfe 100644 --- a/kio/metadata/kfilemetadata_ffmpeg.h +++ b/kio/metadata/kfilemetadata_ffmpeg.h @@ -28,7 +28,7 @@ public: KFileMetaDataFFmpegPlugin(QObject* parent, const QVariantList &args); ~KFileMetaDataFFmpegPlugin(); - QList metaData(const KUrl &url) final; + QList metaData(const QString &path) final; }; #endif // KFILEMETADATA_FFMPEG_H diff --git a/kio/metadata/kfilemetadata_freetype.cpp b/kio/metadata/kfilemetadata_freetype.cpp index cc938aa5..73cddda2 100644 --- a/kio/metadata/kfilemetadata_freetype.cpp +++ b/kio/metadata/kfilemetadata_freetype.cpp @@ -20,6 +20,8 @@ #include "kpluginfactory.h" #include "kdebug.h" +#include + #include #include FT_FREETYPE_H #include FT_TYPE1_TABLES_H @@ -34,10 +36,10 @@ KFileMetaDataFreetypePlugin::~KFileMetaDataFreetypePlugin() { } -QList KFileMetaDataFreetypePlugin::metaData(const KUrl &url) +QList KFileMetaDataFreetypePlugin::metaData(const QString &path) { QList result; - const QByteArray urlpath = url.toLocalFile().toLocal8Bit(); + const QByteArray pathbytes = QFile::encodeName(path); FT_Library ftlibrary; FT_Init_FreeType(&ftlibrary); if (!ftlibrary) { @@ -45,8 +47,8 @@ QList KFileMetaDataFreetypePlugin::metaData(const KUrl &url) return result; } FT_Face ftface; - if (FT_New_Face(ftlibrary, urlpath.constData(), 0, &ftface) != 0) { - kWarning() << "Could not open" << urlpath; + if (FT_New_Face(ftlibrary, pathbytes.constData(), 0, &ftface) != 0) { + kWarning() << "Could not open" << pathbytes; FT_Done_FreeType(ftlibrary); return result; } diff --git a/kio/metadata/kfilemetadata_freetype.h b/kio/metadata/kfilemetadata_freetype.h index 959c4c9f..232127be 100644 --- a/kio/metadata/kfilemetadata_freetype.h +++ b/kio/metadata/kfilemetadata_freetype.h @@ -28,7 +28,7 @@ public: KFileMetaDataFreetypePlugin(QObject* parent, const QVariantList &args); ~KFileMetaDataFreetypePlugin(); - QList metaData(const KUrl &url) final; + QList metaData(const QString &path) final; }; #endif // KFILEMETADATA_FREETYPE_H diff --git a/kio/metadata/kfilemetadata_poppler.cpp b/kio/metadata/kfilemetadata_poppler.cpp index f1aaa620..896b1bdc 100644 --- a/kio/metadata/kfilemetadata_poppler.cpp +++ b/kio/metadata/kfilemetadata_poppler.cpp @@ -61,34 +61,33 @@ KFileMetaDataPopplerPlugin::~KFileMetaDataPopplerPlugin() { } -QList KFileMetaDataPopplerPlugin::metaData(const KUrl &url) +QList KFileMetaDataPopplerPlugin::metaData(const QString &path) { QList result; - const QString urlpath = url.toLocalFile(); poppler::document* popplerdocument = nullptr; // NOTE: data has be kept for as long as the document is open QByteArray popplerbytes; - const KDecompressor::KDecompressorType pathtype = KDecompressor::typeForFile(urlpath); + const KDecompressor::KDecompressorType pathtype = KDecompressor::typeForFile(path); if (pathtype != KDecompressor::TypeUnknown) { - QFile pathfile(urlpath); + QFile pathfile(path); if (!pathfile.open(QFile::ReadOnly)) { - kWarning() << "Could not open" << urlpath; + kWarning() << "Could not open" << path; return result; } KDecompressor kdecompressor; kdecompressor.setType(pathtype); if (!kdecompressor.process(pathfile.readAll())) { - kWarning() << "Could not decompress" << urlpath; + kWarning() << "Could not decompress" << path; return result; } popplerbytes = kdecompressor.result(); popplerdocument = poppler::document::load_from_raw_data(popplerbytes.constData(), popplerbytes.size()); } else { - const QByteArray urlpathbytes = QFile::encodeName(urlpath); - popplerdocument = poppler::document::load_from_file(std::string(urlpathbytes.constData(), urlpathbytes.size())); + const QByteArray pathbytes = QFile::encodeName(path); + popplerdocument = poppler::document::load_from_file(std::string(pathbytes.constData(), pathbytes.size())); } if (!popplerdocument) { - kWarning() << "Could not open" << urlpath; + kWarning() << "Could not open" << path; return result; } const QString popplertitle = getString(popplerdocument->get_title()); diff --git a/kio/metadata/kfilemetadata_poppler.h b/kio/metadata/kfilemetadata_poppler.h index c9234fa5..0a4a13ad 100644 --- a/kio/metadata/kfilemetadata_poppler.h +++ b/kio/metadata/kfilemetadata_poppler.h @@ -28,7 +28,7 @@ public: KFileMetaDataPopplerPlugin(QObject* parent, const QVariantList &args); ~KFileMetaDataPopplerPlugin(); - QList metaData(const KUrl &url) final; + QList metaData(const QString &path) final; }; #endif // KFILEMETADATA_POPPLER_H diff --git a/kio/metadata/kfilemetadata_spectre.cpp b/kio/metadata/kfilemetadata_spectre.cpp index a09f19d6..48d119ba 100644 --- a/kio/metadata/kfilemetadata_spectre.cpp +++ b/kio/metadata/kfilemetadata_spectre.cpp @@ -20,6 +20,8 @@ #include "kpluginfactory.h" #include "kdebug.h" +#include + #include KFileMetaDataSpectrePlugin::KFileMetaDataSpectrePlugin(QObject* parent, const QVariantList &args) @@ -32,19 +34,19 @@ KFileMetaDataSpectrePlugin::~KFileMetaDataSpectrePlugin() { } -QList KFileMetaDataSpectrePlugin::metaData(const KUrl &url) +QList KFileMetaDataSpectrePlugin::metaData(const QString &path) { QList result; - const QByteArray urlpath = url.toLocalFile().toLocal8Bit(); + const QByteArray pathbytes = QFile::encodeName(path); SpectreDocument *spectredocument = spectre_document_new(); if (!spectredocument) { kWarning() << "Could not create document"; return result; } - spectre_document_load(spectredocument, urlpath.constData()); + spectre_document_load(spectredocument, pathbytes.constData()); const SpectreStatus spectrestatus = spectre_document_status(spectredocument); if (spectrestatus != SPECTRE_STATUS_SUCCESS) { - kWarning() << "Could not open" << urlpath; + kWarning() << "Could not open" << pathbytes; spectre_document_free(spectredocument); return result; } diff --git a/kio/metadata/kfilemetadata_spectre.h b/kio/metadata/kfilemetadata_spectre.h index e714b21b..2ec1a6ea 100644 --- a/kio/metadata/kfilemetadata_spectre.h +++ b/kio/metadata/kfilemetadata_spectre.h @@ -28,7 +28,7 @@ public: KFileMetaDataSpectrePlugin(QObject* parent, const QVariantList &args); ~KFileMetaDataSpectrePlugin(); - QList metaData(const KUrl &url) final; + QList metaData(const QString &path) final; }; #endif // KFILEMETADATA_SPECTRE_H diff --git a/kio/metadata/kfilemetadata_taglib.cpp b/kio/metadata/kfilemetadata_taglib.cpp index 59cc6956..9c5db2a8 100644 --- a/kio/metadata/kfilemetadata_taglib.cpp +++ b/kio/metadata/kfilemetadata_taglib.cpp @@ -22,6 +22,8 @@ #include "klocale.h" #include "kdebug.h" +#include + #include #include @@ -35,18 +37,18 @@ KFileMetaDataTagLibPlugin::~KFileMetaDataTagLibPlugin() { } -QList KFileMetaDataTagLibPlugin::metaData(const KUrl &url) +QList KFileMetaDataTagLibPlugin::metaData(const QString &path) { QList result; - const QByteArray urlpath = url.toLocalFile().toLocal8Bit(); - TagLib::FileRef taglibfile(urlpath); + const QByteArray pathbytes = QFile::encodeName(path); + TagLib::FileRef taglibfile(pathbytes); if (taglibfile.isNull()) { - kWarning() << "Could not open" << urlpath; + kWarning() << "Could not open" << pathbytes; return result; } TagLib::Tag *taglibtag = taglibfile.tag(); if (!taglibtag) { - kDebug() << "Null tag for" << urlpath; + kDebug() << "Null tag for" << pathbytes; } else { const QString taglibtitle = QString::fromStdString(taglibtag->title().to8Bit(true)); if (!taglibtitle.isEmpty()) { @@ -114,7 +116,7 @@ QList KFileMetaDataTagLibPlugin::metaData(const KUrl &url) } TagLib::AudioProperties *taglibaudio = taglibfile.audioProperties(); if (!taglibaudio) { - kDebug() << "Null audio properties for" << urlpath; + kDebug() << "Null audio properties for" << pathbytes; } else { const qlonglong tagliblength = taglibaudio->length(); if (tagliblength > 0) { diff --git a/kio/metadata/kfilemetadata_taglib.h b/kio/metadata/kfilemetadata_taglib.h index 2429c794..f5c364c4 100644 --- a/kio/metadata/kfilemetadata_taglib.h +++ b/kio/metadata/kfilemetadata_taglib.h @@ -28,7 +28,7 @@ public: KFileMetaDataTagLibPlugin(QObject* parent, const QVariantList &args); ~KFileMetaDataTagLibPlugin(); - QList metaData(const KUrl &url) final; + QList metaData(const QString &path) final; }; #endif // KFILEMETADATA_TAGLIB_H