aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2019-10-21 10:02:14 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2019-10-21 10:02:14 +0900
commitff23e445ca78a6ac127d7a04494a8cbb97a7f1ac (patch)
tree58b5d854d6d8bf62e37197a0e06faec92b0fe51f /lib
parentc8ae34af0c4b28ef5aabf60b97661241860bc200 (diff)
parent0a3be84c0c531ae215c43c488fc23e52a4680e9f (diff)
downloadlibquotient-ff23e445ca78a6ac127d7a04494a8cbb97a7f1ac.tar.gz
libquotient-ff23e445ca78a6ac127d7a04494a8cbb97a7f1ac.zip
Merge branch 'kitsune-quotest2'
Diffstat (limited to 'lib')
-rw-r--r--lib/connection.cpp6
-rw-r--r--lib/connection.h82
-rw-r--r--lib/csapi/gtad.yaml4
-rw-r--r--lib/jobs/basejob.h19
-rw-r--r--lib/room.h64
-rw-r--r--lib/user.h13
6 files changed, 99 insertions, 89 deletions
diff --git a/lib/connection.cpp b/lib/connection.cpp
index 25f1c3f6..af85d066 100644
--- a/lib/connection.cpp
+++ b/lib/connection.cpp
@@ -385,7 +385,7 @@ void Connection::syncLoop(int timeout)
syncLoopIteration(); // initial sync to start the loop
}
-QJsonObject toJson(const Connection::DirectChatsMap& directChats)
+QJsonObject toJson(const DirectChatsMap& directChats)
{
QJsonObject json;
for (auto it = directChats.begin(); it != directChats.end();) {
@@ -1050,7 +1050,7 @@ QVector<Room*> Connection::roomsWithTag(const QString& tagName) const
return rooms;
}
-Connection::DirectChatsMap Connection::directChats() const
+DirectChatsMap Connection::directChats() const
{
return d->directChats;
}
@@ -1117,7 +1117,7 @@ bool Connection::isIgnored(const User* user) const
return ignoredUsers().contains(user->id());
}
-Connection::IgnoredUsersList Connection::ignoredUsers() const
+IgnoredUsersList Connection::ignoredUsers() const
{
const auto* event = d->unpackAccountData<IgnoredUsersEvent>();
return event ? event->ignored_users() : IgnoredUsersList();
diff --git a/lib/connection.h b/lib/connection.h
index 1f1d4cd5..e4109fd4 100644
--- a/lib/connection.h
+++ b/lib/connection.h
@@ -97,6 +97,14 @@ enum RunningPolicy { ForegroundRequest = 0x0, BackgroundRequest = 0x1 };
Q_ENUM_NS(RunningPolicy)
+// Room ids, rather than room pointers, are used in the direct chat
+// map types because the library keeps Invite rooms separate from
+// rooms in Join and Leave state; and direct chats in account data
+// are stored with no regard to their state.
+using DirectChatsMap = QMultiHash<const User*, QString>;
+using DirectChatUsersMap = QMultiHash<QString, User*>;
+using IgnoredUsersList = IgnoredUsersEvent::content_type;
+
class Connection : public QObject {
Q_OBJECT
@@ -115,14 +123,6 @@ class Connection : public QObject {
lazyLoadingChanged)
public:
- // Room ids, rather than room pointers, are used in the direct chat
- // map types because the library keeps Invite rooms separate from
- // rooms in Join and Leave state; and direct chats in account data
- // are stored with no regard to their state.
- using DirectChatsMap = QMultiHash<const User*, QString>;
- using DirectChatUsersMap = QMultiHash<QString, User*>;
- using IgnoredUsersList = IgnoredUsersEvent::content_type;
-
using UsersToDevicesToEvents =
UnorderedMap<QString, UnorderedMap<QString, const Event&>>;
@@ -153,7 +153,7 @@ public:
* from the server.
* \sa rooms, room, roomsWithTag
*/
- Q_INVOKABLE QVector<Room*> allRooms() const;
+ Q_INVOKABLE QVector<Quotient::Room*> allRooms() const;
/// Get rooms that have either of the given join state(s)
/*!
@@ -163,10 +163,11 @@ public:
* Leave rooms from the server.
* \sa allRooms, room, roomsWithTag
*/
- Q_INVOKABLE QVector<Room*> rooms(JoinStates joinStates) const;
+ Q_INVOKABLE QVector<Quotient::Room*>
+ rooms(Quotient::JoinStates joinStates) const;
/// Get the total number of rooms in the given join state(s)
- Q_INVOKABLE int roomsCount(JoinStates joinStates) const;
+ Q_INVOKABLE int roomsCount(Quotient::JoinStates joinStates) const;
/** Check whether the account has data of the given type
* Direct chats map is not supported by this method _yet_.
@@ -253,10 +254,10 @@ public:
QList<User*> directChatUsers(const Room* room) const;
/** Check whether a particular user is in the ignore list */
- Q_INVOKABLE bool isIgnored(const User* user) const;
+ Q_INVOKABLE bool isIgnored(const Quotient::User* user) const;
/** Get the whole list of ignored users */
- Q_INVOKABLE IgnoredUsersList ignoredUsers() const;
+ Q_INVOKABLE Quotient::IgnoredUsersList ignoredUsers() const;
/** Add the user to the ignore list
* The change signal is emitted synchronously, without waiting
@@ -264,14 +265,14 @@ public:
*
* \sa ignoredUsersListChanged
*/
- Q_INVOKABLE void addToIgnoredUsers(const User* user);
+ Q_INVOKABLE void addToIgnoredUsers(const Quotient::User* user);
/** Remove the user from the ignore list */
/** Similar to adding, the change signal is emitted synchronously.
*
* \sa ignoredUsersListChanged
*/
- Q_INVOKABLE void removeFromIgnoredUsers(const User* user);
+ Q_INVOKABLE void removeFromIgnoredUsers(const Quotient::User* user);
/** Get the full list of users known to this account */
QMap<QString, User*> users() const;
@@ -281,13 +282,14 @@ public:
/** Get the domain name used for ids/aliases on the server */
QString domain() const;
/** Find a room by its id and a mask of applicable states */
- Q_INVOKABLE Room* room(const QString& roomId,
- JoinStates states = JoinState::Invite
- | JoinState::Join) const;
+ Q_INVOKABLE Quotient::Room*
+ room(const QString& roomId,
+ Quotient::JoinStates states = JoinState::Invite | JoinState::Join) const;
/** Find a room by its alias and a mask of applicable states */
- Q_INVOKABLE Room* roomByAlias(const QString& roomAlias,
- JoinStates states = JoinState::Invite
- | JoinState::Join) const;
+ Q_INVOKABLE Quotient::Room*
+ roomByAlias(const QString& roomAlias,
+ Quotient::JoinStates states = JoinState::Invite
+ | JoinState::Join) const;
/** Update the internal map of room aliases to IDs */
/// This is used to maintain the internal index of room aliases.
/// It does NOT change aliases on the server,
@@ -295,15 +297,15 @@ public:
void updateRoomAliases(const QString& roomId, const QString& aliasServer,
const QStringList& previousRoomAliases,
const QStringList& roomAliases);
- Q_INVOKABLE Room* invitation(const QString& roomId) const;
- Q_INVOKABLE User* user(const QString& userId);
+ Q_INVOKABLE Quotient::Room* invitation(const QString& roomId) const;
+ Q_INVOKABLE Quotient::User* user(const QString& userId);
const User* user() const;
User* user();
QString userId() const;
QString deviceId() const;
QByteArray accessToken() const;
QtOlm::Account* olmAccount() const;
- Q_INVOKABLE SyncJob* syncJob() const;
+ Q_INVOKABLE Quotient::SyncJob* syncJob() const;
Q_INVOKABLE int millisToReconnect() const;
Q_INVOKABLE void getTurnServers();
@@ -589,6 +591,7 @@ public slots:
/** @deprecated Use callApi<PostReceiptJob>() or Room::postReceipt() instead
*/
virtual PostReceiptJob* postReceipt(Room* room, RoomEvent* event) const;
+
signals:
/**
* @deprecated
@@ -622,7 +625,7 @@ signals:
*
* @param request - the pointer to the failed job
*/
- void requestFailed(BaseJob* request);
+ void requestFailed(Quotient::BaseJob* request);
/** A network request (job) failed due to network problems
*
@@ -640,7 +643,7 @@ signals:
void syncDone();
void syncError(QString message, QString details);
- void newUser(User* user);
+ void newUser(Quotient::User* user);
/**
* \group Signals emitted on room transitions
@@ -672,7 +675,7 @@ signals:
*/
/** A new room object has been created */
- void newRoom(Room* room);
+ void newRoom(Quotient::Room* room);
/** A room invitation is seen for the first time
*
@@ -680,7 +683,7 @@ signals:
* that initial sync will trigger this signal for all rooms in
* Invite state.
*/
- void invitedRoom(Room* room, Room* prev);
+ void invitedRoom(Quotient::Room* room, Quotient::Room* prev);
/** A joined room is seen for the first time
*
@@ -691,7 +694,7 @@ signals:
* this room was in Invite state before, the respective object is
* passed in prev (and it will be deleted shortly afterwards).
*/
- void joinedRoom(Room* room, Room* prev);
+ void joinedRoom(Quotient::Room* room, Quotient::Room* prev);
/** A room has just been left
*
@@ -702,10 +705,10 @@ signals:
* Left rooms upon initial sync (not only those that were left
* right before the sync).
*/
- void leftRoom(Room* room, Room* prev);
+ void leftRoom(Quotient::Room* room, Quotient::Room* prev);
/** The room object is about to be deleted */
- void aboutToDeleteRoom(Room* room);
+ void aboutToDeleteRoom(Quotient::Room* room);
/** The room has just been created by createRoom or requestDirectChat
*
@@ -716,7 +719,7 @@ signals:
* use directChatAvailable signal if you just need to obtain
* a direct chat room.
*/
- void createdRoom(Room* room);
+ void createdRoom(Quotient::Room* room);
/** The first sync for the room has been completed
*
@@ -726,7 +729,7 @@ signals:
* signals (newRoom, joinedRoom etc.) come earlier, when the room
* has just been created.
*/
- void loadedRoomState(Room* room);
+ void loadedRoomState(Quotient::Room* room);
/** Account data (except direct chats) have changed */
void accountDataChanged(QString type);
@@ -735,18 +738,18 @@ signals:
* This signal is emitted upon any successful outcome from
* requestDirectChat.
*/
- void directChatAvailable(Room* directChat);
+ void directChatAvailable(Quotient::Room* directChat);
/** The list of direct chats has changed
* This signal is emitted every time when the mapping of users
* to direct chat rooms is changed (because of either local updates
* or a different list arrived from the server).
*/
- void directChatsListChanged(DirectChatsMap additions,
- DirectChatsMap removals);
+ void directChatsListChanged(Quotient::DirectChatsMap additions,
+ Quotient::DirectChatsMap removals);
- void ignoredUsersListChanged(IgnoredUsersList additions,
- IgnoredUsersList removals);
+ void ignoredUsersListChanged(Quotient::IgnoredUsersList additions,
+ Quotient::IgnoredUsersList removals);
void cacheStateChanged();
void lazyLoadingChanged();
@@ -812,4 +815,5 @@ private:
static user_factory_t _userFactory;
};
} // namespace Quotient
-Q_DECLARE_METATYPE(Quotient::Connection*)
+Q_DECLARE_METATYPE(Quotient::DirectChatsMap)
+Q_DECLARE_METATYPE(Quotient::IgnoredUsersList)
diff --git a/lib/csapi/gtad.yaml b/lib/csapi/gtad.yaml
index 301ee0b6..6d4e080f 100644
--- a/lib/csapi/gtad.yaml
+++ b/lib/csapi/gtad.yaml
@@ -95,9 +95,9 @@ analyzer:
- //: { type: "QVector<{{1}}>", imports: <QtCore/QVector> }
- map: # `additionalProperties` in OpenAPI
- RoomState:
- type: "std::unordered_map<QString, {{1}}>"
+ type: "UnorderedMap<QString, {{1}}>"
moveOnly:
- imports: <unordered_map>
+ imports: '"util.h"'
- /.+/:
type: "QHash<QString, {{1}}>"
imports: <QtCore/QHash>
diff --git a/lib/jobs/basejob.h b/lib/jobs/basejob.h
index 6c1b802c..c4da40f5 100644
--- a/lib/jobs/basejob.h
+++ b/lib/jobs/basejob.h
@@ -184,11 +184,11 @@ public:
using duration_ms_t = std::chrono::milliseconds::rep; // normally int64_t
std::chrono::seconds getCurrentTimeout() const;
- Q_INVOKABLE duration_ms_t getCurrentTimeoutMs() const;
+ Q_INVOKABLE Quotient::BaseJob::duration_ms_t getCurrentTimeoutMs() const;
std::chrono::seconds getNextRetryInterval() const;
- Q_INVOKABLE duration_ms_t getNextRetryMs() const;
+ Q_INVOKABLE Quotient::BaseJob::duration_ms_t getNextRetryMs() const;
std::chrono::milliseconds timeToRetry() const;
- Q_INVOKABLE duration_ms_t millisToRetry() const;
+ Q_INVOKABLE Quotient::BaseJob::duration_ms_t millisToRetry() const;
friend QDebug operator<<(QDebug dbg, const BaseJob* j)
{
@@ -215,7 +215,7 @@ signals:
void sentRequest();
/** The job has changed its status */
- void statusChanged(Status newStatus);
+ void statusChanged(Quotient::BaseJob::Status newStatus);
/**
* The previous network request has failed; the next attempt will
@@ -225,7 +225,8 @@ signals:
* @param inMilliseconds the interval after which the next attempt will be
* taken
*/
- void retryScheduled(int nextAttempt, duration_ms_t inMilliseconds);
+ void retryScheduled(int nextAttempt,
+ Quotient::BaseJob::duration_ms_t inMilliseconds);
/**
* The previous network request has been rate-limited; the next attempt
@@ -251,7 +252,7 @@ signals:
*
* @see result, success, failure
*/
- void finished(BaseJob* job);
+ void finished(Quotient::BaseJob* job);
/**
* Emitted when the job is finished (except when abandoned).
@@ -262,14 +263,14 @@ signals:
*
* @see success, failure
*/
- void result(BaseJob* job);
+ void result(Quotient::BaseJob* job);
/**
* Emitted together with result() in case there's no error.
*
* @see result, failure
*/
- void success(BaseJob*);
+ void success(Quotient::BaseJob*);
/**
* Emitted together with result() if there's an error.
@@ -277,7 +278,7 @@ signals:
*
* @see result, success
*/
- void failure(BaseJob*);
+ void failure(Quotient::BaseJob*);
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void uploadProgress(qint64 bytesSent, qint64 bytesTotal);
diff --git a/lib/room.h b/lib/room.h
index cded7eb9..80e305f0 100644
--- a/lib/room.h
+++ b/lib/room.h
@@ -181,11 +181,11 @@ public:
QString avatarMediaId() const;
QUrl avatarUrl() const;
const Avatar& avatarObject() const;
- Q_INVOKABLE JoinState joinState() const;
- Q_INVOKABLE QList<User*> usersTyping() const;
+ Q_INVOKABLE Quotient::JoinState joinState() const;
+ Q_INVOKABLE QList<Quotient::User*> usersTyping() const;
QList<User*> membersLeft() const;
- Q_INVOKABLE QList<User*> users() const;
+ Q_INVOKABLE QList<Quotient::User*> users() const;
QStringList memberNames() const;
[[deprecated("Use joinedCount(), invitedCount(), totalMemberCount()")]]
int memberCount() const;
@@ -228,7 +228,7 @@ public:
* \note The method will return a valid user regardless of
* the membership.
*/
- Q_INVOKABLE User* user(const QString& userId) const;
+ Q_INVOKABLE Quotient::User* user(const QString& userId) const;
/**
* \brief Check the join state of a given user in this room
@@ -236,16 +236,15 @@ public:
* \note Banned and invited users are not tracked for now (Leave
* will be returned for them).
*
- * \return either of Join, Leave, depending on the given
- * user's state in the room
+ * \return Join if the user is a room member; Leave otherwise
*/
- Q_INVOKABLE JoinState memberJoinState(User* user) const;
+ Q_INVOKABLE Quotient::JoinState memberJoinState(Quotient::User* user) const;
/**
* Get a disambiguated name for a given user in
* the context of the room
*/
- Q_INVOKABLE QString roomMembername(const User* u) const;
+ Q_INVOKABLE QString roomMembername(const Quotient::User* u) const;
/**
* Get a disambiguated name for a user with this id in
* the context of the room
@@ -274,9 +273,10 @@ public:
Timeline::const_iterator syncEdge() const;
/// \deprecated Use historyEdge instead
rev_iter_t timelineEdge() const;
- Q_INVOKABLE TimelineItem::index_t minTimelineIndex() const;
- Q_INVOKABLE TimelineItem::index_t maxTimelineIndex() const;
- Q_INVOKABLE bool isValidIndex(TimelineItem::index_t timelineIndex) const;
+ Q_INVOKABLE Quotient::TimelineItem::index_t minTimelineIndex() const;
+ Q_INVOKABLE Quotient::TimelineItem::index_t maxTimelineIndex() const;
+ Q_INVOKABLE bool
+ isValidIndex(Quotient::TimelineItem::index_t timelineIndex) const;
rev_iter_t findInTimeline(TimelineItem::index_t index) const;
rev_iter_t findInTimeline(const QString& evtId) const;
@@ -414,7 +414,8 @@ public:
* the event is even sent), while downloads are using
* the normal event id for identifier.
*/
- Q_INVOKABLE FileTransferInfo fileTransferInfo(const QString& id) const;
+ Q_INVOKABLE Quotient::FileTransferInfo
+ fileTransferInfo(const QString& id) const;
/// Get the URL to the actual file source in a unified way
/*!
@@ -438,7 +439,7 @@ public:
/*! This method returns a (potentially empty) state event corresponding
* to the pair of event type \p evtType and state key \p stateKey.
*/
- Q_INVOKABLE const StateEventBase*
+ Q_INVOKABLE const Quotient::StateEventBase*
getCurrentState(const QString& evtType, const QString& stateKey = {}) const;
template <typename EvT>
@@ -549,7 +550,8 @@ signals:
/// The remote echo has arrived with the sync and will be merged
/// with its local counterpart
/** NB: Requires a sync loop to be emitted */
- void pendingEventAboutToMerge(RoomEvent* serverEvent, int pendingEventIndex);
+ void pendingEventAboutToMerge(Quotient::RoomEvent* serverEvent,
+ int pendingEventIndex);
/// The remote and local copies of the event have been merged
/** NB: Requires a sync loop to be emitted */
void pendingEventMerged();
@@ -577,21 +579,21 @@ signals:
* upon the last sync
* \sa Changes
*/
- void changed(Changes changes);
+ void changed(Quotient::Room::Changes changes);
/**
* \brief The room name, the canonical alias or other aliases changed
*
* Not triggered when display name changes.
*/
- void namesChanged(Room* room);
- void displaynameAboutToChange(Room* room);
- void displaynameChanged(Room* room, QString oldName);
+ void namesChanged(Quotient::Room* room);
+ void displaynameAboutToChange(Quotient::Room* room);
+ void displaynameChanged(Quotient::Room* room, QString oldName);
void topicChanged();
void avatarChanged();
- void userAdded(User* user);
- void userRemoved(User* user);
- void memberAboutToRename(User* user, QString newName);
- void memberRenamed(User* user);
+ void userAdded(Quotient::User* user);
+ void userRemoved(Quotient::User* user);
+ void memberAboutToRename(Quotient::User* user, QString newName);
+ void memberRenamed(Quotient::User* user);
/// The list of members has changed
/** Emitted no more than once per sync, this is a good signal to
* for cases when some action should be done upon any change in
@@ -605,7 +607,8 @@ signals:
void allMembersLoaded();
void encryption();
- void joinStateChanged(JoinState oldState, JoinState newState);
+ void joinStateChanged(Quotient::JoinState oldState,
+ Quotient::JoinState newState);
void typingChanged();
void highlightCountChanged();
@@ -614,11 +617,11 @@ signals:
void displayedChanged(bool displayed);
void firstDisplayedEventChanged();
void lastDisplayedEventChanged();
- void lastReadEventChanged(User* user);
+ void lastReadEventChanged(Quotient::User* user);
void readMarkerMoved(QString fromEventId, QString toEventId);
- void readMarkerForUserMoved(User* user, QString fromEventId,
+ void readMarkerForUserMoved(Quotient::User* user, QString fromEventId,
QString toEventId);
- void unreadMessagesChanged(Room* room);
+ void unreadMessagesChanged(Quotient::Room* room);
void accountDataAboutToChange(QString type);
void accountDataChanged(QString type);
@@ -626,7 +629,8 @@ signals:
void tagsChanged();
void updatedEvent(QString eventId);
- void replacedEvent(const RoomEvent* newEvent, const RoomEvent* oldEvent);
+ void replacedEvent(const Quotient::RoomEvent* newEvent,
+ const Quotient::RoomEvent* oldEvent);
void newFileTransfer(QString id, QUrl localFile);
void fileTransferProgress(QString id, qint64 progress, qint64 total);
@@ -634,18 +638,18 @@ signals:
void fileTransferFailed(QString id, QString errorMessage = {});
void fileTransferCancelled(QString id);
- void callEvent(Room* room, const RoomEvent* event);
+ void callEvent(Quotient::Room* room, const Quotient::RoomEvent* event);
/// The room's version stability may have changed
void stabilityUpdated(QString recommendedDefault,
QStringList stableVersions);
/// This room has been upgraded and won't receive updates any more
- void upgraded(QString serverMessage, Room* successor);
+ void upgraded(QString serverMessage, Quotient::Room* successor);
/// An attempted room upgrade has failed
void upgradeFailed(QString errorMessage);
/// The room is about to be deleted
- void beforeDestruction(Room*);
+ void beforeDestruction(Quotient::Room*);
protected:
virtual Changes processStateEvent(const RoomEvent& e);
diff --git a/lib/user.h b/lib/user.h
index c9e3dbc1..28ec841b 100644
--- a/lib/user.h
+++ b/lib/user.h
@@ -107,9 +107,10 @@ public:
qreal hueF() const;
const Avatar& avatarObject(const Room* room = nullptr) const;
- Q_INVOKABLE QImage avatar(int dimension, const Room* room = nullptr);
+ Q_INVOKABLE QImage avatar(int dimension,
+ const Quotient::Room* room = nullptr);
Q_INVOKABLE QImage avatar(int requestedWidth, int requestedHeight,
- const Room* room = nullptr);
+ const Quotient::Room* room = nullptr);
QImage avatar(int width, int height, const Room* room,
const Avatar::get_callback_t& callback);
@@ -145,9 +146,10 @@ public slots:
signals:
void nameAboutToChange(QString newName, QString oldName,
- const Room* roomContext);
- void nameChanged(QString newName, QString oldName, const Room* roomContext);
- void avatarChanged(User* user, const Room* roomContext);
+ const Quotient::Room* roomContext);
+ void nameChanged(QString newName, QString oldName,
+ const Quotient::Room* roomContext);
+ void avatarChanged(Quotient::User* user, const Quotient::Room* roomContext);
private slots:
void updateName(const QString& newName, const Room* room = nullptr);
@@ -161,4 +163,3 @@ private:
QScopedPointer<Private> d;
};
} // namespace Quotient
-Q_DECLARE_METATYPE(Quotient::User*)