public async Task Get() { Response.Headers.Add("Content-Type", "text/event-stream"); Microsoft.AspNetCore.Http.Headers.RequestHeaders headers = Request.GetTypedHeaders(); bool returnEmpty = true; if (headers.Referer.OriginalString.Contains("TicketBuy", StringComparison.InvariantCultureIgnoreCase)) { int eventId = 0; if (Int32.TryParse(headers.Referer.Segments[headers.Referer.Segments.Length - 1], out eventId)) { if (eventId > 0) { bool isTicketBooked = false; using (var db = new dbInterviewContext()) { for (int i = 0; i < 4; i++) { await Task.Delay(TimeSpan.FromSeconds(2)); bool IsBuy = db.Buyer.Any(p => p.EventId == eventId); if (IsBuy == true) { //ticket booked returnEmpty = false; string dataItem = $"data: {"TICKET_BOOKED"}\n\n"; byte[] dataItemBytes = ASCIIEncoding.ASCII.GetBytes(dataItem); await Response.Body.WriteAsync(dataItemBytes, 0, dataItemBytes.Length); await Response.Body.FlushAsync(); break; } } } } } } if (returnEmpty) { string dataItem = $"data: {""}\n\n"; byte[] dataItemBytes = ASCIIEncoding.ASCII.GetBytes(dataItem); await Response.Body.WriteAsync(dataItemBytes, 0, dataItemBytes.Length); await Response.Body.FlushAsync(); } }
public static (bool isRangeRequest, Microsoft.Net.Http.Headers.RangeItemHeaderValue range) ParseRange(Microsoft.AspNetCore.Http.HttpContext context, Microsoft.AspNetCore.Http.Headers.RequestHeaders requestHeaders, long length, Microsoft.Extensions.Logging.ILogger logger) { throw null; }
public async Task <IActionResult> OnPostReadAsync() { var videoId = Helpers.GetVideoId(VideoUrl); if (videoId == null || !videoId.IsAbsolutelySafe()) { throw new Exception("Invalid URL format"); } var(vtts, title) = await Helpers.GetManifestDataAsync(videoId, HttpContext.RequestAborted); if (UseLang == null || UseLang == "*") { do { var videoDataUrl = $"https://www.googleapis.com/youtube/v3/videos?id={videoId}&key={m_config["GoogleApiKey"]}&part=snippet&fields=items/snippet/defaultAudioLanguage"; using (var client = new HttpClient()) using (HttpContext.RequestAborted.Register(client.CancelPendingRequests)) using (var stream = await client.GetStreamAsync(videoDataUrl)) using (var reader = new Newtonsoft.Json.JsonTextReader(new System.IO.StreamReader(stream))) { var videoData = JsonSerializer.Deserialize <YoutubeVideoData> (reader); var defLang1 = videoData?.Infos?.FirstOrDefault()?.Snippet?.DefaultAudioLanguage; if (defLang1 != null) { var defLang2 = defLang1.Split('-')[0]; if (Lang1.Prefer && (Lang1.Code == defLang1 || Lang1.Code == defLang2)) { UseLang = Lang1.Code; break; } if (Lang2.Prefer && (Lang2.Code == defLang1 || Lang2.Code == defLang2)) { UseLang = Lang2.Code; break; } if (Lang3.Prefer && (Lang3.Code == defLang1 || Lang3.Code == defLang2)) { UseLang = Lang3.Code; break; } } } if (Lang1.Code != null && vtts.ContainsKey(Lang1.Code)) { UseLang = Lang1.Code; break; } if (Lang2.Code != null && vtts.ContainsKey(Lang2.Code)) { UseLang = Lang2.Code; break; } if (Lang3.Code != null && vtts.ContainsKey(Lang3.Code)) { UseLang = Lang3.Code; break; } // no language could be selected based on preferences, try Accept-Language if (Request.Headers.TryGetValue("Accept-Language", out var acceptLangs)) { var list = new List <KeyValuePair <double, string> > (); var headers = new Microsoft.AspNetCore.Http.Headers.RequestHeaders(Request.Headers); foreach (var acceptLang in headers.AcceptLanguage) { if (acceptLang.Value.HasValue) { list.Add(new KeyValuePair <double, string> (acceptLang.Quality ?? 1, acceptLang.Value.Value)); } } list.Sort((a, b) => b.Key.CompareTo(a.Key)); foreach (var kv in list) { if (vtts.ContainsKey(kv.Value)) { UseLang = kv.Value; goto selected; } } } // no language could be selected based on preferences or Accept-Language, fall back if (vtts.ContainsKey("en")) { UseLang = "en"; } else { UseLang = vtts.First().Key; } }while (false); } else if (!vtts.ContainsKey(UseLang)) { throw new Exception("This video has no subtitles in " + UseLang); } selected: AdjustVttCookies(vtts, videoId, UseLang, title); return(RedirectToPage("Subtitles", new { VideoId = videoId, Lang = UseLang })); }