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); }
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(); } }
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); }
protected override void DownloadFanArt(FanartDownload <string> fanartDownload) { // No fanart to download FinishDownloadFanArt(fanartDownload); }
protected abstract void DownloadFanArt(FanartDownload <TId> fanartDownload);