From 2082fac21cbbfc69f87fc16946179fce02033fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Wed, 18 Jan 2017 14:33:11 +0100 Subject: [PATCH] Add new torrent button in movies view --- src/public/js/components/movies/list.js | 13 ++-- src/public/js/components/movies/torrents.js | 67 +++++++++++++++++++++ 2 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 src/public/js/components/movies/torrents.js diff --git a/src/public/js/components/movies/list.js b/src/public/js/components/movies/list.js index d66bffe..d3a8f00 100644 --- a/src/public/js/components/movies/list.js +++ b/src/public/js/components/movies/list.js @@ -1,5 +1,6 @@ import React from 'react' +import TorrentsButton from './torrents' import ListPosters from '../list/posters' import ListDetails from '../list/details' import Loader from '../loader/loader' @@ -37,13 +38,11 @@ class MovieButtons extends React.Component { Download } - {this.props.movie.torrents && this.props.movie.torrents.map(function(torrent, index) { - return ( - - {torrent.quality} Torrent - - )} - )} + + {this.props.movie.torrents && + + } + IMDB diff --git a/src/public/js/components/movies/torrents.js b/src/public/js/components/movies/torrents.js new file mode 100644 index 0000000..274f797 --- /dev/null +++ b/src/public/js/components/movies/torrents.js @@ -0,0 +1,67 @@ +import React from 'react' + +import { DropdownButton, MenuItem } from 'react-bootstrap' + +export default function TorrentsButton(props) { + const entries = buildMenuItems(props.torrents); + return ( + + {entries.map(function(e, index) { + switch (e.type) { + case 'header': + return ( + {e.value} + ); + case 'divider': + return ( + + ); + case 'entry': + return ( + {e.quality} + ); + } + })} + + ); +} + +function buildMenuItems(torrents) { + // Organise by source + let sources = {} + for (let torrent of torrents) { + if (!sources[torrent.source]) { + sources[torrent.source] = []; + } + sources[torrent.source].push(torrent); + } + + // Build the array of entries + let entries = []; + let sourceNames = Object.keys(sources); + let dividerCount = sourceNames.length - 1; + for (let source of sourceNames) { + // Push the title + entries.push({ + type: "header", + value: source, + }); + + // Push the torrents + for (let torrent of sources[source]) { + entries.push({ + type: "entry", + quality: torrent.quality, + url: torrent.url, + }); + } + + // Push the divider + if (dividerCount > 0) { + dividerCount--; + entries.push({ type: "divider" }); + } + } + + return entries; +}