Fix Search and Add Indexers

pull/2/head
Qstick 4 years ago
parent cfb1a80c58
commit 5f7d063c14

@ -10,12 +10,12 @@ import History from './History';
function createMapStateToProps() {
return createSelector(
(state) => state.history,
(state) => state.movies,
(history, movies) => {
(state) => state.indexers,
(history, indexers) => {
return {
isMoviesFetching: movies.isFetching,
isMoviesPopulated: movies.isPopulated,
moviesError: movies.error,
isMoviesFetching: indexers.isFetching,
isMoviesPopulated: indexers.isPopulated,
moviesError: indexers.error,
...history
};
}

@ -5,8 +5,6 @@ import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellCo
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableRow from 'Components/Table/TableRow';
import { icons } from 'Helpers/Props';
import MovieLanguage from 'Indexer/MovieLanguage';
import MovieQuality from 'Indexer/MovieQuality';
import MovieTitleLink from 'Indexer/MovieTitleLink';
import HistoryDetailsModal from './Details/HistoryDetailsModal';
import HistoryEventTypeCell from './HistoryEventTypeCell';
@ -52,9 +50,6 @@ class HistoryRow extends Component {
render() {
const {
movie,
quality,
languages,
qualityCutoffNotMet,
eventType,
sourceTitle,
date,
@ -93,77 +88,23 @@ class HistoryRow extends Component {
);
}
if (name === 'movies.sortTitle') {
return (
<TableRowCell key={name}>
<MovieTitleLink
titleSlug={movie.titleSlug}
title={movie.title}
/>
</TableRowCell>
);
}
if (name === 'languages') {
return (
<TableRowCell key={name}>
<MovieLanguage
languages={languages}
/>
</TableRowCell>
);
}
if (name === 'quality') {
return (
<TableRowCell key={name}>
<MovieQuality
quality={quality}
isCutoffMet={qualityCutoffNotMet}
/>
</TableRowCell>
);
}
if (name === 'date') {
return (
<RelativeDateCellConnector
key={name}
date={date}
/>
);
}
if (name === 'downloadClient') {
return (
<TableRowCell
key={name}
className={styles.downloadClient}
>
{data.downloadClient}
</TableRowCell>
);
}
if (name === 'indexer') {
return (
<TableRowCell
key={name}
className={styles.indexer}
>
{data.indexer}
{movie.name}
</TableRowCell>
);
}
if (name === 'releaseGroup') {
if (name === 'date') {
return (
<TableRowCell
<RelativeDateCellConnector
key={name}
className={styles.releaseGroup}
>
{data.releaseGroup}
</TableRowCell>
date={date}
/>
);
}
@ -205,9 +146,6 @@ class HistoryRow extends Component {
HistoryRow.propTypes = {
movieId: PropTypes.number,
movie: PropTypes.object.isRequired,
languages: PropTypes.arrayOf(PropTypes.object).isRequired,
quality: PropTypes.object.isRequired,
qualityCutoffNotMet: PropTypes.bool.isRequired,
eventType: PropTypes.string.isRequired,
sourceTitle: PropTypes.string.isRequired,
date: PropTypes.string.isRequired,

@ -35,50 +35,17 @@ export const defaultState = {
isModifiable: false
},
{
name: 'movies.sortTitle',
label: translate('Movie'),
isSortable: true,
isVisible: true
},
{
name: 'languages',
label: translate('Languages'),
isSortable: true,
isVisible: true
},
{
name: 'quality',
label: translate('Quality'),
name: 'indexer',
label: 'Indexer',
isSortable: true,
isVisible: true
},
{
name: 'customFormats',
label: translate('Formats'),
isSortable: false,
isVisible: true
},
{
name: 'date',
label: translate('Date'),
isSortable: true,
isVisible: true
},
{
name: 'downloadClient',
label: translate('DownloadClient'),
isVisible: false
},
{
name: 'indexer',
label: translate('Indexer'),
isVisible: false
},
{
name: 'releaseGroup',
label: translate('ReleaseGroup'),
isVisible: false
},
{
name: 'details',
columnLabel: translate('Details'),

@ -16,7 +16,6 @@ namespace NzbDrone.Core.Datastore.Migration
.WithColumn("IndexerId").AsInt32()
.WithColumn("SourceTitle").AsString()
.WithColumn("Date").AsDateTime()
.WithColumn("Quality").AsString()
.WithColumn("Data").AsString()
.WithColumn("EventType").AsInt32().Nullable()
.WithColumn("DownloadId").AsString().Nullable().Indexed();

@ -23,6 +23,7 @@ namespace NzbDrone.Core.History
public enum HistoryEventType
{
Unknown = 0,
ReleaseGrabbed = 1
ReleaseGrabbed = 1,
IndexerQuery = 2
}
}

@ -3,6 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using NLog;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.ThingiProvider.Events;
namespace NzbDrone.Core.History
{
@ -19,7 +22,9 @@ namespace NzbDrone.Core.History
List<History> Since(DateTime date, HistoryEventType? eventType);
}
public class HistoryService : IHistoryService
public class HistoryService : IHistoryService,
IHandle<ProviderDeletedEvent<IIndexer>>,
IHandle<IndexerQueryEvent>
{
private readonly IHistoryRepository _historyRepository;
private readonly Logger _logger;
@ -74,5 +79,23 @@ namespace NzbDrone.Core.History
{
return _historyRepository.Since(date, eventType);
}
public void Handle(IndexerQueryEvent message)
{
var history = new History
{
Date = DateTime.UtcNow,
IndexerId = message.IndexerId,
EventType = HistoryEventType.IndexerQuery,
SourceTitle = message.Query
};
_historyRepository.Insert(history);
}
public void Handle(ProviderDeletedEvent<IIndexer> message)
{
_historyRepository.DeleteForIndexers(new List<int> { message.ProviderId });
}
}
}

@ -8,6 +8,7 @@ using NzbDrone.Common.Instrumentation.Extensions;
using NzbDrone.Common.TPL;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.IndexerSearch.Definitions;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.IndexerSearch
@ -20,12 +21,15 @@ namespace NzbDrone.Core.IndexerSearch
public class NzbSearchService : ISearchForNzb
{
private readonly IEventAggregator _eventAggregator;
private readonly IIndexerFactory _indexerFactory;
private readonly Logger _logger;
public NzbSearchService(IIndexerFactory indexerFactory,
public NzbSearchService(IEventAggregator eventAggregator,
IIndexerFactory indexerFactory,
Logger logger)
{
_eventAggregator = eventAggregator;
_indexerFactory = indexerFactory;
_logger = logger;
}
@ -87,6 +91,8 @@ namespace NzbDrone.Core.IndexerSearch
{
var indexerReports = searchAction(indexerLocal);
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase.QueryTitles.Join(", ")));
lock (reports)
{
reports.AddRange(indexerReports);

@ -45,6 +45,7 @@ namespace NzbDrone.Core.Indexers
definition.Protocol = provider.Protocol;
definition.Privacy = provider.Privacy;
definition.SupportsRss = provider.SupportsRss;
definition.SupportsSearch = provider.SupportsSearch;
definition.Capabilities = provider.Capabilities;
}

@ -0,0 +1,16 @@
using NzbDrone.Common.Messaging;
namespace NzbDrone.Core.Indexers
{
public class IndexerQueryEvent : IEvent
{
public int IndexerId { get; set; }
public string Query { get; set; }
public IndexerQueryEvent(int indexerId, string query)
{
IndexerId = indexerId;
Query = query;
}
}
}

@ -1,4 +1,4 @@
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.ThingiProvider;

@ -1,7 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using Nancy.ModelBinding;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Exceptions;
using NzbDrone.Core.IndexerSearch;
using NzbDrone.Core.Parser.Model;
@ -24,17 +27,19 @@ namespace Prowlarr.Api.V1.Search
private List<SearchResource> GetAll()
{
if (Request.Query.query.HasValue)
var request = this.Bind<SearchRequest>();
if (request.Query.IsNotNullOrWhiteSpace())
{
var indexerIds = Request.Query.indexerIds.HasValue ? (List<int>)Request.Query.indexerIds.split(',') : new List<int>();
var indexerIds = request.IndexerIds ?? new List<int>();
if (indexerIds.Count > 0)
{
return GetSearchReleases(Request.Query.query, indexerIds);
return GetSearchReleases(request.Query, indexerIds);
}
else
{
return GetSearchReleases(Request.Query.query, null);
return GetSearchReleases(request.Query, null);
}
}

@ -0,0 +1,10 @@
using System.Collections.Generic;
namespace Prowlarr.Api.V1.Search
{
public class SearchRequest
{
public List<int> IndexerIds { get; set; }
public string Query { get; set; }
}
}
Loading…
Cancel
Save