aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2018-02-27 19:51:08 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2018-02-27 19:51:08 +0900
commit375bea5ee67a90c6419acf50c06c05ed0435c772 (patch)
tree76f0a1c830797fe1b17b3bea67ddaf7fb53cbd6a /examples
parente80bfd2fc710d4780a2c22bde9d605a41bd4aaa4 (diff)
parentefeeca097a3c69991683615366f07625855ba2ac (diff)
downloadlibquotient-375bea5ee67a90c6419acf50c06c05ed0435c772.tar.gz
libquotient-375bea5ee67a90c6419acf50c06c05ed0435c772.zip
Merge branch 'master' into kitsune-gtad
Diffstat (limited to 'examples')
-rw-r--r--examples/qmc-example.cpp85
1 files changed, 61 insertions, 24 deletions
diff --git a/examples/qmc-example.cpp b/examples/qmc-example.cpp
index dbb9912b..e0aabca9 100644
--- a/examples/qmc-example.cpp
+++ b/examples/qmc-example.cpp
@@ -1,55 +1,92 @@
#include "connection.h"
#include "room.h"
+#include "user.h"
-#include <QCoreApplication>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QStringBuilder>
#include <iostream>
-#include <string>
using namespace QMatrixClient;
using std::cout;
using std::endl;
-using std::string;
+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, [=] {
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;
+ 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
+ << " " << 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;
- 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;
- }
+ << 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;
+// }
});
}
+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);
+ 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();
}