Kaidan issueshttps://invent.kde.org/network/kaidan/-/issues2023-02-28T19:11:03Zhttps://invent.kde.org/network/kaidan/-/issues/174Don't save password in plaintext2023-02-28T19:11:03ZBhushan ShahDon't save password in plaintext*Created by: LNJ2**Created by: LNJ2*1.0https://invent.kde.org/network/kaidan/-/issues/72XEP-0045: Multi-User Chat2022-09-28T10:23:00ZBhushan ShahXEP-0045: Multi-User Chat*Created by: LNJ2*
Let's see if we are faster at implementing MUC or MIX is faster at succeeding (and we'll implement that).
https://xmpp.org/extensions/xep-0045.html*Created by: LNJ2*
Let's see if we are faster at implementing MUC or MIX is faster at succeeding (and we'll implement that).
https://xmpp.org/extensions/xep-0045.htmlhttps://invent.kde.org/network/kaidan/-/issues/29Port Kaidan to all platforms2020-09-20T18:55:49ZBhushan ShahPort Kaidan to all platforms*Created by: LNJ2*
##### Desktop
- [x] Linux
- [x] AppImage
- [x] FlatPak packaging
- [x] debian packaging (in repo.kaidan.im/debpm)
- [x] Windows
- [x] Craft
- [ ] NSIS installer (?)
- [x] macOS
- [x] Craft
...*Created by: LNJ2*
##### Desktop
- [x] Linux
- [x] AppImage
- [x] FlatPak packaging
- [x] debian packaging (in repo.kaidan.im/debpm)
- [x] Windows
- [x] Craft
- [ ] NSIS installer (?)
- [x] macOS
- [x] Craft
- [ ] Macports
- [ ] Homebrew packaging (?)
- [ ] installer?
##### Mobile
- [x] Android
- [ ] Official F-Droid packaging (requires Qt to be included on F-Droid build servers)
- [x] F-Droid KDE repository (#259)
- [ ] Google PlayStore
- [x] iOS
- [ ] Apple AppStore
- [ ] Are there open-source alternatives? No.
- [x] Ubuntu Touch (16.04/xenial supported)
- [x] OpenStore (see #265)
- [x] Plasma Mobile (in the official repository and image!!!! :tada: :boom:)
`pkcon install kaidan`
- [ ] LuneOS (WebOS continuation, seems to use Qt 5.9)
- [x] PostmarketOS
- [ ] Sailfish OS (requires up-to-date Qt)
For the most platforms we still need to publish official packages.1.0https://invent.kde.org/network/kaidan/-/issues/258Public MIX/MUC search2020-09-20T15:10:37ZBhushan ShahPublic MIX/MUC searchThis site contains a list with most of the public MUCs. It were nice if you could search that list in Kaidan:
https://muclumbus.jabbercat.org/
The problem would be that (the JID or IP-Address) and the search requests are sent to a 3rd p...This site contains a list with most of the public MUCs. It were nice if you could search that list in Kaidan:
https://muclumbus.jabbercat.org/
The problem would be that (the JID or IP-Address) and the search requests are sent to a 3rd party service. The solution would be to either sync the whole list or hosting an own instance (but that would still only partially solve the problem).2.0https://invent.kde.org/network/kaidan/-/issues/270Start with message option2020-09-20T15:09:20ZBhushan ShahStart with message optionIt would be nice to have an option like `kaidan --message 'Hello'` that opens Kaidan, offers to select a chat and send the specified message to the selected chat. This would allow to integrate with 3rd party apps/frameworks like [Purpose...It would be nice to have an option like `kaidan --message 'Hello'` that opens Kaidan, offers to select a chat and send the specified message to the selected chat. This would allow to integrate with 3rd party apps/frameworks like [Purpose](https://api.kde.org/frameworks/purpose/html/index.html) that could use it to share URLs/text from various apps1.0https://invent.kde.org/network/kaidan/-/issues/281Change license of Kaidan: Add exception for Apple App Store2021-02-24T19:50:20ZMartin KarambaChange license of Kaidan: Add exception for Apple App StoreSoftware under GPL or AGPL license cannot be distributed legally via the Apple App Store:
https://www.fsf.org/news/2010-05-app-store-compliance
To allow porting Kaidan to iOS, the following amendment should appended to its license:
> ...Software under GPL or AGPL license cannot be distributed legally via the Apple App Store:
https://www.fsf.org/news/2010-05-app-store-compliance
To allow porting Kaidan to iOS, the following amendment should appended to its license:
> Additional Permissions For Submission to Apple App Store: Provided that you are otherwise in compliance with the GPLv3 for each covered work you convey (including without limitation making the Corresponding Source available in compliance with Section 6 of the GPLv3), Open Whisper Systems also grants you the additional permission to convey through the Apple App Store non-source executable versions of the Program as incorporated into each applicable covered work as Executable Versions only under the Mozilla Public License version 2.0 (https://www.mozilla.org/en-US/MPL/2.0/).
from: https://github.com/signalapp/libsignal-protocol-c/commit/defc71dfaafb8eeab05db62a4bdc88d37e2ee56bhttps://invent.kde.org/network/kaidan/-/issues/255XEP-0369: Mediated Information eXchange (MIX)2021-09-15T14:21:29ZBhushan ShahXEP-0369: Mediated Information eXchange (MIX)XEPs to implement:
- [ ] [XEP-0369: Mediated Information eXchange (MIX)](https://xmpp.org/extensions/xep-0369.html)
- [ ] [XEP-0403: Mediated Information eXchange (MIX): Presence Support](https://xmpp.org/extensions/xep-0403.html)
- [...XEPs to implement:
- [ ] [XEP-0369: Mediated Information eXchange (MIX)](https://xmpp.org/extensions/xep-0369.html)
- [ ] [XEP-0403: Mediated Information eXchange (MIX): Presence Support](https://xmpp.org/extensions/xep-0403.html)
- [ ] [XEP-0404: Mediated Information eXchange (MIX): JID Hidden Channels](https://xmpp.org/extensions/xep-0404.html) (maybe)
- [ ] [XEP-0406: Mediated Information eXchange (MIX): MIX Administration](https://xmpp.org/extensions/xep-0406.html) (maybe)
- [ ] [XEP-0407: Mediated Information eXchange (MIX): Miscellaneous Capabilities](https://xmpp.org/extensions/xep-0407.html) (maybe)0.10: Groupchats (MIX)Melvin Keskinmelvo@olomono.deMelvin Keskinmelvo@olomono.dehttps://invent.kde.org/network/kaidan/-/issues/290Show and interpret QR codes for contacts, login, groups and fingerprints2022-09-06T18:44:27ZMelvin Keskinmelvo@olomono.deShow and interpret QR codes for contacts, login, groups and fingerprintsA QR code should be shown for the own JID, a JID of a contact, a JID of a group, login data and OMEMO key fingerprints.
Show and interpret a QR code for a URI containing the following elements:
**JID**
Example: `xmpp:user@example.org...A QR code should be shown for the own JID, a JID of a contact, a JID of a group, login data and OMEMO key fingerprints.
Show and interpret a QR code for a URI containing the following elements:
**JID**
Example: `xmpp:user@example.org`
* [x] Show Alice your own QR code so that she can add you.
* [x] Show Alice the QR code of Bob so that she can add him.
* [x] Scan the QR code of Alice to add her.
**JID** + **login** action
Example: `xmpp:user@example.org?login;password=abc123`
* [x] Log in to an account with the given login data.
**JID** + **join** action for a group (as soon as MUC is implemented or with a similar action for MIX as soon as that is implemented)
Example: `xmpp:discussion@group.example.org?join`
* [ ] Join a group with the given JID.
**JID** + **fingerprints** of an OMEMO identity key
Example: `xmpp:user@example.org?trust-message;encryption=urn:xmpp:omemo:1;trust=623548d3835c6d33ef5cb680f7944ef381cf712bf23a0119dabe5c4f252cd02f;trust=d9f849b6b828309c5f2c8df4f38fd891887da5aaa24a22c50d52f69b4a80817e`
* [x] Authenticate OMEMO identity keys with the given fingerprints.0.10: Groupchats (MIX)Melvin Keskinmelvo@olomono.deMelvin Keskinmelvo@olomono.dehttps://invent.kde.org/network/kaidan/-/issues/411Add support for Jingle audio and video calls.2022-09-11T22:23:12ZIan SutterAdd support for Jingle audio and video calls.I noticed that there was another such feature request, but it was closed citing a merge request that has since been closed due to inactivity. It would be great if we could get support for the following call features that many other clien...I noticed that there was another such feature request, but it was closed citing a merge request that has since been closed due to inactivity. It would be great if we could get support for the following call features that many other clients implement:
* TURN server support
* WebRTC support since many clients seem to use it in their implementations
* Acoustic echo cancellation0.11 Audio and Video Calls (Jingle + WebRTC)https://invent.kde.org/network/kaidan/-/issues/295Improve presence subscription handling2022-09-29T11:29:35ZMelvin Keskinmelvo@olomono.deImprove presence subscription handling* [ ] Automatically accept the presence subscription request from a contact for whom a one-way subscription exists (i.e., for whom the presence is subscribed but the own presence is not published).
* [ ] Add an option for manually unsu...* [ ] Automatically accept the presence subscription request from a contact for whom a one-way subscription exists (i.e., for whom the presence is subscribed but the own presence is not published).
* [ ] Add an option for manually unsubscribing / subscribing the presence of a contact in its contact details page.
* [ ] Do not show a presence subscription request on other Kaidan instances if one instance has already accepted that request.https://invent.kde.org/network/kaidan/-/issues/300XEP-0191: Blocking Command2020-09-20T15:10:46ZLinus JahnXEP-0191: Blocking CommandSee also: [XEP-0377: Spam Reporting](https://xmpp.org/extensions/xep-0377.html)See also: [XEP-0377: Spam Reporting](https://xmpp.org/extensions/xep-0377.html)1.0https://invent.kde.org/network/kaidan/-/issues/306System tray icon2022-01-09T15:00:53ZÖyvind SætherSystem tray iconMost communications programs have system tray icon support. This is specially handy for users of multiple virtual desktops. Other similar programs such as Kopete, Spectacle and Pidgin have system tray icon support. Some (just me?) view i...Most communications programs have system tray icon support. This is specially handy for users of multiple virtual desktops. Other similar programs such as Kopete, Spectacle and Pidgin have system tray icon support. Some (just me?) view it as a essential feature for a chat application. Please consider adding system tray icon support. Do be aware that it would have to be optional as that foot desktop environment does not have a system tray. All other desktop environments (KDE/LXQt/Xfce/IceWM/Fluxbox) support a system tray icon.2.0https://invent.kde.org/network/kaidan/-/issues/310Move Kaidan GUI elements to a library for use by other KDE apps2020-09-20T15:10:13ZSimon RedmanMove Kaidan GUI elements to a library for use by other KDE appsHello Kaidan team!
I am Simon from KDE Connect. Lately I have been working on a desktop SMS app for KDE Connect which allows the user to read and write SMS and MMS from the desktop, sent and received by the paired phone.
In the sense o...Hello Kaidan team!
I am Simon from KDE Connect. Lately I have been working on a desktop SMS app for KDE Connect which allows the user to read and write SMS and MMS from the desktop, sent and received by the paired phone.
In the sense of being a chat app, this app shares lots of GUI similarities with Kaidan. Actually, I am already using some of your GUI elements! See, for example, https://invent.kde.org/kde/kdeconnect-kde/blob/76424c157b43c720522dae3751f1ede0a39c884f/smsapp/qml/ChatMessage.qml
It is very good for me to be able to re-use Kaidan GUI elements for kdeconnect-sms since it is mostly just me working on that I don't have much QML experience. From that point of view, it would be very helpful for me Kaidan GUI elements were abstracted up a level into some kind of library which we could share.
Essentially, I am already going to be making this library since making a library will not be much additional effort beyond updating my "borrowed" GUI elements to their latest versions from Kaidan. Are you interested in using such a library and working with me on it?https://invent.kde.org/network/kaidan/-/issues/313Notifications on Apple platforms2021-02-24T19:50:20ZJonah BrüchertNotifications on Apple platformsmacOS backend, maybe reusable for iOS: https://phabricator.kde.org/D22365, https://developer.apple.com/documentation/foundation/nsnotification
Remaining questions:
- Why doesn't the patch use NSNotifications?
example for iOS: https://...macOS backend, maybe reusable for iOS: https://phabricator.kde.org/D22365, https://developer.apple.com/documentation/foundation/nsnotification
Remaining questions:
- Why doesn't the patch use NSNotifications?
example for iOS: https://makeapppie.com/2016/08/08/how-to-make-local-notifications-in-ios-10/
General issue #29
General iOS support: https://invent.kde.org/jbbgameich/kaidan/commits/wip-mac
iOS native integration example: https://www.qt.io/blog/2017/12/01/sharing-files-android-ios-qt-app1.0https://invent.kde.org/network/kaidan/-/issues/316Unable to login using self signed certificates on server2024-01-20T08:19:23ZMihai ComanUnable to login using self signed certificates on serverCurrently, login fails if self signed certificate is used on server.
An option to view and confirm trust for self signed certificates would be nice.Currently, login fails if self signed certificate is used on server.
An option to view and confirm trust for self signed certificates would be nice.1.0https://invent.kde.org/network/kaidan/-/issues/321Orientation is not detected for video recording2020-09-20T14:47:45ZMelvin Keskinmelvo@olomono.deOrientation is not detected for video recordingThe orientation for video recording is not changed to the current orientation of the mobile device if it is in portrait mode. The video preview and the recording is always in landscape mode.The orientation for video recording is not changed to the current orientation of the mobile device if it is in portrait mode. The video preview and the recording is always in landscape mode.1.0Filipe AzevedoFilipe Azevedohttps://invent.kde.org/network/kaidan/-/issues/323XEP-0157: Contact Addresses for XMPP Services2023-12-10T13:02:31ZLinus JahnXEP-0157: Contact Addresses for XMPP Serviceshttps://xmpp.org/extensions/xep-0157.html
The contact addresses should be visible after registering and also in the account settings.
(Suggestion by @borgert)https://xmpp.org/extensions/xep-0157.html
The contact addresses should be visible after registering and also in the account settings.
(Suggestion by @borgert)2.0https://invent.kde.org/network/kaidan/-/issues/326Multi-account support2022-09-30T19:14:56ZAl DeMulti-account supportCurrently you can only use a single account. If you want to use a second one, you either have to use a different app or to log out and log in with another.
However it would be very convenient to use two or more simultaneously, for differ...Currently you can only use a single account. If you want to use a second one, you either have to use a different app or to log out and log in with another.
However it would be very convenient to use two or more simultaneously, for different purposes, like for work and private communication or even testing purposes.2.0Melvin Keskinmelvo@olomono.deMelvin Keskinmelvo@olomono.dehttps://invent.kde.org/network/kaidan/-/issues/266Support UBports Push Notification Server2022-09-11T22:54:42ZBhushan ShahSupport UBports Push Notification ServerRumors have it that XMPP servers can be told to send Notifications to a Push Notification Servers, but only using the XMPP protocol. So adding Push Notifications for Kaidan in Ubuntu Touch would need:
* [ ] A XMPP Push Gateway to transl...Rumors have it that XMPP servers can be told to send Notifications to a Push Notification Servers, but only using the XMPP protocol. So adding Push Notifications for Kaidan in Ubuntu Touch would need:
* [ ] A XMPP Push Gateway to translate XMPP to whatever the UBports Push Notification Server accepts (probably on UBports side)
* [ ] Kaidan click package version tells its XMPP server to send Notifications to the new UBports XMPP Push Gateway
* [ ] Kaidan implements a push helper to handle the push notifications (as a reference see [Telegram](https://github.com/ubports/telegram-app/tree/master/telegram/push) or [Fluffy Chat](https://github.com/ChristianPauly/fluffychat/blob/1d968cd7a27cf69f28180bd02d5aea5b95b20fd3/helloHelper))2.0https://invent.kde.org/network/kaidan/-/issues/333Add possibility to select and copy messages2020-09-20T14:42:24ZAl DeAdd possibility to select and copy messagesIt would be more than convenient to be capable of selecting chat texts and to copy and paste messages.
As I found out one can right click and choose to copy a message by a context menu, however this button does nothing to me.
Even if i...It would be more than convenient to be capable of selecting chat texts and to copy and paste messages.
As I found out one can right click and choose to copy a message by a context menu, however this button does nothing to me.
Even if it worked, I'd still prefer to select parts the text with the mouse.1.0https://invent.kde.org/network/kaidan/-/issues/334Add possibility to resize the contact's panel in width2020-09-20T14:45:46ZAl DeAdd possibility to resize the contact's panel in widthIf a contact's name is very long or all are very short a fixed width of the panel either makes the name elide or simply wastes spaces.If a contact's name is very long or all are very short a fixed width of the panel either makes the name elide or simply wastes spaces.2.0https://invent.kde.org/network/kaidan/-/issues/349Prohibit adding same contact twice2020-09-20T15:01:49ZAl DeProhibit adding same contact twiceKaidan should warn and prohibit to add a contact a second time if it's already the in the roster. Currently it will simply add it again and give it the new nickname.Kaidan should warn and prohibit to add a contact a second time if it's already the in the roster. Currently it will simply add it again and give it the new nickname.1.0https://invent.kde.org/network/kaidan/-/issues/351Add function to clear history and delete single messages locally2023-08-20T15:54:59ZAl DeAdd function to clear history and delete single messages locallyAt a point you may want to get locally rid of your old messages. (For example, if you sent insane big messages to yourself and the UI does not respond very much any more. :) )
It would be convenient to clear the DB and optionally to als...At a point you may want to get locally rid of your old messages. (For example, if you sent insane big messages to yourself and the UI does not respond very much any more. :) )
It would be convenient to clear the DB and optionally to also remove the received and sent files.1.0https://invent.kde.org/network/kaidan/-/issues/356Add XEP-0393: Message Styling (maybe using QTextDocument's markdown support)2022-09-11T22:29:11ZAl DeAdd XEP-0393: Message Styling (maybe using QTextDocument's markdown support)[XEP-0393: Message Styling](https://xmpp.org/extensions/xep-0393.html) seems to be more or less like markdown. Implementing this should also fix things like bracket parsing what the issue was initially meant for (see below).
---
URL no...[XEP-0393: Message Styling](https://xmpp.org/extensions/xep-0393.html) seems to be more or less like markdown. Implementing this should also fix things like bracket parsing what the issue was initially meant for (see below).
---
URL not parsed correctly if in brackets () []
An URL is not detected if it's in brackets:
* `[https://www.kaidan.im/]`
* `(https://www.kaidan.im/)`https://invent.kde.org/network/kaidan/-/issues/361Heads-up notification is not displayed2020-09-20T14:57:46ZMelvin Keskinmelvo@olomono.deHeads-up notification is not displayedNo heads-up notification (popup at the top of the screen) is shown when a message arrives.
That behavior was tested on Android 6.0 and 8.1 (with activated option *Make sound and pop up on screen*).No heads-up notification (popup at the top of the screen) is shown when a message arrives.
That behavior was tested on Android 6.0 and 8.1 (with activated option *Make sound and pop up on screen*).https://invent.kde.org/network/kaidan/-/issues/362Token-based authentication2023-03-06T13:00:07ZLinus JahnToken-based authentication### The issues with password-based auth
Using a password is not that nice:
* You can't identify your devices -> you can't list logged in devices
* You can't kick/log out other devices
* The user needs to remember the password somehow...### The issues with password-based auth
Using a password is not that nice:
* You can't identify your devices -> you can't list logged in devices
* You can't kick/log out other devices
* The user needs to remember the password somehow or the password needs to be visible in the App.
* Remembering the password isn't always a good option: Many people forget the password and get locked out of their account.
* Making the password visible isn't a good idea either, others getting your phone in their hands can easily look at your password -- This is not very privacy-aware.
* -> You could use randomly generated passwords to avoid privacy-loss. However, you can never be sure that the password of an account is randomly generated.
* When the password is changed, all other devices need to log in again.
### Requirements for such a token-based auth
* Devices using password-based authentication and devices using token-based auth need to work in parallel with one account.
* All currently active tokens need to be visible to clients
* Maybe privileges for tokens
* A client only having access using token-based auth should be able to give access to another device.
* Generating a new temporary token for the device
* Changing the accounts password and transmitting that
* Time limitations
* devices that are offline for more than e.g. 90 days should be kicked
* devices renew or replace their token by logging in or a special command
### Solutions?
To solve this, we probably need changes to the standards / a new XEP. Possible solutions:
* OAUTH2?
* There's already something for OAUTH in XMPP
* Is listing devices/tokens possible? => Do we need a XEP for that?
* There was a proto XEP about tokens?
* Could that be an option?
---
UPDATE: Solution seems to be FAST with SASL 2 (https://xmpp.org/extensions/inbox/xep-fast.html, https://xmpp.org/extensions/xep-0388.html)2.0https://invent.kde.org/network/kaidan/-/issues/364Show avatars in notifications2020-09-20T14:54:06ZRobert MaerkischShow avatars in notifications2.0https://invent.kde.org/network/kaidan/-/issues/366Fix contact search bar height2022-06-07T09:17:14ZRobert MaerkischFix contact search bar heightIn Android the search bar is to small to fit the characters in height.In Android the search bar is to small to fit the characters in height.1.0https://invent.kde.org/network/kaidan/-/issues/368android: Request permissions dynamically2020-09-20T15:08:17ZLinus Jahnandroid: Request permissions dynamicallyPermissions can be requested dynamically using `QtAndroid::requestPermissions()`. This behaviour is preferred for more transparency to the user and it will be required for `QStandardPaths` to work with API 23 or later (Android 6.0).
htt...Permissions can be requested dynamically using `QtAndroid::requestPermissions()`. This behaviour is preferred for more transparency to the user and it will be required for `QStandardPaths` to work with API 23 or later (Android 6.0).
https://doc.qt.io/qt-5/qtandroid.html#requestPermissions1.0https://invent.kde.org/network/kaidan/-/issues/372Bluetooth Keyboard in registration wizard on Android2021-07-24T05:56:02ZOliver BormBluetooth Keyboard in registration wizard on AndroidDuring the registration wizard in Android the external Bluetooth keyboard is not working properly. The cursor always switches back to the beginning.
After registration, the BT keyboard works like expected in the normal messaging.
OT: t...During the registration wizard in Android the external Bluetooth keyboard is not working properly. The cursor always switches back to the beginning.
After registration, the BT keyboard works like expected in the normal messaging.
OT: the registration wizard is in my understanding to complicated, as it involves to much clicks to the right. Additionally, also the Nickname is asked first, while as the username comes last, but is more important. Hence, I suggest just to use one page, where a new user types in it's username and optes for a server. Once, the registration is successful, a nickname (as well as avatar) can still be chosen.1.0https://invent.kde.org/network/kaidan/-/issues/383Make it possible to use Ctrl+V for pasting a file2021-01-15T17:18:42ZMelvin Keskinmelvo@olomono.deMake it possible to use Ctrl+V for pasting a fileThe following discussion from !613 should be addressed:
@jbbgameich started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/613#note_155650): (+5 comments)
> The more important thing to fix would be the key combin...The following discussion from !613 should be addressed:
@jbbgameich started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/613#note_155650): (+5 comments)
> The more important thing to fix would be the key combination, Ctrl + Shift + V, but according to other KDE People that needs some hacks in the TextField.1.0https://invent.kde.org/network/kaidan/-/issues/385Implement File Sharing Notifications2021-01-08T12:05:17ZMelvin Keskinmelvo@olomono.deImplement File Sharing NotificationsThe following discussion from !645 should be addressed:
- [ ] @melvo started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/645#note_163300): (+4 comments)
> It would be great to have chat state notification...The following discussion from !645 should be addressed:
- [ ] @melvo started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/645#note_163300): (+4 comments)
> It would be great to have chat state notifications for recording an audio / video message or choosing a file as well. The word `typing` would be insufficient then. My suggestion is to use `composing` instead:
> ```suggestion:-0+0
> return tr("%1 is composing").arg(displayName);
> ```
It should be accepted as an Experimental XEP first but it is in my opinion not obligatory.
It must be implemented in QXmpp as well.https://invent.kde.org/network/kaidan/-/issues/388Use consistent wording for being online / connected to the server and offline...2022-10-03T13:45:34ZMelvin Keskinmelvo@olomono.deUse consistent wording for being online / connected to the server and offline / disconnected from the serverThe following discussion from !645 should be addressed:
- [ ] @lnj started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/645#note_170075): (+3 comments)
> ```suggestion:-0+0
> return tr("%1 is online"...The following discussion from !645 should be addressed:
- [ ] @lnj started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/645#note_170075): (+3 comments)
> ```suggestion:-0+0
> return tr("%1 is online").arg(displayName);
> ```
> I'd rather like to use "online", because it's simpler / sounds more modern and it's how everyone else does it. We can rename the "online devices" list to "connected devices", so that's not confusing anyone.
We should discuss which words to use for those terms.https://invent.kde.org/network/kaidan/-/issues/392Kaidan for iOS (iDan)2021-02-24T19:50:20ZLinus JahnKaidan for iOS (iDan)Sub tasks:
- [ ] Notifications #313
- [ ] Licensing #281
Building:
Currently we're using https://github.com/leetal/ios-cmake, the new hot shit seems to be https://github.com/OlivierLDff/QtIosCMake though. However ideally we wouldn't ...Sub tasks:
- [ ] Notifications #313
- [ ] Licensing #281
Building:
Currently we're using https://github.com/leetal/ios-cmake, the new hot shit seems to be https://github.com/OlivierLDff/QtIosCMake though. However ideally we wouldn't need any additional toolchain with Qt 6.
There's https://bugreports.qt.io/browse/QTCREATORBUG-23574 about QtCreator and its templates. If I understand it right building with CMake is actually already possible out of the box with some extra variables for the macos bundle id, version and stuff like that. So probably the best idea currently is to wait for KF6 and the missing Qt add-on modules being added in Qt 6.1/6.2 (Multimedia, Positioning and Location).https://invent.kde.org/network/kaidan/-/issues/394High CPU and memory usage2022-09-12T10:08:08ZDaniel NovomeskýHigh CPU and memory usageHello,
I tried Kaidan 0.8.0 on Gentoo Linux.
I sent few [AVIF](https://github.com/AOMediaCodec/av1-avif/tree/master/testFiles) pictures and [JXL](https://github.com/libjxl/conformance/tree/master/testcases) pictures. I was happy that K...Hello,
I tried Kaidan 0.8.0 on Gentoo Linux.
I sent few [AVIF](https://github.com/AOMediaCodec/av1-avif/tree/master/testFiles) pictures and [JXL](https://github.com/libjxl/conformance/tree/master/testcases) pictures. I was happy that Kaidan showed preview of the pictures sent/received in these new formats.
However, Kaidan started to use several GBs of memory and CPU utilization was very high. Several GBs of swap were allocated too. Computer got almost unusable.
AVIF files can be opened via plug-in from kimageformats (my contribution).
JXL file were opened via my https://github.com/novomesk/qt-jpegxl-image-plugin/
Do you have an idea how to investigate the problem and to find where the problem is?https://invent.kde.org/network/kaidan/-/issues/399Sending messages: 'from' attribute must be set to the user's full JID or be e...2022-01-09T15:40:41ZGianluca PetrilloSending messages: 'from' attribute must be set to the user's full JID or be emptyI have just installed and tried Kaidan 0.8.0 (KDE under Gentoo Linux).
I set up my account with Google (`gmail.com`), and I am trying to communicate with `myfriend` who has another Google account.
From what I understand, Kaidan is able t...I have just installed and tried Kaidan 0.8.0 (KDE under Gentoo Linux).
I set up my account with Google (`gmail.com`), and I am trying to communicate with `myfriend` who has another Google account.
From what I understand, Kaidan is able to communicate with the server and retrieve my remote contact list.
But when I try to send a message to `myfriend`, I see in the console output this reply:
```
[client] [outgoing] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<message id="deadbeef-cafe-feed-0123-456789ABCDEF" to="myfriend@gmail.com" from="myself@gmail.com" type="chat">
<body>Testing a new client (3)</body>
<n1:delay xmlns:n1="urn:xmpp:delay" stamp="2021-09-01T23:55:18.831Z"/>
<n2:request xmlns:n2="urn:xmpp:receipts"/>
<n3:origin-id xmlns:n3="urn:xmpp:sid:0" id="deadbeef-cafe-feed-0123-456789ABCDEF"/>
</message>
[client] [incoming] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<message id="deadbeef-cafe-feed-0123-456789ABCDEF" to="myself@gmail.com" from="myfriend@gmail.com" type="error">
<body>Testing a new client (3)</body>
<n1:delay xmlns:n1="urn:xmpp:delay" stamp="2021-09-01T23:55:18.831Z"/>
<n2:request xmlns:n2="urn:xmpp:receipts"/>
<n3:origin-id xmlns:n3="urn:xmpp:sid:0" id="deadbeef-cafe-feed-0123-456789ABCDEF"/>
<error code="400" type="modify">
<n4:bad-request xmlns:n4="urn:ietf:params:xml:ns:xmpp-stanzas"/>
<n5:text xmlns:n5="urn:ietf:params:xml:ns:xmpp-stanzas">If set, the 'from' attribute must be set to the user's full JID.</n5:text>
</error>
</message>
```
I don't know anything of Jabber protocol (nor whatever Google is using in its place), but given that I see in the same log:
```
[client] [outgoing] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<iq id="qxmpp4" type="set">
<n1:bind xmlns:n1="urn:ietf:params:xml:ns:xmpp-bind">
<n1:resource>Kaidan.ghFv</n1:resource>
</n1:bind>
</iq>
[client] [incoming] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<iq id="qxmpp4" type="result">
<n1:bind xmlns:n1="urn:ietf:params:xml:ns:xmpp-bind">
<n1:jid>myself@gmail.com/Kaidan.ghF62D8FA17</n1:jid>
</n1:bind>
</iq>
```
I am tempted to believe that the server was expecting `from="myself@gmail.com/Kaidan.ghF62D8FA17"` instead of `from="myfriend@gmail.com"`.
Any comment or suggestion? is it an issue with Kaidan, with QXmpp, with some non-standard protocol the server requires, with me?
If this is a real issue, is there any chance to solve it?https://invent.kde.org/network/kaidan/-/issues/407[Feature Request] Display how long a contact has been Idle/online/offline for.2022-10-03T13:00:27Zjake g[Feature Request] Display how long a contact has been Idle/online/offline for.Display how long a contact has been Idle/online/offline
Many applications do this, some just display online/offline status, but show additional info on mouseover hover.
In pidgin if you mouse over a contact in your list you can see exa...Display how long a contact has been Idle/online/offline
Many applications do this, some just display online/offline status, but show additional info on mouseover hover.
In pidgin if you mouse over a contact in your list you can see exactly how long they have been away for.https://invent.kde.org/network/kaidan/-/issues/409[Feature Request] Option to specify max age for history2022-10-03T13:00:22Zjake g[Feature Request] Option to specify max age for historyMany chat applications you can turn storing history on or off.
I would prefer to have the history, but anything older than 72 hours is deleted.
The reason for this is if my computer or phone is stolen.
I would prefer that there is not 2...Many chat applications you can turn storing history on or off.
I would prefer to have the history, but anything older than 72 hours is deleted.
The reason for this is if my computer or phone is stolen.
I would prefer that there is not 2 years of chat history just sitting there on the device.https://invent.kde.org/network/kaidan/-/issues/415Failed to connect when no_proxy has a dot-prefixed entry2022-09-28T10:19:52ZLuiz Angelo Daros de LucaFailed to connect when no_proxy has a dot-prefixed entryHello,
I have http(s)_proxy and no_proxy defined:
```
no_proxy="localhost, 127.0.0.1, mydomain.com, .mydomain.com"
http_proxy="http://proxy.mydomain.com:8080"
https_proxy="http://proxy.mydomain.com:8080"
```
With my xmpp server at jab...Hello,
I have http(s)_proxy and no_proxy defined:
```
no_proxy="localhost, 127.0.0.1, mydomain.com, .mydomain.com"
http_proxy="http://proxy.mydomain.com:8080"
https_proxy="http://proxy.mydomain.com:8080"
```
With my xmpp server at jabber.mydomain.com (with the correct SRV entries pointing '@mydomain.com' to jabber.mydomain.com)
In this situation, the kaidan 0.8.0 connection fails with:
[client] Disconnected: QXmppClient::SocketError
It only works if I remove the ".mydomain.com" entry.
It should, at least, not fail.
**Update**: changed mydomain,com to mydomain.com. It was a typo while writing this report.https://invent.kde.org/network/kaidan/-/issues/416Next iteration of thread and class architecture2022-09-24T10:47:29ZLinus JahnNext iteration of thread and class architectureThese are some of my thoughts about the current state of the thread and class architecture in Kaidan.
I'm sharing them with you
### 1 What has changed recently / our new tools
* **1.1** QXmpp offers async APIs with QFutures
* **1.2** ...These are some of my thoughts about the current state of the thread and class architecture in Kaidan.
I'm sharing them with you
### 1 What has changed recently / our new tools
* **1.1** QXmpp offers async APIs with QFutures
* **1.2** Signals have been replaced by QFutures in many places in QXmpp
* Kaidan could also start to use QFutures to replace some signals
* **1.3** We can easily execute lambdas on another thread with `runOnThread()` or the cross-thread `await()`
* **1.4** We started to use the watcher idiom
### 2 Issues with the current architecture
* **2.1** We can't handle signals from objects from the XMPP thread (MessageHandler, RosterManager, etc.) from QML.
* In QML `Connections` does not work on objects from different threads
* => we need additional wrapper classes on the main thread
* => there are many classes for one purpose: e.g. QXmppRosterManager, RosterManager, RosterController, RosterModels (if we want to have multiple independent views)
* **2.2** We need to create `*Requested()` signals to access the XMPP thread objects (avoidable in C++, required for QML)
* **2.3** We need many additonal **thread-safe** "caches" classes (e.g. TransferCache or ServerFeaturesCache)
* some could be part of an existing controller class
* it would be nice to avoid having to deal with thread-safety at all (e.g. no mutexes)
* **2.4** Too many thread interactions
* in some places the logic is complicated just because of the thread interaction
* sometimes values need to be cached somewhere on the main thread and need to be updated via signals just because the Manager class runs on another thread
* sometimes the code is not "linear" because of jumps with `*Requested()` signals back and forth between threads,
as a result the code is hard to read
* **2.5** MessageModel and RosterModel act as controllers not just as data models
* it's not possible to create two message/roster models to view two different chats
* not well structured: especially the message model does many things unrelated to just viewing the messages, e.g. it also does chat markers, chat states and OMEMO management
=> the code is not encapsulated => large maintenance effort
* **2.6** In some places there still are manual `Connections` in QML where a watcher idiom would be much better
Issues I don't know how to solve them yet:
* **2.7** the database/model situation is very complicated
* insert/delete/update is "duplicated" in the models and in the db
* we had issues because code was executed in the model before it was in the database (or something like that), see !822
* it's much faster to use cached data, but as a result of that there is no single place of truth
<!-- * there's no central place of truth -->
### 3 Ideas for improvements
* **3.1** Replace Kaidan managers (RosterManager, MessageHandler, …) on the XMPP thread with controllers on the main thread
* the QXmppClient and its extensions stay on the XMPP thread
* the controllers use `runOnThread`, cross-thread `await` and signal connections to communicate with the QXmpp client extensions
* QML never accesses objects from another thread (so no additional wrapping classes are needed) (solves **2.1**)
* all of the controllers/managers/models/db classes live on the same thread (solves **2.4**)
* only the QXmpp client extensions live on the XMPP thread
* note: the DB classes internally run lambda functions on the database thread, but live on the main thread
* thread safety is no issue anymore (solves **2.3**)
* no mutexes are needed when communicating with the QXmpp client extensions (because of QFutures and signals)
* no thread-safe "caches" are required anymore, the existing (or additional) controllers can be used directly
* finally no `*Requested()` signals anymore (solves **2.2**)
* all models and controllers run on the same thread
* QXmpp client extension communication is done by using await, runOnThread and "normal" signal connections
* **3.2** Splitting up RosterModel and MessageModel (solves **2.5**)
* RosterController and MessageController should handle everything that is not related to presenting the data via QAbstractListModel
* the models should be creatable from QML
* the models should attach to the controllers to receive updates
* **3.3** About **2.6**: Just use new watchers and replace signals, e.g. for interaction with the TransferCache
### 4 Questions
* **4.1** How *exactly* do the controllers handle multiple accounts (and so multiple clients and managers)?
* definitely solvable
* **4.2** How exactly do we communicate the updates from the Roster/MessageController between multiple models?
* **4.3** Are there issues/disadvantages with **3** (and especially **3.1**)?
* **4.4** How can we do a smooth transition without touching too much code?
* Yes, we can do **3.1** in small(er) steps:
* We can start with adjusting parts of the code, e.g. replacing the RegistrationManager, the UploadManager or the OmemoManager with controllers
* MessageHandler and RosterManager are bigger tasks, but they still can be done independently
* …https://invent.kde.org/network/kaidan/-/issues/418Make MediaUtils::mimeDB thread_local static, use it everywhere2022-10-02T20:23:46ZLinus JahnMake MediaUtils::mimeDB thread_local static, use it everywhere1. I think we're currently using that mime db from multiple threads which is an issue.
2. There are places where we stil create a temp. QMimeDatabase(); use the one from media utils1. I think we're currently using that mime db from multiple threads which is an issue.
2. There are places where we stil create a temp. QMimeDatabase(); use the one from media utilshttps://invent.kde.org/network/kaidan/-/issues/419RosterItem: Use spaceship operator2022-10-11T18:00:47ZLinus JahnRosterItem: Use spaceship operatorReplace different implementations of `<`, `>`, `<=`, `>=`, `==` and `!=` with the C++20 `<=>` spaceship operator.Replace different implementations of `<`, `>`, `<=`, `>=`, `==` and `!=` with the C++20 `<=>` spaceship operator.https://invent.kde.org/network/kaidan/-/issues/420Follow-up from "Send encrypted messages for inactive chats"2022-10-13T16:57:35ZLinus JahnFollow-up from "Send encrypted messages for inactive chats"The following discussion from !852 should be addressed:
- [ ] @lnj started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/852#note_539676):
Re: `MessageHandler::send()`
```cpp
QFutureInterface<QXmpp:...The following discussion from !852 should be addressed:
- [ ] @lnj started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/852#note_539676):
Re: `MessageHandler::send()`
```cpp
QFutureInterface<QXmpp::SendResult> interface(QFutureInterfaceBase::Started);
const auto recipientJid = message.to();
auto sendEncrypted = [=, this]() mutable {
await(m_client->send(std::move(message)), this, [=](QXmpp::SendResult result) mutable {
reportFinishedResult(interface, result);
});
};
auto sendUnencrypted = [=, this]() mutable {
await(m_client->sendUnencrypted(std::move(message)), this, [=](QXmpp::SendResult result) mutable {
reportFinishedResult(interface, result);
});
};
// If the message is sent for the current chat, its information is used to determine whether to
// send encrypted.
// Otherwise, that information is retrieved from the database.
runOnThread(MessageModel::instance(), [accountJid = AccountManager::instance()->jid(), recipientJid]() {
return MessageModel::instance()->isChatCurrentChat(accountJid, recipientJid);
}, this, [=, this](bool isChatCurrentChat) mutable {
if (isChatCurrentChat) {
runOnThread(MessageModel::instance(), []() {
return MessageModel::instance()->isOmemoEncryptionEnabled();
}, this, [=](bool isOmemoEncryptionEnabled) mutable {
if (isOmemoEncryptionEnabled) {
sendEncrypted();
} else {
sendUnencrypted();
}
});
} else {
runOnThread(RosterModel::instance(), [accountJid = AccountManager::instance()->jid(), recipientJid]() {
return RosterModel::instance()->itemEncryption(accountJid, recipientJid).value_or(Encryption::NoEncryption);
}, this, [=, this](Encryption::Enum activeEncryption) mutable {
if (activeEncryption == Encryption::Omemo2) {
auto future = m_clientWorker->omemoManager()->hasUsableDevices({ recipientJid });
await(future, this, [=](bool hasUsableDevices) mutable {
const auto isOmemoEncryptionEnabled = activeEncryption == Encryption::Omemo2 && hasUsableDevices;
if (isOmemoEncryptionEnabled) {
sendEncrypted();
} else {
sendUnencrypted();
}
});
} else {
sendUnencrypted();
}
});
}
});
return interface.future();
```
> This is complex and has too many thread jumps and generates another QFuture just for sending a simple message.
>
> Ideas from me how to fix this:
> * cache the usable devices property
> * use a parameter here and decide whether to encrypt when calling this (e.g. already in the MessageModel, it seems to be much easier there)
Solution would be to use a proper CacheMelvin Keskinmelvo@olomono.deMelvin Keskinmelvo@olomono.dehttps://invent.kde.org/network/kaidan/-/issues/421Use MessageComposition for all kinds of messages from QML2023-10-07T11:44:09ZLinus JahnUse MessageComposition for all kinds of messages from QML`MessageComposition` should probably contain a full `Message` object.
- [ ] Message corrections
The current message from the MessageModel could be fully loaded into the `MessageComposition`, be edited in there and then resent. This w...`MessageComposition` should probably contain a full `Message` object.
- [ ] Message corrections
The current message from the MessageModel could be fully loaded into the `MessageComposition`, be edited in there and then resent. This would solve the issue that we currently don't resend the full edited message (I think currently we only send the new body).
Corrections are currently done through
1. `MessageModel::correctMessage(replaceId, body, spoilerHint)`
2. `MessageModel::sendCorrectedMessageRequested()`
3. `MessageHandler::sendCorrectedMessage(Message msg)`
and should be done via properties of `MessageComposition` & `MessageComposition::send()`.
- [ ] !1067: send "normal" messages without `MessageHandler::sendMessage(to, body, isSpoiler, spoilerHint)`https://invent.kde.org/network/kaidan/-/issues/424Remove database column 'unreadMessages' in table 'roster'2023-07-04T09:37:25ZLinus JahnRemove database column 'unreadMessages' in table 'roster'The following discussion from !892 should be addressed:
- [ ] @lnj started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/892#note_544592):
> isn't that also unused?The following discussion from !892 should be addressed:
- [ ] @lnj started a [discussion](https://invent.kde.org/network/kaidan/-/merge_requests/892#note_544592):
> isn't that also unused?Bhavy AiriBhavy Airihttps://invent.kde.org/network/kaidan/-/issues/428Clear tasks after changing account2022-10-30T13:43:14ZLinus JahnClear tasks after changing accountJBB recently deleted his account by doing the following steps.
In that case "account B" was a trash account and "account A" was the main account. Fortunately everything could be restored from server backups.
1. logging in with account B...JBB recently deleted his account by doing the following steps.
In that case "account B" was a trash account and "account A" was the main account. Fortunately everything could be restored from server backups.
1. logging in with account B
2. losing the connection to the server
3. pressing delete account on server in kaidan
4. kaidan caches the task until the next successful connection
5. changing account and logging in with account A
6. kaidan now sends the cached "delete account" to the server
7. account A is deleted
I think this is caused by the tasks + caching in Kaidan.
I'm not 100% sure, but I think QXmpp checks whether the account JID has changed before resending packets.https://invent.kde.org/network/kaidan/-/issues/432[Storyline] Place buttons at the side on wide displays or remove graphics2022-11-27T17:17:20ZSJ SJ[Storyline] Place buttons at the side on wide displays or remove graphicsThis is a UX issue.
I was overwhelmed by the graphics of the introduction/storyline set of registration dialog.
I think they are too big and confusing on a wider display.
I suggest (by priority):
- to remove them completely
- to place ...This is a UX issue.
I was overwhelmed by the graphics of the introduction/storyline set of registration dialog.
I think they are too big and confusing on a wider display.
I suggest (by priority):
- to remove them completely
- to place the buttons/grahics side by side
![image](/uploads/033fb3f65aa81f7ef7526095ae64ce75/image.png)
![image](/uploads/a4157b6b1900c14faae092111e3af523/image.png)
P.S.
- These graphics look pretty nice on narrow displays, like postmarketOS/Libre/PinePhone handheld devices,
- I'm not a UX expert, this issue describes what I've felt when I was exposed to this intro set for the first time.https://invent.kde.org/network/kaidan/-/issues/436Ability to change background image2023-03-06T12:55:32ZTibor CsötönyiAbility to change background imageAs a user, I would like to have the ability to change the chat background image.
Until now, the default background is a collection of svg images. It would be great to have the possibility to use a custom background image, e.g., via the a...As a user, I would like to have the ability to change the chat background image.
Until now, the default background is a collection of svg images. It would be great to have the possibility to use a custom background image, e.g., via the app / profile / account settings.https://invent.kde.org/network/kaidan/-/issues/437Only allow 1:1 aspect ratio for profile pics in ChangeAvatar2023-02-18T18:01:22ZLinus JahnOnly allow 1:1 aspect ratio for profile pics in ChangeAvatar0.10: Groupchats (MIX)Tibor CsötönyiTibor Csötönyihttps://invent.kde.org/network/kaidan/-/issues/439Release as part of KDE Gear2023-02-24T13:26:06ZPlata HillRelease as part of KDE Gearwould reduce overheadwould reduce overheadhttps://invent.kde.org/network/kaidan/-/issues/440KDE review2024-02-16T18:47:05ZLinus JahnKDE review**KDE Review checklist**
- [x] If from outwith KDE, have completed [Incubator](https://community.kde.org/Incubator)
- [x] The [REUSE Specification - Version 3.0](https://reuse.software/spec/) shall be applied when stating licenses and w...**KDE Review checklist**
- [x] If from outwith KDE, have completed [Incubator](https://community.kde.org/Incubator)
- [x] The [REUSE Specification - Version 3.0](https://reuse.software/spec/) shall be applied when stating licenses and when adding license files to a project. Each source file either must contain SPDX identifiers or licence headers to state under which terms the software may be used, modified and redistributed. See [Licensing Policy](https://community.kde.org/Policies/Licensing_Policy#License_Statements)
- [x] Passing CI job for Reuse linting
- [X] A [Messages.sh file](https://techbase.kde.org/Development/Tutorials/Localization/i18n_Build_Systems#Writing_a_Messages.sh_script) which extracts all the i18n() translations
- [X] A metainfo.xml file (previously appdata.xml) with AppStream data [AppStream Guidelines](https://community.kde.org/Guidelines_and_HOWTOs/AppStream )
- [ ] A screenshot in [product-screenshots](https://invent.kde.org/websites/product-screenshots)
- [X] Check the code with some sanity tools like [clazy](https://kde.org/applications/development/org.kde.clazy) or [clang-tidy](https://clang.llvm.org/extra/clang-tidy), if not already done as part of CI runs.
- [ ] Documentation appropriate to the project: API documentation, user documentation (including docbook or other format documented by the Documentation team)
- [ ] A [bugs.kde.org](https://bugs.kde.org) product
- [ ] Passing [Gitlab CI build jobs](https://mail.kde.org/pipermail/kde-devel/2021-September/000717.html)
- [ ] Passing [KDE neon](http://build.neon.kde.org/) build
- [ ] App packages in [Flatpak](https://develop.kde.org/docs/packaging/flatpak/), [Snap](https://community.kde.org/Guidelines_and_HOWTOs/Snap), [AppImages and Windows](https://community.kde.org/Craft) etc as appropriatehttps://invent.kde.org/network/kaidan/-/issues/445Windows binaries2023-10-28T14:50:15ZMichel Le BihanWindows binariesHello,
Where can I find Windows binaries or how can I build Kaindan for Windows?Hello,
Where can I find Windows binaries or how can I build Kaindan for Windows?https://invent.kde.org/network/kaidan/-/issues/446Adapt public group chat search to MIX once supported2023-03-07T19:16:44ZMelvin Keskinmelvo@olomono.deAdapt public group chat search to MIX once supportedFilipe AzevedoFilipe Azevedohttps://invent.kde.org/network/kaidan/-/issues/447Unread messages count show wrong number of unread messages2023-08-19T13:55:40ZFilipe AzevedoUnread messages count show wrong number of unread messagesWhen starting with a clean DB, upon opening a chat with a contact, MAM would download history.
When it is retrieved then a badge of unread count is shown both in the roster view and in the chat view when scrolling.
This number is wrong a...When starting with a clean DB, upon opening a chat with a contact, MAM would download history.
When it is retrieved then a badge of unread count is shown both in the roster view and in the chat view when scrolling.
This number is wrong and is even negative.
Also, it never disappear, even after restarting the applicationhttps://invent.kde.org/network/kaidan/-/issues/451Online/Offline status display2024-02-19T16:11:50ZMelvin Keskinmelvo@olomono.deOnline/Offline status displayI would like to have a discussion about whether to display the online/offline status of contacts.
If at least one device of a contact is connected to the server, the user is seen as *online*.
Otherwise, the user is *offline*.
There are...I would like to have a discussion about whether to display the online/offline status of contacts.
If at least one device of a contact is connected to the server, the user is seen as *online*.
Otherwise, the user is *offline*.
There are different opinions and use cases needed to be considered.
The intention of displaying the online status is to influence a sender's behavior.
In which way depends on the status, the sender and the relation between the sender and the recipient.
The online/offline status could be shown in
1. the contact list (`RosterPage`),
2. the conversation (`ChatPage`) or
3. in the contact details (`ContactDetailsHeader` or `ContactDetailsContent`).
Here are some questions that should be discussed:
1. Should the online/offline status be displayed at all? If so, why (mention use cases) where and how should it be displayed?
2. Should an extended status (such as *Do not disturb*) be displayed? If so, why (mention use cases) where and how should it be displayed?
Please feel free to add your ideas here!https://invent.kde.org/network/kaidan/-/issues/452Register Manually text distorted2024-01-27T16:42:50ZCieski IzabRegister Manually text distortedCurrent Fedora KDE, installed with flatpak. Very first startup of Kaidan.
![Screenshot_20230511_231255](/uploads/a71e93524c53643b5ec83c8131d4d166/Screenshot_20230511_231255.png)Current Fedora KDE, installed with flatpak. Very first startup of Kaidan.
![Screenshot_20230511_231255](/uploads/a71e93524c53643b5ec83c8131d4d166/Screenshot_20230511_231255.png)https://invent.kde.org/network/kaidan/-/issues/455Android support (including F-Droid build)2024-01-06T09:54:25Zjake gAndroid support (including F-Droid build)This page https://www.kaidan.im/download/ lists F-Droid as a source to get Kaidan on your phone, I added the nightly repo, but fdroid has no results when I search for kaidan.This page https://www.kaidan.im/download/ lists F-Droid as a source to get Kaidan on your phone, I added the nightly repo, but fdroid has no results when I search for kaidan.https://invent.kde.org/network/kaidan/-/issues/459Known issues2023-09-16T10:04:41ZTibor CsötönyiKnown issues# Related to displaying / refreshing last message or last draft
* [x] After correcting the last sent message, it's not updated in the related roster item. However, when creating a message draft afterwards, switching chats, then going ba...# Related to displaying / refreshing last message or last draft
* [x] After correcting the last sent message, it's not updated in the related roster item. However, when creating a message draft afterwards, switching chats, then going back, removing the draft and switching chats again, the corrected message is displayed correctly in the roster. The same issue appears when receiving a corrected message. (Solved by !1048)
![grafik.png](/uploads/395326bc989797227768bcce3042c1a1/grafik.png){width="574" height="379"}
* [x] When deleting the last message of a chat, the message date in the roster isn't being updated correctly (Solved by !1048 and !1056)
## Text correction
* [x] When starting to correct a message, then switching to another chat, the message correction will be saved as draft. When going back and sending the draft afterwards, it will be sent as a **new** message instead of a message correction. (Solved by !1052)
* [x] It's not possible to receive more than one text correction by one's chat partner. After the first correction, follow-ups aren't being processed anymore. (Solved by !1048)
# Other issues
* writing `:)` results in the emoji picker being kept popped up but not showing any emoji
* sending files unencrypted (Kaidan -\> Gajim) doesn't work (legacy file sending XEP is not yet implemented)
* after deleting the database, multiple "... has read up to this point" messages pop up (known but reason unknown):
![has read up.jpg](/uploads/5eb27c2bc160f6eb54dab3e787e01cd7/has_read_up.jpg){width="598" height="466"}Tibor CsötönyiTibor Csötönyihttps://invent.kde.org/network/kaidan/-/issues/464Account Migration (moving to a new account on the same or another server)2024-01-27T16:40:50ZMelvin Keskinmelvo@olomono.deAccount Migration (moving to a new account on the same or another server)Kaidan should provide a mechanism to migrate a user's account.
That means, it should be possible to move all data from an old account to a new one.
At best, neither the user nor the contacts should notice more than a new chat address (JI...Kaidan should provide a mechanism to migrate a user's account.
That means, it should be possible to move all data from an old account to a new one.
At best, neither the user nor the contacts should notice more than a new chat address (JID).
Especially, as we have seen providers shutting down their services while new providers are starting their XMPP services in the past, account migration via the client would be handy for users.
The tool https://migrate.modernxmpp.org migrates an account via a JavaScript page. The goal is to have such a feature directly within Kaidan to make the process even simpler.
We strive to make the migration as easy as possible.
There are other use cases as well:
* A server does not support what a user needs.
* A server is included in a spam blocklist.
* A user wants to set up an own server or needs to move to a public one.
QXmpp should be involved in order to even migrate data that clients such as Kaidan do not handle yet. E.g., [bookmarks](https://xmpp.org/extensions/xep-0402.html) for [XEP-0045: Multi-User Chat (MUC)](https://xmpp.org/extensions/xep-0045.html) since MIX (Kaidan's upcoming group chat implementation) does not need/use bookmarks.
# Account Creation and Data Migration
1. Create manager in QXmpp called `QXmppAccountMigrationManager` for requesting all server-side data from the old account and submitting them to the new one while using the existing managers (e.g., QXmppRosterManager, QXmppVCardManager etc.)
1. Add option *Migrate account data* to account details
1. Export data via `QXmppAccountMigrationManager::exportAccountData()` and cache it to submit it later
1. Create new account via Kaidan's registration dialog (manual/automatic registration)
1. Apply the account settings (set via the account details) of the old account to the new one
1. Ask the user whether to remove the old account only from Kaidan or to delete it from the server as well
1. Set the new JID via the `ClientWorker`
1. Import data to new account via `QXmppAccountMigrationManager::importAccountData()`
1. Tell user what has been migrated and what not
## Data to Migrate
Here are some data types listed that could be migrated.
- [ ] [Roster](https://www.rfc-editor.org/rfc/rfc6121#section-2) including recreation of presence subscriptions
- [ ] [vCard](https://xmpp.org/extensions/xep-0054.html) including avatar and nickname
- [ ] [Bookmarks](https://xmpp.org/extensions/xep-0402.html)
- [ ] [PubSub](https://xmpp.org/extensions/xep-0060.html) nodes (excluding OMEMO nodes)
- [ ] Private [MIX](https://xmpp.org/extensions/xep-0369.html) channels
- [ ] Messages (maybe only client-side data or later via MAM, but how to handle the changed account JID and encrypted messages)
- [ ] Files (maybe only client-side data or later via MAM, but how to handle the changed account JID and encrypted files)
# Informing Contacts of Migration
1. Implement [XEP-0283: Moved](https://xmpp.org/extensions/xep-0283.html) in `QXmppAccountMigrationManager` (possibly as `QXmppAccountMigrationManager::informContacts()`)Filipe AzevedoFilipe Azevedohttps://invent.kde.org/network/kaidan/-/issues/469New Stateless File Sharing version with backwards compatibility2024-03-21T22:14:19ZLinus JahnNew Stateless File Sharing version with backwards compatibilityUpdate [XEP-0447: Stateless file sharing](https://xmpp.org/extensions/xep-0447.html) to v0.3.1.
- [x] QXmpp: Implement new fallback element <br/>https://github.com/qxmpp-project/qxmpp/pull/608
- [ ] Add IDs to QXmppFileShare
- [ ] Add a...Update [XEP-0447: Stateless file sharing](https://xmpp.org/extensions/xep-0447.html) to v0.3.1.
- [x] QXmpp: Implement new fallback element <br/>https://github.com/qxmpp-project/qxmpp/pull/608
- [ ] Add IDs to QXmppFileShare
- [ ] Add attached sources to QXmppMessage
- [ ] DB: Add new file IDs from XEP
- [ ] Implement attaching of new sources to files
- [x] Send extra fallback messages for old clients: !1119
Fixes/adjustments to the XEP:
- [x] XEP-0428: Change schema int types to xs:unsignedInt
<br/>https://github.com/xsf/xeps/pull/1335Linus JahnLinus Jahnhttps://invent.kde.org/network/kaidan/-/issues/470Qt6/KF6 migration2024-03-26T15:45:14ZPlata HillQt6/KF6 migrationIs there a plan for Qt6/KF6 migration? Is someone working on it already?Is there a plan for Qt6/KF6 migration? Is someone working on it already?