File indexing completed on 2025-03-09 04:54:38

0001 /* SPDX-FileCopyrightText: 2009 Thomas McGuire <mcguire@kde.org>
0002 
0003    SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0004 */
0005 
0006 #include "iconnamecache.h"
0007 
0008 #include <KIconLoader>
0009 #include <QStandardPaths>
0010 
0011 using namespace MessageViewer;
0012 
0013 Q_GLOBAL_STATIC(IconNameCache, s_iconNameCache)
0014 
0015 IconNameCache *IconNameCache::instance()
0016 {
0017     return s_iconNameCache;
0018 }
0019 
0020 bool IconNameCache::Entry::operator<(const Entry &other) const
0021 {
0022     const int fileNameCompare = fileName.compare(other.fileName);
0023     if (fileNameCompare != 0) {
0024         return fileNameCompare < 0;
0025     } else {
0026         return size < other.size;
0027     }
0028 }
0029 
0030 QString IconNameCache::iconPath(const QString &name, int size) const
0031 {
0032     Entry entry;
0033     entry.fileName = name;
0034     entry.size = size;
0035 
0036     const QString val = mCachedEntries.value(entry);
0037     if (!val.isEmpty()) {
0038         return val;
0039     }
0040 
0041     const QString fileName = KIconLoader::global()->iconPath(name, size);
0042     mCachedEntries.insert(entry, fileName);
0043     return fileName;
0044 }
0045 
0046 QString IconNameCache::iconPathFromLocal(const QString &name) const
0047 {
0048     Entry entry;
0049     entry.fileName = name;
0050     entry.size = 0;
0051 
0052     const QString val = mCachedEntries.value(entry);
0053     if (!val.isEmpty()) {
0054         return val;
0055     }
0056 
0057     const QString fileName = picsPath() + name;
0058     mCachedEntries.insert(entry, fileName);
0059     return fileName;
0060 }
0061 
0062 QString IconNameCache::picsPath() const
0063 {
0064     if (mPicsPath.isEmpty()) {
0065         mPicsPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("libmessageviewer/pics/"), QStandardPaths::LocateDirectory);
0066     }
0067     return mPicsPath;
0068 }