Patch/onedr0p updates (#998)

* few small things

* update var names

* Validate Root Folder, Minimum Avability and ProfileId on List import.
This commit is contained in:
Devin Buhl 2017-03-03 21:32:52 -05:00 committed by GitHub
parent f7bc889723
commit aab425ee5b
7 changed files with 109 additions and 99 deletions

View File

@ -1,16 +1,17 @@
using NzbDrone.Api.ClientSchema; using FluentValidation;
using NzbDrone.Api.ClientSchema;
using NzbDrone.Core.NetImport; using NzbDrone.Core.NetImport;
using NzbDrone.Core.Profiles; using NzbDrone.Core.Validation.Paths;
namespace NzbDrone.Api.NetImport namespace NzbDrone.Api.NetImport
{ {
public class NetImportModule : ProviderModuleBase<NetImportResource, INetImport, NetImportDefinition> public class NetImportModule : ProviderModuleBase<NetImportResource, INetImport, NetImportDefinition>
{ {
private readonly IProfileService _profileService; public NetImportModule(NetImportFactory netImportFactory) : base(netImportFactory, "netimport")
public NetImportModule(NetImportFactory indexerFactory, IProfileService profileService)
: base(indexerFactory, "netimport")
{ {
_profileService = profileService; PostValidator.RuleFor(c => c.RootFolderPath).NotNull();
PostValidator.RuleFor(c => c.MinimumAvailability).NotNull();
PostValidator.RuleFor(c => c.ProfileId).NotNull();
} }
protected override void MapToResource(NetImportResource resource, NetImportDefinition definition) protected override void MapToResource(NetImportResource resource, NetImportDefinition definition)

View File

@ -119,7 +119,7 @@ namespace NzbDrone.Api
resource.Fields = SchemaBuilder.ToSchema(definition.Settings); resource.Fields = SchemaBuilder.ToSchema(definition.Settings);
resource.InfoLink = string.Format("https://github.com/Sonarr/Sonarr/wiki/Supported-{0}#{1}", resource.InfoLink = string.Format("https://github.com/Radarr/Radarr/wiki/Supported-{0}#{1}",
typeof(TProviderResource).Name.Replace("Resource", "s"), typeof(TProviderResource).Name.Replace("Resource", "s"),
definition.Implementation.ToLower()); definition.Implementation.ToLower());
} }

View File

@ -1,8 +1,4 @@
using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NzbDrone.Core.IndexerSearch namespace NzbDrone.Core.IndexerSearch
{ {

View File

@ -1,41 +1,79 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using NLog; using NLog;
using NzbDrone.Common.Instrumentation.Extensions; using NzbDrone.Common.Instrumentation.Extensions;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore;
using NzbDrone.Core.Queue; using NzbDrone.Core.Queue;
using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.DecisionEngine;
namespace NzbDrone.Core.IndexerSearch namespace NzbDrone.Core.IndexerSearch
{ {
public class MovieSearchService : IExecute<MoviesSearchCommand>, IExecute<MissingMoviesSearchCommand> public class MovieSearchService : IExecute<MoviesSearchCommand>, IExecute<MissingMoviesSearchCommand>
{ {
private readonly IMovieService _movieService; private readonly IMovieService _movieService;
private readonly ISearchForNzb _nzbSearchService; private readonly ISearchForNzb _nzbSearchService;
private readonly IProcessDownloadDecisions _processDownloadDecisions; private readonly IProcessDownloadDecisions _processDownloadDecisions;
private readonly IQueueService _queueService; private readonly IQueueService _queueService;
private readonly Logger _logger; private readonly Logger _logger;
public MovieSearchService(IMovieService movieService, public MovieSearchService(IMovieService movieService,
ISearchForNzb nzbSearchService, ISearchForNzb nzbSearchService,
IProcessDownloadDecisions processDownloadDecisions, IProcessDownloadDecisions processDownloadDecisions,
IQueueService queueService, IQueueService queueService,
Logger logger) Logger logger)
{ {
_movieService = movieService; _movieService = movieService;
_nzbSearchService = nzbSearchService; _nzbSearchService = nzbSearchService;
_processDownloadDecisions = processDownloadDecisions; _processDownloadDecisions = processDownloadDecisions;
_queueService = queueService; _queueService = queueService;
_logger = logger; _logger = logger;
} }
private void SearchForMissingMovies(List<Movie> movies, bool userInvokedSearch) public void Execute(MoviesSearchCommand message)
{ {
_logger.ProgressInfo("Performing missing search for {0} movies", movies.Count); var downloadedCount = 0;
foreach (var movieId in message.MovieIds)
{
var movies = _movieService.GetMovie(movieId);
if (!movies.Monitored)
{
_logger.Debug("Movie {0} is not monitored, skipping search", movies.Title);
}
var decisions = _nzbSearchService.MovieSearch(movieId, false);//_nzbSearchService.SeasonSearch(message.MovieId, season.SeasonNumber, false, message.Trigger == CommandTrigger.Manual);
downloadedCount += _processDownloadDecisions.ProcessDecisions(decisions).Grabbed.Count;
}
_logger.ProgressInfo("Movie search completed. {0} reports downloaded.", downloadedCount);
}
public void Execute(MissingMoviesSearchCommand message)
{
List<Movie> movies = _movieService.MoviesWithoutFiles(new PagingSpec<Movie>
{
Page = 1,
PageSize = 100000,
SortDirection = SortDirection.Ascending,
SortKey = "Id",
FilterExpression = _movieService.ConstructFilterExpression(message.FilterKey, message.FilterValue)
}).Records.ToList();
var queue = _queueService.GetQueue().Select(q => q.Movie.Id);
var missing = movies.Where(e => !queue.Contains(e.Id)).ToList();
SearchForMissingMovies(missing, message.Trigger == CommandTrigger.Manual);
}
private void SearchForMissingMovies(List<Movie> movies, bool userInvokedSearch)
{
_logger.ProgressInfo("Performing missing search for {0} movies", movies.Count);
var downloadedCount = 0; var downloadedCount = 0;
foreach (var movieId in movies.GroupBy(e => e.Id)) foreach (var movieId in movies.GroupBy(e => e.Id))
@ -59,47 +97,9 @@ namespace NzbDrone.Core.IndexerSearch
} }
_logger.ProgressInfo("Completed missing search for {0} movies. {1} reports downloaded.", movies.Count, downloadedCount); _logger.ProgressInfo("Completed missing search for {0} movies. {1} reports downloaded.", movies.Count, downloadedCount);
} }
public void Execute(MoviesSearchCommand message)
{
var downloadedCount = 0; }
foreach (var movieId in message.MovieIds) }
{
var series = _movieService.GetMovie(movieId);
if (!series.Monitored)
{
_logger.Debug("Movie {0} is not monitored, skipping search", series.Title);
}
var decisions = _nzbSearchService.MovieSearch(movieId, false);//_nzbSearchService.SeasonSearch(message.MovieId, season.SeasonNumber, false, message.Trigger == CommandTrigger.Manual);
downloadedCount += _processDownloadDecisions.ProcessDecisions(decisions).Grabbed.Count;
}
_logger.ProgressInfo("Movie search completed. {0} reports downloaded.", downloadedCount);
}
public void Execute(MissingMoviesSearchCommand message)
{
List<Movie> movies;
movies = _movieService.MoviesWithoutFiles(new PagingSpec<Movie>
{
Page = 1,
PageSize = 100000,
SortDirection = SortDirection.Ascending,
SortKey = "Id",
FilterExpression = _movieService.ConstructFilterExpression(message.FilterKey, message.FilterValue)
}).Records.ToList();
var queue = _queueService.GetQueue().Select(q => q.Movie.Id);
var missing = movies.Where(e => !queue.Contains(e.Id)).ToList();
SearchForMissingMovies(missing, message.Trigger == CommandTrigger.Manual);
}
}
}

View File

@ -74,14 +74,14 @@ namespace NzbDrone.Core.MediaFiles
_eventAggregator.PublishEvent(new EpisodeFileDeletedEvent(episodeFile, reason)); _eventAggregator.PublishEvent(new EpisodeFileDeletedEvent(episodeFile, reason));
} }
public void Delete(MovieFile episodeFile, DeleteMediaFileReason reason) public void Delete(MovieFile movieFile, DeleteMediaFileReason reason)
{ {
//Little hack so we have the episodes and series attached for the event consumers //Little hack so we have the episodes and series attached for the event consumers
episodeFile.Movie.LazyLoad(); movieFile.Movie.LazyLoad();
episodeFile.Path = Path.Combine(episodeFile.Movie.Value.Path, episodeFile.RelativePath); movieFile.Path = Path.Combine(movieFile.Movie.Value.Path, movieFile.RelativePath);
_movieFileRepository.Delete(episodeFile); _movieFileRepository.Delete(movieFile);
_eventAggregator.PublishEvent(new MovieFileDeletedEvent(episodeFile, reason)); _eventAggregator.PublishEvent(new MovieFileDeletedEvent(movieFile, reason));
} }
public List<EpisodeFile> GetFilesBySeries(int seriesId) public List<EpisodeFile> GetFilesBySeries(int seriesId)
@ -153,9 +153,9 @@ namespace NzbDrone.Core.MediaFiles
return addedFile; return addedFile;
} }
public void Update(MovieFile episodeFile) public void Update(MovieFile movieFile)
{ {
_movieFileRepository.Update(episodeFile); _movieFileRepository.Update(movieFile);
} }
public MovieFile GetMovie(int id) public MovieFile GetMovie(int id)

