@page @model ConferenceModel @using System.Net @using Microsoft.AspNetCore.Http @using static ConferenceModel @{ int tagFormat; switch (Request.Query["c"]) { case "36c3": tagFormat = 2; break; case "35c3": case "34c3": tagFormat = 1; break; case "33c3": tagFormat = 0; break; default: Response.Redirect("/"); return; } if (Request.Query.ContainsKey("bookmark") && HttpContext.Session.GetString("bookmark") != Request.Query["bookmark"]) { HttpContext.Session.SetString("bookmark", Request.Query["bookmark"]); } if (!HttpContext.Session.Keys.Contains("bookmark") || !Guid.TryParseExact(HttpContext.Session.GetString("bookmark"), "D", out _)) { HttpContext.Session.SetString("bookmark", Guid.NewGuid().ToString()); } if (!Request.Query.ContainsKey("bookmark") || HttpContext.Session.GetString("bookmark") != Request.Query["bookmark"]) { Response.Redirect("/?bookmark=" + HttpContext.Session.GetString("bookmark") + (Request.Query["orderby"] == "published" ? "&orderby=published" : "")); } ViewData["Title"] = Request.Query["c"]; var wc = new WebClient(); var jsonpath = System.IO.Path.Combine(c3stream.DataPath, Request.Query["c"] + ".json"); var json = System.IO.File.Exists(jsonpath) ? System.IO.File.ReadAllText(jsonpath) : wc.DownloadString($"https://api.media.ccc.de/public/conferences/{Request.Query["c"]}"); var conference = Conference.FromJson(json); wc.Dispose(); } @foreach (var talk in Request.Query["orderby"] == "published" ? conference.Events.OrderByDescending(p => p.ReleaseDate) : conference.Events.OrderBy(p => p.Date)) { TalkMetadata metadata; if (EventMetadata.Any(p => p.Guid == talk.Guid?.ToString())) { metadata = EventMetadata.First(p => p.Guid == talk.Guid?.ToString()); } else { metadata = GetEvent(talk.Guid?.ToString()); EventMetadata.Add(metadata); } var isWatched = EventMetadata.Any(p => p.Guid == talk.Guid?.ToString() && p.State.FirstOrDefault(q => q.Guid == HttpContext.Session.GetString("bookmark"))?.State == "watched"); var isMarked = EventMetadata.Any(p => p.Guid == talk.Guid?.ToString() && p.State.FirstOrDefault(q => q.Guid == HttpContext.Session.GetString("bookmark"))?.State == "marked"); var file = metadata.Talk.Recordings.FirstOrDefault(p => System.IO.File.Exists(System.IO.Path.Combine(c3stream.CachePath, conference.Acronym, p.Filename))); var eventName = talk.Tags[0].Replace("-", "-
"); var category = tagFormat switch { 0 => talk.Tags[0], 1 => talk.Tags[2], 2 => talk.Tags[3], _ => "" }; @if (isWatched) { } else if (isMarked) { } else { } }
Event @Html.Raw(Request.Query["orderby"] == "published" ? $"Published" : $"Date") Category Title Speaker(s) Lang Actions
@Html.Raw(eventName) @(Request.Query["orderby"] == "published" ? talk.ReleaseDate?.Date.ToShortDateString() : talk.Date?.Date.ToShortDateString()) @category@talk.Title@talk.Title@talk.Title@talk.Persons.Aggregate((s, s1) => $"{s}, {s1}") @talk.OriginalLanguage
@if (file != null) { } else { } @if (isWatched) { } else if (isMarked) { } else { }