Skip to content

Conversation

@Simon-Laux
Copy link
Contributor

@Simon-Laux Simon-Laux commented Oct 30, 2025

  • remove code for partial downloads
  • remove tests for partial downloads and make a list of them so we can discuss if we need to re-add some in the new system or not
  • make download full message methods fail for now with not implemented error and comment what should happen later doesn't need to change at this time (and possibly not at all)

I kept partial_download_msg_body stock string for now, as it may be reused in the new solution. because I made the linter ignore it, I added a to do item to #7367 to check if it was used in the end.

removed partial download tests:

part of #7367

@Simon-Laux Simon-Laux force-pushed the simon/remove-partial-download-of-messages branch from 0d46626 to 81ca8c2 Compare October 30, 2025 17:30
@Simon-Laux
Copy link
Contributor Author

Simon-Laux commented Oct 30, 2025

  • run and fix python tests
    • jsonrpc
    • cffi
  • solve that it stops receiving messages (when used in desktop)

@Simon-Laux Simon-Laux mentioned this pull request Oct 31, 2025
7 tasks
info!(context, "Message already partly in DB, replacing.");
Some(msg.chat_id)

// TODO: look at this place
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

todo comment

Copy link
Contributor Author

@Simon-Laux Simon-Laux Oct 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that there may be existing message-stubs that are not downloaded yet. After updating, the "Download" button will probably become non-functional; this is fine. We should make sure that DC doesn't crash when clicking "Download".

currently I'm still asking myself whether we have to to make this sacrifice or if we can still have a last version that has an option to download old message stubs and remove it in the version after...

As of the time of writing the download logic still works, because I have only removed the partial download logic that creates the stubs so far.

my current feeling/idea is to remove it in a dedicated pr as soon as it makes problems / the implementation of the new method harder - that way this pr would also be focused on the removal of just the stub creation part of partial download.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not that big of a sacrifice:

  • download-on-demand is just an option (i.e. many people don't have it activated, since they don't change the settings)
  • this option never worked really well
  • It can already happen that you can't fully download a message, because it has been deleted on the server already.
  • The user sees that there is a failure, and can ask the sender to send the message again

It does make sense to remove only the partial-download logic in the PR here, and then remove the replace_msg_id logic in a later PR. But if there is any kind of effort in it, it's not worth it, esp. as we need pre-messages rather sooner than later for calls etc.

@Simon-Laux Simon-Laux marked this pull request as ready for review October 31, 2025 23:16
@Simon-Laux Simon-Laux marked this pull request as draft October 31, 2025 23:29
@Simon-Laux Simon-Laux changed the title remove: partial downloads remove: partial downloads - creation of the stub messages Oct 31, 2025
@Simon-Laux Simon-Laux marked this pull request as ready for review November 1, 2025 12:41
@Simon-Laux Simon-Laux force-pushed the simon/remove-partial-download-of-messages branch from 6c84e01 to 938c890 Compare November 6, 2025 13:22
@Simon-Laux Simon-Laux assigned Simon-Laux and unassigned Simon-Laux Nov 6, 2025
@Simon-Laux Simon-Laux changed the title remove: partial downloads - creation of the stub messages remove: partial downloads (remove creation of the stub messages) Nov 8, 2025
}

#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_partial_receive_imf() -> Result<()> {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest to replace this with a test which adds a partially downloaded message to the db in some hacky way (probably by adding a full message as usual and then modifying it so that it becomes a partial download) and then receives a full message (probably the same message again). This would be a backward compat test for messages received before the upgrade.

I general other tests can be changed the same way, but i suggest not to do much work here, maybe only cover the most important scenarios which may happen after upgrade.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quoting #7367:

Note that there may be existing message-stubs that are not downloaded yet. After updating, the "Download" button will probably become non-functional; this is fine. We should make sure that DC doesn't crash when clicking "Download".

I.e. there is not a lot to test here, only that clicking "Download" doesn't result in a crash (the download state can just become "failed"). This could get a test if it's not too much effort.

A test can be added rather easily in this way, probably:

  • Remove everything after the first call to receive_imf_from_inbox in this test here (on main, not on this branch here)
  • DELTACHAT_SAVE_TMP_DB=1 cargo test test_partial_receive_imf
  • sqlite3 test-account-alice.db
  • .dump
  • Copy the SQL statement inserting the partially-downloaded message. This SQL statement can be used to create an old message stub.

...but this is just to share some knowledge about what's possible. This can anyways not be done in the branch here, but in #7410

}

#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_webxdc_update_for_not_downloaded_instance() -> Result<()> {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be modified to employ message reordering instead of a partially downloaded instance

use crate::test_utils::{E2EE_INFO_MSGS, TestContext, TestContextManager};

#[test]
fn test_downloadstate_values() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why remove the test if DownloadState doesn't change yet?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right this test needs to be restored

Copy link
Collaborator

@Hocuri Hocuri left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! LGTM once all comments are addressed (i.e. either resolved them, or commented why it's not worth it / doesn't make sense)

BTW, in general, it's good to request a review from some people using the Github UI once you've finished your PR, in order to get speedier reviews

}

#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn test_partial_receive_imf() -> Result<()> {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quoting #7367:

Note that there may be existing message-stubs that are not downloaded yet. After updating, the "Download" button will probably become non-functional; this is fine. We should make sure that DC doesn't crash when clicking "Download".

I.e. there is not a lot to test here, only that clicking "Download" doesn't result in a crash (the download state can just become "failed"). This could get a test if it's not too much effort.

A test can be added rather easily in this way, probably:

  • Remove everything after the first call to receive_imf_from_inbox in this test here (on main, not on this branch here)
  • DELTACHAT_SAVE_TMP_DB=1 cargo test test_partial_receive_imf
  • sqlite3 test-account-alice.db
  • .dump
  • Copy the SQL statement inserting the partially-downloaded message. This SQL statement can be used to create an old message stub.

...but this is just to share some knowledge about what's possible. This can anyways not be done in the branch here, but in #7410

info!(context, "Message already partly in DB, replacing.");
Some(msg.chat_id)

// TODO: look at this place
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not that big of a sacrifice:

  • download-on-demand is just an option (i.e. many people don't have it activated, since they don't change the settings)
  • this option never worked really well
  • It can already happen that you can't fully download a message, because it has been deleted on the server already.
  • The user sees that there is a failure, and can ask the sender to send the message again

It does make sense to remove only the partial-download logic in the PR here, and then remove the replace_msg_id logic in a later PR. But if there is any kind of effort in it, it's not worth it, esp. as we need pre-messages rather sooner than later for calls etc.

@Simon-Laux Simon-Laux force-pushed the simon/remove-partial-download-of-messages branch from 506ecc8 to e564a9b Compare November 12, 2025 19:36
@Simon-Laux Simon-Laux force-pushed the simon/remove-partial-download-of-messages branch from e564a9b to 05a1967 Compare November 12, 2025 19:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants