Kaidan issueshttps://invent.kde.org/network/kaidan/-/issues2024-03-26T15:45:14Zhttps://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?https://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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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.