public async Task <IActionResult> Save(AdminViewModel model) { LiveShowDetails liveShowDetails; if (!ModelState.IsValid) { // Model validation error, just return and let the error render liveShowDetails = await _liveShowDetails.LoadAsync(); UpdateAdminViewModel(model, liveShowDetails); return(View("Index", model)); } if (!string.IsNullOrEmpty(model.LiveShowEmbedUrl) && model.LiveShowEmbedUrl.StartsWith("http://")) { model.LiveShowEmbedUrl = "https://" + model.LiveShowEmbedUrl.Substring("http://".Length); } liveShowDetails = new LiveShowDetails(); liveShowDetails.LiveShowEmbedUrl = model.LiveShowEmbedUrl; liveShowDetails.LiveShowHtml = model.LiveShowHtml; liveShowDetails.NextShowDateUtc = model.NextShowDatePst.HasValue ? TimeZoneInfo.ConvertTime(model.NextShowDatePst.Value, _pstTimeZone, TimeZoneInfo.Utc) : (DateTime?)null; liveShowDetails.AdminMessage = model.AdminMessage; await _liveShowDetails.SaveAsync(liveShowDetails); HttpContext.Response.Cookies.Append("msg", "1"); return(RedirectToAction("Index")); }
public async Task <IActionResult> Save(AdminInputModel input) { LiveShowDetails liveShowDetails; if (!ModelState.IsValid) { // Model validation error, just return and let the error render liveShowDetails = await _liveShowDetails.LoadAsync(); var viewModel = new AdminViewModel(); UpdateAdminViewModel(viewModel, liveShowDetails); return(View(nameof(Index), viewModel)); } if (!string.IsNullOrEmpty(input.LiveShowEmbedUrl) && input.LiveShowEmbedUrl.StartsWith("http://")) { input.LiveShowEmbedUrl = "https://" + input.LiveShowEmbedUrl.Substring("http://".Length); } liveShowDetails = new LiveShowDetails(); liveShowDetails.LiveShowEmbedUrl = input.LiveShowEmbedUrl; liveShowDetails.LiveShowHtml = input.LiveShowHtml; liveShowDetails.NextShowDateUtc = input.NextShowDatePst?.ConvertFromPtcToUtc(); liveShowDetails.AdminMessage = input.AdminMessage; await _liveShowDetails.SaveAsync(liveShowDetails); TempData[nameof(AdminViewModel.SuccessMessage)] = "Live show details saved successfully!"; return(RedirectToAction(nameof(Index))); }
private async Task SaveToAzureStorage(LiveShowDetails liveShowDetails) { var container = GetStorageContainer(); await container.CreateIfNotExistsAsync(); var blockBlob = container.GetBlockBlobReference(_appSettings.AzureStorageBlobName); var fileContents = JsonConvert.SerializeObject(liveShowDetails); var succeeded = true; var started = Timing.GetTimestamp(); try { await blockBlob.UploadTextAsync(fileContents); } catch { succeeded = false; throw; } finally { TrackDependency(blockBlob, "Upload", fileContents.Length, started, succeeded); } }
public async Task <IActionResult> Index(bool?disableCache, bool?demoOnAir) { var liveShowDetails = await _liveShowDetails.LoadAsync(); var showList = await _showsService.GetRecordedShowsAsync(User, disableCache ?? false); if (demoOnAir == true) { liveShowDetails = new LiveShowDetails(); liveShowDetails.LiveShowEmbedUrl = "tbd"; } if (!string.IsNullOrWhiteSpace(liveShowDetails.LiveShowRedirectUrl)) { return(Redirect(liveShowDetails.LiveShowRedirectUrl)); } return(View(new HomeViewModel { AdminMessage = liveShowDetails?.AdminMessage, NextShowDateUtc = liveShowDetails?.NextShowDateUtc, LiveShowEmbedUrl = liveShowDetails?.LiveShowEmbedUrl, LiveShowRedirectUrl = liveShowDetails?.LiveShowRedirectUrl?.Trim(), PreviousShows = showList.Shows, MoreShowsUrl = showList.MoreShowsUrl })); }
private void UpdateModelProperties(LiveShowDetails liveShowDetails) { _mapper.Map(liveShowDetails, this); NextShowDatePst = liveShowDetails?.NextShowDateUtc?.ConvertFromUtcToCet(); var nextThursday = GetNextThursday(); NextShowDateSuggestionCetPM = nextThursday.AddHours(20).ToString("MM/dd/yyyy HH:mm"); AppSettings = _appSettings; EnvironmentName = _env.EnvironmentName; }
private void UpdateAdminViewModel(AdminViewModel model, LiveShowDetails liveShowDetails) { _mapper.Map(liveShowDetails, model); model.NextShowDatePst = liveShowDetails?.NextShowDateUtc?.ConvertFromUtcToPst(); var nextTuesday = GetNextTuesday(); model.NextShowDateSuggestionPstAM = nextTuesday.AddHours(10).ToString("yyyy-MM-ddTHH:mm"); model.NextShowDateSuggestionPstPM = nextTuesday.AddHours(15).AddMinutes(45).ToString("yyyy-MM-ddTHH:mm"); model.AppSettings = _appSettings; model.EnvironmentName = _env.EnvironmentName; }
private async Task SaveToAzureStorage(LiveShowDetails liveShowDetails) { var container = GetStorageContainer(); await container.CreateIfNotExistsAsync(); var blockBlob = container.GetBlockBlobReference(_appSettings.AzureStorageBlobName); var fileContents = JsonConvert.SerializeObject(liveShowDetails); var started = Timing.GetTimestamp(); await blockBlob.UploadTextAsync(fileContents); }
private void UpdateAdminViewModel(AdminViewModel model, LiveShowDetails liveShowDetails) { model.LiveShowEmbedUrl = liveShowDetails?.LiveShowEmbedUrl; if (liveShowDetails?.NextShowDateUtc != null) { var nextShowDatePst = TimeZoneInfo.ConvertTimeFromUtc( liveShowDetails.NextShowDateUtc.Value, _pstTimeZone); model.NextShowDatePst = nextShowDatePst; } model.AdminMessage = liveShowDetails?.AdminMessage; model.AppSettings = _appSettings; model.EnvironmentName = _env.EnvironmentName; }
private async Task SaveToAzureStorage(LiveShowDetails liveShowDetails) { var container = GetStorageContainer(); await container.CreateIfNotExistsAsync(); var blockBlob = container.GetBlockBlobReference(_appSettings.AzureStorageBlobName); var fileContents = JsonConvert.SerializeObject(liveShowDetails); var uploadStarted = DateTimeOffset.UtcNow; await blockBlob.UploadTextAsync(fileContents); _telemtry.TrackDependency("Azure.BlobStorage", "UploadTextAsync", uploadStarted, DateTimeOffset.UtcNow - uploadStarted, true); }
private void TrackShowEvent(AdminInputModel input, LiveShowDetails liveShowDetails) { if (_telemetry.IsEnabled()) { var showStarted = string.IsNullOrEmpty(liveShowDetails.LiveShowEmbedUrl) && !string.IsNullOrEmpty(input.LiveShowEmbedUrl); var showEnded = !string.IsNullOrEmpty(liveShowDetails.LiveShowEmbedUrl) && string.IsNullOrEmpty(input.LiveShowEmbedUrl); if (showStarted || showEnded) { var showEvent = new EventTelemetry(showStarted ? "Show Started" : "Show Ended"); showEvent.Properties.Add("Show Embed URL", showStarted ? input.LiveShowEmbedUrl : liveShowDetails.LiveShowEmbedUrl); _telemetry.TrackEvent(showEvent); } } }
public async Task SaveAsync(LiveShowDetails liveShowDetails) { if (liveShowDetails == null) { throw new ArgumentNullException(nameof(liveShowDetails)); } await SaveToAzureStorage(liveShowDetails); // Update the cache _cache.Set(CacheKey, liveShowDetails, new MemoryCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.MaxValue }); }
private void UpdateAdminViewModel(AdminViewModel model, LiveShowDetails liveShowDetails) { model.LiveShowEmbedUrl = liveShowDetails?.LiveShowEmbedUrl; model.LiveShowHtml = liveShowDetails?.LiveShowHtml; model.NextShowDatePst = liveShowDetails?.NextShowDateUtc?.ConvertFromUtcToPst(); model.AdminMessage = liveShowDetails?.AdminMessage; var nextTuesday = GetNextTuesday(); model.NextShowDateSuggestionPstAM = nextTuesday.AddHours(10).ToString("MM/dd/yyyy HH:mm"); model.NextShowDateSuggestionPstPM = nextTuesday.AddHours(15).AddMinutes(45).ToString("MM/dd/yyyy HH:mm"); model.AppSettings = _appSettings; model.EnvironmentName = _env.EnvironmentName; }
public async Task SaveAsync(LiveShowDetails liveShowDetails) { if (liveShowDetails == null) { return; } var fileContents = JsonConvert.SerializeObject(liveShowDetails); using (var fileWriter = new StreamWriter(new FileStream(_filePath, FileMode.Create, FileAccess.Write, FileShare.None, 4096, useAsync: true))) { await fileWriter.WriteAsync(fileContents); } _cache.Remove(CacheKey); }
public async Task SaveAsync(LiveShowDetails liveShowDetails) { if (liveShowDetails == null) { return; } var fileContents = JsonConvert.SerializeObject(liveShowDetails); using (var fileWriter = new StreamWriter(_filePath)) { await fileWriter.WriteAsync(fileContents); } _cache.Remove(CacheKey); }
private void TrackShowEvent(Input input, LiveShowDetails liveShowDetails) { if (_logger.IsEnabled(LogLevel.Information)) { var showStarted = string.IsNullOrEmpty(liveShowDetails.LiveShowEmbedUrl) && !string.IsNullOrEmpty(input.LiveShowEmbedUrl); var showEnded = !string.IsNullOrEmpty(liveShowDetails.LiveShowEmbedUrl) && string.IsNullOrEmpty(input.LiveShowEmbedUrl); if (showStarted) { _logger.LogInformation(_showStarted, "Show started streaming at {ShowEmbedUrl}", input.LiveShowEmbedUrl); } if (showEnded) { _logger.LogInformation(_showEnded, "Show ended streaming at {ShowEmbedUrl}", liveShowDetails.LiveShowEmbedUrl); } } }
private void UpdateAdminViewModel(AdminViewModel model, LiveShowDetails liveShowDetails) { model.LiveShowEmbedUrl = liveShowDetails?.LiveShowEmbedUrl; model.LiveShowHtml = liveShowDetails?.LiveShowHtml; if (liveShowDetails?.NextShowDateUtc != null) { var nextShowDatePst = TimeZoneInfo.ConvertTime( liveShowDetails.NextShowDateUtc.Value, TimeZoneInfo.Utc, _pstTimeZone); model.NextShowDatePst = nextShowDatePst; } model.AdminMessage = liveShowDetails?.AdminMessage; var nextTuesday = GetNextTuesday(); model.NextShowDateSuggestionPstAM = nextTuesday.AddHours(10).ToString("MM/dd/yyyy HH:mm"); model.NextShowDateSuggestionPstPM = nextTuesday.AddHours(15).AddMinutes(45).ToString("MM/dd/yyyy HH:mm"); model.AppSettings = _appSettings; model.EnvironmentName = _env.EnvironmentName; }