Dont load recordings for streams by default

This commit is contained in:
2023-08-01 11:44:00 +01:00
parent 0634622c4d
commit 2371ddb79b
6 changed files with 21 additions and 12 deletions

View File

@ -201,9 +201,9 @@ public class PlaylistController : Controller
try
{
var streamManager = await _streamManagerFactory.ForStream(id);
var userStream = streamManager.GetStream();
var recordings = await streamManager.GetRecordings();
if (userStream.Recordings.Count == 0)
if (recordings.Count == 0)
{
Response.StatusCode = 404;
return;
@ -219,7 +219,7 @@ public class PlaylistController : Controller
await sw.WriteLineAsync("#EXT-X-MEDIA-SEQUENCE:0");
//await sw.WriteLineAsync($"#EXT-X-MAP:URI=\"{id}_init.mp4\"");
foreach (var seg in userStream.Recordings.OrderBy(a => a.Timestamp))
foreach (var seg in recordings.OrderBy(a => a.Timestamp))
{
await sw.WriteLineAsync($"#EXTINF:{seg.Duration},");
await sw.WriteLineAsync($"#EXT-X-PROGRAM-DATE-TIME:{seg.Timestamp:yyyy-MM-ddTHH:mm:ss.fffzzz}");
@ -240,9 +240,9 @@ public class PlaylistController : Controller
try
{
var streamManager = await _streamManagerFactory.ForStream(id);
var userStream = streamManager.GetStream();
var recordings = await streamManager.GetRecordings();
var firstFrag = await _client.GetStreamAsync(userStream.Recordings.First().Url);
var firstFrag = await _client.GetStreamAsync(recordings.First().Url);
var tmpFrag = Path.GetTempFileName();
await firstFrag.CopyToAsync(new FileStream(tmpFrag, FileMode.Open, FileAccess.ReadWrite));

View File

@ -18,7 +18,7 @@ public class UserStreamRecordingConfiguration : IEntityTypeConfiguration<UserStr
.IsRequired();
builder.HasOne(a => a.Stream)
.WithMany(a => a.Recordings)
.WithMany()
.HasForeignKey(a => a.UserStreamId);
}
}

View File

@ -39,7 +39,6 @@ public class UserStream
public string ForwardClientId { get; set; } = null!;
public List<UserStreamGuest> Guests { get; init; } = new();
public List<UserStreamRecording> Recordings { get; init; } = new();
}
public enum UserStreamState

View File

@ -78,5 +78,11 @@ public interface IStreamManager
/// Republish stream event
/// </summary>
/// <returns></returns>
public Task UpdateEvent();
Task UpdateEvent();
/// <summary>
/// Return a list of recordings segments
/// </summary>
/// <returns></returns>
Task<List<UserStreamRecording>> GetRecordings();
}

View File

@ -149,12 +149,19 @@ public class NostrStreamManager : IStreamManager
await _context.Db.SaveChangesAsync();
}
public async Task UpdateEvent()
{
await UpdateStreamState(_context.UserStream.State);
}
public async Task<List<UserStreamRecording>> GetRecordings()
{
return await _context.Db.Recordings.AsNoTracking()
.Where(a => a.UserStreamId == _context.UserStream.Id)
.ToListAsync();
}
public async Task UpdateViewers()
{
if (_context.UserStream.State is not UserStreamState.Live) return;

View File

@ -89,7 +89,6 @@ public class StreamManagerFactory
.AsNoTracking()
.Include(a => a.User)
.Include(a => a.Endpoint)
.Include(a => a.Recordings)
.FirstOrDefaultAsync(a => a.Id == id);
if (stream == default) throw new Exception("No live stream");
@ -110,7 +109,6 @@ public class StreamManagerFactory
.AsNoTracking()
.Include(a => a.User)
.Include(a => a.Endpoint)
.Include(a => a.Recordings)
.FirstOrDefaultAsync(a => a.PubKey.Equals(pubkey) && a.State == UserStreamState.Live);
if (stream == default) throw new Exception("No live stream");
@ -131,7 +129,6 @@ public class StreamManagerFactory
.AsNoTracking()
.Include(a => a.User)
.Include(a => a.Endpoint)
.Include(a => a.Recordings)
.OrderByDescending(a => a.Starts)
.FirstOrDefaultAsync(a =>
a.User.StreamKey.Equals(info.StreamKey) &&