email_plat/nmail_client_api/nmapifolderlisting.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 12:23:15 +0300
changeset 20 ecc8def7944a
parent 18 578830873419
child 23 2dc6caa42ec3
permissions -rw-r--r--
Revision: 201015 Kit: 201018

/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:
 *
 */

#ifndef NMAPIFOLDERLISTING_H_
#define NMAPIFOLDERLISTING_H_

#include <QObject>

#include "nmapimessagetask.h"
#include "nmapimailbox.h"
#include "nmenginedef.h"
#include "nmapifolder.h"

class NmEngine;

namespace EmailClientApi
{

class NmFolderListingPrivate;

/*!
 * \class Class for creating list of all folders
 */
class NMENGINE_EXPORT NmFolderListing : public NmMessageTask
{
    Q_OBJECT
public:
    /*!
     * Constructor of class. It set start values.
     */
    NmFolderListing( QObject *parent, const quint64 &nmMailboxId );
    /*!
     * Destructor of class. It release engine to be safe if manual releasing won't work.
     */
    ~NmFolderListing();

    enum {FolderListingFailed = -1};

    /*! 
     * \brief Returns results after foldersListed signal is received.
     * 
     *  Caller gets ownership of messages. Returns true if results were available.
     *  It clears list of folders after be called.
     *  It also at start clear inputlist of NmFolder.
     */
    bool getFolders(QList<EmailClientApi::NmFolder> &folders);

    /*!
     * \brief Return info if listing is running
     */
    bool isRunning() const;

    signals:
    /*!
     * emitted when listing is available, count is number of folders found
     * or FolderListingFailed if listing failed
     */
    void foldersListed(qint32 count);

public slots:
    /*!
     * \brief Starts gathering folders list.
     * 
     * In first turn it will get whole folderlist. 
     * \todo After that it will wait for folder events.
     * If start works, it do nothing.
     * 
     * To asynchronous operation ce be used \sa QTimer::singleShot on this method.
     * Example:
     * <code> 
     * QTimer::singleShot(0,nmFolderListing,SLOT(start());
     * </code>
     * 
     */
    virtual bool start();

    /*!
     * \brief Stop gathering folder list.
     * 
     * In first it change state of listing.
     * Then it release engine.
     * On end it clears list of folders and emits \sa NmMessageTask::canceled() signal.
     */
    virtual void cancel();

private:
    NmFolderListingPrivate* mFolderListing;
};
}

#endif /* NMFOLDERLISTING_H_ */