quotient-im / quaternion Goto Github PK
View Code? Open in Web Editor NEWA Qt-based IM client for Matrix
Home Page: https://matrix.org/ecosystem/clients/quaternion/
License: GNU General Public License v3.0
A Qt-based IM client for Matrix
Home Page: https://matrix.org/ecosystem/clients/quaternion/
License: GNU General Public License v3.0
To reproduce: Just log out. Topic will not disappear.
The issue is two-fold:
KChatEdit
clears the entry before emitting inputChanged
signal (which is incorrect, to my mind), the end-user sees a status message and an already cleared line. Yes he/she can push Up and get his input but that's just not right, the line should be there until actually submitted to the server.ChatRoomWidget::sendLine()
to rich text messages. What I need for that is access to the original representation (not only HTML or only plain text) so that I could navigate through the underlying QTextDocument
and convert/validate it. Once rich-text input becomes possible, I really don't want to mess with HTML tags in that place. But there's no clean way to do it: the history remembers only HTML /or/ plaintext representation, and filling in a QTextDocument
back from history is plain stupid.What I think would be right is to keep the entry intact until the end of ChatRoomWidget::sendLine()
and once we're done with it, call some kind of KChatEdit::save()
to push the line to the room history.
When the user gets highlighted (notified, whatever), Quaternion raises itself above all other windows and steals focus from whatever the user was doing. This is quite annoying, and a regular notification is the only thing that should be shown.
Happens on both Xubuntu and Arch (so OS independent really) using Xfwm (from the Xfce4 DE).
Currently the room list seems like a mess, this is probably mostly because it doesn't sort or filters the rooms.
For example every room with a voice chat active shows up as a new room. This in itself is fine (for now), but once the call is ended, the room should clear itself. If I leave the room manually, it shows up as Empty room (!idhere:matrix.org)
.
Also, Vector has just (yesterday actually, 2016-08-30) implemented a new room category for 1-on-1 chats. This could also be added to Quaternion to make them stand out. The rooms should be named to the other user you're chatting with. While you're at it, favorite and low priority rooms would be nice as well.
Quaternion assumes absent read marker for a freshly joined room. Even if you scroll to the very beginning (which is really not always what the user means to do), the read marker won't appear - Quaternion always expects it to come from the server in such cases.
What at the very least should be done is a "Mark all as read" context menu entry on the roomlist. Further on, some intelligence on freshly joined rooms should be provided (maybe mark everything submitted so far as read by default...)
Reproduce:
Tested it 3 times and it reproduced without fail.
Additional to fixing the bug, I'd suggest greying the Logout button out or hiding it when not logged into any server.
And perhaps let them cascade as beautifully as in riot?
This will need quite a bit of work, especially the fallback mechanism (it needs some sort of browser integration).
The crash is consistent but not 100% reproducible. It comes from the Qt cleanup code executed from ChatRoomWidget
. Namely, one of ChatRoomWidget
children (it seems unpredictable which one) tries to cleanup itself, calls QWidget::window()
in the process and crashes when dereferencing its (nullptr) result.
Last lines of output:
Job "SyncJob-9" status 103 : "Host requires authentication" Thread 1 "quaternion" received signal SIGSEGV, Segmentation fault. QScopedPointer >::operator-> (this=0x10) at /usr/include/qt/QtCore/qscopedpointer.h:118 118 Q_ASSERT(d);
Backtrace:
#0 QScopedPointer >::operator-> (this=0x10) at /usr/include/qt/QtCore/qscopedpointer.h:118 #1 0x0000000000470ee1 in QMatrixClient::BaseJob::finishJob (this=0x0, emitResult=false) at /home/felix/Development/qmatrixclient/lib/jobs/basejob.cpp:166 #2 0x0000000000471527 in QMatrixClient::BaseJob::abandon (this=0x0) at /home/felix/Development/qmatrixclient/lib/jobs/basejob.cpp:221 #3 0x00000000004564e4 in QMatrixClient::Connection::disconnectFromServer (this=0x8063b0) at /home/felix/Development/qmatrixclient/lib/connection.cpp:150 #4 0x0000000000442f00 in MainWindow::setConnection (this=0x7fffffffdcd0, newConnection=0x0) at /home/felix/Development/qmatrixclient/client/mainwindow.cpp:103 #5 0x00000000004434cf in MainWindow::loggedOut (this=0x7fffffffdcd0) at /home/felix/Development/qmatrixclient/client/mainwindow.cpp:183 #6 0x00000000004449da in QtPrivate::FunctorCall, QtPrivate::List<>, void, void (MainWindow::*)()>::call(void (MainWindow::*)(), MainWindow*, void**) (f=(void (MainWindow::*)(MainWindow * const)) 0x443490 , o=0x7fffffffdcd0, arg=0x7fffffffcfd0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:507 #7 0x0000000000444950 in QtPrivate::FunctionPointer::call, void>(void (MainWindow::*)(), MainWindow*, void**) (f=(void (MainWindow::*)(MainWindow * const)) 0x443490 , o=0x7fffffffdcd0, arg=0x7fffffffcfd0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:526 #8 0x0000000000444886 in QtPrivate::QSlotObject, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x25367c0, r=0x7fffffffdcd0, a=0x7fffffffcfd0, ret=0x0) at /usr/include/qt/QtCore/qobject_impl.h:149 #9 0x00007ffff5ad785e in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5 #10 0x0000000000479bc4 in QMatrixClient::Connection::loginError (this=0x8063b0, _t1=...) at /home/felix/Development/qmatrixclient/build/lib/moc_connection.cpp:389 #11 0x0000000000459258 in QMatrixClient::Connection::sync(int)::$_6::operator()() const (this=0x2ec7e20) at /home/felix/Development/qmatrixclient/lib/connection.cpp:181 #12 0x00000000004591d9 in QtPrivate::FunctorCall, QtPrivate::List<>, void, QMatrixClient::Connection::sync(int)::$_6>::call(QMatrixClient::Connection::sync(int)::$_6&, void**) (f=..., arg=0x7fffffffd210) at /usr/include/qt/QtCore/qobjectdefs_impl.h:501 #13 0x00000000004591b1 in QtPrivate::Functor::call, void>(QMatrixClient::Connection::sync(int)::$_6&, void*, void**) (f=..., arg=0x7fffffffd210) at /usr/include/qt/QtCore/qobjectdefs_impl.h:558 #14 0x000000000045914d in QtPrivate::QFunctorSlotObject, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x2ec7e10, r=0x25d97a0, a=0x7fffffffd210, ret=0x0) at /usr/include/qt/QtCore/qobject_impl.h:198 #15 0x00007ffff5ad785e in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5 #16 0x000000000047a2df in QMatrixClient::BaseJob::failure (this=0x25d97a0, _t1=0x25d97a0) at /home/felix/Development/qmatrixclient/build/lib/moc_basejob.cpp:235 #17 0x0000000000471148 in QMatrixClient::BaseJob::finishJob (this=0x25d97a0, emitResult=true) at /home/felix/Development/qmatrixclient/lib/jobs/basejob.cpp:182 #18 0x0000000000470cd4 in QMatrixClient::BaseJob::gotReply (this=0x25d97a0) at /home/felix/Development/qmatrixclient/lib/jobs/basejob.cpp:129 #19 0x0000000000472b8a in QtPrivate::FunctorCall, QtPrivate::List<>, void, void (QMatrixClient::BaseJob::*)()>::call(void (QMatrixClient::BaseJob::*)(), QMatrixClient::BaseJob*, void**) (f=(void (QMatrixClient::BaseJob::*)(QMatrixClient::BaseJob * const)) 0x470b30 , o=0x25d97a0, arg=0x7fffffffd5a0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:507 #20 0x0000000000472b00 in QtPrivate::FunctionPointer::call, void>(void (QMatrixClient::BaseJob::*)(), QMatrixClient::BaseJob*, void**) (f=(void (QMatrixClient::BaseJob::*)(QMatrixClient::BaseJob * const)) 0x470b30 , o=0x25d97a0, arg=0x7fffffffd5a0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:526 #21 0x0000000000472a36 in QtPrivate::QSlotObject, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x2ec14f0, r=0x25d97a0, a=0x7fffffffd5a0, ret=0x0) at /usr/include/qt/QtCore/qobject_impl.h:149 #22 0x00007ffff5ad785e in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5 #23 0x00007ffff5f7ee97 in ?? () from /usr/lib/libQt5Network.so.5 #24 0x00007ffff6015b59 in ?? () from /usr/lib/libQt5Network.so.5 #25 0x00007ffff5ad8349 in QObject::event(QEvent*) () from /usr/lib/libQt5Core.so.5 #26 0x00007ffff76d4e3c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5 #27 0x00007ffff76dc5b1 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5 #28 0x00007ffff5aabc80 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5 #29 0x00007ffff5aae3fd in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5 #30 0x00007ffff5b00173 in ?? () from /usr/lib/libQt5Core.so.5 #31 0x00007ffff2829e67 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #32 0x00007ffff282a0d0 in ?? () from /usr/lib/libglib-2.0.so.0 #33 0x00007ffff282a17c in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #34 0x00007ffff5b0057f in QEventDispatcherGlib::processEvents(QFlags) () from /usr/lib/libQt5Core.so.5 #35 0x00007ffff5aaa0da in QEventLoop::exec(QFlags) () from /usr/lib/libQt5Core.so.5 #36 0x00007ffff5ab25cc in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5 #37 0x000000000045310e in main (argc=1, argv=0x7fffffffdee8) at /home/felix/Development/qmatrixclient/client/main.cpp:52
Currently, Quaternion marks all the incoming messages as read in the selected room. We have no idea, though, whether the user has read those messages (i.e., the user could have left his PC running while being away). Some action (like a mouse move event) should be required to mark messages as read.
starting Quaternion 0.0.65/0.0.1 on Windows and trying to connect to https://matrix.org fails with error message "Error creating SSL context"
What works for me:
should connect to server.
When scrolling upwards, more history get’s pulled in. But I can scroll so fast upwards, that I reach the upper end of log where no reload get’s triggered. I actually have to bounce the view against the top again and again everytime I want to pull more history.
Hey,
tried compiling following the documentation.
Compiling was successful, but make install
does not work:
make: *** No rule to make target 'install'. Stop.
I am in the build directory when issuing the command.
The resulting binary works well, but the documentation states that make install should work. It's a bit confusing.
Greetings.
Entering matrix.somehost.com
should work, because matrix homeservers always use http transports. Instead I get a vague "Unknown error".
Job "PasswordLogin" created
Job "PasswordLogin" status 100 : "Unknown error"
deconstructing connection object for ""
Job "PasswordLogin" destroyed
Currently, everytime you launch the client, it's window size is reset to whatever is the default. It would be preferable to "remember" the old window size, and set it back to that on the next launch.
Running the latest git master. Steps to reproduce:
Expected behavior: error message
Actual: behavior nothing happens
Currently, images that are send as a file directly through Matrix are shown inline as intended. However direct links (such as imgur links) only show up as text. It would be nice if those were shown inline as well.
I know this is a big one.^^
Sometimes, messages appear two times. We should filter them by event ID.
And perhaps scroll room to readmarker on open
It’s very annoying, if you are typing get a highlight somewhere else, wan’t to quick reply, and then return to your previous discussion.
When a timeline with images is opened, images take time to load. When they actually load and expand in the timeline, the part below an image is displaced further down, which is not an expected behaviour at least when a user is standing on the newest (bottommost message).
This is one of consequences of having a beginning of the model on the top, rather than on the bottom. Unfortunately, reversing the model and the chat ListView (with verticalLayout
property) corrupts positioning of section labels (the labels appear below instead of above). Asking the Qt mailling list for help didn't help; seems that the only reasonable option left is to replace section labels with a home-baked solution for grouping by date (somewhat similar to the hack that I've made for the scrollbar).
I think this is more an academic bug.
If a lot of people type at the same time, the list over the input bar gets so long, that the main window grows in width, at least with my WM in floating mode.
Just like the Vector client. Basically currently pressing tab moves focus out of the chat line, but it should probably auto-complete the nickname you're typing instead.
This is due to the overall not very good heuristics to detect when to fetch more messages.
On populate the listview will shortly be empty, in that split second a fetch is triggered.
After building the latest version my login details fail and the login times out
On start up I get Job "PasswordLogin" status 103 : "Error transferring https://matrix.org/_matrix/client/r0/login - server replied: Forbidden"
and a pop up asking for my details again.
After re entering my details I get
Job "PasswordLogin" created
Job "SyncJob-15" destroyed
Job "SyncJob-16" created
Job "PasswordLogin" destroyed
Job "SyncJob-16" status 102 : "The job has timed out"
Job "SyncJob-16" finishes without ready network reply
"The job has timed out"
Before todays commits login worked fine.
Connection->Quit does work, though
NaChat is doing a remarkably good job at this, maybe borrow from it.
return value QQuickView::rootObject() returning null in chatroomwidget.cpp:94
Result of this is constantly blank middle chat widget
After the room list has loaded, clicking on a room and moving the mouse around the window causes Job "PostReceiptJob" created
to be output rapidly which also causes the cpu usage of Quaternion to jump.
Tested on Ubuntu 16.10
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.