[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/sysadmin/shaman
From: Dario Freddi <drf () kde ! org>
Date: 2009-12-25 18:22:32
Message-ID: 1261765352.071676.20626.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1066088 by dafre:
Holy crap, that is more than awesome :D Now providers are correctly displayed in the \
main view, and the ABS plugin is a proof
Signed-off-by: Dario Freddi <drf@kde.org>
M +5 -3 libshaman/PluginLoader.cpp
M +2 -2 libshaman/PluginLoader_p.h
M +4 -4 libshaman/shamanbase.cpp
M +3 -3 libshaman/shamanbase.h
M +4 -4 libshaman/shamanbase_p.h
M +1 -1 libshaman/shamancoreinterface.h
M +1 -1 libshaman/shamanprovider.h
M +2 -0 libshaman/shamanproviderplugin.cpp
M +2 -2 plugins/abs/AbsPackage.cpp
M +3 -0 plugins/abs/AbsPlugin.cpp
M +1 -1 plugins/packagesview/PackagesModel.cpp
M +85 -1 plugins/packagesview/PackagesViewWidget.cpp
M +6 -0 plugins/packagesview/PackagesViewWidget.h
M +4 -0 shaman/src/MainWindow.cpp
--- trunk/playground/sysadmin/shaman/libshaman/PluginLoader.cpp #1066087:1066088
@@ -173,11 +173,13 @@
kDebug(5001) << "Gui-Plugin script" << scriptname;
}*/
+ // Create a provider out of it BEFORE initializing it
+ Provider *provider = new Provider(plugin, q->parent());
+
+ // Now initialize
+ plugin->d_func()->setPluginName(offer->name());
plugin->init();
- plugin->d_func()->setPluginName(offer->name());
- // Create a provider out of it
- Provider *provider = new Provider(plugin, q->parent());
providerPlugins.append(provider);
emit q->providerCreated(provider);
--- trunk/playground/sysadmin/shaman/libshaman/PluginLoader_p.h #1066087:1066088
@@ -47,10 +47,10 @@
KConfigGroup configGroupFor(const QString &interface) const;
signals:
- void backendPluginCreated(Backend *backend);
+ void backendPluginCreated(Shaman::Backend *backend);
void corePluginCreated(CorePlugin *gui);
void guiPluginCreated(GuiPlugin *gui);
- void providerCreated(Provider *provider);
+ void providerCreated(Shaman::Provider *provider);
void pluginsLoaded();
private:
--- trunk/playground/sysadmin/shaman/libshaman/shamanbase.cpp #1066087:1066088
@@ -65,7 +65,7 @@
Q_D(Base);
//Initialize CoreInterface
d->coreInterface = new CoreInterface(this);
-
+
if (gui) {
if (!d->statusBarInterface) {
kWarning() << "No StatusBar set!";
@@ -82,8 +82,8 @@
//Initialize PluginLoader
d->pluginLoader = new PluginLoader(d->config, this);
- connect(d->pluginLoader, SIGNAL(backendPluginCreated(Backend*)), \
SLOT(__k__slotBackendCreated(Backend*)));
- connect(d->pluginLoader, SIGNAL(providerPluginCreated(ProviderPlugin*)), \
SLOT(__k__slotProviderPluginCreated(ProviderPlugin*))); + connect(d->pluginLoader, \
SIGNAL(backendPluginCreated(Shaman::Backend*)), \
SLOT(__k__slotBackendCreated(Shaman::Backend*))); + connect(d->pluginLoader, \
SIGNAL(providerCreated(Shaman::Provider*)), \
SLOT(__k__slotProviderCreated(Shaman::Provider*)));
connect(d->pluginLoader, SIGNAL(pluginsLoaded()), \
SLOT(__k__slotSetProviderPlugins()));
connect(d->pluginLoader, SIGNAL(pluginsLoaded()), this, \
SLOT(__k__initCompleted()));
@@ -159,7 +159,7 @@
coreInterface->d_func()->setBackend(backend);
}
-void BasePrivate::__k__slotProviderPluginCreated(ProviderPlugin *provider)
+void BasePrivate::__k__slotProviderCreated(Provider *provider)
{
Q_Q(Base);
q->connect(q, SIGNAL(destroyed()), provider, SLOT(deleteLater()));
--- trunk/playground/sysadmin/shaman/libshaman/shamanbase.h #1066087:1066088
@@ -26,7 +26,7 @@
class CoreInterface;
class StatusBarInterface;
class Backend;
-class ProviderPlugin;
+class Provider;
class BasePrivate;
/** \class Base shamanbase.h
@@ -57,8 +57,8 @@
friend class BackendPrivate;
friend class PluginConfig;
- Q_PRIVATE_SLOT(d_func(), void __k__slotBackendCreated(Backend *backend))
- Q_PRIVATE_SLOT(d_func(), void __k__slotProviderPluginCreated(ProviderPlugin \
*provider)) + Q_PRIVATE_SLOT(d_func(), void \
__k__slotBackendCreated(Shaman::Backend *backend)) + Q_PRIVATE_SLOT(d_func(), void \
__k__slotProviderCreated(Shaman::Provider *provider)) Q_PRIVATE_SLOT(d_func(), void \
__k__slotSetProviderPlugins()) Q_PRIVATE_SLOT(d_func(), void __k__initCompleted())
public:
--- trunk/playground/sysadmin/shaman/libshaman/shamanbase_p.h #1066087:1066088
@@ -18,7 +18,7 @@
#include "shamancoreinterface.h"
#include "shamanstatusbarinterface.h"
#include "shamanbackend.h"
-#include "shamanproviderplugin.h"
+#include "shamanprovider.h"
namespace Shaman {
class PluginLoader;
@@ -36,7 +36,7 @@
{}
~BasePrivate()
{}
-
+
Q_DECLARE_PUBLIC(Base)
Base *q_ptr;
@@ -47,9 +47,9 @@
KSharedConfig::Ptr config;
Base::PluginTypes pluginTypes;
QStringList plugins;
-
+
void __k__slotBackendCreated(Backend *backend);
- void __k__slotProviderPluginCreated(ProviderPlugin *provider);
+ void __k__slotProviderCreated(Provider *provider);
void __k__slotSetProviderPlugins();
void __k__initCompleted();
};
--- trunk/playground/sysadmin/shaman/libshaman/shamancoreinterface.h #1066087:1066088
@@ -88,7 +88,7 @@
* This gets emitted when the list of ProviderPlugins changed.
* @see providerPlugins()
*/
- void providersChanged(Provider::List providerPlugins);
+ void providersChanged(Shaman::Provider::List providerPlugins);
/**
* This gets emitted when the current Package changed.
--- trunk/playground/sysadmin/shaman/libshaman/shamanprovider.h #1066087:1066088
@@ -54,7 +54,7 @@
void search(const QString &search);
Q_SIGNALS:
- void queueChanged(const Shaman::ProviderPackage::List &packages);
+ void availablePackagesChanged(const Shaman::AbstractPackage::List \
&packages);
void additionalTargetsRetrieved(const Shaman::AbstractPackage::List \
&additionalProvider); void stateChanged(Shaman::Backend::State state);
//void errorTriggered(Shaman::Provider::Error error, const QString \
&details);
--- trunk/playground/sysadmin/shaman/libshaman/shamanproviderplugin.cpp \
#1066087:1066088 @@ -63,6 +63,7 @@
if (d->provider->capabilities() & \
Provider::RetrieveAdditionalPackagesOnSearchCapability) { // Then we need to \
populate the cache as well d->searchCache = d->searchCache.unite(result.toSet());
+ emit d->provider->availablePackagesChanged(d->provider->allAvailablePackages().toList());
}
emit d->provider->searchCompleted(search, result);
setState(Backend::Idling);
@@ -84,6 +85,7 @@
{
Q_D(ProviderPlugin);
d->provider->d_func()->packages = packages;
+ emit d->provider->availablePackagesChanged(d->provider->allAvailablePackages().toList());
}
}
--- trunk/playground/sysadmin/shaman/plugins/abs/AbsPackage.cpp #1066087:1066088
@@ -23,12 +23,12 @@
QList< Shaman::PackageGroup* > AbsPackage::packageGroups()
{
-return Shaman::ProviderPackage::packageGroups();
+ return QList< Shaman::PackageGroup* >();
}
QList< Shaman::Repository* > AbsPackage::repositories()
{
-return Shaman::ProviderPackage::repositories();
+ return QList< Shaman::Repository* >();
}
void AbsPackage::cacheValue(Shaman::AbstractPackage::CachedValue value)
--- trunk/playground/sysadmin/shaman/plugins/abs/AbsPlugin.cpp #1066087:1066088
@@ -13,6 +13,7 @@
#include <aqpm/AbsBackend.h>
#include "AbsPackage.h"
+#include <KDebug>
SHAMAN_PLUGIN_EXPORT(AbsPlugin)
@@ -38,6 +39,8 @@
foreach (const QString &package, Aqpm::Abs::Backend::instance()->allPackages()) \
{ newPackages << new AbsPackage(package, this);
}
+ // Now setting packages
+ kDebug() << "Setting Packages of ABS";
setPackages(newPackages);
qDeleteAll(oldPackages);
setState(Shaman::Backend::Idling);
--- trunk/playground/sysadmin/shaman/plugins/packagesview/PackagesModel.cpp \
#1066087:1066088 @@ -300,7 +300,7 @@
}
if (found)
continue;
- kDebug() << "Create" << package->name();
+ //kDebug() << "Create" << package->name();
//We didn't find a corresponding Item
Item * item = new Item(package->name());
item->append(new PackageItem(package, item));
--- trunk/playground/sysadmin/shaman/plugins/packagesview/PackagesViewWidget.cpp \
#1066087:1066088 @@ -17,6 +17,9 @@
#include <KIcon>
#include <QTimer>
#include <QDebug>
+#include <shamanbase.h>
+#include <shamancoreinterface.h>
+#include <KDebug>
PackagesViewWidget::PackagesViewWidget(Shaman::Backend * backend, QWidget * parent)
: QWidget(parent),
@@ -50,8 +53,26 @@
connect(addFavouriteSearchButton, SIGNAL(clicked()), \
SLOT(addFavouriteSearch()));
connect(treeView, SIGNAL(currentPackageChanged(Shaman::AbstractPackage *)),
SIGNAL(currentPackageChanged(Shaman::AbstractPackage*)));
+
+ kDebug() << "Starting watch package routine";
+ // Handle packages in the model. Before connecting, actually assure ourself that \
we cache the packages + // that might have been already loaded
+ if (!backend->packages().isEmpty()) {
+ kDebug() << "The backend already had some packages in";
+ m_packages[backend] = backend->packages();
+ }
+
connect(backend, SIGNAL(packagesChanged(Shaman::AbstractPackage::List)),
- m_model, SLOT(setPackages(Shaman::AbstractPackage::List)));
+ this, SLOT(slotPackagesChanged(Shaman::AbstractPackage::List)));
+
+ // Force calling the slot
+ slotProvidersChanged(Shaman::Base::instance()->core()->providers());
+
+ // Now watch over creation of providerplugins
+ connect(Shaman::Base::instance()->core(), \
SIGNAL(providersChanged(Shaman::Provider::List)), + this, \
SLOT(slotProvidersChanged(Shaman::Provider::List))); +
+ kDebug() << "Packages are being watched";
}
PackagesViewWidget::~PackagesViewWidget()
@@ -102,3 +123,66 @@
treeView->setEnabled(false);
m_proxyModel->setSearchText(searchLine->text());
}
+
+void PackagesViewWidget::slotPackagesChanged(const AbstractPackage::List &packages)
+{
+ QObject *owner = sender();
+ if (!owner) {
+ return;
+ }
+
+ kDebug() << "Packages changed from " << owner;
+
+ // Ok, let's associate the packages to the key in our hash
+ m_packages[owner] = packages;
+
+ Shaman::AbstractPackage::List allPackages;
+ // Now join all packages in a big list and set it in the model
+ {
+ QHash<QObject*, Shaman::AbstractPackage::List>::const_iterator i;
+ for (i = m_packages.constBegin(); i != m_packages.constEnd(); ++i) {
+ allPackages.append(i.value());
+ }
+ }
+
+ m_model->setPackages(allPackages);
+}
+
+void PackagesViewWidget::slotProvidersChanged(const Shaman::Provider::List& \
providers) +{
+ kDebug() << "Providers changed";
+
+ // Remove old providers
+ foreach (Shaman::Provider *provider, m_watchedProviders) {
+ m_packages.remove(provider);
+ disconnect(provider, \
SIGNAL(availablePackagesChanged(Shaman::AbstractPackage::List)), + \
this, SLOT(slotPackagesChanged(Shaman::AbstractPackage::List))); + }
+
+ // Now back to the add routine again
+ foreach (Shaman::Provider *provider, providers) {
+ kDebug() << "Listening to " << provider;
+ m_watchedProviders.append(provider);
+ if (!provider->allAvailablePackages().isEmpty()) {
+ kDebug() << "The provider " << provider << " already had some packages \
in"; + m_packages[provider] = provider->allAvailablePackages().toList();
+ }
+
+ connect(provider, \
SIGNAL(availablePackagesChanged(Shaman::AbstractPackage::List)), + \
this, SLOT(slotPackagesChanged(Shaman::AbstractPackage::List))); + }
+
+ if (m_packages.count() > 0) {
+ kDebug() << "Some packages need to be added to the model already";
+ // Now join all packages in a big list and set it in the model
+ Shaman::AbstractPackage::List allPackages;
+ {
+ QHash<QObject*, Shaman::AbstractPackage::List>::const_iterator i;
+ for (i = m_packages.constBegin(); i != m_packages.constEnd(); ++i) {
+ allPackages.append(i.value());
+ }
+ }
+
+ m_model->setPackages(allPackages);
+ }
+}
--- trunk/playground/sysadmin/shaman/plugins/packagesview/PackagesViewWidget.h \
#1066087:1066088 @@ -15,6 +15,7 @@
#include "SearchModel.h"
#include <QWidget>
+#include <shamanprovider.h>
class QTimer;
namespace Shaman {
@@ -22,6 +23,7 @@
class PackageGroup;
class Repository;
class BackendPackage;
+class Provider;
}
class PackagesModel;
@@ -46,6 +48,8 @@
void searchComboIndexChanged(int index);
void addFavouriteSearch();
void startSearch();
+ void slotPackagesChanged(const Shaman::AbstractPackage::List &packages);
+ void slotProvidersChanged(const Shaman::Provider::List &providers);
signals:
void currentPackageChanged(Shaman::AbstractPackage * package);
@@ -58,6 +62,8 @@
PackagesSortFilterProxyModel * m_proxyModel;
PackageStateModel * m_stateModel;
SearchModel * m_searchModel;
+ QHash<QObject*, Shaman::AbstractPackage::List> m_packages;
+ QList<Shaman::Provider*> m_watchedProviders;
};
#endif
--- trunk/playground/sysadmin/shaman/shaman/src/MainWindow.cpp #1066087:1066088
@@ -309,6 +309,10 @@
m_isFirstReload = false;
}
m_isReloading = false;
+ // TODO: Move reloading of providerplugins elsewhere
+ foreach (Shaman::Provider *provider, m_shaman->core()->providers()) {
+ provider->reload();
+ }
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic