Пример #1
0
        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"));
        }
Пример #2
0
        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);
            }
        }
Пример #4
0
        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
            }));
        }
Пример #5
0
        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;
        }
Пример #6
0
        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;
        }
Пример #7
0
        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);
        }
Пример #8
0
 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);
        }
Пример #10
0
        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
            });
        }
Пример #12
0
        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);
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
                }
            }
        }
Пример #16
0
        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;
        }