View File

@ -89,7 +89,15 @@
<label class="col-sm-3 control-label">Folder</label> <label class="col-sm-3 control-label">Folder</label>
<div class="col-sm-5"> <div class="col-sm-5">
{{> RootFolderSelectionPartial rootFolders}} <select class="col-md-4 form-control x-root-folder" name="RootFolderPath">
{{#if rootFolders}}
{{#each rootFolders}}
<option value="{{id}}">{{path}}</option>
{{/each}}
{{else}}
<option value="">Select Path</option>
{{/if}}
</select>
</div> </div>
</div> </div>

View File

@ -103,7 +103,7 @@ module.exports = Marionette.Layout.extend({
icon : 'icon-sonarr-search', icon : 'icon-sonarr-search',
callback : this._searchMissing, callback : this._searchMissing,
ownerContext : this, ownerContext : this,
className : 'x-search-missing' className : 'x-search-cutoff'
}, },
] ]
}; };
@ -182,6 +182,11 @@ module.exports = Marionette.Layout.extend({
name : 'moviesSearch' name : 'moviesSearch'
} }
}); });
CommandController.bindToCommand({
element : this.$('.x-search-cutoff'),
command : { name : 'missingMoviesSearch' }
});
}, },
_setFilter : function(buttonContext) { _setFilter : function(buttonContext) {