diff --git a/VoidCat/Controllers/NostrController.cs b/VoidCat/Controllers/NostrController.cs index 2385c11..a4d5164 100644 --- a/VoidCat/Controllers/NostrController.cs +++ b/VoidCat/Controllers/NostrController.cs @@ -86,17 +86,24 @@ public class NostrController : BaseDownloadController await _fileMetadata.Add(vf); await _userUploads.AddFile(nostrUser.Id, vf.Id); + List> tags = new() + { + new() {"url", new Uri(_settings.SiteUrl, $"/nostr/{vf.OriginalDigest}{Path.GetExtension(vf.Name)}").ToString()}, + new() {"ox", vf.OriginalDigest ?? "", _settings.SiteUrl.ToString()}, + new() {"x", vf.Digest ?? ""}, + new() {"m", vf.MimeType} + }; + + if (!string.IsNullOrEmpty(vf.MediaDimensions)) + { + tags.Add(new() {"dim", vf.MediaDimensions}); + } + var ret = new Nip96UploadResult { FileHeader = new() { - Tags = new() - { - new() {"url", new Uri(_settings.SiteUrl, $"/nostr/{vf.OriginalDigest}{Path.GetExtension(vf.Name)}").ToString()}, - new() {"ox", vf.OriginalDigest ?? "", _settings.SiteUrl.ToString()}, - new() {"x", vf.Digest ?? ""}, - new() {"m", vf.MimeType} - } + Tags = tags } }; diff --git a/VoidCat/Model/Extensions.cs b/VoidCat/Model/Extensions.cs index 4064d91..9e092ab 100644 --- a/VoidCat/Model/Extensions.cs +++ b/VoidCat/Model/Extensions.cs @@ -359,7 +359,8 @@ public static class Extensions EditSecret = withEditSecret ? f.EditSecret : null, Storage = f.Storage, EncryptionParams = f.EncryptionParams, - MagnetLink = f.MagnetLink + MagnetLink = f.MagnetLink, + MediaDimensions = f.MediaDimensions }; } diff --git a/VoidCat/Model/VoidFile.cs b/VoidCat/Model/VoidFile.cs index 3b4b456..8627161 100644 --- a/VoidCat/Model/VoidFile.cs +++ b/VoidCat/Model/VoidFile.cs @@ -32,4 +32,5 @@ public class VoidFileMeta public string Storage { get; init; } = "local-disk"; public string? EncryptionParams { get; init; } public string? MagnetLink { get; init; } + public string? MediaDimensions { get; init; } } \ No newline at end of file diff --git a/VoidCat/Services/Files/CompressContent.cs b/VoidCat/Services/Files/CompressContent.cs index 00c0f65..2a51838 100644 --- a/VoidCat/Services/Files/CompressContent.cs +++ b/VoidCat/Services/Files/CompressContent.cs @@ -40,6 +40,7 @@ public class CompressContent } } + var ffProbe = await TryProbe(input, cts); var probe = isImage ? await ImageFile.FromFileAsync(input) : default; var ffmpeg = FFMpegArguments .FromFileInput(input) @@ -73,7 +74,9 @@ public class CompressContent var result = await ffmpeg.ProcessAsynchronously(); return new(result, output) { - MimeType = outMime + MimeType = outMime, + Width = ffProbe?.PrimaryVideoStream?.Width, + Height = ffProbe?.PrimaryVideoStream?.Height, }; } catch (Exception ex) @@ -84,8 +87,24 @@ public class CompressContent return new(false, output); } + private async Task TryProbe(string path, CancellationToken cts) + { + try + { + return await FFProbe.AnalyseAsync(path, cancellationToken: cts); + } + catch + { + // ignored + } + + return default; + } + public record CompressResult(bool Success, string OutPath) { public string? MimeType { get; init; } + public int? Width { get; init; } + public int? Height { get; init; } } } diff --git a/VoidCat/Services/Files/LocalDiskFileStorage.cs b/VoidCat/Services/Files/LocalDiskFileStorage.cs index da45f76..d6e1006 100644 --- a/VoidCat/Services/Files/LocalDiskFileStorage.cs +++ b/VoidCat/Services/Files/LocalDiskFileStorage.cs @@ -73,7 +73,8 @@ public class LocalDiskFileStore : StreamFileStore, IFileStore Size = (ulong)fInfo.Length, Digest = hash.ToHex(), MimeType = res.MimeType ?? vf.MimeType, - OriginalDigest = originalHash.ToHex() + OriginalDigest = originalHash.ToHex(), + MediaDimensions = res is {Width: not null, Height: not null} ? $"{res.Width.Value}x{res.Height.Value}" : null }; } else