mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
Parse Files and Grabs in Release Info
This commit is contained in:
@@ -24,6 +24,8 @@
|
||||
|
||||
.age,
|
||||
.size,
|
||||
.files,
|
||||
.grabs,
|
||||
.peers {
|
||||
composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css';
|
||||
|
||||
|
@@ -31,6 +31,8 @@
|
||||
|
||||
.age,
|
||||
.size,
|
||||
.files,
|
||||
.grabs,
|
||||
.peers {
|
||||
composes: cell;
|
||||
|
||||
|
@@ -32,6 +32,8 @@ class SearchIndexRow extends Component {
|
||||
infoUrl,
|
||||
indexer,
|
||||
size,
|
||||
files,
|
||||
grabs,
|
||||
seeders,
|
||||
leechers,
|
||||
indexerFlags,
|
||||
@@ -117,6 +119,28 @@ class SearchIndexRow extends Component {
|
||||
);
|
||||
}
|
||||
|
||||
if (column.name === 'files') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
key={column.name}
|
||||
className={styles[column.name]}
|
||||
>
|
||||
{files}
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
if (column.name === 'grabs') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
key={column.name}
|
||||
className={styles[column.name]}
|
||||
>
|
||||
{grabs}
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
if (column.name === 'peers') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
@@ -218,6 +242,8 @@ SearchIndexRow.propTypes = {
|
||||
indexerId: PropTypes.number.isRequired,
|
||||
indexer: PropTypes.string.isRequired,
|
||||
size: PropTypes.number.isRequired,
|
||||
files: PropTypes.number,
|
||||
grabs: PropTypes.number,
|
||||
seeders: PropTypes.number,
|
||||
leechers: PropTypes.number,
|
||||
indexerFlags: PropTypes.arrayOf(PropTypes.string).isRequired,
|
||||
|
@@ -1,7 +1,5 @@
|
||||
import React from 'react';
|
||||
import { createAction } from 'redux-actions';
|
||||
import Icon from 'Components/Icon';
|
||||
import { filterBuilderTypes, filterBuilderValueTypes, icons, sortDirections } from 'Helpers/Props';
|
||||
import { filterBuilderTypes, filterBuilderValueTypes, sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import translate from 'Utilities/String/translate';
|
||||
@@ -60,6 +58,18 @@ export const defaultState = {
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'files',
|
||||
label: translate('Files'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'grabs',
|
||||
label: translate('Grabs'),
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'peers',
|
||||
label: translate('Peers'),
|
||||
@@ -74,7 +84,6 @@ export const defaultState = {
|
||||
},
|
||||
{
|
||||
name: 'indexerFlags',
|
||||
label: React.createElement(Icon, { name: icons.FLAG }),
|
||||
columnLabel: 'Indexer Flags',
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
@@ -146,6 +155,16 @@ export const defaultState = {
|
||||
label: translate('Size'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'files',
|
||||
label: translate('Files'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'grabs',
|
||||
label: translate('Grabs'),
|
||||
type: filterBuilderTypes.NUMBER
|
||||
},
|
||||
{
|
||||
name: 'seeders',
|
||||
label: translate('Seeders'),
|
||||
|
@@ -483,6 +483,8 @@ namespace NzbDrone.Core.Indexers.Cardigann
|
||||
InfoHash = x.InfoHash,
|
||||
Seeders = (int?)x.Seeders,
|
||||
Peers = (int?)x.Peers,
|
||||
Grabs = (int?)x.Grabs,
|
||||
Files = (int?)x.Files,
|
||||
Category = x.Category
|
||||
}));
|
||||
|
||||
|
@@ -82,6 +82,8 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
{
|
||||
releaseInfo = base.ProcessItem(item, releaseInfo);
|
||||
releaseInfo.ImdbId = GetImdbId(item);
|
||||
releaseInfo.Grabs = GetGrabs(item);
|
||||
releaseInfo.Files = GetFiles(item);
|
||||
|
||||
return releaseInfo;
|
||||
}
|
||||
@@ -168,6 +170,32 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected virtual int GetGrabs(XElement item)
|
||||
{
|
||||
var grabsString = TryGetNewznabAttribute(item, "grabs");
|
||||
int grabs;
|
||||
|
||||
if (!grabsString.IsNullOrWhiteSpace() && int.TryParse(grabsString, out grabs))
|
||||
{
|
||||
return grabs;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected virtual int GetFiles(XElement item)
|
||||
{
|
||||
var filesString = TryGetNewznabAttribute(item, "files");
|
||||
int files;
|
||||
|
||||
if (!filesString.IsNullOrWhiteSpace() && int.TryParse(filesString, out files))
|
||||
{
|
||||
return files;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected virtual int GetImdbYear(XElement item)
|
||||
{
|
||||
var imdbYearString = TryGetNewznabAttribute(item, "imdbyear");
|
||||
|
@@ -17,6 +17,8 @@ namespace NzbDrone.Core.Parser.Model
|
||||
public string Indexer { get; set; }
|
||||
public int IndexerPriority { get; set; }
|
||||
public DownloadProtocol DownloadProtocol { get; set; }
|
||||
public int? Grabs { get; set; }
|
||||
public int? Files { get; set; }
|
||||
public int TvdbId { get; set; }
|
||||
public int TvRageId { get; set; }
|
||||
public int ImdbId { get; set; }
|
||||
|
@@ -14,6 +14,8 @@ namespace Prowlarr.Api.V1.Search
|
||||
public double AgeHours { get; set; }
|
||||
public double AgeMinutes { get; set; }
|
||||
public long Size { get; set; }
|
||||
public int? Files { get; set; }
|
||||
public int? Grabs { get; set; }
|
||||
public int IndexerId { get; set; }
|
||||
public string Indexer { get; set; }
|
||||
public string SubGroup { get; set; }
|
||||
@@ -53,6 +55,8 @@ namespace Prowlarr.Api.V1.Search
|
||||
AgeHours = releaseInfo.AgeHours,
|
||||
AgeMinutes = releaseInfo.AgeMinutes,
|
||||
Size = releaseInfo.Size ?? 0,
|
||||
Files = releaseInfo.Files,
|
||||
Grabs = releaseInfo.Grabs,
|
||||
IndexerId = releaseInfo.IndexerId,
|
||||
Indexer = releaseInfo.Indexer,
|
||||
Title = releaseInfo.Title,
|
||||
|
Reference in New Issue
Block a user