Skip to content

Conversation

@mcginty
Copy link
Collaborator

@mcginty mcginty commented Dec 12, 2025

Migration

This update deprecates the previous profile photo method of setting a base64-encoded image URI within the profile metadata, in favor of using the IPFS attachment upload pipeline.

Old profile photos are still displayed as expected, but when a new profile photo is set, it will only use the new IPFS flow, so older clients will not see a photo. I can change this to do both at the same time, but that feels like it defeats the purpose a bit, and we're at the turn of a new major version here as well.

Approach

This creates a new "virtual channel" for attachment photos so that we can reuse as much of the same image attachment processing pipeline as possible.

Some things obviously couldn't be handled the same, though, so you'll notice some conditional handling of profile photo attachments that stray from the typical assumption that an attachment is associated with a message in a viewable chat room.

Fixes #2926.

Quiet will still load the old base64-inlined profile photos, but new
photos will be attached to profiles with an IPFS CID.
@mcginty mcginty force-pushed the mcginty/profile-photo-attachments branch from 3a10047 to 3befa86 Compare January 2, 2026 20:30
@mcginty mcginty marked this pull request as ready for review January 2, 2026 20:30
try {
yield all([takeEvery(usersActions.saveUserProfile.type, saveUserProfileSaga, socket)])
yield all([
takeEvery(usersActions.saveUserProfile.type, saveUserProfileSaga, socket),
Copy link
Collaborator

Choose a reason for hiding this comment

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

Claude insists that this creates nested watchers:

This creates nested watchers - every updateUserProfiles dispatch spawns a new takeEvery watcher. Should either be fork(downloadProfilePhotosSaga) once, or the inner saga should not use takeEvery.

Is this a valid issue or a false positive?

Copy link
Collaborator Author

@mcginty mcginty Jan 15, 2026

Choose a reason for hiding this comment

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

Ahhhh, after looking a bit into how this works, I think this is in fact an issue, which will cause new permanent child tasks to keep spawning with every run. Nice catch.

Copy link
Collaborator

@adrastaea adrastaea left a comment

Choose a reason for hiding this comment

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

I pushed a little update to the e2e test that fixed the failure. LGTM otherwise

@mcginty
Copy link
Collaborator Author

mcginty commented Jan 15, 2026

You're a hero @adrastaea

@adrastaea
Copy link
Collaborator

One note, please update the changelog before pushing

@mcginty mcginty merged commit efcb0d4 into develop Jan 21, 2026
41 checks passed
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.

User should be able to add large profile image

4 participants