From 41171cc181c4bc48ba2bdc39b582d0f6c2fdde0d Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Sun, 25 Feb 2018 19:04:03 +0900 Subject: qmc-example: Single-shot sync instead of continuous; room tags; code cleanup Single-shot sync is now used because with that qmc-example can be used as a crude auto-testing tool. --- examples/qmc-example.cpp | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'examples') diff --git a/examples/qmc-example.cpp b/examples/qmc-example.cpp index dbb9912b..857c1190 100644 --- a/examples/qmc-example.cpp +++ b/examples/qmc-example.cpp @@ -4,12 +4,10 @@ #include #include -#include using namespace QMatrixClient; using std::cout; using std::endl; -using std::string; void onNewRoom(Room* r) { @@ -17,39 +15,56 @@ void onNewRoom(Room* r) QObject::connect(r, &Room::namesChanged, [=] { cout << "Room " << r->id().toStdString() << ", name(s) changed:" << endl << " Name: " << r->name().toStdString() << endl - << " Canonical alias: " << r->canonicalAlias().toStdString() + << " Canonical alias: " << r->canonicalAlias().toStdString() << endl << endl << endl; }); + QObject::connect(r, &Room::tagsChanged, [=] { + cout << "Room " << r->id().toStdString() << ", tag(s) changed:" << endl + << " " << r->tagNames().join(", ").toStdString() << endl << endl; + }); QObject::connect(r, &Room::aboutToAddNewMessages, [=] (RoomEventsRange timeline) { cout << timeline.size() << " new event(s) in room " - << r->id().toStdString() << ":" << endl; + << r->id().toStdString() << ":" + << endl; for (const auto& item: timeline) { cout << "From: " << r->roomMembername(item->senderId()).toStdString() << endl << "Timestamp:" << item->timestamp().toString().toStdString() << endl - << "JSON:" << endl << string(item->originalJson()) << endl; + << "JSON:" << endl << item->originalJson().toStdString() << endl; } }); } +void finalize(Connection* conn) +{ + cout << "Logging out" << endl; + conn->logout(); + QObject::connect(conn, &Connection::loggedOut, QCoreApplication::instance(), + [conn] { + conn->deleteLater(); + QCoreApplication::instance()->processEvents(); + QCoreApplication::instance()->quit(); + }); +} + int main(int argc, char* argv[]) { QCoreApplication app(argc, argv); - if (argc < 2) + if (argc < 3) return -1; - auto conn = new Connection(QUrl("https://matrix.org")); + cout << "Connecting to the server as " << argv[1] << endl; + auto conn = new Connection; conn->connectToServer(argv[1], argv[2], "QMatrixClient example application"); - auto c = QObject::connect(conn, &Connection::connected, [=] { - cout << "Connected" << endl; - conn->sync(); - }); - QObject::connect(conn, &Connection::syncDone, [=] { - cout << "Sync done" << endl; - conn->sync(30000); + QObject::connect(conn, &Connection::connected, [=] { + cout << "Connected, server: " + << conn->homeserver().toDisplayString().toStdString() << endl; + cout << "Access token: " << conn->accessToken().toStdString() << endl; + conn->sync(); }); QObject::connect(conn, &Connection::newRoom, onNewRoom); + QObject::connect(conn, &Connection::syncDone, std::bind(finalize, conn)); return app.exec(); } -- cgit v1.2.3 From 4b5d5d20de1a3c00c77e395260f572c2b90f54f4 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Mon, 26 Feb 2018 17:26:15 +0900 Subject: qmc-example: Optionally send a test message; don't dump incoming messages to cout The room alias is the third parameter (after user and password). --- examples/qmc-example.cpp | 50 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-) (limited to 'examples') diff --git a/examples/qmc-example.cpp b/examples/qmc-example.cpp index 857c1190..caea562f 100644 --- a/examples/qmc-example.cpp +++ b/examples/qmc-example.cpp @@ -1,15 +1,19 @@ #include "connection.h" #include "room.h" +#include "user.h" -#include +#include +#include #include using namespace QMatrixClient; using std::cout; using std::endl; +using std::bind; +using namespace std::placeholders; -void onNewRoom(Room* r) +void onNewRoom(Room* r, const char* targetRoomName) { cout << "New room: " << r->id().toStdString() << endl; QObject::connect(r, &Room::namesChanged, [=] { @@ -17,6 +21,20 @@ void onNewRoom(Room* r) << " Name: " << r->name().toStdString() << endl << " Canonical alias: " << r->canonicalAlias().toStdString() << endl << endl << endl; + if (targetRoomName && (r->name() == targetRoomName || + r->canonicalAlias() == targetRoomName)) + { + r->postMessage( + "This is a test message from an example application\n" + "The current user is " % r->localUser()->fullName(r) % "\n" % + QStringLiteral("This room has %1 member(s)") + .arg(r->memberCount()) % "\n" % + "The room is " % + (r->isDirectChat() ? "" : "not ") % "a direct chat\n" % + "Have a good day", + MessageEventType::Notice + ); + } }); QObject::connect(r, &Room::tagsChanged, [=] { cout << "Room " << r->id().toStdString() << ", tag(s) changed:" << endl @@ -24,16 +42,15 @@ void onNewRoom(Room* r) }); QObject::connect(r, &Room::aboutToAddNewMessages, [=] (RoomEventsRange timeline) { cout << timeline.size() << " new event(s) in room " - << r->id().toStdString() << ":" - << endl; - for (const auto& item: timeline) - { - cout << "From: " - << r->roomMembername(item->senderId()).toStdString() - << endl << "Timestamp:" - << item->timestamp().toString().toStdString() << endl - << "JSON:" << endl << item->originalJson().toStdString() << endl; - } + << r->id().toStdString() << endl; +// for (const auto& item: timeline) +// { +// cout << "From: " +// << r->roomMembername(item->senderId()).toStdString() +// << endl << "Timestamp:" +// << item->timestamp().toString().toStdString() << endl +// << "JSON:" << endl << item->originalJson().toStdString() << endl; +// } }); } @@ -64,7 +81,12 @@ int main(int argc, char* argv[]) cout << "Access token: " << conn->accessToken().toStdString() << endl; conn->sync(); }); - QObject::connect(conn, &Connection::newRoom, onNewRoom); - QObject::connect(conn, &Connection::syncDone, std::bind(finalize, conn)); + const char* targetRoomName = argc >= 4 ? argv[3] : nullptr; + if (targetRoomName) + cout << "Target room name: " << targetRoomName; + QObject::connect(conn, &Connection::newRoom, + bind(onNewRoom, _1, targetRoomName)); + QObject::connect(conn, &Connection::syncDone, + bind(finalize, conn)); return app.exec(); } -- cgit v1.2.3 From 37b67cbd07beca1b6f010794a7ff1920bc053e6e Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Mon, 26 Feb 2018 17:50:56 +0900 Subject: qmc-example: Temporarily comment out the code that uses uncommitted features --- examples/qmc-example.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'examples') diff --git a/examples/qmc-example.cpp b/examples/qmc-example.cpp index caea562f..e0aabca9 100644 --- a/examples/qmc-example.cpp +++ b/examples/qmc-example.cpp @@ -29,8 +29,8 @@ void onNewRoom(Room* r, const char* targetRoomName) "The current user is " % r->localUser()->fullName(r) % "\n" % QStringLiteral("This room has %1 member(s)") .arg(r->memberCount()) % "\n" % - "The room is " % - (r->isDirectChat() ? "" : "not ") % "a direct chat\n" % +// "The room is " % +// (r->isDirectChat() ? "" : "not ") % "a direct chat\n" % "Have a good day", MessageEventType::Notice ); -- cgit v1.2.3