2017-08-25 15:43:54 +02:00
|
|
|
import { filter_subscribe, filter_unsubscribe } from './filter_subscribe';
|
|
|
|
import { unsubscribe } from './subscribe';
|
|
|
|
import { push } from 'react-router-redux';
|
|
|
|
|
|
|
|
export const UNION = 'UNION';
|
|
|
|
export const SUBTRACT = 'SUBTRACT';
|
|
|
|
export const EXCLUSIVE = 'EXCLUSIVE';
|
|
|
|
|
2017-08-26 02:01:31 +02:00
|
|
|
export default function selectTorrent(ids, action, navigate=true) {
|
2017-08-25 15:43:54 +02:00
|
|
|
return (dispatch, getState) => {
|
|
|
|
const previous = new Set(getState().selection);
|
2017-08-26 01:59:53 +02:00
|
|
|
dispatch({ type: action, ids });
|
2017-08-25 15:43:54 +02:00
|
|
|
|
|
|
|
const state = getState();
|
|
|
|
const next = new Set(state.selection);
|
|
|
|
const filter_subscriptions = state.filter_subscribe;
|
|
|
|
const subscriptions = state.subscribe;
|
2017-09-12 20:33:40 +02:00
|
|
|
const { peers, files, trackers } = state;
|
2017-08-25 15:43:54 +02:00
|
|
|
|
|
|
|
const added = next.difference(previous);
|
|
|
|
const removed = previous.difference(next);
|
|
|
|
|
|
|
|
added.forEach(t => {
|
|
|
|
const criteria = [
|
2017-08-26 01:59:53 +02:00
|
|
|
{ field: "torrent_id", op: "==", value: t }
|
2017-08-25 15:43:54 +02:00
|
|
|
];
|
|
|
|
dispatch(filter_subscribe("peer", criteria));
|
|
|
|
dispatch(filter_subscribe("file", criteria));
|
|
|
|
dispatch(filter_subscribe("tracker", criteria));
|
|
|
|
});
|
|
|
|
|
|
|
|
removed.forEach(t => {
|
|
|
|
/* Remove filter subscriptions */
|
|
|
|
const serials = filter_subscriptions
|
|
|
|
.filter(sub => sub.criteria[0] && sub.criteria[0].value === t)
|
|
|
|
.map(sub => sub.serial);
|
|
|
|
serials.forEach(serial => dispatch(filter_unsubscribe(serial)));
|
|
|
|
/* Remove resource subscriptions */
|
2017-08-26 01:59:53 +02:00
|
|
|
const _ids = [
|
2017-08-25 15:43:54 +02:00
|
|
|
...Object.values(files)
|
|
|
|
.filter(file => file.torrent_id === t)
|
|
|
|
.map(file => file.id)
|
|
|
|
//...Object.values(peers)
|
|
|
|
// .filter(peer => peer.torrent_id === t)
|
|
|
|
// .map(peer => peer.id),
|
|
|
|
//...Object.values(trackers)
|
|
|
|
// .filter(tracker => tracker.torrent_id === t)
|
|
|
|
// .map(tracker => tracker.id),
|
|
|
|
];
|
2017-08-26 01:59:53 +02:00
|
|
|
if (_ids.length > 0) {
|
|
|
|
dispatch(unsubscribe(..._ids));
|
2017-08-25 15:43:54 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2017-08-26 02:01:31 +02:00
|
|
|
if (navigate) {
|
|
|
|
const url_torrents = state.selection.slice(0, 3);
|
|
|
|
if (url_torrents.length > 0) {
|
|
|
|
dispatch(push(`/torrents/${url_torrents}`));
|
|
|
|
} else {
|
|
|
|
dispatch(push("/"));
|
|
|
|
}
|
2017-08-25 15:43:54 +02:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|