[chore] media pipeline improvements (#3110)

* don't set emoji / media image paths on failed download, migrate FileType from string to integer

* fix incorrect uses of util.PtrOr, fix returned frontend media

* fix migration not setting arguments correctly in where clause

* fix not providing default with not null column

* whoops

* ensure a default gets set for media attachment file type

* remove the exclusive flag from writing files in disk storage

* rename PtrOr -> PtrOrZero, and rename PtrValueOr -> PtrOrValue to match

* slight wording changes

* use singular / plural word forms (no parentheses), is better for screen readers

* update testmodels with unknown media type to have unset file details, update attachment focus handling converting to frontend, update tests

* store first instance in ffmpeg wasm pool, fill remaining with closed instances
This commit is contained in:
kim
2024-07-17 15:26:33 +00:00
committed by GitHub
parent 0aadc2db2a
commit 72ba5666a6
29 changed files with 669 additions and 399 deletions

View File

@ -248,6 +248,15 @@ func (p *ProcessingMedia) store(ctx context.Context) error {
return gtserror.Newf("error generating thumb blurhash: %w", err)
}
}
// Calculate final media attachment thumbnail path.
p.media.Thumbnail.Path = uris.StoragePathForAttachment(
p.media.AccountID,
string(TypeAttachment),
string(SizeSmall),
p.media.ID,
"jpeg",
)
}
// Calculate final media attachment file path.
@ -285,8 +294,7 @@ func (p *ProcessingMedia) store(ctx context.Context) error {
p.media.Thumbnail.FileSize = int(thumbsz)
}
// Fill in correct attachment
// data now we've parsed it.
// Generate a media attachment URL.
p.media.URL = uris.URIForAttachment(
p.media.AccountID,
string(TypeAttachment),
@ -295,10 +303,22 @@ func (p *ProcessingMedia) store(ctx context.Context) error {
ext,
)
// Generate a media attachment thumbnail URL.
p.media.Thumbnail.URL = uris.URIForAttachment(
p.media.AccountID,
string(TypeAttachment),
string(SizeSmall),
p.media.ID,
"jpeg",
)
// Get mimetype for the file container
// type, falling back to generic data.
p.media.File.ContentType = getMimeType(ext)
// Set the known thumbnail content type.
p.media.Thumbnail.ContentType = "image/jpeg"
// We can now consider this cached.
p.media.Cached = util.Ptr(true)
@ -329,6 +349,18 @@ func (p *ProcessingMedia) cleanup(ctx context.Context) {
}
}
// Unset all processor-calculated media fields.
p.media.FileMeta.Original = gtsmodel.Original{}
p.media.FileMeta.Small = gtsmodel.Small{}
p.media.File.ContentType = ""
p.media.File.FileSize = 0
p.media.File.Path = ""
p.media.Thumbnail.FileSize = 0
p.media.Thumbnail.ContentType = ""
p.media.Thumbnail.Path = ""
p.media.Thumbnail.URL = ""
p.media.URL = ""
// Also ensure marked as unknown and finished
// processing so gets inserted as placeholder URL.
p.media.Processing = gtsmodel.ProcessingStatusProcessed