Ejemplo n.º 1
0
        protected bool ScheduleDownload(TId id, string downloadId, bool force = false)
        {
            if (!_downloadFanart)
            {
                return(true);
            }

            FanartDownload <TId> fanartDownload = new FanartDownload <TId> {
                Id = id, DownloadId = downloadId
            };
            //Always call CheckBeginDownloadFanart, even if we are forcing so the match storage is updated correctly
            bool fanArtDownloaded = CheckBeginDownloadFanArt(fanartDownload) && !force;

            if (fanArtDownloaded)
            {
                return(true);
            }

            lock (_downloadQueue.SyncObj)
            {
                bool newEnqueued = _downloadQueue.TryEnqueue(fanartDownload);
                if (newEnqueued && _downloadThreads.Count < _downloadThreads.Capacity)
                {
                    Thread downloader = new Thread(DownloadFanArtQueue)
                    {
                        Name = "FanArt Downloader " + _downloadThreads.Count, Priority = ThreadPriority.Lowest
                    };
                    downloader.Start();
                    _downloadThreads.Add(downloader);
                }
            }
            return(true);
        }
Ejemplo n.º 2
0
        protected void FinishDownloadFanArt(FanartDownload <TId> fanartDownload)
        {
            lock (_syncObj)
            {
                // Load cache or create new list
                List <TMatch> matches = _storage.GetMatches();
                foreach (TMatch match in matches.FindAll(m => m.Id != null && m.Id.Equals(fanartDownload.Id)))
                {
                    if (!match.FanArtDownloadFinished.HasValue)
                    {
                        match.FanArtDownloadFinished = DateTime.Now;
                    }
                }

                _storage.SaveMatches();
            }
        }
Ejemplo n.º 3
0
        protected bool CheckBeginDownloadFanArt(FanartDownload <TId> fanartDownload)
        {
            bool fanArtDownloaded = false;

            lock (_syncObj)
            {
                // Load cache or create new list
                List <TMatch> matches = _storage.GetMatches();
                foreach (TMatch match in matches.FindAll(m => m.Id != null && m.Id.Equals(fanartDownload.Id)))
                {
                    if (string.IsNullOrEmpty(match.FanArtDownloadId))
                    {
                        match.FanArtDownloadId = fanartDownload.DownloadId;
                    }

                    // We can have multiple matches for one TvDbId in list, if one has FanArt downloaded already, update the flag for all matches.
                    if (match.FanArtDownloadFinished.HasValue)
                    {
                        fanArtDownloaded = true;
                    }

                    if (!match.FanArtDownloadStarted.HasValue)
                    {
                        match.FanArtDownloadStarted = DateTime.Now;
                    }
                }

                //It's possible that we have multiple matches with the same id, ensure that they are all marked as finished
                if (fanArtDownloaded)
                {
                    foreach (TMatch match in matches.FindAll(m => m.Id != null && m.Id.Equals(fanartDownload.Id) && !m.FanArtDownloadFinished.HasValue))
                    {
                        match.FanArtDownloadFinished = DateTime.Now;
                    }
                }

                _storage.SaveMatches();
            }
            return(fanArtDownloaded);
        }
Ejemplo n.º 4
0
 protected override void DownloadFanArt(FanartDownload <string> fanartDownload)
 {
     // No fanart to download
     FinishDownloadFanArt(fanartDownload);
 }
Ejemplo n.º 5
0
 protected abstract void DownloadFanArt(FanartDownload <TId> fanartDownload);