Beispiel #1
0
        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);
        }
Beispiel #2
0
 public void SetImage(TvdbBanner _banner, int _position)
 {
     if (_position < m_imagePositions.Count)
     {
         m_imagePositions[_position].Image = _banner;
     }
 }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
            }
        }
Beispiel #5
0
        /// <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");
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        /// <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");
            }
        }