private TvdbBanner GetLoadedBanner(TvdbDownloader downloader, int sId, int season, int episode, TvdbBanner fallback) { TvdbBanner result = GetEpisodeBanner(downloader, sId, season, episode); if (result != null && TryLoadBanner(result)) { return(result); } var bannerHits = downloader.DownloadBanners(sId); result = GetSeasonBanner(bannerHits, season); if (result != null && TryLoadBanner(result)) { return(result); } result = GetSeriesBanner(bannerHits); if (result != null && TryLoadBanner(result)) { return(result); } if (fallback != null && TryLoadBanner(fallback)) { return(fallback); } return(null); }
public void SetImage(TvdbBanner _banner, int _position) { if (_position < m_imagePositions.Count) { m_imagePositions[_position].Image = _banner; } }
/// <summary> /// Set the new banner image /// </summary> /// <param name="_value"></param> private void SetBannerImage(TvdbBanner _value) { Thread imageLoader = new Thread(new ParameterizedThreadStart(DoBannerLoad)); m_latestLoadingThread = imageLoader; imageLoader.Priority = ThreadPriority.Lowest; imageLoader.Name = "Imageloader_" + _value.BannerPath; imageLoader.Start(_value); }
/// <summary> /// Update the series with the banner /// </summary> /// <param name="_series"></param> /// <param name="_banner"></param> private void UpdateBanner(TvdbSeries _series, TvdbBanner _banner) { if (!_series.BannersLoaded) {//banners for this series havn't been loaded -> don't update banners return; } bool found = false; foreach (TvdbBanner b in _series.Banners) { if (_banner.GetType() == b.GetType() && _banner.BannerPath.Equals(b.BannerPath)) { if (b.LastUpdated < _banner.LastUpdated) { b.LastUpdated = _banner.LastUpdated; if (_banner.GetType() == typeof(TvdbFanartBanner)) { TvdbFanartBanner fanart = (TvdbFanartBanner)b; fanart.Resolution = ((TvdbFanartBanner)_banner).Resolution; if (fanart.IsThumbLoaded) { fanart.LoadThumb(null); } if (fanart.IsVignetteLoaded) { fanart.LoadVignette(null); } } if (b.IsLoaded) { b.LoadBanner(null); } Log.Info("Replacing banner " + _banner.Id); } else { Log.Debug("Not replacing banner " + _banner.Id + " because it's not newer than current image"); } found = true; } } if (!found) {//banner not found -> add it to bannerlist Log.Info("Adding banner " + _banner.Id); _series.Banners.Add(_banner); } }
/// <summary> /// Do a banner load within it's own thread /// </summary> /// <param name="_param"></param> private void DoBannerLoad(object _param) { TvdbBanner banner = (TvdbBanner)_param; try { if (banner.BannerPath != null && !banner.BannerPath.Equals("")) { int index = m_index; if (!banner.IsLoaded) { SetImageThreadSafe(null); SetLoadingVisibleThreadSafe(true); banner.LoadBanner(); } lock (m_latestLoadingThread) { if (Thread.CurrentThread == m_latestLoadingThread) { //Console.WriteLine("Loading finished of " + banner.Id); if (banner.IsLoaded) {//banner was successfully loaded SetLoadingVisibleThreadSafe(false); SetImageThreadSafe(banner.Banner); } else {//couldn't load the banner SetLoadingVisibleThreadSafe(false); } } else { //Console.WriteLine("Didn't load " + banner.Id + " because it's not the latest image"); } } } else {//no banner information available -> use default image if there is one SetLoadingVisibleThreadSafe(false); SetImageThreadSafe(m_unavailableImage); } } catch (ThreadAbortException) { //Console.WriteLine("Bannercontrol aborted loading"); } }
private bool TryLoadBanner(TvdbBanner banner) { if (banner.IsLoaded) { return(true); } try { banner.LoadBanner(); while (banner.BannerLoading) { Thread.Sleep(10); } return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// Do a banner load within it's own thread /// </summary> /// <param name="_param"></param> private void DoBannerLoad(object _param) { TvdbBanner banner = (TvdbBanner)_param; try { if (banner.BannerPath != null && !banner.BannerPath.Equals("")) { int index = m_index; //the basetype of the banner is TvdbBannerWithThumb, not TvdbBanner (only poster atm) bool hasThumb = banner.GetType().BaseType == typeof(TvdbBannerWithThumb); if (m_useThumbIfPossible && hasThumb) { if (!((TvdbBannerWithThumb)banner).IsThumbLoaded) { SetImageThreadSafe(null); SetLoadingVisibleThreadSafe(true); ((TvdbBannerWithThumb)banner).LoadThumb(); } } else { if (!banner.IsLoaded) { SetImageThreadSafe(null); SetLoadingVisibleThreadSafe(true); banner.LoadBanner(); } } lock (m_latestLoadingThread) { if (Thread.CurrentThread == m_latestLoadingThread) { //Console.WriteLine("Loading finished of " + banner.Id); if (m_useThumbIfPossible && hasThumb && ((TvdbBannerWithThumb)banner).IsThumbLoaded) { SetLoadingVisibleThreadSafe(false); SetImageThreadSafe(((TvdbBannerWithThumb)banner).ThumbImage); } else if (banner.IsLoaded) {//banner was successfully loaded SetLoadingVisibleThreadSafe(false); SetImageThreadSafe(banner.BannerImage); } else {//couldn't load the banner SetLoadingVisibleThreadSafe(false); } } else { //Console.WriteLine("Didn't load " + banner.Id + " because it's not the latest image"); } } } else {//no banner information available -> use default image if there is one SetLoadingVisibleThreadSafe(false); SetImageThreadSafe(m_unavailableImage); } } catch (ThreadAbortException) { //Console.WriteLine("Bannercontrol aborted loading"); } }