Exclude self toots from regular expression filter (#4245)

* Exclude self toots from regular expression filter

* refactor
This commit is contained in:
Yamagishi Kazutoshi 2017-07-18 22:20:38 +09:00 committed by Eugen Rochko
parent 407073d7a2
commit f5382ec085

View File

@ -10,7 +10,17 @@ const makeGetStatusIds = () => createSelector([
(state, { type }) => state.getIn(['timelines', type, 'items'], ImmutableList()), (state, { type }) => state.getIn(['timelines', type, 'items'], ImmutableList()),
(state) => state.get('statuses'), (state) => state.get('statuses'),
(state) => state.getIn(['meta', 'me']), (state) => state.getIn(['meta', 'me']),
], (columnSettings, statusIds, statuses, me) => statusIds.filter(id => { ], (columnSettings, statusIds, statuses, me) => {
const rawRegex = columnSettings.getIn(['regex', 'body'], '').trim();
let regex = null;
try {
regex = rawRegex && new RegExp(rawRegex, 'i');
} catch (e) {
// Bad regex, don't affect filters
}
return statusIds.filter(id => {
const statusForId = statuses.get(id); const statusForId = statuses.get(id);
let showStatus = true; let showStatus = true;
@ -22,19 +32,14 @@ const makeGetStatusIds = () => createSelector([
showStatus = showStatus && (statusForId.get('in_reply_to_id') === null || statusForId.get('in_reply_to_account_id') === me); showStatus = showStatus && (statusForId.get('in_reply_to_id') === null || statusForId.get('in_reply_to_account_id') === me);
} }
if (columnSettings.getIn(['regex', 'body'], '').trim().length > 0) { if (showStatus && regex && statusForId.get('account') !== me) {
try { const searchIndex = statusForId.get('reblog') ? statuses.getIn([statusForId.get('reblog'), 'search_index']) : statusForId.get('search_index');
if (showStatus) { showStatus = !regex.test(searchIndex);
const regex = new RegExp(columnSettings.getIn(['regex', 'body']).trim(), 'i');
showStatus = !regex.test(statusForId.get('reblog') ? statuses.getIn([statusForId.get('reblog'), 'search_index']) : statusForId.get('search_index'));
}
} catch(e) {
// Bad regex, don't affect filters
}
} }
return showStatus; return showStatus;
})); });
});
const makeMapStateToProps = () => { const makeMapStateToProps = () => {
const getStatusIds = makeGetStatusIds(); const getStatusIds = makeGetStatusIds();