Table of Contents
Attachments and Links
Terminology
- Attachment : Anything that can be attached to a note
- Link : Anything remote linked to in a note
- AttachmentThumbnail : The thumbnail of an attachment
Not every Link has an attachment. An attachment is created for a link when it becomes something attachable. So happens when additional information on a link's URL becomes available.
Following how it is done with Links, anything with a thumbnail in GNU social must have an attachment as only attachments can have a thumbnail.
This design prevents file and thumbnail duplication, thus saving storage.
An example of a module making use of this system is the Avatar component. It creates an attachment and uses the thumbnail route to access different avatar sizes via the AttachmentThumbnail controller.
Migrating data from v2
File to Attachment
Direct transformation:
- id=>- id
- filehash=>- filehash
- mimetype=>- mimetype
- size=>- size
- modified=>- modified
Requires computation:
- filename=> {if file is in storage then- filename, else null}
- width=> {if file is known by V3, re-compute then- width, else null}
- height=> {if file is known by V3, re-compute then- height, else null}
- Count references and filllives
File to Link
Only if url and urlhash are not null.
Direct transformation:
- id=>- id
- url=>- url
- urlhash=>- url_hash
File and File_to_post to AttachmentToNote
Direct transformation by joining File f and File_to_post fp on id = file_id with fp.file_id, fp.post_id, f.title, f.filename, fp.modified:
- file_id=>- attachment_id
- post_id=>- note_id
- modified=>- modified
Requires computation:
- title??- filename=>- title
File_thumbnail to AttachmentThumbnail
For every attachment where we have the original (filename not null), just let them be regenerated on request. For all the others, compute the mime-type and rescale to the new default sizes.
The field url from File_thumbnail has duplicated information that was already migrated in the tables above and can, therefore, be safely ignored now.
Embed and StoreRemoteMedia
// TODO
