23 #include "updatepackagefilter.h"
25 #include "plugins/engineplugin.h"
26 #include "plugins/pluginloader.h"
27 #include "strings.hpp"
28 #include "updater/autoupdater.h"
31 #include <QCoreApplication>
33 #include <wadseeker/wadseekerversioninfo.h>
35 class UpdatePackageFilter::PluginInfo
42 DClass<UpdatePackageFilter>
45 bool bWasAnyUpdatePackageIgnored;
46 QMap<QString, QList<QString> > ignoredPackagesRevisions;
47 QMap<QString, UpdatePackageFilter::PluginInfo> plugins;
49 bool hasMainProgramPackage(
const QList<UpdatePackage> &packages)
const
67 d->bWasAnyUpdatePackageIgnored =
false;
70 UpdatePackageFilter::~UpdatePackageFilter()
74 QMap<QString, UpdatePackageFilter::PluginInfo> UpdatePackageFilter::collectPluginInfo()
76 QMap<QString, PluginInfo> infos;
77 const QList<PluginLoader::Plugin *> plugins = gPlugins->plugins();
80 PluginInfo pluginInfo;
81 pluginInfo.name = plugin->info()->data()->name;
82 pluginInfo.revision = QString::number(plugin->info()->data()->version);
84 infos.insert(prefixedName, pluginInfo);
89 QList<UpdatePackage> UpdatePackageFilter::filter(
const QList<UpdatePackage> &packages)
91 QList<UpdatePackage> filtered;
92 d->plugins = collectPluginInfo();
93 QList<UpdatePackage> packagesOnIgnoredList;
96 if (isDifferentThanInstalled(pkg))
98 if (!isOnIgnoredList(pkg.name, pkg.revision))
104 packagesOnIgnoredList << pkg;
108 if (!filtered.isEmpty())
112 filtered.append(packagesOnIgnoredList);
113 packagesOnIgnoredList.clear();
115 d->bWasAnyUpdatePackageIgnored = !packagesOnIgnoredList.isEmpty();
119 bool UpdatePackageFilter::isDifferentThanInstalled(
UpdatePackage &pkg)
const
123 QString localRevision = QString::number(Version::revisionNumber());
130 else if (pkg.
name == AutoUpdater::WADSEEKER_PACKAGE_NAME)
132 QString localRevision = WadseekerVersionInfo::version();
139 else if (pkg.
name == AutoUpdater::QT_PACKAGE_NAME)
147 #if !defined(Q_OS_DARWIN) || defined(__x86_64__)
148 if (QString(Version::qtPackageVersion()) != pkg.
revision)
158 bool checkBrokenQt =
false;
160 checkBrokenQt =
true;
162 if (checkBrokenQt && !isQtInstallOk())
172 if (d->plugins.contains(pkg.
name))
174 PluginInfo pluginInfo = d->plugins[pkg.
name];
175 if (pluginInfo.revision != pkg.
revision)
185 bool UpdatePackageFilter::isQtInstallOk()
const
188 files <<
"libeay32.dll" <<
"ssleay32.dll";
189 for (
const QString &filename : files)
192 QCoreApplication::applicationDirPath(), filename);
193 QFile file(fileLocation);
202 bool UpdatePackageFilter::isOnIgnoredList(
const QString &package,
const QString &revision)
const
204 const QList<QString> &list = d->ignoredPackagesRevisions[package];
205 return list.contains(revision);
208 void UpdatePackageFilter::setIgnoreRevisions(
const QMap<QString, QList<QString> > &packagesRevisions)
210 d->ignoredPackagesRevisions = packagesRevisions;
215 return d->bWasAnyUpdatePackageIgnored;