Add torrent metadata
This commit is contained in:
parent
4b26080193
commit
199d216323
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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")]
|
||||||
);
|
);
|
||||||
|
@ -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 && (
|
||||||
|
@ -25,7 +25,7 @@ const AddTorrent = () => {
|
|||||||
if (url === "") {
|
if (url === "") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dispatch(addTorrent(url));
|
dispatch(addTorrent({ url: url, metdata: null }));
|
||||||
setUrl("");
|
setUrl("");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
4
go.mod
@ -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
12
go.sum
@ -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=
|
||||||
|
Loading…
x
Reference in New Issue
Block a user