1/*
2 * Copyright (c) 2011 Christian Mollekopf <chrigi_1@fastmail.fm>
3 *
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Library General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12 * License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 * 02110-1301, USA.
18 */
19
20#ifndef AKONADI_TRASHRESTOREJOB_H
21#define AKONADI_TRASHRESTOREJOB_H
22
23#include "akonadi_export.h"
24
25#include <akonadi/item.h>
26#include <akonadi/collection.h>
27
28#include <akonadi/job.h>
29
30namespace Akonadi
31{
32
33/**
34 * @short Job that restores entites from trash
35 *
36 * This job restores the given entites from trash.
37 * The EntityDeletedAttribute is removed and the item is restored to the stored restore collection.
38 *
39 * If the stored restore collection is not available, the root collection of the original resource is used.
40 * If also this is not available, setTargetCollection has to be used to restore the item to a specific collection.
41 *
42 * Example:
43 *
44 * @code
45 *
46 * const Akonadi::Item::List items = ...
47 *
48 * TrashRestoreJob *job = new TrashRestoreJob( items );
49 * connect( job, SIGNAL(result(KJob*)), this, SLOT(restoreResult(KJob*)) );
50 *
51 * @endcode
52 *
53 * @author Christian Mollekopf <chrigi_1@fastmail.fm>
54 * @since 4.8
55 */
56class AKONADI_EXPORT TrashRestoreJob : public Job
57{
58 Q_OBJECT
59public:
60
61 /**
62 * All items need to be from the same resource
63 */
64 explicit TrashRestoreJob(const Item &item, QObject *parent = 0);
65
66 explicit TrashRestoreJob(const Item::List &items, QObject *parent = 0);
67
68 explicit TrashRestoreJob(const Collection &collection, QObject *parent = 0);
69
70 ~TrashRestoreJob();
71
72 /**
73 * Sets the target collection, where the item is moved to.
74 * If not set the item will be restored in the collection saved in the EntityDeletedAttribute.
75 * @param collection the collection to set as target
76 */
77 void setTargetCollection(const Collection collection);
78
79 Item::List items() const;
80protected:
81 virtual void doStart();
82
83private:
84 //@cond PRIVATE
85 class TrashRestoreJobPrivate;
86 Q_DECLARE_PRIVATE(TrashRestoreJob)
87 Q_PRIVATE_SLOT(d_func(), void selectResult(KJob *))
88 Q_PRIVATE_SLOT(d_func(), void targetCollectionFetched(KJob *))
89 Q_PRIVATE_SLOT(d_func(), void removeAttribute(const Akonadi::Collection::List &))
90 Q_PRIVATE_SLOT(d_func(), void removeAttribute(const Akonadi::Item::List &))
91 Q_PRIVATE_SLOT(d_func(), void collectionsReceived(const Akonadi::Collection::List &))
92 Q_PRIVATE_SLOT(d_func(), void itemsReceived(const Akonadi::Item::List &))
93 //@endcond
94};
95
96}
97
98#endif
99