mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-10-31 08:13:50 +00:00
Two new extension points for third-party attachment/cloud-storage plugins (e.g. a WebDAV/Nextcloud file browser), neither of which the plugin API currently supports: - attachment-actions: a new slot rendered into every attachment's hover action row (all six render paths: beside-sender/below-header/mobile, each in its compact and expanded-popup form), with the AttachmentInfo (name, type, size, blobId, emailId) passed through extraProps. Lets a plugin offer a 'save this attachment elsewhere' action next to the existing download/preview buttons - previously the only per-attachment hook was the read-only onAttachmentDownload observer. - composer-attachment-source: a new slot rendered in the composer toolbar next to the existing composer-toolbar slot, with an onAttach(upload) callback in extraProps. Lets a plugin that has already uploaded a file to the JMAP server itself (api.jmap.uploadBlob) - e.g. a file picked from an external cloud storage browser - have it added to the current draft as a real attachment. Previously there was no way for a plugin to add an attachment to the draft at all; the closest existing mechanism (onBeforeBlobUpload's ExternalAttachmentResult) only replaces a locally picked file with body text/a link, it cannot add a brand-new attachment from an external source. Both slots follow the existing PluginSlot pattern (calendar-event-actions): render nothing when no plugin offers the slot, so this is purely additive. Motivating use case: the existing nextcloud-attachments community plugin uploads local files to Nextcloud and appends a share link to the message body - useful for large files, but there was no way for a plugin to do the inverse (attach a file that already lives in cloud storage as a real binary attachment, not a link) or to let attachment recipients save an incoming attachment back out to their own cloud storage. These two slots make both directions possible without touching plugin-store or the sandbox bridge - existing slot/extraProps plumbing (see calendar-event-actions) already supports arbitrary POJO props.