diff --git a/Pages/Admin.cshtml b/Pages/Admin.cshtml index 7909c00..d53b2e8 100644 --- a/Pages/Admin.cshtml +++ b/Pages/Admin.cshtml @@ -30,12 +30,11 @@ @user.Username - @if (StreamUtils.IsLive(user.Username)) { - var uptimestr = stats.Server.Applications.First(p => p.Name == "ingress").MethodLive.Streams.First(p => p.Name == user.Username).Time; - var uptime = TimeSpan.FromMilliseconds(long.Parse(uptimestr)).StripMilliseconds(); + @if (StreamUtils.IsLive(user.Username, stats)) { + var uptime = TimeSpan.FromMilliseconds(StreamUtils.GetClientTime(user.Username, stats)).StripMilliseconds(); if (user.AllowRestream && !string.IsNullOrWhiteSpace(user.RestreamTargets)) { - var restreams = StreamUtils.CountLiveRestreams(user.Username); + var restreams = StreamUtils.CountLiveRestreams(user.Username, stats); if (restreams > 0) { } diff --git a/Pages/Dashboard.cshtml b/Pages/Dashboard.cshtml index 9f28ddc..d8bbf9e 100644 --- a/Pages/Dashboard.cshtml +++ b/Pages/Dashboard.cshtml @@ -18,6 +18,7 @@ else { var db = new AppDb.DbConn(); var user = db.Users.First(p => p.Username == HttpContext.Session.GetString("authenticatedUser")); + var stats = StreamUtils.GetStatsObject();
- @if (StreamUtils.IsLive(user.Username)) { - var stats = StreamUtils.GetStatsObject(); - var uptimestr = stats.Server.Applications.First(p => p.Name == "ingress").MethodLive.Streams.First(p => p.Name == user.Username).Time; - var uptime = TimeSpan.FromMilliseconds(long.Parse(uptimestr)).StripMilliseconds(); + @if (StreamUtils.IsLive(user.Username, stats)) { + var uptime = TimeSpan.FromMilliseconds(StreamUtils.GetClientTime(user.Username, stats)).StripMilliseconds(); if (user.AllowRestream && !string.IsNullOrWhiteSpace(user.RestreamTargets)) { - if (StreamUtils.GetClientTime(user.Username) > 5000) { - var restreams = StreamUtils.CountLiveRestreams(user.Username); + if (StreamUtils.GetClientTime(user.Username, stats) > 5000) { + var restreams = StreamUtils.CountLiveRestreams(user.Username, stats); if (restreams > 0) { } @@ -125,8 +124,8 @@ else {
- @if (!string.IsNullOrWhiteSpace(user.RestreamTargets) && StreamUtils.IsLive(user.Username) && StreamUtils.GetClientTime(user.Username) > 5000) { - var restreams = StreamUtils.CountLiveRestreams(user.Username); + @if (!string.IsNullOrWhiteSpace(user.RestreamTargets) && StreamUtils.IsLive(user.Username, stats) && StreamUtils.GetClientTime(user.Username, stats) > 5000) { + var restreams = StreamUtils.CountLiveRestreams(user.Username, stats); if (restreams == 1) { } diff --git a/Pages/profile.cshtml b/Pages/profile.cshtml index 949cc42..1a2cf25 100644 --- a/Pages/profile.cshtml +++ b/Pages/profile.cshtml @@ -9,10 +9,11 @@ return; } var user = db.Users.First(p => p.Username == Model.User); - var live = StreamUtils.IsLive(user.Username); + var stats = StreamUtils.GetStatsObject(); + var live = StreamUtils.IsLive(user.Username, stats); Stream stream = null; if (live) { - stream = StreamUtils.GetStatsObject().Server.Applications.First(p => p.Name == "ingress").MethodLive.Streams.FirstOrDefault(p => p.Name == user.Username); + stream = stats.Server.Applications.First(p => p.Name == "ingress").MethodLive.Streams.FirstOrDefault(p => p.Name == user.Username); } var pronounAdditional = user.PronounSubject == "they" ? "are" : "is"; // TODO make this configurable too } diff --git a/StreamUtils.cs b/StreamUtils.cs index 63d9d8d..b5c595c 100644 --- a/StreamUtils.cs +++ b/StreamUtils.cs @@ -8,27 +8,23 @@ namespace RTMPDash { public static class StreamUtils { private static readonly XmlSerializer Serializer = new(typeof(StatsObject)); - public static bool IsLive(string user) => GetStatsObject() - .Server.Applications.First(p => p.Name == "ingress") - .MethodLive.Streams.Any(p => p.Name == user); + public static bool IsLive(string user, StatsObject stats) => stats.Server.Applications + .First(p => p.Name == "ingress") + .MethodLive.Streams.Any(p => p.Name == user); - public static bool IsLive(string user, string target) => GetStatsObject() - .Server.Applications.First(p => p.Name == "ingress") - .MethodLive.Streams - .Any(p => p.Name == user - && p.Clients.Any(c => c.Address - == target - .Replace("rtmp://", ""))); + public static bool IsLive(string user, string target, StatsObject stats) => stats.Server.Applications + .First(p => p.Name == "ingress") + .MethodLive.Streams + .Any(p => p.Name == user && p.Clients.Any(c => c.Address == target.Replace("rtmp://", ""))); - public static long GetClientTime(string user) => long.Parse(GetStatsObject() - .Server.Applications.First(p => p.Name == "ingress") - .MethodLive.Streams.First(p => p.Name == user) - .Time); + public static long GetClientTime(string user, StatsObject stats) => + long.Parse(stats.Server.Applications.First(p => p.Name == "ingress") + .MethodLive.Streams.First(p => p.Name == user) + .Time); - public static int CountLiveRestreams(string user) { + public static int CountLiveRestreams(string user, StatsObject stats) { var db = new AppDb.DbConn(); var dbUser = db.Users.First(p => p.Username == user); - var stats = GetStatsObject(); return dbUser.RestreamTargets.Split(",") .Count(target => stats.Server.Applications.First(p => p.Name == "ingress") .MethodLive.Streams