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