1 /*
2     SPDX-FileCopyrightText: 2015-2016 Krzysztof Nowicki <krissn@op.pl>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #pragma once
8 
9 #include "ewsitem.h"
10 #include "ewsitemshape.h"
11 #include "ewsrequest.h"
12 #include "ewstypes.h"
13 
14 class EwsSyncFolderItemsRequest : public EwsRequest
15 {
16     Q_OBJECT
17 public:
18     enum ChangeType {
19         Create,
20         Update,
21         Delete,
22         ReadFlagChange,
23         Unknown,
24     };
25 
26     class Response;
27 
28     class Change
29     {
30     public:
31         typedef QVector<Change> List;
32 
type()33         ChangeType type() const
34         {
35             return mType;
36         }
37 
itemId()38         const EwsId &itemId() const
39         {
40             return mId;
41         }
42 
item()43         const EwsItem &item() const
44         {
45             return mItem;
46         }
47 
isRead()48         bool isRead() const
49         {
50             return mIsRead;
51         }
52 
53     protected:
54         Change(QXmlStreamReader &reader);
isValid()55         bool isValid() const
56         {
57             return mType != Unknown;
58         }
59 
60         ChangeType mType;
61         EwsId mId;
62         EwsItem mItem;
63         bool mIsRead;
64 
65         friend class Response;
66     };
67 
68     EwsSyncFolderItemsRequest(EwsClient &client, QObject *parent);
69     ~EwsSyncFolderItemsRequest() override;
70 
71     void setFolderId(const EwsId &id);
72     void setItemShape(const EwsItemShape &shape);
73     void setSyncState(const QString &state);
74     void setMaxChanges(uint max);
75 
76     void start() override;
77 
includesLastItem()78     bool includesLastItem() const
79     {
80         return mIncludesLastItem;
81     }
82 
changes()83     const Change::List &changes() const
84     {
85         return mChanges;
86     }
87 
syncState()88     const QString &syncState() const
89     {
90         return mSyncState;
91     }
92 
93 protected:
94     bool parseResult(QXmlStreamReader &reader) override;
95     bool parseItemsResponse(QXmlStreamReader &reader);
96 
97 private:
98     EwsId mFolderId;
99     EwsItemShape mShape;
100     QString mSyncState;
101     uint mMaxChanges;
102     Change::List mChanges;
103     bool mIncludesLastItem;
104 };
105 
106 Q_DECLARE_METATYPE(EwsSyncFolderItemsRequest::Change::List)
107 
108