Add torrent metadata
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing

This commit is contained in:
Grégoire Delattre 2020-04-08 18:17:25 +02:00
parent 4b26080193
commit 199d216323
10 changed files with 71 additions and 36 deletions

View File

@ -9,6 +9,7 @@ import (
"git.quimbo.fr/odwrtw/canape/backend/auth" "git.quimbo.fr/odwrtw/canape/backend/auth"
"git.quimbo.fr/odwrtw/canape/backend/web" "git.quimbo.fr/odwrtw/canape/backend/web"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/odwrtw/papi"
polochon "github.com/odwrtw/polochon/lib" polochon "github.com/odwrtw/polochon/lib"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@ -17,6 +18,7 @@ import (
func DownloadHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { func DownloadHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
var data struct { var data struct {
URL string `json:"url"` URL string `json:"url"`
Metadata *papi.TorrentMetadata `json:"metadata"`
} }
err := json.NewDecoder(r.Body).Decode(&data) err := json.NewDecoder(r.Body).Decode(&data)
if err != nil { if err != nil {
@ -34,7 +36,7 @@ func DownloadHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error
return env.RenderError(w, err) return env.RenderError(w, err)
} }
err = client.AddTorrent(data.URL) err = client.AddTorrent(data.URL, data.Metadata)
if err != nil { if err != nil {
return env.RenderError(w, err) return env.RenderError(w, err)
} }

View File

@ -2,11 +2,12 @@ import { configureAxios, request } from "../requests";
import { addAlertOk } from "./alerts"; import { addAlertOk } from "./alerts";
export function addTorrent(url) { export function addTorrent(torrent) {
return request( return request(
"ADD_TORRENT", "ADD_TORRENT",
configureAxios().post("/torrents", { configureAxios().post("/torrents", {
url: url, url: torrent.url,
metadata: torrent.metadata,
}), }),
[addAlertOk("Torrent added")] [addAlertOk("Torrent added")]
); );

View File

@ -27,8 +27,8 @@ const buildMenuItems = (torrents) => {
entries.push({ entries.push({
type: "entry", type: "entry",
quality: torrent.quality, quality: torrent.quality,
url: torrent.url,
size: torrent.size, size: torrent.size,
torrent: torrent,
}); });
}); });
@ -109,7 +109,7 @@ export const TorrentsButton = ({ torrents, search, searching, url }) => {
return ( return (
<Dropdown.Item <Dropdown.Item
key={index} key={index}
onClick={() => dispatch(addTorrent(e.url))} onClick={() => dispatch(addTorrent(e.torrent))}
> >
{e.quality} {e.quality}
{e.size !== 0 && ( {e.size !== 0 && (

View File

@ -25,7 +25,7 @@ const AddTorrent = () => {
if (url === "") { if (url === "") {
return; return;
} }
dispatch(addTorrent(url)); dispatch(addTorrent({ url: url, metdata: null }));
setUrl(""); setUrl("");
}; };

View File

@ -163,7 +163,9 @@ const Torrent = ({ torrent }) => {
<div className="align-self-end ml-3"> <div className="align-self-end ml-3">
<i <i
className="fa fa-cloud-download clickable" className="fa fa-cloud-download clickable"
onClick={() => dispatch(addTorrent(torrent.url))} onClick={() =>
dispatch(addTorrent({ url: torrent.url, metadata: null }))
}
></i> ></i>
</div> </div>
</div> </div>

View File

@ -1,5 +1,4 @@
import { produce } from "immer"; import { produce } from "immer";
import { formatTorrents } from "../utils";
const defaultState = { const defaultState = {
loading: false, loading: false,
@ -9,10 +8,33 @@ const defaultState = {
exploreOptions: {}, exploreOptions: {},
}; };
const formatTorrents = (movie) => {
if (!movie.torrents || movie.torrents.length == 0) {
return undefined;
}
let torrentMap = new Map();
movie.torrents.forEach((torrent) => {
if (!torrentMap.has(torrent.source)) {
torrentMap.set(torrent.source, new Map());
}
torrent.metadata = {
type: "movie",
imdb_id: movie.imdb_id, // eslint-disable-line camelcase
quality: torrent.quality,
};
torrentMap.get(torrent.source).set(torrent.quality, torrent);
});
return torrentMap;
};
const formatMovie = (movie) => { const formatMovie = (movie) => {
movie.fetchingDetails = false; movie.fetchingDetails = false;
movie.fetchingSubtitles = false; movie.fetchingSubtitles = false;
movie.torrents = formatTorrents(movie.torrents); movie.torrents = formatTorrents(movie);
return movie; return movie;
}; };

View File

@ -1,14 +1,38 @@
import { produce } from "immer"; import { produce } from "immer";
import { formatTorrents } from "../utils";
const defaultState = { const defaultState = {
loading: false, loading: false,
show: {}, show: {},
}; };
const formatTorrents = (episode) => {
if (!episode.torrents || episode.torrents.length == 0) {
return undefined;
}
let torrentMap = new Map();
episode.torrents.forEach((torrent) => {
if (!torrentMap.has(torrent.source)) {
torrentMap.set(torrent.source, new Map());
}
torrent.metadata = {
type: "episode",
imdb_id: episode.show_imdb_id, // eslint-disable-line camelcase
quality: torrent.quality,
season: episode.season,
episode: episode.episode,
};
torrentMap.get(torrent.source).set(torrent.quality, torrent);
});
return torrentMap;
};
const formatEpisode = (episode) => { const formatEpisode = (episode) => {
// Format the episode's torrents // Format the episode's torrents
episode.torrents = formatTorrents(episode.torrents); episode.torrents = formatTorrents(episode);
// Set the default fetching data // Set the default fetching data
episode.fetching = false; episode.fetching = false;

View File

@ -31,19 +31,3 @@ export const prettySize = (fileSizeInBytes) => {
return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i]; return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
}; };
export const formatTorrents = (torrents = []) => {
if (!torrents || torrents.length == 0) {
return undefined;
}
let torrentMap = new Map();
torrents.forEach((torrent) => {
if (!torrentMap.has(torrent.source)) {
torrentMap.set(torrent.source, new Map());
}
torrentMap.get(torrent.source).set(torrent.quality, torrent);
});
return torrentMap;
};

4
go.mod
View File

@ -15,8 +15,8 @@ require (
github.com/mattn/go-sqlite3 v1.10.0 // indirect github.com/mattn/go-sqlite3 v1.10.0 // indirect
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
github.com/odwrtw/errors v0.0.0-20170604160533-c747b9d17833 github.com/odwrtw/errors v0.0.0-20170604160533-c747b9d17833
github.com/odwrtw/papi v0.0.0-20190511132159-936937ad8b6a github.com/odwrtw/papi v0.0.0-20200408160729-930e92b452fd
github.com/odwrtw/polochon v0.0.0-20200404170220-273fe65c963b github.com/odwrtw/polochon v0.0.0-20200408160701-0455bb96acb0
github.com/phyber/negroni-gzip v0.0.0-20180113114010-ef6356a5d029 github.com/phyber/negroni-gzip v0.0.0-20180113114010-ef6356a5d029
github.com/pioz/tvdb v0.0.0-20190503215423-f45c687faba9 // indirect github.com/pioz/tvdb v0.0.0-20190503215423-f45c687faba9 // indirect
github.com/robfig/cron v1.1.0 github.com/robfig/cron v1.1.0

12
go.sum
View File

@ -135,16 +135,16 @@ github.com/odwrtw/imdb-watchlist v0.0.0-20190417175016-b7a9f7503d69 h1:ow6b/4Jj7
github.com/odwrtw/imdb-watchlist v0.0.0-20190417175016-b7a9f7503d69/go.mod h1:o2tLH95CtNdqhDb0aS2NbU+1I4PmaNsODpr33Ry0JC0= github.com/odwrtw/imdb-watchlist v0.0.0-20190417175016-b7a9f7503d69/go.mod h1:o2tLH95CtNdqhDb0aS2NbU+1I4PmaNsODpr33Ry0JC0=
github.com/odwrtw/papi v0.0.0-20190413103029-bd5bfea85ae6 h1:bF8XKFfYNY4quRdqJ5E9ERd+FdR26H1X1Z2fNRGePSk= github.com/odwrtw/papi v0.0.0-20190413103029-bd5bfea85ae6 h1:bF8XKFfYNY4quRdqJ5E9ERd+FdR26H1X1Z2fNRGePSk=
github.com/odwrtw/papi v0.0.0-20190413103029-bd5bfea85ae6/go.mod h1:CXotdtODLpW0/yuFV5XH8Rmrj0eAfPLvdMKykPM2WCk= github.com/odwrtw/papi v0.0.0-20190413103029-bd5bfea85ae6/go.mod h1:CXotdtODLpW0/yuFV5XH8Rmrj0eAfPLvdMKykPM2WCk=
github.com/odwrtw/papi v0.0.0-20190511132159-936937ad8b6a h1:9mdPet/ianrckPWR2jSekoafz6BaqbF7kPXLnDEIKu8= github.com/odwrtw/papi v0.0.0-20200408160729-930e92b452fd h1:LsBK0gVXC8oRxyAwvkCg5fQWTD678Jl7n6a8MZpdUKo=
github.com/odwrtw/papi v0.0.0-20190511132159-936937ad8b6a/go.mod h1:eY0skvVHJBwbSJ18uq2c1T4SvhdEV8R0XFSb0zKh5Yo= github.com/odwrtw/papi v0.0.0-20200408160729-930e92b452fd/go.mod h1:eY0skvVHJBwbSJ18uq2c1T4SvhdEV8R0XFSb0zKh5Yo=
github.com/odwrtw/polochon v0.0.0-20200404170220-273fe65c963b h1:XBJs10QfMcVOr+jMpB2k8Pwfe4ohIWNMfNGStJdi1Pg= github.com/odwrtw/polochon v0.0.0-20200408160701-0455bb96acb0 h1:p0pXoG89JVL/bZWJpqu2KRQwCU44yYnNnoP46SIPNPQ=
github.com/odwrtw/polochon v0.0.0-20200404170220-273fe65c963b/go.mod h1:6/D6IYxfGqRi8KioWN8ViiwssUdjhZV+U7gw5Xb8Aqk= github.com/odwrtw/polochon v0.0.0-20200408160701-0455bb96acb0/go.mod h1:sAYf/A5tDmins2GHZn2mEFarmYltAZv+bcmSKSxDUaI=
github.com/odwrtw/tpb v0.0.0-20200130133144-c846aa382c6f h1:fwEIGT+o3e8+XkBqrwsE3/+9ketTQXflPhCkv3/w990= github.com/odwrtw/tpb v0.0.0-20200130133144-c846aa382c6f h1:fwEIGT+o3e8+XkBqrwsE3/+9ketTQXflPhCkv3/w990=
github.com/odwrtw/tpb v0.0.0-20200130133144-c846aa382c6f/go.mod h1:updLvMbQo2xHoz94MX9+GqmSoKhf6E8fs/J+wLvvu6A= github.com/odwrtw/tpb v0.0.0-20200130133144-c846aa382c6f/go.mod h1:updLvMbQo2xHoz94MX9+GqmSoKhf6E8fs/J+wLvvu6A=
github.com/odwrtw/trakttv v0.0.0-20200404161731-0d594827e4f9 h1:PuQLHO75MXUsJpf9BcTVxvR/FCkdn1MZnZt6h3o6cJI= github.com/odwrtw/trakttv v0.0.0-20200404161731-0d594827e4f9 h1:PuQLHO75MXUsJpf9BcTVxvR/FCkdn1MZnZt6h3o6cJI=
github.com/odwrtw/trakttv v0.0.0-20200404161731-0d594827e4f9/go.mod h1:I2ogRfOYYqNpMhljPYdFUVUrLbZQ89Ba7QdfiW6EcJ0= github.com/odwrtw/trakttv v0.0.0-20200404161731-0d594827e4f9/go.mod h1:I2ogRfOYYqNpMhljPYdFUVUrLbZQ89Ba7QdfiW6EcJ0=
github.com/odwrtw/transmission v0.0.0-20170515140915-08885b3058e7 h1:NZz8yuBWWG4o3EGdoMap4o+JPKLBhqeSQ7nTfX6XPos= github.com/odwrtw/transmission v0.0.0-20200408122227-b562b9fbcbee h1:BttuvaEGtpe3rL7zm+e2RwVkj1DBo/Mb6XdbWd0a7ds=
github.com/odwrtw/transmission v0.0.0-20170515140915-08885b3058e7/go.mod h1:geyfqmhRrxMwbEo5RPwf5rw5vITQHHQlA7+azUQSIJM= github.com/odwrtw/transmission v0.0.0-20200408122227-b562b9fbcbee/go.mod h1:o+HdjqpVQPFqVTG4jncidwE0/cQoAfCJ4JMFaB481xc=
github.com/odwrtw/yifysubs v0.0.0-20190417174645-d3bba6e4cfe0 h1:LasNCTYd9Pc3x34xc1p054ZF8rVPLhD2Vfk3Db2KSpo= github.com/odwrtw/yifysubs v0.0.0-20190417174645-d3bba6e4cfe0 h1:LasNCTYd9Pc3x34xc1p054ZF8rVPLhD2Vfk3Db2KSpo=
github.com/odwrtw/yifysubs v0.0.0-20190417174645-d3bba6e4cfe0/go.mod h1:9TPMeWCUplybvf4aCW6Hu3KwJian+oSeK6jZ597z9i4= github.com/odwrtw/yifysubs v0.0.0-20190417174645-d3bba6e4cfe0/go.mod h1:9TPMeWCUplybvf4aCW6Hu3KwJian+oSeK6jZ597z9i4=
github.com/odwrtw/yts v0.0.0-20190417175129-d51f8755d93d h1:f100x20G/oZHNqC4iebFULY0wj4Inv5HRN+j53flOaA= github.com/odwrtw/yts v0.0.0-20190417175129-d51f8755d93d h1:f100x20G/oZHNqC4iebFULY0wj4Inv5HRN+j53flOaA=