From 7283d18ae7179acb1622100c35c5baf9b2783b9b Mon Sep 17 00:00:00 2001 From: Kieran Date: Thu, 7 Mar 2024 13:07:38 +0000 Subject: [PATCH] fix: recording ID --- NostrStreamer/Services/Dvr/IDvrStore.cs | 2 +- NostrStreamer/Services/Dvr/S3DvrStore.cs | 31 +++++++++++++------ .../StreamManager/NostrStreamManager.cs | 1 + 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/NostrStreamer/Services/Dvr/IDvrStore.cs b/NostrStreamer/Services/Dvr/IDvrStore.cs index 447aced..4c2a5d7 100644 --- a/NostrStreamer/Services/Dvr/IDvrStore.cs +++ b/NostrStreamer/Services/Dvr/IDvrStore.cs @@ -20,4 +20,4 @@ public interface IDvrStore Task> DeleteRecordings(UserStream stream); } -public record UploadResult(Uri Result, double Duration); +public record UploadResult(Guid Id, Uri Result, double Duration); diff --git a/NostrStreamer/Services/Dvr/S3DvrStore.cs b/NostrStreamer/Services/Dvr/S3DvrStore.cs index 1ecb778..3689a4e 100644 --- a/NostrStreamer/Services/Dvr/S3DvrStore.cs +++ b/NostrStreamer/Services/Dvr/S3DvrStore.cs @@ -82,12 +82,12 @@ public class S3DvrStore(Config config, HttpClient httpClient, ILogger> DeleteRecordings(UserStream stream) { - var deleted = new List(); + var deleted = new HashSet(); foreach (var batch in stream.Recordings.Select((a, i) => (Batch: i / 100, Item: a)).GroupBy(a => a.Batch)) { var res = await _client.DeleteObjectsAsync(new() @@ -96,17 +96,30 @@ public class S3DvrStore(Config config, HttpClient httpClient, ILogger new KeyVersion() { Key = $"{stream.Id}/{a.Item.Id}.ts" - }).ToList() + }).Concat(batch.Select(a => + { + var url = new Uri(a.Item.Url); + return new KeyVersion + { + Key = url.AbsolutePath.Replace($"/${_config.BucketName}", string.Empty) + }; + })).ToList() }); - deleted.AddRange(res.DeletedObjects.Select(a => Guid.Parse(Path.GetFileNameWithoutExtension(a.Key)))); + foreach (var d in res.DeletedObjects) + { + deleted.Add(Guid.Parse(Path.GetFileNameWithoutExtension(d.Key))); + } } - await _client.DeleteObjectAsync(new() + if (deleted.Count == stream.Recordings.Count) { - BucketName = _config.BucketName, - Key = $"{stream.Id}/" - }); + await _client.DeleteObjectAsync(new() + { + BucketName = _config.BucketName, + Key = $"{stream.Id}/" + }); + } - return deleted; + return deleted.ToList(); } } \ No newline at end of file diff --git a/NostrStreamer/Services/StreamManager/NostrStreamManager.cs b/NostrStreamer/Services/StreamManager/NostrStreamManager.cs index aaf0a69..17f29f0 100644 --- a/NostrStreamer/Services/StreamManager/NostrStreamManager.cs +++ b/NostrStreamer/Services/StreamManager/NostrStreamManager.cs @@ -195,6 +195,7 @@ public class NostrStreamManager : IStreamManager var result = await _dvrStore.UploadRecording(_context.UserStream, segment); _context.Db.Recordings.Add(new() { + Id = result.Id, UserStreamId = _context.UserStream.Id, Url = result.Result.ToString(), Duration = result.Duration,