1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/****************************************************************************
**
** Copyright (C) 2013-2026 Jolla Ltd.
**
** This program/library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Lesser General Public License
** version 2.1 as published by the Free Software Foundation.
**
** This program/library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Lesser General Public License for more details.
**
** You should have received a copy of the GNU Lesser General Public
** License along with this program/library; if not, write to the Free
** Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
** 02110-1301 USA
**
****************************************************************************/
#ifndef MASTODONNOTIFICATIONSSYNCADAPTOR_H
#define MASTODONNOTIFICATIONSSYNCADAPTOR_H
#include "mastodondatatypesyncadaptor.h"
#include <QtCore/QDateTime>
#include <QtCore/QHash>
#include <QtCore/QSet>
#include <QtNetwork/QNetworkReply>
class Notification;
class MastodonNotificationsSyncAdaptor : public MastodonNotificationsDataTypeSyncAdaptor
{
Q_OBJECT
public:
MastodonNotificationsSyncAdaptor(QObject *parent);
~MastodonNotificationsSyncAdaptor();
QString syncServiceName() const override;
protected:
void purgeDataForOldAccount(int oldId, SocialNetworkSyncAdaptor::PurgeMode mode) override;
void beginSync(int accountId, const QString &accessToken) override;
void finalize(int accountId) override;
private:
struct PendingNotification {
QString notificationId;
QString summary;
QString body;
QString link;
QDateTime timestamp;
};
struct PendingSyncState {
QString accessToken;
QString unreadFloorId;
QString lastFetchedId;
QString maxFetchedId;
QHash<QString, PendingNotification> pendingNotifications;
};
static QString sanitizeContent(const QString &content);
static QDateTime parseTimestamp(const QString ×tampString);
static int compareNotificationIds(const QString &left, const QString &right);
QString loadLastFetchedId(int accountId) const;
void saveLastFetchedId(int accountId, const QString &lastFetchedId);
void requestUnreadMarker(int accountId, const QString &accessToken);
void requestNotifications(int accountId,
const QString &accessToken,
const QString &minId,
const QString &maxId = QString());
void requestMarkRead(int accountId, const QString &accessToken, const QString &lastReadId);
void publishSystemNotification(int accountId, const PendingNotification ¬ificationData);
Notification *createNotification(int accountId, const QString ¬ificationId);
Notification *findNotification(int accountId, const QString ¬ificationId);
void closeAccountNotifications(int accountId, const QSet<QString> &keepNotificationIds = QSet<QString>());
static QString notificationObjectKey(int accountId, const QString ¬ificationId);
private Q_SLOTS:
void finishedUnreadMarkerHandler();
void finishedNotificationsHandler();
void finishedMarkReadHandler();
private:
QHash<int, PendingSyncState> m_pendingSyncStates;
QHash<int, QString> m_lastMarkedReadIds;
QHash<QString, Notification *> m_notificationObjects;
};
#endif // MASTODONNOTIFICATIONSSYNCADAPTOR_H
|