mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-24 19:02:51 +00:00
388 lines
13 KiB
C++
388 lines
13 KiB
C++
/***************************************************************************
|
|
* Copyright (C) 2006 by Tobias Koenig <tokoe@kde.org> *
|
|
* Copyright (c) 2007 Volker Krause <vkrause@kde.org> *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU Library General Public License as *
|
|
* published by the Free Software Foundation; either version 2 of the *
|
|
* License, or (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU Library General Public *
|
|
* License along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
***************************************************************************/
|
|
|
|
#ifndef AGENTMANAGER_H
|
|
#define AGENTMANAGER_H
|
|
|
|
#include <QtCore/QHash>
|
|
#include <QtCore/QMap>
|
|
#include <QtCore/QStringList>
|
|
|
|
#include "agenttype.h"
|
|
#include "agentinstance.h"
|
|
|
|
class QDir;
|
|
#ifndef QT_NO_DEBUG
|
|
class QFileSystemWatcher;
|
|
#endif
|
|
|
|
namespace Akonadi {
|
|
class ProcessControl;
|
|
}
|
|
|
|
/**
|
|
* The agent manager has knowledge about all available agents (it scans
|
|
* for .desktop files in the agent directory) and the available configured
|
|
* instances.
|
|
*/
|
|
class AgentManager : public QObject, protected QDBusContext
|
|
{
|
|
Q_OBJECT
|
|
Q_CLASSINFO( "D-Bus Interface", "org.freedesktop.Akonadi.AgentManager" )
|
|
|
|
public:
|
|
/**
|
|
* Creates a new agent manager.
|
|
*
|
|
* @param parent The parent object.
|
|
*/
|
|
AgentManager( QObject *parent = 0 );
|
|
|
|
/**
|
|
* Destroys the agent manager.
|
|
*/
|
|
~AgentManager();
|
|
|
|
/**
|
|
* Called by the crash handler and dtor to terminate
|
|
* the child processes.
|
|
*/
|
|
void cleanup();
|
|
|
|
public Q_SLOTS:
|
|
/**
|
|
* Returns the list of identifiers of all available
|
|
* agent types.
|
|
*/
|
|
QStringList agentTypes() const;
|
|
|
|
/**
|
|
* Returns the i18n'ed name of the agent type for
|
|
* the given @p identifier and the given @p language.
|
|
*/
|
|
QString agentName( const QString &identifier, const QString &language = QLatin1String( "en_US" ) ) const;
|
|
|
|
/**
|
|
* Returns the i18n'ed comment of the agent type for
|
|
* the given @p identifier and the given @p language.
|
|
*/
|
|
QString agentComment( const QString &identifier, const QString &language = QLatin1String( "en_US" ) ) const;
|
|
|
|
/**
|
|
* Returns the icon name of the agent type for the
|
|
* given @p identifier.
|
|
*/
|
|
QString agentIcon( const QString &identifier ) const;
|
|
|
|
/**
|
|
* Returns a list of supported mimetypes of the agent type
|
|
* for the given @p identifier.
|
|
*/
|
|
QStringList agentMimeTypes( const QString &identifier ) const;
|
|
|
|
/**
|
|
* Returns a list of supported capabilities of the agent type
|
|
* for the given @p identifier.
|
|
*/
|
|
QStringList agentCapabilities( const QString &identifier ) const;
|
|
|
|
/**
|
|
* Returns a list of Custom added propeties of the agent type
|
|
* for the given @p identifier
|
|
* @since 1.11
|
|
*/
|
|
QVariantMap agentCustomProperties( const QString &identifier ) const;
|
|
|
|
/**
|
|
* Creates a new agent of the given agent type @p identifier.
|
|
*
|
|
* @return The identifier of the new agent if created successfully,
|
|
* an empty string otherwise.
|
|
* The identifier consists of two parts, the type of the
|
|
* agent and an unique instance number, and looks like
|
|
* the following: 'file_1' or 'imap_267'.
|
|
*/
|
|
QString createAgentInstance( const QString &identifier );
|
|
|
|
/**
|
|
* Removes the agent with the given @p identifier.
|
|
*/
|
|
void removeAgentInstance( const QString &identifier );
|
|
|
|
/**
|
|
* Returns the type of the agent instance with the given @p identifier.
|
|
*/
|
|
QString agentInstanceType( const QString &identifier );
|
|
|
|
/**
|
|
* Returns the list of identifiers of configured instances.
|
|
*/
|
|
QStringList agentInstances() const;
|
|
|
|
/**
|
|
* Returns the current status code of the agent with the given @p identifier.
|
|
*/
|
|
int agentInstanceStatus( const QString &identifier ) const;
|
|
|
|
/**
|
|
* Returns the i18n'ed description of the current status of the agent with
|
|
* the given @p identifier.
|
|
*/
|
|
QString agentInstanceStatusMessage( const QString &identifier ) const;
|
|
|
|
/**
|
|
* Returns the current progress of the agent with the given @p identifier
|
|
* in percentage.
|
|
*/
|
|
uint agentInstanceProgress( const QString &identifier ) const;
|
|
|
|
/**
|
|
* Returns the i18n'ed description of the current progress of the agent with
|
|
* the given @p identifier.
|
|
*/
|
|
QString agentInstanceProgressMessage( const QString &identifier ) const;
|
|
|
|
/**
|
|
* Sets the @p name of the agent instance with the given @p identifier.
|
|
*/
|
|
void setAgentInstanceName( const QString &identifier, const QString &name );
|
|
|
|
/**
|
|
* Returns the name of the agent instance with the given @p identifier.
|
|
* If there is no name, it returns the default name of the agent, you can tweak
|
|
* the language for that name with the @p language setting.
|
|
*/
|
|
QString agentInstanceName( const QString &identifier, const QString &language = QLatin1String( "en_US" ) ) const;
|
|
|
|
/**
|
|
* Triggers the agent instance with the given @p identifier to show
|
|
* its configuration dialog.
|
|
* @param windowId Parent window id for the configuration dialog.
|
|
*/
|
|
void agentInstanceConfigure( const QString &identifier, qlonglong windowId );
|
|
|
|
/**
|
|
* Triggers the agent instance with the given @p identifier to start
|
|
* synchronization.
|
|
*/
|
|
void agentInstanceSynchronize( const QString &identifier );
|
|
|
|
/**
|
|
Trigger a synchronization of the collection tree by the given resource agent.
|
|
@param identifier The resource agent identifier.
|
|
*/
|
|
void agentInstanceSynchronizeCollectionTree( const QString &identifier );
|
|
|
|
/**
|
|
Trigger a synchronization of the given collection by its owning resource agent.
|
|
*/
|
|
void agentInstanceSynchronizeCollection( const QString &identifier, qint64 collection );
|
|
|
|
/**
|
|
Trigger a synchronization of the given collection by its owning resource agent.
|
|
@param recursive set it true to have sub-collection synchronized as well
|
|
*/
|
|
void agentInstanceSynchronizeCollection( const QString &identifier, qint64 collection, bool recursive );
|
|
|
|
/**
|
|
Returns if the agent instance @p identifier is in online mode.
|
|
*/
|
|
bool agentInstanceOnline( const QString &identifier );
|
|
|
|
/**
|
|
Sets agent instance @p identifier to online or offline mode.
|
|
*/
|
|
void setAgentInstanceOnline( const QString &identifier, bool state );
|
|
|
|
/**
|
|
Restarts the agent instance @p identifier. This is supposed to be used as a
|
|
development aid and not something to use during normal operations.
|
|
*/
|
|
void restartAgentInstance( const QString &identifier );
|
|
|
|
/**
|
|
* Add a persistent search to remote search agents.
|
|
*/
|
|
void addSearch( const QString &query, const QString &queryLanguage, qint64 resultCollectionId );
|
|
|
|
/**
|
|
* Removes a persistent search for the given result collection.
|
|
*/
|
|
void removeSearch( quint64 resultCollectionId );
|
|
|
|
Q_SIGNALS:
|
|
/**
|
|
* This signal is emitted whenever a new agent type was installed on the system.
|
|
*
|
|
* @param agentType The identifier of the new agent type.
|
|
*/
|
|
void agentTypeAdded( const QString &agentType );
|
|
|
|
/**
|
|
* This signal is emitted whenever an agent type was removed from the system.
|
|
*
|
|
* @param agentType The identifier of the removed agent type.
|
|
*/
|
|
void agentTypeRemoved( const QString &agentType );
|
|
|
|
/**
|
|
* This signal is emitted whenever a new agent instance was created.
|
|
*
|
|
* @param agentIdentifier The identifier of the new agent instance.
|
|
*/
|
|
void agentInstanceAdded( const QString &agentIdentifier );
|
|
|
|
/**
|
|
* This signal is emitted whenever an agent instance was removed.
|
|
*
|
|
* @param agentIdentifier The identifier of the removed agent instance.
|
|
*/
|
|
void agentInstanceRemoved( const QString &agentIdentifier );
|
|
|
|
/**
|
|
* This signal is emitted whenever the status of an agent instance has
|
|
* changed.
|
|
*
|
|
* @param agentIdentifier The identifier of the agent that has changed.
|
|
* @param status The new status code.
|
|
* @param message The i18n'ed description of the new status.
|
|
*/
|
|
void agentInstanceStatusChanged( const QString &agentIdentifier, int status, const QString &message );
|
|
|
|
/**
|
|
* This signal is emitted whenever the status of an agent instance has
|
|
* changed.
|
|
*
|
|
* @param agentIdentifier The identifier of the agent that has changed.
|
|
* @param status The object that describes the status change.
|
|
*/
|
|
void agentInstanceAdvancedStatusChanged( const QString &agentIdentifier, const QVariantMap &status );
|
|
|
|
/**
|
|
* This signal is emitted whenever the progress of an agent instance has
|
|
* changed.
|
|
*
|
|
* @param agentIdentifier The identifier of the agent that has changed.
|
|
* @param progress The new progress in percentage.
|
|
* @param message The i18n'ed description of the new progress.
|
|
*/
|
|
void agentInstanceProgressChanged( const QString &agentIdentifier, uint progress, const QString &message );
|
|
|
|
/**
|
|
* This signal is emitted whenever an agent instance raised a warning.
|
|
*
|
|
* @param agentIdentifier The identifier of the agent instance.
|
|
* @param message The i18n'ed warning message.
|
|
*/
|
|
void agentInstanceWarning( const QString &agentIdentifier, const QString &message );
|
|
|
|
/**
|
|
* This signal is emitted whenever an agent instance raised an error.
|
|
*
|
|
* @param agentIdentifier The identifier of the agent instance.
|
|
* @param message The i18n'ed error message.
|
|
*/
|
|
void agentInstanceError( const QString &agentIdentifier, const QString &message );
|
|
|
|
/**
|
|
* This signal is emitted whenever the name of the agent instance has changed.
|
|
*
|
|
* @param agentIdentifier The identifier of the agent that has changed.
|
|
* @param name The new name of the agent instance.
|
|
*/
|
|
void agentInstanceNameChanged( const QString &agentIdentifier, const QString &name );
|
|
|
|
/**
|
|
* Emitted when the online state of an agent changed.
|
|
*/
|
|
void agentInstanceOnlineChanged( const QString &agentIdentifier, bool state );
|
|
|
|
private Q_SLOTS:
|
|
void updatePluginInfos();
|
|
void serviceOwnerChanged( const QString &name, const QString &oldOwner, const QString &newOwner );
|
|
void agentExeChanged( const QString &fileName );
|
|
void agentServerFailure();
|
|
void serverFailure();
|
|
|
|
private:
|
|
/**
|
|
* Returns the list of directory paths where the .desktop files
|
|
* for the plugins are located.
|
|
*/
|
|
static QStringList pluginInfoPathList();
|
|
|
|
/**
|
|
* Loads the internal state from config file.
|
|
*/
|
|
void load();
|
|
|
|
/**
|
|
* Saves internal state to the config file.
|
|
*/
|
|
void save();
|
|
|
|
/**
|
|
* Reads the plugin information from directory.
|
|
*/
|
|
void readPluginInfos();
|
|
|
|
/**
|
|
* Reads the plugin information from directory.
|
|
*
|
|
* @param directory the directory to get plugin information from
|
|
*/
|
|
void readPluginInfos( const QDir &directory );
|
|
|
|
AgentInstance::Ptr createAgentInstance( const AgentType &type );
|
|
bool checkAgentInterfaces( const QString &identifier, const QString &method ) const;
|
|
bool checkInstance( const QString &identifier ) const;
|
|
bool checkResourceInterface( const QString &identifier, const QString &method ) const;
|
|
bool checkAgentExists( const QString &identifier ) const;
|
|
void ensureAutoStart( const AgentType &info );
|
|
void continueStartup();
|
|
void registerAgentAtServer( const QString &agentIdentifier, const AgentType &type );
|
|
|
|
private:
|
|
/**
|
|
* The map which stores the .desktop file
|
|
* entries for every agent type.
|
|
*
|
|
* Key is the agent type (e.g. 'file' or 'imap').
|
|
*/
|
|
QHash<QString, AgentType> mAgents;
|
|
|
|
/**
|
|
* The map which stores the active instances.
|
|
*
|
|
* Key is the instance identifier.
|
|
*/
|
|
QHash<QString, AgentInstance::Ptr> mAgentInstances;
|
|
|
|
Akonadi::ProcessControl *mAgentServer;
|
|
Akonadi::ProcessControl *mStorageController;
|
|
#ifndef QT_NO_DEBUG
|
|
QFileSystemWatcher *mAgentWatcher;
|
|
#endif
|
|
bool mAgentServerEnabled;
|
|
|
|
friend class AgentInstance;
|
|
};
|
|
|
|
#endif
|