File indexing completed on 2024-04-21 16:29:36

0001 /***************************************************************************
0002  *   Copyright (C) 2008 by Trever Fischer                                  *
0003  *   wm161@wm161.net                                                       *
0004  *   Copyright (C) 2009-2011 by Daniel Nicoletti                           *
0005  *   dantti12@gmail.com                                                    *
0006  *                                                                         *
0007  *   This program is free software; you can redistribute it and/or modify  *
0008  *   it under the terms of the GNU General Public License as published by  *
0009  *   the Free Software Foundation; either version 2 of the License, or     *
0010  *   (at your option) any later version.                                   *
0011  *                                                                         *
0012  *   This program is distributed in the hope that it will be useful,       *
0013  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0014  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0015  *   GNU General Public License for more details.                          *
0016  *                                                                         *
0017  *   You should have received a copy of the GNU General Public License     *
0018  *   along with this program; see the file COPYING. If not, write to       *
0019  *   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,  *
0020  *   Boston, MA 02110-1301, USA.                                           *
0021  ***************************************************************************/
0022 
0023 #include <config.h>
0024 
0025 #include "PkIcons.h"
0026 
0027 #include <KIconLoader>
0028 
0029 #include <QLoggingCategory>
0030 
0031 Q_LOGGING_CATEGORY(APPER_LIB, "apper.lib")
0032 
0033 //#include <KGlobal>
0034 
0035 using namespace PackageKit;
0036 
0037 bool PkIcons::init = false;
0038 QHash<QString, QIcon> PkIcons::cache = QHash<QString, QIcon>();
0039 
0040 void PkIcons::configure()
0041 {
0042     QIcon::setThemeSearchPaths(QIcon::themeSearchPaths() +
0043                                QStringList{QLatin1String("xdgdata-pixmap"),
0044                                            QLatin1String("/usr/share/app-info/icons/"),
0045                                            QLatin1String("/usr/share/app-install/icons/")});
0046 //    KStandardDirs:: KGlobal::dirs()->addResourceDir("xdgdata-pixmap", "/usr/share/app-info/icons/", "/usr/share/app-install/icons/");
0047 //    KIconLoader::global()->reconfigure("apper");
0048     PkIcons::init = true;
0049 }
0050 
0051 QIcon PkIcons::getIcon(const QString &name)
0052 {
0053     if (!PkIcons::init) {
0054         PkIcons::configure();
0055     }
0056 
0057     return QIcon::fromTheme(name);
0058 }
0059 
0060 QIcon PkIcons::getIcon(const QString &name, const QString &defaultName)
0061 {
0062     if (!PkIcons::init) {
0063         PkIcons::configure();
0064     }
0065 
0066     if (name.isEmpty()) {
0067         return QIcon();
0068     }
0069 
0070     bool isNull;
0071     isNull = KIconLoader::global()->iconPath(name, KIconLoader::NoGroup, true).isEmpty();
0072 
0073     if (isNull && !defaultName.isNull()) {
0074         return QIcon::fromTheme(defaultName);
0075     } else if (isNull) {
0076         return QIcon();
0077     }
0078     return QIcon::fromTheme(name);
0079 }
0080 
0081 QString PkIcons::statusIconName(Transaction::Status status)
0082 {
0083     if (!PkIcons::init) {
0084         PkIcons::configure();
0085     }
0086     switch (status) {
0087     case Transaction::StatusUnknown              : return QLatin1String("help-browser");
0088     case Transaction::StatusCancel               :
0089     case Transaction::StatusCleanup              : return QLatin1String("package-clean-up");
0090     case Transaction::StatusCommit               : return QLatin1String("package-working");//TODO needs a better icon
0091     case Transaction::StatusDepResolve           : return QLatin1String("package-info");
0092     case Transaction::StatusDownloadChangelog    :
0093     case Transaction::StatusDownloadFilelist     :
0094     case Transaction::StatusDownloadGroup        :
0095     case Transaction::StatusDownloadPackagelist  : return QLatin1String("refresh-cache");
0096     case Transaction::StatusDownload             : return QLatin1String("package-download");
0097     case Transaction::StatusDownloadRepository   :
0098     case Transaction::StatusDownloadUpdateinfo   : return QLatin1String("refresh-cache");
0099     case Transaction::StatusFinished             : return QLatin1String("package-clean-up");
0100     case Transaction::StatusGeneratePackageList  : return QLatin1String("refresh-cache");
0101     case Transaction::StatusWaitingForLock       : return QLatin1String("dialog-password");
0102     case Transaction::StatusWaitingForAuth       : return QLatin1String("dialog-password");//IMPROVE ME
0103     case Transaction::StatusInfo                 : return QLatin1String("package-info");
0104     case Transaction::StatusInstall              : return QLatin1String("kpk-package-add");
0105     case Transaction::StatusLoadingCache         : return QLatin1String("refresh-cache");
0106     case Transaction::StatusObsolete             : return QLatin1String("package-clean-up");
0107     case Transaction::StatusQuery                : return QLatin1String("search-package");
0108     case Transaction::StatusRefreshCache         : return QLatin1String("refresh-cache");
0109     case Transaction::StatusRemove               : return QLatin1String("package-removed");
0110     case Transaction::StatusRepackaging          : return QLatin1String("package-clean-up");
0111     case Transaction::StatusRequest              : return QLatin1String("search-package");
0112     case Transaction::StatusRunning              : return QLatin1String("package-working");
0113     case Transaction::StatusScanApplications     : return QLatin1String("search-package");
0114     case Transaction::StatusSetup                : return QLatin1String("package-working");
0115     case Transaction::StatusSigCheck             :
0116     case Transaction::StatusTestCommit           : return QLatin1String("package-info");//TODO needs a better icon
0117     case Transaction::StatusUpdate               : return QLatin1String("package-update");
0118     case Transaction::StatusWait                 : return QLatin1String("package-wait");
0119     case Transaction::StatusScanProcessList      : return QLatin1String("package-info");
0120     case Transaction::StatusCheckExecutableFiles : return QLatin1String("package-info");
0121     case Transaction::StatusCheckLibraries       : return QLatin1String("package-info");
0122     case Transaction::StatusCopyFiles            : return QLatin1String("package-info");
0123     case Transaction::StatusRunHook              : return QLatin1String("package-info");
0124     }
0125     qCDebug(APPER_LIB) << "status icon unrecognised: " << status;
0126     return QLatin1String("help-browser");
0127 }
0128 
0129 QIcon PkIcons::statusIcon(Transaction::Status status)
0130 {
0131     return QIcon::fromTheme(PkIcons::statusIconName(status));
0132 }
0133 
0134 QString PkIcons::statusAnimation(Transaction::Status status)
0135 {
0136     if (!PkIcons::init) {
0137         PkIcons::configure();
0138     }
0139     switch (status) {
0140     case Transaction::StatusUnknown             : return QLatin1String("help-browser");
0141     case Transaction::StatusCancel              :
0142     case Transaction::StatusCleanup             : return QLatin1String("pk-cleaning-up");
0143     case Transaction::StatusCommit              :
0144     case Transaction::StatusDepResolve          : return QLatin1String("pk-testing");
0145     case Transaction::StatusDownloadChangelog   :
0146     case Transaction::StatusDownloadFilelist    :
0147     case Transaction::StatusDownloadGroup       :
0148     case Transaction::StatusDownloadPackagelist : return QLatin1String("pk-refresh-cache");
0149     case Transaction::StatusDownload            : return QLatin1String("pk-downloading");
0150     case Transaction::StatusDownloadRepository  :
0151     case Transaction::StatusDownloadUpdateinfo  : return QLatin1String("pk-refresh-cache");
0152     case Transaction::StatusFinished            : return QLatin1String("pk-cleaning-up");
0153     case Transaction::StatusGeneratePackageList : return QLatin1String("pk-searching");
0154     case Transaction::StatusWaitingForLock      : return QLatin1String("pk-waiting");
0155     case Transaction::StatusInfo                : return QLatin1String("package-working");
0156     case Transaction::StatusInstall             : return QLatin1String("pk-installing");
0157     case Transaction::StatusLoadingCache        : return QLatin1String("pk-refresh-cache");
0158     case Transaction::StatusObsolete            : return QLatin1String("pk-cleaning-up");
0159     case Transaction::StatusQuery               : return QLatin1String("pk-searching");
0160     case Transaction::StatusRefreshCache        : return QLatin1String("pk-refresh-cache");
0161     case Transaction::StatusRemove              : return QLatin1String("package-removed");//TODO do the animation
0162     case Transaction::StatusRepackaging         : return QLatin1String("pk-searching");
0163     case Transaction::StatusRequest             : return QLatin1String("process-working");
0164     case Transaction::StatusRunning             : return QLatin1String("pk-testing");
0165     case Transaction::StatusScanApplications    : return QLatin1String("pk-searching");
0166     case Transaction::StatusSetup               : return QLatin1String("pk-searching");
0167     case Transaction::StatusSigCheck            : return QLatin1String("package-info");
0168     case Transaction::StatusTestCommit          : return QLatin1String("pk-testing");
0169     case Transaction::StatusUpdate              : return QLatin1String("pk-installing");
0170     case Transaction::StatusWait                : return QLatin1String("pk-waiting");
0171     case Transaction::StatusWaitingForAuth      : return QLatin1String("dialog-password");
0172     case Transaction::StatusScanProcessList     : return QLatin1String("utilities-system-monitor");
0173     default                              : qCDebug(APPER_LIB) << "status icon unrecognised: " << status;
0174         return QLatin1String("help-browser");
0175     }
0176 }
0177 
0178 QString PkIcons::actionIconName(Transaction::Role role)
0179 {
0180     if (!PkIcons::init) {
0181         PkIcons::configure();
0182     }
0183     switch (role) {
0184     case Transaction::RoleUnknown                 : return QLatin1String("applications-other");
0185     case Transaction::RoleAcceptEula              : return QLatin1String("package-info");
0186     case Transaction::RoleCancel                  : return QLatin1String("process-stop");
0187     case Transaction::RoleDownloadPackages        : return QLatin1String("package-download");
0188     case Transaction::RoleGetCategories           : return QLatin1String("package-info");
0189     case Transaction::RoleDependsOn               : return QLatin1String("package-info");
0190     case Transaction::RoleGetDetails              : return QLatin1String("package-info");
0191     case Transaction::RoleGetDetailsLocal         : return QLatin1String("package-info");
0192     case Transaction::RoleGetDistroUpgrades       : return QLatin1String("distro-upgrade");
0193     case Transaction::RoleGetFiles                : return QLatin1String("search-package");
0194     case Transaction::RoleGetFilesLocal           : return QLatin1String("search-package");
0195     case Transaction::RoleGetOldTransactions      : return QLatin1String("package-info");
0196     case Transaction::RoleGetPackages             : return QLatin1String("package-packages");
0197     case Transaction::RoleGetRepoList             : return QLatin1String("package-orign");
0198     case Transaction::RoleRequiredBy              : return QLatin1String("package-info");
0199     case Transaction::RoleGetUpdateDetail         : return QLatin1String("package-info");
0200     case Transaction::RoleGetUpdates              : return QLatin1String("package-info");
0201     case Transaction::RoleInstallFiles            : return QLatin1String("package-installed");
0202     case Transaction::RoleInstallPackages         : return QLatin1String("package-installed");
0203     case Transaction::RoleInstallSignature        : return QLatin1String("package-installed");
0204     case Transaction::RoleRefreshCache            : return QLatin1String("refresh-cache");
0205     case Transaction::RoleRemovePackages          : return QLatin1String("package-removed");
0206     case Transaction::RoleRepoEnable              : return QLatin1String("package-orign");
0207     case Transaction::RoleRepoSetData             : return QLatin1String("package-orign");
0208     case Transaction::RoleRepoRemove              : return QLatin1String("package-orign");
0209     case Transaction::RoleResolve                 : return QLatin1String("search-package");
0210     case Transaction::RoleSearchDetails           : return QLatin1String("search-package");
0211     case Transaction::RoleSearchFile              : return QLatin1String("search-package");
0212     case Transaction::RoleSearchGroup             : return QLatin1String("search-package");
0213     case Transaction::RoleSearchName              : return QLatin1String("search-package");
0214     case Transaction::RoleUpdatePackages          : return QLatin1String("package-update");
0215     case Transaction::RoleWhatProvides            : return QLatin1String("search-package");
0216     case Transaction::RoleRepairSystem            : return QLatin1String("package-rollback");
0217     case Transaction::RoleUpgradeSystem           : return QLatin1String("package-update");
0218     }
0219     qCDebug(APPER_LIB) << "action unrecognised: " << role;
0220     return QLatin1String("applications-other");
0221 }
0222 
0223 QIcon PkIcons::actionIcon(Transaction::Role role)
0224 {
0225     return QIcon::fromTheme(actionIconName(role));
0226 }
0227 
0228 QIcon PkIcons::groupsIcon(Transaction::Group group)
0229 {
0230     if (!PkIcons::init) {
0231         PkIcons::configure();
0232     }
0233     switch (group) {
0234     case Transaction::GroupUnknown         : return QIcon::fromTheme(QLatin1String("unknown"));
0235     case Transaction::GroupAccessibility   : return QIcon::fromTheme(QLatin1String("preferences-desktop-accessibility"));
0236     case Transaction::GroupAccessories     : return QIcon::fromTheme(QLatin1String("applications-accessories"));
0237     case Transaction::GroupAdminTools      : return QIcon::fromTheme(QLatin1String("dialog-password"));
0238     case Transaction::GroupCommunication   : return QIcon::fromTheme(QLatin1String("network-workgroup"));//FIXME
0239     case Transaction::GroupDesktopGnome    : return QIcon::fromTheme(QLatin1String("kpk-desktop-gnome"));
0240     case Transaction::GroupDesktopKde      : return QIcon::fromTheme(QLatin1String("kde"));
0241     case Transaction::GroupDesktopOther    : return QIcon::fromTheme(QLatin1String("user-desktop"));
0242     case Transaction::GroupDesktopXfce     : return QIcon::fromTheme(QLatin1String("kpk-desktop-xfce"));
0243     case Transaction::GroupDocumentation   : return QIcon::fromTheme(QLatin1String("accessories-dictionary"));//FIXME
0244     case Transaction::GroupEducation       : return QIcon::fromTheme(QLatin1String("applications-education"));
0245     case Transaction::GroupElectronics     : return QIcon::fromTheme(QLatin1String("media-flash"));
0246     case Transaction::GroupFonts           : return QIcon::fromTheme(QLatin1String("preferences-desktop-font"));
0247     case Transaction::GroupGames           : return QIcon::fromTheme(QLatin1String("applications-games"));
0248     case Transaction::GroupGraphics        : return QIcon::fromTheme(QLatin1String("applications-graphics"));
0249     case Transaction::GroupInternet        : return QIcon::fromTheme(QLatin1String("applications-internet"));
0250     case Transaction::GroupLegacy          : return QIcon::fromTheme(QLatin1String("media-floppy"));
0251     case Transaction::GroupLocalization    : return QIcon::fromTheme(QLatin1String("applications-education-language"));
0252     case Transaction::GroupMaps            : return QIcon::fromTheme(QLatin1String("Maps"));//FIXME
0253     case Transaction::GroupCollections     : return QIcon::fromTheme(QLatin1String("package-orign"));
0254     case Transaction::GroupMultimedia      : return QIcon::fromTheme(QLatin1String("applications-multimedia"));
0255     case Transaction::GroupNetwork         : return QIcon::fromTheme(QLatin1String("network-wired"));
0256     case Transaction::GroupOffice          : return QIcon::fromTheme(QLatin1String("applications-office"));
0257     case Transaction::GroupOther           : return QIcon::fromTheme(QLatin1String("applications-other"));
0258     case Transaction::GroupPowerManagement : return QIcon::fromTheme(QLatin1String("battery"));
0259     case Transaction::GroupProgramming     : return QIcon::fromTheme(QLatin1String("applications-development"));
0260     case Transaction::GroupPublishing      : return QIcon::fromTheme(QLatin1String("accessories-text-editor"));
0261     case Transaction::GroupRepos           : return QIcon::fromTheme(QLatin1String("application-x-compressed-tar"));
0262     case Transaction::GroupScience         : return QIcon::fromTheme(QLatin1String("applications-science"));
0263     case Transaction::GroupSecurity        : return QIcon::fromTheme(QLatin1String("security-high"));
0264     case Transaction::GroupServers         : return QIcon::fromTheme(QLatin1String("network-server"));
0265     case Transaction::GroupSystem          : return QIcon::fromTheme(QLatin1String("applications-system"));
0266     case Transaction::GroupVirtualization  : return QIcon::fromTheme(QLatin1String("cpu"));
0267     case Transaction::GroupVendor          : return QIcon::fromTheme(QLatin1String("application-certificate"));
0268     case Transaction::GroupNewest          : return QIcon::fromTheme(QLatin1String("dialog-information"));
0269     }
0270     qCDebug(APPER_LIB) << "group unrecognised: " << group;
0271     return QIcon::fromTheme(QLatin1String("unknown"));
0272 }
0273 
0274 QIcon PkIcons::packageIcon(Transaction::Info info)
0275 {
0276     if (!PkIcons::init) {
0277         PkIcons::configure();
0278     }
0279     switch (info) {
0280     case Transaction::InfoBugfix      : return QIcon::fromTheme(QLatin1String("script-error"));
0281     case Transaction::InfoEnhancement : return QIcon::fromTheme(QLatin1String("ktip"));
0282     case Transaction::InfoImportant   : return QIcon::fromTheme(QLatin1String("security-medium"));
0283     case Transaction::InfoLow         : return QIcon::fromTheme(QLatin1String("security-high"));
0284     case Transaction::InfoSecurity    : return QIcon::fromTheme(QLatin1String("security-low"));
0285     case Transaction::InfoNormal      : return QIcon::fromTheme(QLatin1String("emblem-new"));
0286     case Transaction::InfoBlocked     : return QIcon::fromTheme(QLatin1String("dialog-cancel"));
0287     case Transaction::InfoAvailable   : return QIcon::fromTheme(QLatin1String("package-download"));
0288     case Transaction::InfoInstalled   : return QIcon::fromTheme(QLatin1String("package-installed"));
0289     default                    : return QIcon::fromTheme(QLatin1String("package"));
0290     }
0291 }
0292 
0293 QString PkIcons::restartIconName(Transaction::Restart type)
0294 {
0295     if (!PkIcons::init) {
0296         PkIcons::configure();
0297     }
0298     // These names MUST be standard icons, otherwise KStatusNotifierItem
0299     // will not be able to load them
0300     switch (type) {
0301     case Transaction::RestartSecuritySystem  :
0302     case Transaction::RestartSystem          : return QLatin1String("system-reboot");
0303     case Transaction::RestartSecuritySession :
0304     case Transaction::RestartSession         : return QLatin1String("system-log-out");
0305     case Transaction::RestartApplication     : return QLatin1String("process-stop");
0306     case Transaction::RestartNone            :
0307     case Transaction::RestartUnknown         : break;
0308     }
0309     return QLatin1String("");
0310 }
0311 
0312 QIcon PkIcons::restartIcon(Transaction::Restart type)
0313 {
0314     return PkIcons::getIcon(restartIconName(type));
0315 }
0316 
0317 QIcon PkIcons::getPreloadedIcon(const QString &name)
0318 {
0319     if (!PkIcons::init) {
0320         PkIcons::configure();
0321     }
0322 
0323     qCDebug(APPER_LIB) << KIconLoader::global()->iconPath(name, KIconLoader::NoGroup, true);
0324     QIcon icon;
0325     icon.addPixmap(QIcon::fromTheme(name).pixmap(48, 48));
0326     return icon;
0327 }
0328 
0329 QString PkIcons::lastCacheRefreshIconName(uint lastTime)
0330 {
0331     unsigned long fifteen = 60 * 60 * 24 * 15;
0332     unsigned long tirty = 60 * 60 * 24 * 30;
0333 
0334     if (lastTime != UINT_MAX && lastTime < fifteen) {
0335         return QLatin1String("security-high");
0336     } else if (lastTime != UINT_MAX && lastTime > fifteen && lastTime < tirty) {
0337         return QLatin1String("security-medium");
0338     }
0339     return QLatin1String("security-low");
0340 }
0341 
0342 #include "moc_PkIcons.cpp"