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 (
+
+ );
+ case 'divider':
+ return (
+
+ );
+ case 'entry':
+ return (
+
+ );
+ }
+ })}
+
+ );
+}
+
+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;
+}