using Microsoft.AspNetCore.Mvc; using Nop.Core; using Nop.Core.Caching; using Nop.Plugin.Widgets.NivoSlider.Infrastructure.Cache; using Nop.Plugin.Widgets.NivoSlider.Models; using Nop.Services.Configuration; using Nop.Services.Media; using Nop.Web.Framework.Components; namespace Nop.Plugin.Widgets.NivoSlider.Components; public class WidgetsNivoSliderViewComponent : NopViewComponent { protected readonly IStoreContext _storeContext; protected readonly IStaticCacheManager _staticCacheManager; protected readonly ISettingService _settingService; protected readonly IPictureService _pictureService; protected readonly IWebHelper _webHelper; public WidgetsNivoSliderViewComponent(IStoreContext storeContext, IStaticCacheManager staticCacheManager, ISettingService settingService, IPictureService pictureService, IWebHelper webHelper) { _storeContext = storeContext; _staticCacheManager = staticCacheManager; _settingService = settingService; _pictureService = pictureService; _webHelper = webHelper; } /// A task that represents the asynchronous operation public async Task InvokeAsync(string widgetZone, object additionalData) { var store = await _storeContext.GetCurrentStoreAsync(); var nivoSliderSettings = await _settingService.LoadSettingAsync(store.Id); var model = new PublicInfoModel { Picture1Url = await GetPictureUrlAsync(nivoSliderSettings.Picture1Id), Text1 = nivoSliderSettings.Text1, Link1 = nivoSliderSettings.Link1, AltText1 = nivoSliderSettings.AltText1, Picture2Url = await GetPictureUrlAsync(nivoSliderSettings.Picture2Id), Text2 = nivoSliderSettings.Text2, Link2 = nivoSliderSettings.Link2, AltText2 = nivoSliderSettings.AltText2, Picture3Url = await GetPictureUrlAsync(nivoSliderSettings.Picture3Id), Text3 = nivoSliderSettings.Text3, Link3 = nivoSliderSettings.Link3, AltText3 = nivoSliderSettings.AltText3, Picture4Url = await GetPictureUrlAsync(nivoSliderSettings.Picture4Id), Text4 = nivoSliderSettings.Text4, Link4 = nivoSliderSettings.Link4, AltText4 = nivoSliderSettings.AltText4, Picture5Url = await GetPictureUrlAsync(nivoSliderSettings.Picture5Id), Text5 = nivoSliderSettings.Text5, Link5 = nivoSliderSettings.Link5, AltText5 = nivoSliderSettings.AltText5 }; if (string.IsNullOrEmpty(model.Picture1Url) && string.IsNullOrEmpty(model.Picture2Url) && string.IsNullOrEmpty(model.Picture3Url) && string.IsNullOrEmpty(model.Picture4Url) && string.IsNullOrEmpty(model.Picture5Url)) //no pictures uploaded return Content(""); return View("~/Plugins/Widgets.NivoSlider/Views/PublicInfo.cshtml", model); } /// A task that represents the asynchronous operation protected async Task GetPictureUrlAsync(int pictureId) { var cacheKey = _staticCacheManager.PrepareKeyForDefaultCache(ModelCacheEventConsumer.PICTURE_URL_MODEL_KEY, pictureId, _webHelper.IsCurrentConnectionSecured() ? Uri.UriSchemeHttps : Uri.UriSchemeHttp); return await _staticCacheManager.GetAsync(cacheKey, async () => { //little hack here. nulls aren't cacheable so set it to "" var url = await _pictureService.GetPictureUrlAsync(pictureId, showDefaultPicture: false) ?? ""; return url; }); } }