Better handle deduped attachment download in media gallery

This commit is contained in:
Pete Walters 2026-05-20 20:44:47 -05:00 committed by GitHub
parent e7d209ee66
commit 2ea672abb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 3 deletions

View File

@ -488,8 +488,8 @@ class MediaGallery {
func reloadGalleryItem(item: MediaGalleryItem) -> MediaGalleryItem? {
let reloadedReferencedAttachment = DependenciesBridge.shared.db.read {
DependenciesBridge.shared.attachmentStore.fetchAnyReferencedAttachment(
for: item.referencedAttachment.reference.owner.id,
DependenciesBridge.shared.attachmentStore.fetchUpdatedReferencedAttachment(
for: item.referencedAttachment,
tx: $0,
)
}

View File

@ -883,7 +883,7 @@ extension MediaPageViewController: MediaItemViewControllerDelegate {
func mediaItemViewControllerDidUpdateGalleryItem(_ viewController: MediaItemViewController, item: MediaGalleryItem) {
if
let newItem = mediaGallery.reloadGalleryItem(item: item),
newItem.referencedAttachment.attachment.id == currentItem.referencedAttachment.attachment.id
newItem.referencedAttachment.reference.referenceId == currentItem.referencedAttachment.reference.referenceId
{
replaceCurrentItem(item: newItem)
}

View File

@ -243,6 +243,28 @@ public struct AttachmentStore {
return fetchReferencedAttachments(references: references, tx: tx)
}
public func fetchUpdatedReferencedAttachment(
for referencedAttachment: ReferencedAttachment,
tx: DBReadTransaction,
) -> ReferencedAttachment? {
let references = fetchReferencedAttachments(
for: referencedAttachment.reference.owner.id,
tx: tx,
)
var refreshedReference: ReferencedAttachment?
for reference in references {
if reference.reference.referenceId == referencedAttachment.reference.referenceId {
refreshedReference = reference
break
}
}
guard let refreshedReference else {
owsFailDebug("Missing attachment reference!")
return nil
}
return refreshedReference
}
public func fetchReferencedAttachmentsOwnedByMessage(
messageRowId: Int64,
tx: DBReadTransaction,