mirror of
https://github.com/Radarr/Radarr.git
synced 2025-04-24 22:47:05 -04:00
Merged branch develop into develop
This commit is contained in:
commit
de5489ae9a
12 changed files with 97 additions and 29 deletions
|
@ -5,6 +5,7 @@ using NzbDrone.Core.IndexerSearch;
|
||||||
using NzbDrone.Core.Messaging.Commands;
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
using NzbDrone.Core.Tv;
|
using NzbDrone.Core.Tv;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Download
|
namespace NzbDrone.Core.Download
|
||||||
{
|
{
|
||||||
|
@ -38,7 +39,7 @@ namespace NzbDrone.Core.Download
|
||||||
{
|
{
|
||||||
_logger.Debug("Failed download contains a movie, searching again.");
|
_logger.Debug("Failed download contains a movie, searching again.");
|
||||||
|
|
||||||
_commandQueueManager.Push(new MoviesSearchCommand { MovieId = message.MovieId });
|
_commandQueueManager.Push(new MoviesSearchCommand { MovieIds = new List<int> { message.MovieId } });
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.IndexerSearch
|
||||||
|
{
|
||||||
|
public class MissingMoviesSearchCommand : Command
|
||||||
|
{
|
||||||
|
public override bool SendUpdatesToClient => true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,11 @@
|
||||||
using NzbDrone.Core.Messaging.Commands;
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NzbDrone.Core.IndexerSearch
|
namespace NzbDrone.Core.IndexerSearch
|
||||||
{
|
{
|
||||||
public class MoviesSearchCommand : Command
|
public class MoviesSearchCommand : Command
|
||||||
{
|
{
|
||||||
public int MovieId { get; set; }
|
public List<int> MovieIds { get; set; }
|
||||||
|
|
||||||
public override bool SendUpdatesToClient => true;
|
public override bool SendUpdatesToClient => true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,22 +4,23 @@ 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;
|
||||||
|
|
||||||
namespace NzbDrone.Core.IndexerSearch
|
namespace NzbDrone.Core.IndexerSearch
|
||||||
{
|
{
|
||||||
public class MovieSearchService : IExecute<MoviesSearchCommand>
|
public class MovieSearchService : IExecute<MoviesSearchCommand>, IExecute<MissingMoviesSearchCommand>
|
||||||
{
|
{
|
||||||
private readonly IMovieService _seriesService;
|
private readonly IMovieService _movieService;
|
||||||
private readonly ISearchForNzb _nzbSearchService;
|
private readonly ISearchForNzb _nzbSearchService;
|
||||||
private readonly IProcessDownloadDecisions _processDownloadDecisions;
|
private readonly IProcessDownloadDecisions _processDownloadDecisions;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
|
|
||||||
public MovieSearchService(IMovieService seriesService,
|
public MovieSearchService(IMovieService movieService,
|
||||||
ISearchForNzb nzbSearchService,
|
ISearchForNzb nzbSearchService,
|
||||||
IProcessDownloadDecisions processDownloadDecisions,
|
IProcessDownloadDecisions processDownloadDecisions,
|
||||||
Logger logger)
|
Logger logger)
|
||||||
{
|
{
|
||||||
_seriesService = seriesService;
|
_movieService = movieService;
|
||||||
_nzbSearchService = nzbSearchService;
|
_nzbSearchService = nzbSearchService;
|
||||||
_processDownloadDecisions = processDownloadDecisions;
|
_processDownloadDecisions = processDownloadDecisions;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
@ -27,20 +28,35 @@ namespace NzbDrone.Core.IndexerSearch
|
||||||
|
|
||||||
public void Execute(MoviesSearchCommand message)
|
public void Execute(MoviesSearchCommand message)
|
||||||
{
|
{
|
||||||
var series = _seriesService.GetMovie(message.MovieId);
|
|
||||||
|
|
||||||
var downloadedCount = 0;
|
var downloadedCount = 0;
|
||||||
|
foreach (var movieId in message.MovieIds)
|
||||||
|
{
|
||||||
|
var series = _movieService.GetMovie(movieId);
|
||||||
|
|
||||||
if (!series.Monitored)
|
if (!series.Monitored)
|
||||||
{
|
{
|
||||||
_logger.Debug("Movie {0} is not monitored, skipping search", series.Title);
|
_logger.Debug("Movie {0} is not monitored, skipping search", series.Title);
|
||||||
}
|
}
|
||||||
|
|
||||||
var decisions = _nzbSearchService.MovieSearch(message.MovieId, false);//_nzbSearchService.SeasonSearch(message.MovieId, season.SeasonNumber, false, message.Trigger == CommandTrigger.Manual);
|
var decisions = _nzbSearchService.MovieSearch(movieId, false);//_nzbSearchService.SeasonSearch(message.MovieId, season.SeasonNumber, false, message.Trigger == CommandTrigger.Manual);
|
||||||
downloadedCount += _processDownloadDecisions.ProcessDecisions(decisions).Grabbed.Count;
|
downloadedCount += _processDownloadDecisions.ProcessDecisions(decisions).Grabbed.Count;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
_logger.ProgressInfo("Movie search completed. {0} reports downloaded.", downloadedCount);
|
_logger.ProgressInfo("Movie search completed. {0} reports downloaded.", downloadedCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Execute(MissingMoviesSearchCommand message)
|
||||||
|
{
|
||||||
|
var movies = _movieService.MoviesWithoutFiles(new PagingSpec<Movie>
|
||||||
|
{
|
||||||
|
Page = 1,
|
||||||
|
PageSize = 100000,
|
||||||
|
SortDirection = SortDirection.Ascending,
|
||||||
|
SortKey = "Id",
|
||||||
|
FilterExpression =
|
||||||
|
v =>
|
||||||
|
v.Monitored == true
|
||||||
|
}).Records.ToList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -583,6 +583,7 @@
|
||||||
<Compile Include="Http\HttpProxySettingsProvider.cs" />
|
<Compile Include="Http\HttpProxySettingsProvider.cs" />
|
||||||
<Compile Include="Http\TorcacheHttpInterceptor.cs" />
|
<Compile Include="Http\TorcacheHttpInterceptor.cs" />
|
||||||
<Compile Include="IndexerSearch\Definitions\MovieSearchCriteria.cs" />
|
<Compile Include="IndexerSearch\Definitions\MovieSearchCriteria.cs" />
|
||||||
|
<Compile Include="IndexerSearch\MissingMoviesSearchCommand.cs" />
|
||||||
<Compile Include="IndexerSearch\MoviesSearchCommand.cs" />
|
<Compile Include="IndexerSearch\MoviesSearchCommand.cs" />
|
||||||
<Compile Include="IndexerSearch\MoviesSearchService.cs" />
|
<Compile Include="IndexerSearch\MoviesSearchService.cs" />
|
||||||
<Compile Include="Indexers\AwesomeHD\AwesomeHDRssParser.cs" />
|
<Compile Include="Indexers\AwesomeHD\AwesomeHDRssParser.cs" />
|
||||||
|
|
|
@ -3,6 +3,7 @@ using NzbDrone.Core.IndexerSearch;
|
||||||
using NzbDrone.Core.MediaFiles.Events;
|
using NzbDrone.Core.MediaFiles.Events;
|
||||||
using NzbDrone.Core.Messaging.Commands;
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Tv
|
namespace NzbDrone.Core.Tv
|
||||||
{
|
{
|
||||||
|
@ -37,7 +38,7 @@ namespace NzbDrone.Core.Tv
|
||||||
|
|
||||||
if (movie.AddOptions.SearchForMovie)
|
if (movie.AddOptions.SearchForMovie)
|
||||||
{
|
{
|
||||||
_commandQueueManager.Push(new MoviesSearchCommand { MovieId = movie.Id});
|
_commandQueueManager.Push(new MoviesSearchCommand { MovieIds = new List<int> { movie.Id } });
|
||||||
}
|
}
|
||||||
|
|
||||||
movie.AddOptions = null;
|
movie.AddOptions = null;
|
||||||
|
|
|
@ -7,12 +7,12 @@ module.exports = {
|
||||||
},
|
},
|
||||||
|
|
||||||
Keys : {
|
Keys : {
|
||||||
DefaultProfileId : 'DefaultProfileId',
|
DefaultProfileId : 'RadarrDefaultProfileId',
|
||||||
DefaultRootFolderId : 'DefaultRootFolderId',
|
DefaultRootFolderId : 'RadarrDefaultRootFolderId',
|
||||||
UseSeasonFolder : 'UseSeasonFolder',
|
UseSeasonFolder : 'RadarrUseSeasonFolder',
|
||||||
DefaultSeriesType : 'DefaultSeriesType',
|
DefaultSeriesType : 'RadarrDefaultSeriesType',
|
||||||
MonitorEpisodes : 'MonitorEpisodes',
|
MonitorEpisodes : 'RadarrMonitorEpisodes',
|
||||||
AdvancedSettings : 'advancedSettings'
|
AdvancedSettings : 'RadarradvancedSettings'
|
||||||
},
|
},
|
||||||
|
|
||||||
getValueJson : function (key, defaultValue) {
|
getValueJson : function (key, defaultValue) {
|
||||||
|
@ -48,7 +48,6 @@ module.exports = {
|
||||||
},
|
},
|
||||||
|
|
||||||
setValue : function(key, value) {
|
setValue : function(key, value) {
|
||||||
|
|
||||||
console.log('Config: [{0}] => [{1}]'.format(key, value));
|
console.log('Config: [{0}] => [{1}]'.format(key, value));
|
||||||
|
|
||||||
if (this.getValue(key) === value.toString()) {
|
if (this.getValue(key) === value.toString()) {
|
||||||
|
|
|
@ -209,7 +209,7 @@ module.exports = Marionette.Layout.extend({
|
||||||
_moviesSearch : function() {
|
_moviesSearch : function() {
|
||||||
CommandController.Execute('moviesSearch', {
|
CommandController.Execute('moviesSearch', {
|
||||||
name : 'moviesSearch',
|
name : 'moviesSearch',
|
||||||
movieId : this.model.id
|
movieIds : [this.model.id]
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -182,6 +182,27 @@ module.exports = Marionette.Layout.extend({
|
||||||
tooltip : 'Missing Only',
|
tooltip : 'Missing Only',
|
||||||
icon : 'icon-sonarr-missing',
|
icon : 'icon-sonarr-missing',
|
||||||
callback : this._setFilter
|
callback : this._setFilter
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key : 'released',
|
||||||
|
title : '',
|
||||||
|
tooltip : 'Released',
|
||||||
|
icon : 'icon-sonarr-movie-released',
|
||||||
|
callback : this._setFilter
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key : 'announced',
|
||||||
|
title : '',
|
||||||
|
tooltip : 'Announced',
|
||||||
|
icon : 'icon-sonarr-movie-announced',
|
||||||
|
callback : this._setFilter
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key : 'cinemas',
|
||||||
|
title : '',
|
||||||
|
tooltip : 'In Cinemas',
|
||||||
|
icon : 'icon-sonarr-movie-cinemas',
|
||||||
|
callback : this._setFilter
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
|
@ -67,6 +67,21 @@ var Collection = PageableCollection.extend({
|
||||||
'missing' : [
|
'missing' : [
|
||||||
'downloaded',
|
'downloaded',
|
||||||
false
|
false
|
||||||
|
],
|
||||||
|
'released' : [
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
function(model) { return model.getStatus() == "released"; }
|
||||||
|
],
|
||||||
|
'announced' : [
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
function(model) { return model.getStatus() == "announced"; }
|
||||||
|
],
|
||||||
|
'cinemas' : [
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
function(model) { return model.getStatus() == "inCinemas"; }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-2 col-sm-pull-1">
|
<div class="col-sm-2 col-sm-pull-1">
|
||||||
<input type="number" name="downloadedMovieScanInterval" class="form-control" />
|
<input type="number" name="downloadedEpisodesScanInterval" class="form-control" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
|
@ -165,11 +165,11 @@ module.exports = Marionette.Layout.extend({
|
||||||
}));
|
}));
|
||||||
CommandController.bindToCommand({
|
CommandController.bindToCommand({
|
||||||
element : this.$('.x-search-selected'),
|
element : this.$('.x-search-selected'),
|
||||||
command : { name : 'episodeSearch' }
|
command : { name : 'moviesSearch' }
|
||||||
});
|
});
|
||||||
CommandController.bindToCommand({
|
CommandController.bindToCommand({
|
||||||
element : this.$('.x-search-missing'),
|
element : this.$('.x-search-missing'),
|
||||||
command : { name : 'missingEpisodeSearch' }
|
command : { name : 'missingMoviesSearch' }
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -187,20 +187,20 @@ module.exports = Marionette.Layout.extend({
|
||||||
if (selected.length === 0) {
|
if (selected.length === 0) {
|
||||||
Messenger.show({
|
Messenger.show({
|
||||||
type : 'error',
|
type : 'error',
|
||||||
message : 'No episodes selected'
|
message : 'No movies selected'
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var ids = _.pluck(selected, 'id');
|
var ids = _.pluck(selected, 'id');
|
||||||
CommandController.Execute('episodeSearch', {
|
CommandController.Execute('moviesSearch', {
|
||||||
name : 'episodeSearch',
|
name : 'moviesSearch',
|
||||||
episodeIds : ids
|
movieIds : ids
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
_searchMissing : function() {
|
_searchMissing : function() {
|
||||||
if (window.confirm('Are you sure you want to search for {0} missing movies? '.format(this.collection.state.totalRecords) +
|
if (window.confirm('Are you sure you want to search for {0} missing movies? '.format(this.collection.state.totalRecords) +
|
||||||
'One API request to each indexer will be used for each movie. ' + 'This cannot be stopped once started.')) {
|
'One API request to each indexer will be used for each movie. ' + 'This cannot be stopped once started.')) {
|
||||||
CommandController.Execute('missingEpisodeSearch', { name : 'missingEpisodeSearch' });
|
CommandController.Execute('missingMoviesSearch', { name : 'missingMoviesSearch' });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_toggleMonitoredOfSelected : function() {
|
_toggleMonitoredOfSelected : function() {
|
||||||
|
@ -209,7 +209,7 @@ module.exports = Marionette.Layout.extend({
|
||||||
if (selected.length === 0) {
|
if (selected.length === 0) {
|
||||||
Messenger.show({
|
Messenger.show({
|
||||||
type : 'error',
|
type : 'error',
|
||||||
message : 'No episodes selected'
|
message : 'No movies selected'
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue