private string GetCacheKey(ReleaseResource resource) { return(string.Concat(resource.IndexerId, "_", resource.Guid)); }
private object DownloadRelease(ReleaseResource release) { var remoteAlbum = _remoteAlbumCache.Find(GetCacheKey(release)); if (remoteAlbum == null) { _logger.Debug("Couldn't find requested release in cache, cache timeout probably expired."); throw new NzbDroneClientException(HttpStatusCode.NotFound, "Couldn't find requested release in cache, try searching again"); } try { if (remoteAlbum.Artist == null) { if (release.AlbumId.HasValue) { var album = _albumService.GetAlbum(release.AlbumId.Value); remoteAlbum.Artist = _artistService.GetArtist(album.ArtistId); remoteAlbum.Albums = new List <Album> { album }; } else if (release.ArtistId.HasValue) { var artist = _artistService.GetArtist(release.ArtistId.Value); var albums = _parsingService.GetAlbums(remoteAlbum.ParsedAlbumInfo, artist); if (albums.Empty()) { throw new NzbDroneClientException(HttpStatusCode.NotFound, "Unable to parse albums in the release"); } remoteAlbum.Artist = artist; remoteAlbum.Albums = albums; } else { throw new NzbDroneClientException(HttpStatusCode.NotFound, "Unable to find matching artist and albums"); } } else if (remoteAlbum.Albums.Empty()) { var albums = _parsingService.GetAlbums(remoteAlbum.ParsedAlbumInfo, remoteAlbum.Artist); if (albums.Empty() && release.AlbumId.HasValue) { var album = _albumService.GetAlbum(release.AlbumId.Value); albums = new List <Album> { album }; } remoteAlbum.Albums = albums; } if (remoteAlbum.Albums.Empty()) { throw new NzbDroneClientException(HttpStatusCode.NotFound, "Unable to parse albums in the release"); } _downloadService.DownloadReport(remoteAlbum); } catch (ReleaseDownloadException ex) { _logger.Error(ex, ex.Message); throw new NzbDroneClientException(HttpStatusCode.Conflict, "Getting release from indexer failed"); } return(release); }