I'm sending new password interface. Now instead of type enum, plugin should 
emit one of result signal (with this pointer). Also I 
removed private variables which are not needed anymore.

#ifndef PASSWORD_INTERFACE
#define PASSWORD_INTERFACE

#include <QObject>
#include <QString>
#include <QtPlugin>

class PasswordJob : public QObject {

    Q_OBJECT

public:
    enum Error {
        UnknownError,
        Stopped,
        NoPassword
    };

public slots:
    /**
     * @short Start job
     * when finish it will emit just one signal from this class (depends on job 
type)
     **/
    virtual void start() = 0;

    /**
     * @short Stop job and emit error signal Stopped
     **/
    virtual void stop() = 0;

signals:
    /**
     * @short Emitted when password is available
     **/
    void passwordAvailable(PasswordJob *job, const QString &password);

    /**
     * @short Emitted when job finish storing password
     **/
    void passwordStored(PasswordJob *job);

    /**
     * @short Emitted when job finish deleting password
     **/
    void passwordDeleted(PasswordJob *job);

    /**
     * @short Emitted when job finish unsuccessfull with error
     **/
    void error(PasswordJob *job, PasswordJob::Error error);

protected:
    PasswordJob(QObject *parent) : QObject(parent) {}

};

class PasswordInterface : public QObject {

    Q_OBJECT

public slots:
    /**
     * @short Request password associated with accountId and accountType and 
return PasswordJob
     **/
    virtual PasswordJob *requestPassword(const QString &accountId, const 
QString &accountType) = 0;

    /**
     * @short Save password for accountId and accountType and return PasswordJob
     **/
    virtual PasswordJob *storePassword(const QString &accountId, const QString 
&accountType, const QString &password) = 0;

    /**
     * @short Delete password for accountId and accountType and return 
PasswordJob
     **/
    virtual PasswordJob *deletePassword(const QString &accountId, const QString 
&accountType) = 0;

protected:
    PasswordInterface(QObject *parent) : QObject(parent) {}

};

class PasswordFactoryInterface {

public:
    /**
     * @short Return name of plugin
     **/
    virtual QString name() const = 0;

    /**
     * @short Return description of plugin
     **/
    virtual QString description() const = 0;

    /**
     * @short Return true if this plugin is valid and can be used (e.g this 
password storage is available)
     **/
    virtual bool isValid() const = 0;

    /**
     * @short Return new PasswordInterface instance implemented by plugin
     **/
    virtual PasswordInterface *create(QObject *parent) = 0;

};

Q_DECLARE_INTERFACE(PasswordFactoryInterface, "PasswordFactoryInterface");

#endif //PASSWORD_INTERFACE

-- 
Pali Rohár
pali.ro...@gmail.com

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to