Newznab Responses for Caps and Movie Search (rough)

This commit is contained in:
Qstick
2020-10-21 01:47:20 -04:00
parent 84cbfe870f
commit cfb1a80c58
46 changed files with 526 additions and 1226 deletions

View File

@@ -95,25 +95,7 @@ export const defaultState = {
],
sortPredicates: {
...sortPredicates,
studio: function(item) {
const studio = item.studio;
return studio ? studio.toLowerCase() : '';
},
collection: function(item) {
const { collection ={} } = item;
return collection.name;
},
ratings: function(item) {
const { ratings = {} } = item;
return ratings.value;
}
...sortPredicates
},
selectedFilterKey: 'all',
@@ -122,12 +104,6 @@ export const defaultState = {
filterPredicates,
filterBuilderProps: [
{
name: 'monitored',
label: translate('Monitored'),
type: filterBuilderTypes.EXACT,
valueType: filterBuilderValueTypes.BOOL
},
{
name: 'title',
label: 'Indexer Name',

View File

@@ -1,11 +1,10 @@
import _ from 'lodash';
import { createAction } from 'redux-actions';
import { filterTypePredicates, filterTypes, sortDirections } from 'Helpers/Props';
import { sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
// import { batchActions } from 'redux-batched-actions';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import dateFilterPredicate from 'Utilities/Date/dateFilterPredicate';
import padNumber from 'Utilities/Number/padNumber';
import translate from 'Utilities/String/translate';
import { updateItem } from './baseActions';
import createFetchHandler from './Creators/createFetchHandler';
@@ -24,123 +23,12 @@ export const filters = [
key: 'all',
label: translate('All'),
filters: []
},
{
key: 'monitored',
label: translate('MonitoredOnly'),
filters: [
{
key: 'monitored',
value: true,
type: filterTypes.EQUAL
}
]
},
{
key: 'unmonitored',
label: translate('Unmonitored'),
filters: [
{
key: 'monitored',
value: false,
type: filterTypes.EQUAL
}
]
},
{
key: 'missing',
label: translate('Missing'),
filters: [
{
key: 'monitored',
value: true,
type: filterTypes.EQUAL
},
{
key: 'hasFile',
value: false,
type: filterTypes.EQUAL
}
]
},
{
key: 'wanted',
label: translate('Wanted'),
filters: [
{
key: 'monitored',
value: true,
type: filterTypes.EQUAL
},
{
key: 'hasFile',
value: false,
type: filterTypes.EQUAL
},
{
key: 'isAvailable',
value: true,
type: filterTypes.EQUAL
}
]
},
{
key: 'cutoffunmet',
label: translate('CutoffUnmet'),
filters: [
{
key: 'monitored',
value: true,
type: filterTypes.EQUAL
},
{
key: 'hasFile',
value: true,
type: filterTypes.EQUAL
},
{
key: 'qualityCutoffNotMet',
value: true,
type: filterTypes.EQUAL
}
]
}
];
export const filterPredicates = {
added: function(item, filterValue, type) {
return dateFilterPredicate(item.added, filterValue, type);
},
collection: function(item, filterValue, type) {
const predicate = filterTypePredicates[type];
const { collection } = item;
return predicate(collection ? collection.name : '', filterValue);
},
inCinemas: function(item, filterValue, type) {
return dateFilterPredicate(item.inCinemas, filterValue, type);
},
physicalRelease: function(item, filterValue, type) {
return dateFilterPredicate(item.physicalRelease, filterValue, type);
},
digitalRelease: function(item, filterValue, type) {
return dateFilterPredicate(item.digitalRelease, filterValue, type);
},
ratings: function(item, filterValue, type) {
const predicate = filterTypePredicates[type];
return predicate(item.ratings.value * 10, filterValue);
},
qualityCutoffNotMet: function(item) {
const { movieFile = {} } = item;
return movieFile.qualityCutoffNotMet;
}
};
@@ -165,33 +53,6 @@ export const sortPredicates = {
}
return result;
},
movieStatus: function(item) {
let result = 0;
let qualityName = '';
const hasMovieFile = !!item.movieFile;
if (item.isAvailable) {
result++;
}
if (item.monitored) {
result += 2;
}
if (hasMovieFile) {
// TODO: Consider Quality Weight for Sorting within status of hasMovie
if (item.movieFile.qualityCutoffNotMet) {
result += 4;
} else {
result += 8;
}
qualityName = item.movieFile.quality.quality.name;
}
return padNumber(result.toString(), 2) + qualityName;
}
};
@@ -205,7 +66,7 @@ export const defaultState = {
isSaving: false,
saveError: null,
items: [],
sortKey: 'sortTitle',
sortKey: 'name',
sortDirection: sortDirections.ASCENDING,
pendingChanges: {}
};

View File

@@ -1,74 +0,0 @@
import { batchActions } from 'redux-batched-actions';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import { set, update } from './baseActions';
import createHandleActions from './Creators/createHandleActions';
//
// Variables
export const section = 'movieTitles';
//
// State
export const defaultState = {
isFetching: false,
isPopulated: false,
error: null,
items: []
};
//
// Actions Types
export const FETCH_MOVIE_TITLES = 'movieTitles/fetchMovieTitles';
//
// Action Creators
export const fetchMovieTitles = createThunk(FETCH_MOVIE_TITLES);
//
// Action Handlers
export const actionHandlers = handleThunks({
[FETCH_MOVIE_TITLES]: function(getState, payload, dispatch) {
dispatch(set({ section, isFetching: true }));
const promise = createAjaxRequest({
url: '/alttitle',
data: payload
}).request;
promise.done((data) => {
dispatch(batchActions([
update({ section, data }),
set({
section,
isFetching: false,
isPopulated: true,
error: null
})
]));
});
promise.fail((xhr) => {
dispatch(set({
section,
isFetching: false,
isPopulated: false,
error: xhr
}));
});
}
});
//
// Reducers
export const reducers = createHandleActions({
}, defaultState, section);