Compare commits
10 Commits
92d80d403d
...
d4cb2e8993
Author | SHA1 | Date | |
---|---|---|---|
d4cb2e8993 | |||
851bc2023c | |||
4815bc1849 | |||
26cae1aa1f | |||
6cbdd964a5 | |||
b1bf9a573f | |||
c6638376b6 | |||
96741372b2 | |||
25360becae | |||
63257ba715 |
@ -16,10 +16,10 @@ steps:
|
||||
- npm run-script build
|
||||
|
||||
- name: backend
|
||||
image: golang:1.16.7-alpine3.14
|
||||
image: golang:1.17.0-alpine3.14
|
||||
commands:
|
||||
- apk --no-cache add git
|
||||
- GO111MODULE=off go get -tags 'postgres' -u github.com/golang-migrate/migrate/cmd/migrate
|
||||
- go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
|
||||
- cp $$GOPATH/bin/migrate migrate
|
||||
- CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -trimpath -v -o canapeapp/app backend/*.go
|
||||
|
||||
|
6
dev.sh
6
dev.sh
@ -69,9 +69,9 @@ _ensure_command npm
|
||||
|
||||
_check_command migrate || {
|
||||
_log_info "Installing migrate"
|
||||
GO111MODULE=off \
|
||||
go get -tags 'postgres' \
|
||||
-u -v github.com/golang-migrate/migrate/cmd/migrate
|
||||
go install \
|
||||
-tags 'postgres' \
|
||||
github.com/golang-migrate/migrate/v4/cmd/migrate@latest
|
||||
}
|
||||
|
||||
_check_command fresh || {
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 622 B |
Binary file not shown.
Before Width: | Height: | Size: 850 B |
BIN
frontend/img/maskable_icon_x512.png
Normal file
BIN
frontend/img/maskable_icon_x512.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
@ -1,46 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,16.000000) scale(0.002286,-0.002286)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M3220 6574 c-154 -16 -224 -25 -230 -29 -3 -2 -26 -6 -50 -10 -130
|
||||
-18 -361 -83 -545 -152 -418 -159 -812 -431 -1075 -743 -30 -36 -60 -69 -66
|
||||
-75 -18 -17 -111 -150 -156 -222 -42 -69 -138 -248 -138 -257 0 -3 35 -22 78
|
||||
-43 42 -20 102 -55 132 -77 162 -118 604 -587 765 -810 11 -16 36 -49 56 -75
|
||||
124 -161 287 -425 391 -634 28 -56 54 -104 58 -107 6 -4 2072 -5 2116 -1 6 1
|
||||
21 25 35 54 39 84 161 304 227 408 218 344 467 647 809 982 156 153 220 203
|
||||
330 258 94 46 92 34 26 159 -217 413 -559 756 -1009 1011 -57 32 -106 59 -109
|
||||
59 -2 0 -33 14 -67 31 -181 89 -548 207 -723 233 -22 4 -65 11 -95 16 -30 5
|
||||
-77 11 -105 14 -27 3 -77 8 -110 12 -98 11 -432 10 -545 -2z"/>
|
||||
<path d="M578 4828 c-182 -24 -427 -197 -515 -363 -45 -87 -62 -162 -59 -264
|
||||
6 -159 63 -291 211 -491 109 -146 231 -350 317 -529 l59 -125 41 47 c93 109
|
||||
276 207 418 224 30 4 281 7 557 8 l502 0 -27 50 c-137 263 -367 594 -587 845
|
||||
-113 129 -355 376 -454 463 -121 107 -296 158 -463 135z"/>
|
||||
<path d="M6270 4832 c-43 -6 -133 -33 -180 -54 -78 -35 -124 -73 -287 -236
|
||||
-212 -210 -283 -288 -438 -482 -139 -175 -273 -366 -338 -483 -14 -25 -37 -63
|
||||
-51 -86 -14 -22 -26 -43 -26 -45 0 -3 -13 -28 -30 -56 -16 -27 -26 -50 -22
|
||||
-51 4 0 243 -2 532 -4 504 -2 528 -3 598 -24 132 -39 263 -118 340 -207 l41
|
||||
-48 60 125 c108 223 174 334 317 530 153 210 216 369 209 528 -6 144 -49 242
|
||||
-154 354 -65 68 -196 162 -261 187 -19 7 -39 17 -45 21 -27 19 -202 40 -265
|
||||
31z"/>
|
||||
<path d="M1135 3039 c-13 -4 -26 -5 -28 -2 -7 7 -98 -22 -147 -47 -109 -56
|
||||
-195 -177 -217 -305 -7 -45 -7 -1013 1 -1067 23 -164 130 -288 296 -344 53
|
||||
-17 155 -18 2460 -18 1970 0 2412 2 2445 13 180 60 288 180 311 349 8 55 9
|
||||
1035 1 1072 -14 70 -61 166 -104 215 -55 62 -168 121 -253 131 -70 9 -4732 11
|
||||
-4765 3z"/>
|
||||
<path d="M1222 962 c-18 -2 -31 -6 -28 -10 2 -4 7 -34 10 -67 10 -108 56 -458
|
||||
61 -465 6 -9 344 -10 350 -1 2 4 7 32 10 62 3 30 8 65 10 79 2 14 7 48 10 75
|
||||
5 50 10 91 20 163 3 20 7 59 10 85 3 27 7 53 11 58 3 5 -2 12 -10 15 -16 6
|
||||
-399 11 -454 6z"/>
|
||||
<path d="M5367 962 c-32 -2 -56 -6 -53 -10 2 -4 7 -32 10 -62 7 -63 13 -110
|
||||
21 -160 2 -19 7 -57 10 -85 3 -27 7 -61 10 -75 2 -14 7 -52 10 -85 4 -32 9
|
||||
-63 11 -67 6 -9 343 -8 349 1 3 6 17 100 31 216 2 22 7 58 10 80 11 80 13 91
|
||||
19 150 3 33 8 68 11 78 4 14 -1 17 -28 18 -230 3 -363 3 -411 1z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.7 KiB |
@ -5,10 +5,7 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="Description" content="Canapé">
|
||||
<link rel="icon" type="image/png" href="<%= require("./img/favicon-16x16.png").default %>" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="<%= require("./img/favicon-32x32.png").default %>" sizes="32x32">
|
||||
<meta name="msapplication-navbutton-color" content="#4E5D6C">
|
||||
<link rel="mask-icon" href="<%= require("./img/safari-pinned-tab.svg").default %>" color="#5bbad5">
|
||||
<meta name="msapplication-navbutton-color" content="#4e5d6c">
|
||||
<title>Canapé</title>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -1,12 +1,6 @@
|
||||
// Import default image
|
||||
import "../img/noimage.png";
|
||||
|
||||
// Import favicon settings
|
||||
import "../img/favicon-16x16.png";
|
||||
import "../img/favicon-32x32.png";
|
||||
import "../img/favicon.ico";
|
||||
import "../img/safari-pinned-tab.svg";
|
||||
|
||||
// Styles
|
||||
import "../scss/app.scss";
|
||||
|
||||
@ -91,6 +85,12 @@ const App = () => (
|
||||
</div>
|
||||
);
|
||||
|
||||
if ("serviceWorker" in navigator) {
|
||||
window.addEventListener("load", () => {
|
||||
navigator.serviceWorker.register("/service-worker.js");
|
||||
});
|
||||
}
|
||||
|
||||
ReactDOM.render(
|
||||
<Provider store={store}>
|
||||
<Router history={history}>
|
||||
|
@ -1,14 +1,14 @@
|
||||
import React from "react";
|
||||
import moment from "moment";
|
||||
import PropTypes from "prop-types";
|
||||
import { useSelector } from "react-redux";
|
||||
import { format } from "timeago.js";
|
||||
|
||||
import { UserEdit } from "./userEdit";
|
||||
|
||||
export const User = ({ id }) => {
|
||||
const user = useSelector((state) => state.admin.users.get(id));
|
||||
const polochon = user.polochon;
|
||||
const lastSeen = moment(user.last_seen, "YYYY-MM-DDTHH:mm:ss.SZ");
|
||||
const lastSeen = new Date(user.last_seen);
|
||||
|
||||
return (
|
||||
<tr>
|
||||
@ -33,7 +33,7 @@ export const User = ({ id }) => {
|
||||
}
|
||||
></span>
|
||||
</td>
|
||||
<td>{lastSeen.isValid() ? lastSeen.fromNow() : "-"}</td>
|
||||
<td>{isNaN(lastSeen) ? "-" : format(lastSeen)}</td>
|
||||
<td>
|
||||
<UserEdit id={id} />
|
||||
</td>
|
||||
|
@ -76,15 +76,21 @@ const Player = ({ url, subtitles }) => {
|
||||
<video className="embed-responsive-item" controls>
|
||||
<source src={url} type="video/mp4" />
|
||||
{subtitles &&
|
||||
[...subtitles.entries()].map(([lang, sub]) => (
|
||||
[...subtitles.entries()].map(([lang, sub]) => {
|
||||
if (sub.embedded) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<track
|
||||
key={lang}
|
||||
kind="subtitles"
|
||||
label={sub.language}
|
||||
label={sub.lang}
|
||||
src={sub.vvt_file}
|
||||
srcLang={sub.language}
|
||||
srcLang={sub.lang}
|
||||
/>
|
||||
))}
|
||||
);
|
||||
})}
|
||||
</video>
|
||||
</div>
|
||||
);
|
||||
|
77
frontend/js/components/details/downloadProgress.js
Normal file
77
frontend/js/components/details/downloadProgress.js
Normal file
@ -0,0 +1,77 @@
|
||||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import { useSelector } from "react-redux";
|
||||
import { useHistory } from "react-router-dom";
|
||||
|
||||
export const DownloadProgress = ({ imdbId, season, episode }) => {
|
||||
let history = useHistory();
|
||||
const torrentGroup = useSelector((state) =>
|
||||
state.torrents.torrents.get(imdbId)
|
||||
);
|
||||
if (!torrentGroup || torrentGroup.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let torrent;
|
||||
const type = torrentGroup[0].type;
|
||||
switch (type) {
|
||||
case "movie":
|
||||
torrent = torrentGroup[0];
|
||||
break;
|
||||
case "episode": {
|
||||
if (!season || !episode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const torrents = torrentGroup.filter(
|
||||
(torrent) => torrent.episode === episode && torrent.season === season
|
||||
);
|
||||
if (torrents.length !== 1) {
|
||||
return null;
|
||||
}
|
||||
torrent = torrents[0];
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!torrent || !torrent.status) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const progress = Number(torrent.status.percent_done).toFixed(1);
|
||||
if (progress === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const handleClick = () => {
|
||||
history.push("/torrents/list");
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="w-100 mt-n2 clickable" onClick={handleClick}>
|
||||
<small className="text text-muted">Downloading...</small>
|
||||
<div
|
||||
className="progress"
|
||||
style={{
|
||||
height: "0.2rem",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className="progress-bar bg-warning"
|
||||
style={{
|
||||
width: `${progress}%`,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
DownloadProgress.propTypes = {
|
||||
imdbId: PropTypes.string.isRequired,
|
||||
season: PropTypes.number,
|
||||
episode: PropTypes.number,
|
||||
};
|
@ -8,7 +8,6 @@ export const PolochonMetadata = ({
|
||||
container,
|
||||
videoCodec,
|
||||
audioCodec,
|
||||
releaseGroup,
|
||||
size,
|
||||
}) => {
|
||||
if (!quality || quality === "") {
|
||||
@ -17,12 +16,12 @@ export const PolochonMetadata = ({
|
||||
|
||||
const s = size === 0 ? "" : prettySize(size);
|
||||
|
||||
const metadata = [quality, container, videoCodec, audioCodec, releaseGroup, s]
|
||||
const metadata = [quality, s, container, videoCodec, audioCodec]
|
||||
.filter((m) => m && m !== "")
|
||||
.join(", ");
|
||||
|
||||
return (
|
||||
<span>
|
||||
<span className="text text-muted">
|
||||
<i className="fa fa-file-video-o mr-1" />
|
||||
{metadata}
|
||||
</span>
|
||||
|
@ -1,21 +1,26 @@
|
||||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import moment from "moment";
|
||||
import { format } from "timeago.js";
|
||||
|
||||
const prettyDate = (input) => {
|
||||
if (typeof input !== "string" || input === "") {
|
||||
return input;
|
||||
}
|
||||
|
||||
const date = moment(input, "YYYY-MM-DD HH:mm:ss Z");
|
||||
if (!date.isValid()) {
|
||||
const date = new Date(input);
|
||||
if (isNaN(date)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
let output = date.format("DD/MM/YYYY");
|
||||
const dd = date.getDay().toString().padStart(2, "0");
|
||||
const mm = date.getMonth().toString().padStart(2, "0");
|
||||
const yyyy = date.getFullYear();
|
||||
let output = `${dd}/${mm}/${yyyy}`;
|
||||
|
||||
if (date > moment().subtract(1, "month") && date < moment().add(1, "month")) {
|
||||
output += " (" + date.fromNow() + ")";
|
||||
const now = new Date();
|
||||
const days = Math.abs((now - date) / (24 * 60 * 60 * 1000));
|
||||
if (days < 31) {
|
||||
output += ` (${format(date)})`;
|
||||
}
|
||||
|
||||
return output;
|
||||
|
@ -12,6 +12,7 @@ import { Rating } from "../details/rating";
|
||||
import { ReleaseDate } from "../details/releaseDate";
|
||||
import { Runtime } from "../details/runtime";
|
||||
import { Title } from "../details/title";
|
||||
import { DownloadProgress } from "../details/downloadProgress";
|
||||
|
||||
const ListDetails = (props) => {
|
||||
if (!props.data || Object.keys(props.data).length === 0) {
|
||||
@ -41,6 +42,7 @@ const ListDetails = (props) => {
|
||||
subtitles={props.data.subtitles}
|
||||
/>
|
||||
</div>
|
||||
<DownloadProgress imdbId={props.data.imdb_id} />
|
||||
<TrackingLabel
|
||||
wishlisted={props.data.wishlisted}
|
||||
inLibrary={props.data.polochon_url !== ""}
|
||||
|
@ -20,6 +20,7 @@ import { PolochonMetadata } from "../details/polochon";
|
||||
import { TrackingLabel } from "../details/tracking";
|
||||
import { Genres } from "../details/genres";
|
||||
import { Runtime } from "../details/runtime";
|
||||
import { DownloadProgress } from "../details/downloadProgress";
|
||||
|
||||
import { DownloadAndStream } from "../buttons/download";
|
||||
import { ImdbBadge } from "../buttons/imdb";
|
||||
@ -122,6 +123,9 @@ export const Header = () => {
|
||||
subtitles={subtitles}
|
||||
/>
|
||||
</div>
|
||||
<div className="card-text mt-2">
|
||||
<DownloadProgress imdbId={imdbId} />
|
||||
</div>
|
||||
<p className="card-text">
|
||||
<TrackingLabel inLibrary={inLibrary} wishlisted={wishlisted} />
|
||||
</p>
|
||||
|
@ -11,6 +11,7 @@ import { PolochonMetadata } from "../../details/polochon";
|
||||
import { ReleaseDate } from "../../details/releaseDate";
|
||||
import { Runtime } from "../../details/runtime";
|
||||
import { Title } from "../../details/title";
|
||||
import { DownloadProgress } from "../../details/downloadProgress";
|
||||
|
||||
import { DownloadAndStream } from "../../buttons/download";
|
||||
import { ShowMore } from "../../buttons/showMore";
|
||||
@ -62,6 +63,7 @@ export const Episode = ({ season, episode }) => {
|
||||
/>
|
||||
<ReleaseDate date={data.aired} />
|
||||
<Runtime runtime={data.runtime} />
|
||||
<DownloadProgress imdbId={imdbId} season={season} episode={episode} />
|
||||
<Plot plot={data.plot} />
|
||||
<DownloadAndStream
|
||||
name={prettyEpisodeName(showTitle, season, episode)}
|
||||
|
@ -2,7 +2,7 @@ import React, { useEffect } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
import { UAParser } from "ua-parser-js";
|
||||
import moment from "moment";
|
||||
import { format } from "timeago.js";
|
||||
|
||||
import { getUserTokens, deleteUserToken } from "../../actions/users";
|
||||
|
||||
@ -27,6 +27,9 @@ export const UserTokens = () => {
|
||||
|
||||
const Token = ({ token }) => {
|
||||
const ua = UAParser(token.user_agent);
|
||||
const lastUsed = new Date(token.last_used);
|
||||
const createdAt = new Date(token.created_at);
|
||||
|
||||
return (
|
||||
<div className="card mt-3">
|
||||
<div className="card-header">
|
||||
@ -39,8 +42,8 @@ const Token = ({ token }) => {
|
||||
<div className="card-body row">
|
||||
<div className="col-12 col-md-6">
|
||||
<p>Last IP: {token.ip}</p>
|
||||
<p>Last used: {moment(token.last_used).fromNow()}</p>
|
||||
<p>Created: {moment(token.created_at).fromNow()}</p>
|
||||
<p>Last used: {isNaN(lastUsed) ? "-" : format(lastUsed)}</p>
|
||||
<p>Created: {isNaN(createdAt) ? "-" : format(createdAt)}</p>
|
||||
</div>
|
||||
<div className="col-12 col-md-6">
|
||||
<p>
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { useEffect, useState, useCallback } from "react";
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
import { setFetchedTorrents } from "../actions/torrents";
|
||||
import { newMovieEvent } from "../actions/movies";
|
||||
import { newEpisodeEvent } from "../actions/shows";
|
||||
import { newMovieEvent, getMovieDetails } from "../actions/movies";
|
||||
import { newEpisodeEvent, getEpisodeDetails } from "../actions/shows";
|
||||
|
||||
export const WsHandler = () => {
|
||||
const dispatch = useDispatch();
|
||||
@ -67,8 +67,16 @@ export const WsHandler = () => {
|
||||
case "newVideo":
|
||||
if (data.message.type === "movie") {
|
||||
dispatch(newMovieEvent(data.message.data));
|
||||
dispatch(getMovieDetails(data.message.data.imdb_id));
|
||||
} else if (data.message.type === "episode") {
|
||||
dispatch(newEpisodeEvent(data.message.data));
|
||||
dispatch(
|
||||
getEpisodeDetails(
|
||||
data.message.data.show_imdb_id,
|
||||
data.message.data.season,
|
||||
data.message.data.episode
|
||||
)
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -84,19 +84,30 @@ export default (state = defaultState, action) =>
|
||||
draft.show.tracked_episode = action.payload.episode; // eslint-disable-line camelcase
|
||||
break;
|
||||
|
||||
case "EPISODE_GET_DETAILS_PENDING":
|
||||
draft.show.seasons
|
||||
.get(action.payload.main.season)
|
||||
.get(action.payload.main.episode).fetching = true;
|
||||
case "EPISODE_GET_DETAILS_PENDING": {
|
||||
const imdbId = action.payload.main.imdbId;
|
||||
if (!draft.show || draft.show.imdb_id !== imdbId) {
|
||||
break;
|
||||
}
|
||||
|
||||
const season = action.payload.main.season;
|
||||
const episode = action.payload.main.episode;
|
||||
draft.show.seasons.get(season).get(episode).fetching = true;
|
||||
break;
|
||||
}
|
||||
|
||||
case "EPISODE_GET_DETAILS_FULFILLED": {
|
||||
let episode = action.payload.response.data;
|
||||
if (!episode) {
|
||||
return draft;
|
||||
const imdbId = action.payload.main.imdbId;
|
||||
if (!draft.show || draft.show.imdb_id !== imdbId) {
|
||||
break;
|
||||
}
|
||||
formatEpisode(episode);
|
||||
draft.show.seasons.get(episode.season).set(episode.episode, episode);
|
||||
|
||||
const season = action.payload.main.season;
|
||||
const episode = action.payload.main.episode;
|
||||
|
||||
let data = action.payload.response.data;
|
||||
formatEpisode(data);
|
||||
draft.show.seasons.get(season).set(episode, data);
|
||||
break;
|
||||
}
|
||||
|
||||
|
1668
frontend/package-lock.json
generated
1668
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -14,7 +14,6 @@
|
||||
"immer": "^9.0.5",
|
||||
"jquery": "^3.6.0",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"moment": "^2.29.1",
|
||||
"popper.js": "^1.15.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^17.0.2",
|
||||
@ -49,14 +48,18 @@
|
||||
"eslint-plugin-react": "^7.24.0",
|
||||
"eslint-plugin-react-hooks": "^4.2.0",
|
||||
"html-webpack-plugin": "^5.3.2",
|
||||
"mini-css-extract-plugin": "^2.2.0",
|
||||
"postcss-loader": "^6.1.1",
|
||||
"prettier": "^2.3.2",
|
||||
"purgecss-webpack-plugin": "^4.0.3",
|
||||
"sass": "^1.37.5",
|
||||
"sass-loader": "^12.1.0",
|
||||
"style-loader": "^3.2.1",
|
||||
"timeago.js": "^4.0.2",
|
||||
"universal-cookie": "^4.0.4",
|
||||
"webpack": "^5.50.0",
|
||||
"webpack-cli": "^4.7.2",
|
||||
"webpack-pwa-manifest": "^4.3.0"
|
||||
"webpack-pwa-manifest": "^4.3.0",
|
||||
"workbox-webpack-plugin": "^6.2.4"
|
||||
}
|
||||
}
|
||||
|
@ -78,7 +78,10 @@ div.show.dropdown.nav-item > div {
|
||||
.video-details {
|
||||
> div, > p, > span {
|
||||
margin-bottom: 1rem;
|
||||
@media (max-width: 330px) {
|
||||
@media (max-height: 820px) {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
@media (max-height: 580px) {
|
||||
margin-bottom: 0rem;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,12 @@
|
||||
var webpack = require("webpack");
|
||||
var path = require("path");
|
||||
const glob = require("glob");
|
||||
var WebpackPwaManifest = require("webpack-pwa-manifest");
|
||||
var HtmlWebpackPlugin = require("html-webpack-plugin");
|
||||
var { CleanWebpackPlugin } = require("clean-webpack-plugin");
|
||||
const WorkboxPlugin = require("workbox-webpack-plugin");
|
||||
const PurgeCSSPlugin = require("purgecss-webpack-plugin");
|
||||
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||
|
||||
var mode = "development";
|
||||
var BUILD_DIR = path.resolve(__dirname, "../build/public/");
|
||||
@ -20,7 +24,7 @@ const config = {
|
||||
output: {
|
||||
path: BUILD_DIR,
|
||||
filename: "[contenthash]-app.js",
|
||||
assetModuleFilename: "[hash]-[name][ext][query]",
|
||||
assetModuleFilename: "[contenthash]-[name][ext][query]",
|
||||
},
|
||||
optimization: {},
|
||||
module: {
|
||||
@ -35,9 +39,18 @@ const config = {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /\.css$/i,
|
||||
use: [MiniCssExtractPlugin.loader, "css-loader", "postcss-loader"],
|
||||
},
|
||||
{
|
||||
test: /\.scss$/,
|
||||
use: ["style-loader", "css-loader", "sass-loader", "postcss-loader"],
|
||||
use: [
|
||||
MiniCssExtractPlugin.loader,
|
||||
"css-loader",
|
||||
"sass-loader",
|
||||
"postcss-loader",
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpg|svg|ico)$/,
|
||||
@ -62,12 +75,13 @@ const config = {
|
||||
}),
|
||||
new HtmlWebpackPlugin({
|
||||
template: path.join(SRC_DIR, "index.html"),
|
||||
favicon: path.join(SRC_DIR, "img/favicon.ico"),
|
||||
}),
|
||||
new WebpackPwaManifest({
|
||||
fingerprints: true,
|
||||
inject: true,
|
||||
ios: {
|
||||
"apple-mobile-web-app-status-bar-style": "default",
|
||||
"apple-mobile-web-app-status-bar-style": "#4e5d6c",
|
||||
"apple-mobile-web-app-title": "Canapé",
|
||||
},
|
||||
name: "Canapé",
|
||||
@ -84,6 +98,11 @@ const config = {
|
||||
src: path.resolve(__dirname, "img/android-chrome-512x512.png"),
|
||||
sizes: [96, 128, 192, 256, 384, 512],
|
||||
},
|
||||
{
|
||||
src: path.resolve(__dirname, "img/maskable_icon_x512.png"),
|
||||
size: "512x512",
|
||||
purpose: "maskable",
|
||||
},
|
||||
{
|
||||
src: path.resolve(__dirname, "img/apple-touch-icon.png"),
|
||||
sizes: [80, 120, 152, 167, 180],
|
||||
@ -91,6 +110,10 @@ const config = {
|
||||
},
|
||||
],
|
||||
}),
|
||||
new MiniCssExtractPlugin({
|
||||
filename: "[contenthash].css",
|
||||
}),
|
||||
new WorkboxPlugin.GenerateSW(),
|
||||
],
|
||||
resolve: {
|
||||
extensions: [".js"],
|
||||
@ -98,4 +121,12 @@ const config = {
|
||||
devtool: mode === "production" ? false : "source-map",
|
||||
};
|
||||
|
||||
if (mode === "production") {
|
||||
config.plugins.push(
|
||||
new PurgeCSSPlugin({
|
||||
paths: () => glob.sync(`${SRC_DIR}/**/*`, { nodir: true }),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = config;
|
||||
|
25
go.mod
25
go.mod
@ -1,6 +1,6 @@
|
||||
module git.quimbo.fr/odwrtw/canape
|
||||
|
||||
go 1.15
|
||||
go 1.17
|
||||
|
||||
require (
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||
@ -10,12 +10,12 @@ require (
|
||||
github.com/gorilla/websocket v1.4.0
|
||||
github.com/gregdel/srt2vtt v0.0.0-20170314031115-46562d19ab2d
|
||||
github.com/jmoiron/sqlx v1.2.0
|
||||
github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/lib/pq v1.1.1
|
||||
github.com/mattn/go-sqlite3 v1.10.0 // indirect
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
|
||||
github.com/odwrtw/errors v0.0.0-20170604160533-c747b9d17833
|
||||
github.com/odwrtw/polochon v0.0.0-20201122193839-1d18b9eb03c0
|
||||
github.com/odwrtw/polochon v0.0.0-20210828190530-f7a295424232
|
||||
github.com/phyber/negroni-gzip v0.0.0-20180113114010-ef6356a5d029
|
||||
github.com/pioz/tvdb v0.0.0-20190503215423-f45c687faba9 // indirect
|
||||
github.com/robfig/cron v1.1.0
|
||||
@ -26,3 +26,22 @@ require (
|
||||
google.golang.org/appengine v1.6.5 // indirect
|
||||
gopkg.in/yaml.v2 v2.2.2
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/agnivade/levenshtein v1.0.3 // indirect
|
||||
github.com/dustin/go-humanize v1.0.0 // indirect
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
||||
github.com/odwrtw/eztv v0.0.0-20201119092300-1cf1c95b0e34 // indirect
|
||||
github.com/odwrtw/fanarttv v0.0.0-20170412122542-9f67d3cf0188 // indirect
|
||||
github.com/odwrtw/guessit v0.0.0-20200131084001-f88613483547 // indirect
|
||||
github.com/odwrtw/tpb v0.0.0-20200507114501-df19547bbff1 // indirect
|
||||
github.com/odwrtw/trakttv v0.0.0-20200404161731-0d594827e4f9 // indirect
|
||||
github.com/odwrtw/yts v0.0.0-20190417175129-d51f8755d93d // indirect
|
||||
github.com/robfig/cron/v3 v3.0.0 // indirect
|
||||
github.com/ryanbradynd05/go-tmdb v0.0.0-20181220020137-291a20d25ffd // indirect
|
||||
github.com/stretchr/testify v1.3.0 // indirect
|
||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f // indirect
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
|
||||
)
|
||||
|
41
go.sum
41
go.sum
@ -1,20 +1,13 @@
|
||||
github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk=
|
||||
github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg=
|
||||
github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE=
|
||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||
github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
|
||||
github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E=
|
||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o=
|
||||
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
||||
github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo=
|
||||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
||||
github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5h18aE=
|
||||
github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY=
|
||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
|
||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
|
||||
@ -22,6 +15,7 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@ -33,13 +27,11 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o=
|
||||
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
|
||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk=
|
||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
|
||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
@ -50,11 +42,9 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
|
||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/gorilla/mux v1.7.1 h1:Dw4jY2nghMMRsh1ol8dv1axHkDwMQK2DHerMNJsIpJU=
|
||||
github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
|
||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
@ -63,44 +53,36 @@ github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36j
|
||||
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/gregdel/argo v0.0.0-20190104143955-4ac365771987/go.mod h1:dS8cBtIK+0jAZy09xmjPn0W1EMmNKiYQMuZ0BXseLio=
|
||||
github.com/gregdel/pushover v0.0.0-20190217183207-15d3fef40636 h1:6agUllU8gUNAallyB+afeLXMRLL6Q1z+S6YC7Pi1EIY=
|
||||
github.com/gregdel/pushover v0.0.0-20190217183207-15d3fef40636/go.mod h1:NbuXd8Iwy5dU99qFToB8mSE29qJOQNW/bphiV8CWj/k=
|
||||
github.com/gregdel/srt2vtt v0.0.0-20170314031115-46562d19ab2d h1:1CqMCoF82nYY0XWwrSpLNZ86hpdhB0bSmTUXZP3AgJc=
|
||||
github.com/gregdel/srt2vtt v0.0.0-20170314031115-46562d19ab2d/go.mod h1:BnFQhn6sVyPpOQw/R/YohZ6Wgd3REouiFYFtDKET7S0=
|
||||
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
|
||||
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
||||
github.com/jpillora/opts v0.0.0-20160806153215-0b3373f6c34d/go.mod h1:8/sC6XyMKHq/ybiU9Oqc1i0tDjFA/6otW7+Ha/qtnfo=
|
||||
github.com/jpillora/scraper v0.0.0-20190930150335-f06f890eb841 h1:DSiWcaEafVv5lLmUoYgr+Q/0ZhlOFzZHHqvmkEC8vKY=
|
||||
github.com/jpillora/scraper v0.0.0-20190930150335-f06f890eb841/go.mod h1:rwZ1CpR9lO34N/3IDicjhl2N/jfe124j1zdwYJNjsEI=
|
||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
|
||||
github.com/kolo/xmlrpc v0.0.0-20190417161013-de6d879202d7 h1:kL2yi3DjwkRWFgKwD5COyl4XMLKhfOvqck4xyis7EIw=
|
||||
github.com/kolo/xmlrpc v0.0.0-20190417161013-de6d879202d7/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ=
|
||||
github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181 h1:TrxPzApUukas24OMMVDUMlCs1XCExJtnGaDEiIAR4oQ=
|
||||
github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28 h1:mkl3tvPHIuPaWsLtmHTybJeoVEW7cbePK73Ir8VtruA=
|
||||
github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28/go.mod h1:T/T7jsxVqf9k/zYOqbgNAsANsjxTd1Yq3htjDhQ1H0c=
|
||||
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
||||
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/mailru/easyjson v0.0.0-20180730094502-03f2033d19d5/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4=
|
||||
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
|
||||
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/meatballhat/negroni-logrus v0.0.0-20170801195057-31067281800f h1:V6GHkMOIsnpGDasS1iYiNxEYTY8TmyjQXEF8PqYkKQ8=
|
||||
github.com/meatballhat/negroni-logrus v0.0.0-20170801195057-31067281800f/go.mod h1:Ylx55XGW4gjY7McWT0pgqU0aQquIOChDnYkOVbSuF/c=
|
||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
@ -111,7 +93,6 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/odwrtw/addicted v0.0.0-20200509145452-a5d36bf9d0f8 h1:Urlj8ZMuBIOQyweZ4c0vkM9DBo5Sjxr+yHlOPvjaP9Y=
|
||||
github.com/odwrtw/addicted v0.0.0-20200509145452-a5d36bf9d0f8/go.mod h1:330AeCGPQuyCBQzOCetLtMotSao0LH0+3FJcEAkq5dg=
|
||||
github.com/odwrtw/errors v0.0.0-20170604160533-c747b9d17833 h1:JbimDtyFaekFnqCkv3goowabwGNeDfWZk8aCnmRJvT4=
|
||||
github.com/odwrtw/errors v0.0.0-20170604160533-c747b9d17833/go.mod h1:KwBfTZvOQqi/hpk4jq8SKmKlf4yoxW8yap93PEvhs0c=
|
||||
@ -121,25 +102,20 @@ github.com/odwrtw/fanarttv v0.0.0-20170412122542-9f67d3cf0188 h1:mjAgidPA3aNSZU6
|
||||
github.com/odwrtw/fanarttv v0.0.0-20170412122542-9f67d3cf0188/go.mod h1:AMkzq9fSbIpWKdWbU4FAsIherygisNEeYglKfmTfq1U=
|
||||
github.com/odwrtw/guessit v0.0.0-20200131084001-f88613483547 h1:O0wEl/ORBHpPpZtibQyiZR1kQVFWo97gzcQQH4qI5C8=
|
||||
github.com/odwrtw/guessit v0.0.0-20200131084001-f88613483547/go.mod h1:W22g7wtc0AGczEARBAs+77gvBk8monDaM6U6i9Wa0vQ=
|
||||
github.com/odwrtw/imdb-watchlist v0.0.0-20190417175016-b7a9f7503d69 h1:ow6b/4Jj7J5iYwU678/rbijvaNUJrYkg13j9Nivkung=
|
||||
github.com/odwrtw/imdb-watchlist v0.0.0-20190417175016-b7a9f7503d69/go.mod h1:o2tLH95CtNdqhDb0aS2NbU+1I4PmaNsODpr33Ry0JC0=
|
||||
github.com/odwrtw/polochon v0.0.0-20201122193839-1d18b9eb03c0 h1:5nc5CdQvgj2r1euv5w/yxv5KBmPZmT06+8gl4GE+k3E=
|
||||
github.com/odwrtw/polochon v0.0.0-20201122193839-1d18b9eb03c0/go.mod h1:651VdToWlRowtMfMZ1/A6rKp2TmvjP9Yk6jSo1CS1pM=
|
||||
github.com/odwrtw/polochon v0.0.0-20210828190530-f7a295424232 h1:Y6h3hlQ/M42VpK9wM89wLQgI/zL6iD4MasAUX/TmHeA=
|
||||
github.com/odwrtw/polochon v0.0.0-20210828190530-f7a295424232/go.mod h1:5Zwh1S1RrwYupk0sxi7pRISNJc3mvbtGysRN6d56GkY=
|
||||
github.com/odwrtw/tpb v0.0.0-20200507114501-df19547bbff1 h1:ZxN8n11Muc25mS/wmqblHMUDl4TSr9ekePAx1xeTcRE=
|
||||
github.com/odwrtw/tpb v0.0.0-20200507114501-df19547bbff1/go.mod h1:sIHKrrfBBSG6KO92wfgWmYq8yYf3hBnnNyFx2nTCOmU=
|
||||
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/transmission v0.0.0-20200408122227-b562b9fbcbee h1:BttuvaEGtpe3rL7zm+e2RwVkj1DBo/Mb6XdbWd0a7ds=
|
||||
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/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/go.mod h1:6cNtd2zi+BIa0JuBSYz2mKv90jCJ5NiubkYnyskIjD4=
|
||||
github.com/oz/osdb v0.0.0-20190204162748-da06ada9cdc1 h1:yxQkNBp/nQAJE3p/0A7vdIEFdM/8w4LnDSX7bh3gYOo=
|
||||
github.com/oz/osdb v0.0.0-20190204162748-da06ada9cdc1/go.mod h1:xIvcOs03IPml6sU+k9o/mEAm8aJhvGTSpDNlUs8RoOQ=
|
||||
github.com/phyber/negroni-gzip v0.0.0-20180113114010-ef6356a5d029 h1:d6HcSW4ZoNlUWrPyZtBwIu8yv4WAWIU3R/jorwVkFtQ=
|
||||
github.com/phyber/negroni-gzip v0.0.0-20180113114010-ef6356a5d029/go.mod h1:94RTq2fypdZCze25ZEZSjtbAQRT3cL/8EuRUqAZC/+w=
|
||||
github.com/pioz/tvdb v0.0.0-20190107104821-ffdf1011c717 h1:llCrc82+T+DAodGyyo+NNhC7Zx2/64YmcFnyOJlcV2o=
|
||||
github.com/pioz/tvdb v0.0.0-20190107104821-ffdf1011c717/go.mod h1:nhHRTrbEzdp4lXtiozX4Yuvo4AHi29nOvM1J7H/XJMM=
|
||||
github.com/pioz/tvdb v0.0.0-20190503215423-f45c687faba9 h1:bduYa9c0qpYfrxuAnursm8RfmeGsdgQeB3NeW4N0zQ8=
|
||||
github.com/pioz/tvdb v0.0.0-20190503215423-f45c687faba9/go.mod h1:nhHRTrbEzdp4lXtiozX4Yuvo4AHi29nOvM1J7H/XJMM=
|
||||
@ -158,6 +134,7 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/remko/go-mkvparse v0.1.0/go.mod h1:smrnNCW7Q3RVVSZ1bjsHGNOUTT4gkGxrqd6jJ8IQXxs=
|
||||
github.com/robfig/cron v1.1.0 h1:jk4/Hud3TTdcrJgUOBgsqrZBarcxl6ADIjSC2iniwLY=
|
||||
github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
|
||||
github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
|
||||
@ -196,26 +173,20 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f h1:68K/z8GLUxV76xGSqwTWw2gyk/jwn79LUL43rES2g8o=
|
||||
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
|
||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/unrolled/render.v1 v1.0.0/go.mod h1:D8ZfMFuggVdNUNlNz/R8zVjPPHGyMxLuJPA+MSx8na0=
|
||||
gopkg.in/xmlpath.v2 v2.0.0-20150820204837-860cbeca3ebc h1:LMEBgNcZUqXaP7evD1PZcL6EcDVa2QOFuI+cqM3+AJM=
|
||||
gopkg.in/xmlpath.v2 v2.0.0-20150820204837-860cbeca3ebc/go.mod h1:N8UOSI6/c2yOpa/XDz3KVUiegocTziPiqNkeNTMiG1k=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||
|
Loading…
x
Reference in New Issue
Block a user