using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using NLog; using Ninject; using NzbDrone.Common; using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Repository; namespace NzbDrone.Core.Providers { public class BannerProvider { private readonly HttpProvider _httpProvider; private readonly EnvironmentProvider _environmentProvider; private readonly DiskProvider _diskProvider; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private const string BANNER_URL_PREFIX = "http://www.thetvdb.com/banners/"; [Inject] public BannerProvider(HttpProvider httpProvider, EnvironmentProvider environmentProvider, DiskProvider diskProvider) { _httpProvider = httpProvider; _environmentProvider = environmentProvider; _diskProvider = diskProvider; } public BannerProvider() { } public virtual bool Download(Series series) { var bannerPath = _environmentProvider.GetBannerPath(); logger.Trace("Ensuring Banner Folder exists: ", bannerPath); _diskProvider.CreateDirectory(bannerPath); var bannerFilename = Path.Combine(bannerPath, series.SeriesId.ToString()) + ".jpg"; logger.Trace("Downloading banner for '{0}'", series.Title); try { _httpProvider.DownloadFile(BANNER_URL_PREFIX + series.BannerUrl, bannerFilename); logger.Trace("Successfully download banner for '{0}'", series.Title); } catch (Exception) { logger.Debug("Failed to download banner for '{0}'", series.Title); return false; } return true; } public virtual bool Delete(int seriesId) { var bannerPath = _environmentProvider.GetBannerPath(); var bannerFilename = Path.Combine(bannerPath, seriesId.ToString()) + ".jpg"; try { logger.Trace("Checking if banner exists: {0}", bannerFilename); if (_diskProvider.FileExists(bannerFilename)) { logger.Trace("Deleting existing banner: {0}", bannerFilename); _diskProvider.DeleteFile(bannerFilename); } } catch(Exception ex) { logger.WarnException("Failed to delete banner: " + bannerFilename, ex); return false; } return true; } public virtual void Download(string remotePath, string filename) { var url = BANNER_URL_PREFIX + remotePath; try { _httpProvider.DownloadFile(url, filename); logger.Trace("Successfully download banner from '{0}' to '{1}'", url, filename); } catch (Exception ex) { var message = String.Format("Failed to download Banner from '{0}' to '{1}'", url, filename); logger.DebugException(message, ex); throw; } } } }