~renatofilho/qtorganizer5-eds/fix-1265953

« back to all changes in this revision

Viewing changes to qorganizer/qorganizer-eds-saverequestdata.cpp

Implemented support for save multiple items.
This new implementation allows to save several items in the same call.
The items can be part of the same collection or not.

Approved by Gustavo Pichorim Boiko, PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
using namespace QtOrganizer;
26
26
 
27
27
SaveRequestData::SaveRequestData(QOrganizerEDSEngine *engine,
28
 
                                 QtOrganizer::QOrganizerAbstractRequest *req,
29
 
                                 QOrganizerCollectionId collectionId)
30
 
    : RequestData(engine, req),
31
 
      m_collectionId(collectionId)
 
28
                                 QtOrganizer::QOrganizerAbstractRequest *req)
 
29
    : RequestData(engine, req)
32
30
{
 
31
    // map items by collection
 
32
    Q_FOREACH(const QOrganizerItem &i, request<QOrganizerItemSaveRequest>()->items()) {
 
33
        QString collectionId = i.collectionId().toString();
 
34
        QList<QOrganizerItem> li = m_items[collectionId];
 
35
        li << i;
 
36
        m_items.insert(collectionId, li);
 
37
    }
33
38
}
34
39
 
35
40
SaveRequestData::~SaveRequestData()
41
46
    QOrganizerManagerEngine::updateItemSaveRequest(request<QOrganizerItemSaveRequest>(),
42
47
                                                   m_result,
43
48
                                                   error,
44
 
                                                   QMap<int, QOrganizerManager::Error>(),
 
49
                                                   m_erros,
45
50
                                                   QOrganizerAbstractRequest::FinishedState);
46
 
    Q_FOREACH(QOrganizerItem item, m_result) {
 
51
    Q_FOREACH(const QOrganizerItem &item, m_result) {
47
52
        m_changeSet.insertAddedItem(item.id());
48
53
    }
49
54
    emitChangeset(&m_changeSet);
54
59
    m_result += result;
55
60
}
56
61
 
57
 
QOrganizerCollectionId SaveRequestData::collectionId() const
58
 
{
59
 
    return m_collectionId;
60
 
}
61
 
 
62
 
bool SaveRequestData::isNew() const
63
 
{
64
 
    QList<QOrganizerItem> items = request<QOrganizerItemSaveRequest>()->items();
65
 
    if (items.count() > 0) {
66
 
        return items[0].id().isNull();
67
 
    }
68
 
    return false;
 
62
QString SaveRequestData::nextCollection()
 
63
{
 
64
    if (m_items.isEmpty()) {
 
65
        m_currentCollection = QString();
 
66
        m_currentItems.clear();
 
67
    } else {
 
68
        m_currentCollection = m_items.keys().first();
 
69
        m_currentItems = m_items.take(m_currentCollection);
 
70
    }
 
71
    m_workingItems.clear();
 
72
    return m_currentCollection;
 
73
}
 
74
 
 
75
QString SaveRequestData::currentCollection() const
 
76
{
 
77
    return m_currentCollection;
 
78
}
 
79
 
 
80
QList<QOrganizerItem> SaveRequestData::takeItemsToCreate()
 
81
{
 
82
    QList<QOrganizerItem> result;
 
83
 
 
84
    Q_FOREACH(const QOrganizerItem &i, m_currentItems) {
 
85
        if (i.id().isNull()) {
 
86
            result << i;
 
87
            m_currentItems.removeAll(i);
 
88
        }
 
89
    }
 
90
    return result;
 
91
}
 
92
 
 
93
QList<QOrganizerItem> SaveRequestData::takeItemsToUpdate()
 
94
{
 
95
    QList<QOrganizerItem> result;
 
96
 
 
97
    Q_FOREACH(const QOrganizerItem &i, m_currentItems) {
 
98
        if (!i.id().isNull()) {
 
99
            result << i;
 
100
            m_currentItems.removeAll(i);
 
101
        }
 
102
    }
 
103
    return result;
 
104
}
 
105
 
 
106
bool SaveRequestData::end() const
 
107
{
 
108
    return m_items.isEmpty();
 
109
}
 
110
 
 
111
void SaveRequestData::appendResult(const QOrganizerItem &item, QOrganizerManager::Error error)
 
112
{
 
113
    if (error != QOrganizerManager::NoError) {
 
114
        int index = request<QOrganizerItemSaveRequest>()->items().indexOf(item);
 
115
        if (index != -1) {
 
116
            m_erros.insert(index, error);
 
117
        }
 
118
    } else {
 
119
        m_result << item;
 
120
    }
 
121
}
 
122
 
 
123
void SaveRequestData::setWorkingItems(QList<QOrganizerItem> items)
 
124
{
 
125
    m_workingItems = items;
 
126
}
 
127
 
 
128
QList<QOrganizerItem> SaveRequestData::workingItems() const
 
129
{
 
130
    return m_workingItems;
69
131
}