oblecto 0.2.8 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Oblecto-Web/dist/web/index.html +24 -3
- package/Oblecto-Web/dist/web/static/index-C-JsqHHk.css +1 -0
- package/Oblecto-Web/dist/web/static/index-DSZgpOOu.js +576 -0
- package/README.md +43 -7
- package/dist/bin/oblecto.js +12468 -61
- package/dist/index.js +10676 -6
- package/package.json +68 -36
- package/res/AGENTS.md +8 -0
- package/res/config.json +34 -7
- package/Oblecto-Web/LICENSE +0 -674
- package/Oblecto-Web/README.md +0 -20
- package/Oblecto-Web/dist/web/static/css/app.921835f8c2878caee6d1085d9982fa86.css +0 -1
- package/Oblecto-Web/dist/web/static/css/app.921835f8c2878caee6d1085d9982fa86.css.map +0 -1
- package/Oblecto-Web/dist/web/static/js/app.758b833f6395444695b6.js +0 -6896
- package/Oblecto-Web/dist/web/static/js/app.758b833f6395444695b6.js.map +0 -1
- package/Oblecto-Web/dist/web/static/js/manifest.d327d604ee57c29a75d0.js +0 -154
- package/Oblecto-Web/dist/web/static/js/manifest.d327d604ee57c29a75d0.js.map +0 -1
- package/Oblecto-Web/dist/web/static/js/vendor.84f1e8002f100f63d6ef.js +0 -32455
- package/Oblecto-Web/dist/web/static/js/vendor.84f1e8002f100f63d6ef.js.map +0 -1
- package/Oblecto-Web/package.json +0 -118
- package/dist/bin/cliManager.js +0 -102
- package/dist/bin/scripts/adduser.js +0 -50
- package/dist/bin/scripts/changepassword.js +0 -48
- package/dist/bin/scripts/deluser.js +0 -34
- package/dist/bin/scripts/helpers/argumentError.js +0 -12
- package/dist/bin/scripts/helpers/generateAssetDirectories.js +0 -37
- package/dist/bin/scripts/init/assets.js +0 -24
- package/dist/bin/scripts/init/database.js +0 -21
- package/dist/bin/scripts/init/general.js +0 -54
- package/dist/bin/scripts/init/index.js +0 -26
- package/dist/bin/scripts/removepassword.js +0 -42
- package/dist/config.js +0 -45
- package/dist/core/graphical.js +0 -179
- package/dist/core/index.js +0 -24
- package/dist/lib/artwork/ArtworkScaler.js +0 -31
- package/dist/lib/artwork/ArtworkUtils.js +0 -35
- package/dist/lib/artwork/movies/AggregateMovieArtworkRetriever.js +0 -58
- package/dist/lib/artwork/movies/MovieArtworkCollector.js +0 -93
- package/dist/lib/artwork/movies/MovieArtworkDownloader.js +0 -65
- package/dist/lib/artwork/movies/artworkRetrievers/FanarttvMovieArtworkRetriever.js +0 -57
- package/dist/lib/artwork/movies/artworkRetrievers/TmdbMovieArtworkRetriever.js +0 -47
- package/dist/lib/artwork/series/AggregateSeriesArtworkRetriever.js +0 -58
- package/dist/lib/artwork/series/SeriesArtworkCollector.js +0 -95
- package/dist/lib/artwork/series/SeriesArtworkDownloader.js +0 -62
- package/dist/lib/artwork/series/artworkRetrievers/FanarttvSeriesArtworkRetriever.js +0 -44
- package/dist/lib/artwork/series/artworkRetrievers/TmdbSeriesArtworkRetriever.js +0 -64
- package/dist/lib/artwork/series/artworkRetrievers/TvdbSeriesArtworkRetriever.js +0 -51
- package/dist/lib/cleaners/FileCleaner.js +0 -56
- package/dist/lib/cleaners/MovieCleaner.js +0 -42
- package/dist/lib/cleaners/SeriesCleaner.js +0 -70
- package/dist/lib/common/AggregateIdentifier.js +0 -53
- package/dist/lib/common/AggregateUpdateRetriever.js +0 -43
- package/dist/lib/downloader/index.js +0 -59
- package/dist/lib/errors/DebugExtendableError.js +0 -20
- package/dist/lib/errors/ExtendableError.js +0 -22
- package/dist/lib/errors/FileExistsError.js +0 -14
- package/dist/lib/errors/IdentificationError.js +0 -14
- package/dist/lib/errors/InfoExtendableError.js +0 -20
- package/dist/lib/errors/VideoAnalysisError.js +0 -14
- package/dist/lib/errors/VideoIdentificationError.js +0 -14
- package/dist/lib/errors/WarnExtendableError.js +0 -20
- package/dist/lib/federation/client/FederationClient.js +0 -127
- package/dist/lib/federation/client/FederationClientController.js +0 -45
- package/dist/lib/federation/client/FederationDataClient.js +0 -56
- package/dist/lib/federation/client/FederationMediaClient.js +0 -70
- package/dist/lib/federation/server/FederationController.js +0 -32
- package/dist/lib/federation/server/FederationDataServer.js +0 -22
- package/dist/lib/federation/server/FederationDataServerConnection.js +0 -96
- package/dist/lib/federation/server/FederationMediaServer.js +0 -22
- package/dist/lib/federation/server/FederationMediaServerConnection.js +0 -83
- package/dist/lib/federation/server/FederationServer.js +0 -40
- package/dist/lib/federation/server/FederationServerConnection.js +0 -97
- package/dist/lib/federationindexer/FederationEpisodeIndexer.js +0 -65
- package/dist/lib/federationindexer/FederationMovieIndexer.js +0 -48
- package/dist/lib/indexers/MediaIdentifier.js +0 -15
- package/dist/lib/indexers/files/FileIndexer.js +0 -103
- package/dist/lib/indexers/files/cleaner.js +0 -43
- package/dist/lib/indexers/movies/AggregateMovieIdentifier.js +0 -45
- package/dist/lib/indexers/movies/MovieCollector.js +0 -65
- package/dist/lib/indexers/movies/MovieIdentifier.js +0 -22
- package/dist/lib/indexers/movies/MovieIndexer.js +0 -47
- package/dist/lib/indexers/movies/identifiers/TmdbMovieidentifier.js +0 -50
- package/dist/lib/indexers/series/AggregateEpisodeIdentifier.js +0 -46
- package/dist/lib/indexers/series/AggregateSeriesIdentifier.js +0 -46
- package/dist/lib/indexers/series/EpisodeIdentifier.js +0 -24
- package/dist/lib/indexers/series/SeriesCollector.js +0 -65
- package/dist/lib/indexers/series/SeriesIdentifer.js +0 -23
- package/dist/lib/indexers/series/SeriesIndexer.js +0 -134
- package/dist/lib/indexers/series/identifiers/TmdbEpisodeIdentifier.js +0 -38
- package/dist/lib/indexers/series/identifiers/TmdbSeriesIdentifier.js +0 -66
- package/dist/lib/indexers/series/identifiers/TvdbEpisodeIdentifier.js +0 -71
- package/dist/lib/indexers/series/identifiers/TvdbSeriesIdentifier.js +0 -82
- package/dist/lib/oblecto/index.js +0 -125
- package/dist/lib/queue/index.js +0 -82
- package/dist/lib/realtime/RealtimeClient.js +0 -137
- package/dist/lib/realtime/RealtimeController.js +0 -50
- package/dist/lib/sets/tv/MovieSetCollector.js +0 -49
- package/dist/lib/streamSessions/StreamSession.js +0 -148
- package/dist/lib/streamSessions/StreamSessionController.js +0 -78
- package/dist/lib/streamSessions/StreamSessionTypes/DirectHttpStreamSession.js +0 -105
- package/dist/lib/streamSessions/StreamSessionTypes/DirectStreamSession.js +0 -47
- package/dist/lib/streamSessions/StreamSessionTypes/HLSStreamer.js +0 -126
- package/dist/lib/streamSessions/StreamSessionTypes/RecodeFederationStreamSession.js +0 -72
- package/dist/lib/streamSessions/StreamSessionTypes/RecodeStreamSession.js +0 -65
- package/dist/lib/updaters/files/FileUpdateCollector.js +0 -44
- package/dist/lib/updaters/files/FileUpdater.js +0 -194
- package/dist/lib/updaters/movies/AggregateMovieUpdateRetriever.js +0 -44
- package/dist/lib/updaters/movies/MovieUpdateCollector.js +0 -48
- package/dist/lib/updaters/movies/MovieUpdater.js +0 -38
- package/dist/lib/updaters/movies/informationRetrievers/TmdbMovieRetriever.js +0 -42
- package/dist/lib/updaters/series/AggregateEpisodeUpdateRetriever.js +0 -41
- package/dist/lib/updaters/series/AggregateSeriesUpdateRetriever.js +0 -44
- package/dist/lib/updaters/series/SeriesUpdateCollector.js +0 -79
- package/dist/lib/updaters/series/SeriesUpdater.js +0 -84
- package/dist/lib/updaters/series/informationRetrievers/TmdbEpisodeRetriever.js +0 -66
- package/dist/lib/updaters/series/informationRetrievers/TmdbSeriesRetriever.js +0 -63
- package/dist/lib/updaters/series/informationRetrievers/TvdbEpisodeRetriever.js +0 -38
- package/dist/lib/updaters/series/informationRetrievers/TvdbSeriesRetriever.js +0 -50
- package/dist/models/episode.js +0 -62
- package/dist/models/episodeFiles.js +0 -14
- package/dist/models/file.js +0 -32
- package/dist/models/movie.js +0 -35
- package/dist/models/movieFiles.js +0 -14
- package/dist/models/movieSet.js +0 -26
- package/dist/models/series.js +0 -55
- package/dist/models/seriesSet.js +0 -17
- package/dist/models/stream.js +0 -81
- package/dist/models/trackEpisode.js +0 -17
- package/dist/models/trackEpisodes.js +0 -8
- package/dist/models/trackMovie.js +0 -17
- package/dist/models/trackMovies.js +0 -8
- package/dist/models/tvshow.js +0 -46
- package/dist/models/tvshowSet.js +0 -8
- package/dist/models/user.js +0 -26
- package/dist/submodules/REST/index.js +0 -59
- package/dist/submodules/REST/middleware/auth.js +0 -28
- package/dist/submodules/REST/routes/auth.js +0 -48
- package/dist/submodules/REST/routes/clients.js +0 -54
- package/dist/submodules/REST/routes/episodes.js +0 -275
- package/dist/submodules/REST/routes/files.js +0 -92
- package/dist/submodules/REST/routes/index.js +0 -48
- package/dist/submodules/REST/routes/movies.js +0 -305
- package/dist/submodules/REST/routes/sets.js +0 -35
- package/dist/submodules/REST/routes/settings/index.js +0 -22
- package/dist/submodules/REST/routes/settings/maintenance.js +0 -87
- package/dist/submodules/REST/routes/settings/misc.js +0 -38
- package/dist/submodules/REST/routes/settings/sources.js +0 -61
- package/dist/submodules/REST/routes/tvshows.js +0 -140
- package/dist/submodules/REST/routes/users.js +0 -107
- package/dist/submodules/REST/routes/web.js +0 -43
- package/dist/submodules/axiosTimeout.js +0 -30
- package/dist/submodules/database.js +0 -180
- package/dist/submodules/ffmpeg.js +0 -23
- package/dist/submodules/ffprobe.js +0 -22
- package/dist/submodules/guessit.js +0 -48
- package/dist/submodules/handlers/DirectStreamer.js +0 -68
- package/dist/submodules/handlers/FFMPEGHandlers/DvdStreamer.js +0 -52
- package/dist/submodules/handlers/FFMPEGHandlers/RemuxStreamer.js +0 -33
- package/dist/submodules/handlers/FFMPEGHandlers/TranscodeStreamer.js +0 -33
- package/dist/submodules/handlers/FFMPEGStreamer.js +0 -56
- package/dist/submodules/handlers/FederationStreamer.js +0 -23
- package/dist/submodules/handlers/HLSSessionHandler.js +0 -141
- package/dist/submodules/logger/index.js +0 -43
- package/dist/submodules/promiseTimeout.js +0 -28
- package/dist/submodules/zeroconf.js +0 -19
- package/dist/transcoders/dvd.js +0 -26
- package/dist/transcoders/index.js +0 -42
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _fs = require("fs");
|
|
9
|
-
|
|
10
|
-
var _episode = require("../../../models/episode");
|
|
11
|
-
|
|
12
|
-
var _series = require("../../../models/series");
|
|
13
|
-
|
|
14
|
-
class SeriesArtworkCollector {
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* @param {Oblecto} oblecto
|
|
18
|
-
*/
|
|
19
|
-
constructor(oblecto) {
|
|
20
|
-
this.oblecto = oblecto;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
*
|
|
24
|
-
* @param {Episode} episode - Episode for which to download the episode banner for
|
|
25
|
-
* @returns {Promise<void>}
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
async collectArtworkEpisodeBanner(episode) {
|
|
30
|
-
let stat;
|
|
31
|
-
|
|
32
|
-
try {
|
|
33
|
-
stat = await _fs.promises.stat(this.oblecto.artworkUtils.episodeBannerPath(episode));
|
|
34
|
-
} catch (e) {}
|
|
35
|
-
|
|
36
|
-
if (stat) return;
|
|
37
|
-
this.oblecto.queue.queueJob('downloadEpisodeBanner', episode);
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* @param {Series} series - Series for which to download the series poster for
|
|
42
|
-
* @returns {Promise<void>}
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
async collectArtworkSeriesPoster(series) {
|
|
47
|
-
let stat;
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
stat = await _fs.promises.stat(this.oblecto.artworkUtils.seriesPosterPath(series));
|
|
51
|
-
} catch (e) {}
|
|
52
|
-
|
|
53
|
-
if (stat) return;
|
|
54
|
-
this.oblecto.queue.queueJob('downloadSeriesPoster', series);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
*
|
|
58
|
-
* @returns {Promise<void>}
|
|
59
|
-
*/
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
async collectAllEpisodeBanners() {
|
|
63
|
-
let episodes = await _episode.Episode.findAll();
|
|
64
|
-
|
|
65
|
-
for (let episode of episodes) {
|
|
66
|
-
await this.collectArtworkEpisodeBanner(episode);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
*
|
|
71
|
-
* @returns {Promise<void>}
|
|
72
|
-
*/
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
async collectAllSeriesPosters() {
|
|
76
|
-
let allSeries = await _series.Series.findAll();
|
|
77
|
-
|
|
78
|
-
for (let series of allSeries) {
|
|
79
|
-
await this.collectArtworkSeriesPoster(series);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
*
|
|
84
|
-
* @returns {Promise<void>}
|
|
85
|
-
*/
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
async collectAll() {
|
|
89
|
-
await this.collectAllSeriesPosters();
|
|
90
|
-
await this.collectAllEpisodeBanners();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
exports.default = SeriesArtworkCollector;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _AggregateSeriesArtworkRetriever = _interopRequireDefault(require("./AggregateSeriesArtworkRetriever"));
|
|
9
|
-
|
|
10
|
-
var _TmdbSeriesArtworkRetriever = _interopRequireDefault(require("./artworkRetrievers/TmdbSeriesArtworkRetriever"));
|
|
11
|
-
|
|
12
|
-
var _TvdbSeriesArtworkRetriever = _interopRequireDefault(require("./artworkRetrievers/TvdbSeriesArtworkRetriever"));
|
|
13
|
-
|
|
14
|
-
var _FanarttvSeriesArtworkRetriever = _interopRequireDefault(require("./artworkRetrievers/FanarttvSeriesArtworkRetriever"));
|
|
15
|
-
|
|
16
|
-
var _logger = _interopRequireDefault(require("../../../submodules/logger"));
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
|
-
class SeriesArtworkDownloader {
|
|
21
|
-
constructor(oblecto) {
|
|
22
|
-
this.oblecto = oblecto;
|
|
23
|
-
this.seriesArtworkRetriever = new _AggregateSeriesArtworkRetriever.default(this.oblecto);
|
|
24
|
-
this.seriesArtworkRetriever.loadRetriever(new _TmdbSeriesArtworkRetriever.default(this.oblecto));
|
|
25
|
-
this.seriesArtworkRetriever.loadRetriever(new _FanarttvSeriesArtworkRetriever.default(this.oblecto));
|
|
26
|
-
this.seriesArtworkRetriever.loadRetriever(new _TvdbSeriesArtworkRetriever.default(this.oblecto)); // Register task availability to Oblecto queue
|
|
27
|
-
|
|
28
|
-
this.oblecto.queue.addJob('downloadEpisodeBanner', episode => this.downloadEpisodeBanner(episode));
|
|
29
|
-
this.oblecto.queue.addJob('downloadSeriesPoster', series => this.downloadSeriesPoster(series));
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async downloadEpisodeBanner(episode) {
|
|
33
|
-
await this.seriesArtworkRetriever.retrieveEpisodeBanner(episode);
|
|
34
|
-
|
|
35
|
-
_logger.default.log('DEBUG', `Banner for ${episode.episodeName} downloaded`);
|
|
36
|
-
|
|
37
|
-
for (let size of Object.keys(this.oblecto.config.artwork.banner)) {
|
|
38
|
-
this.oblecto.queue.pushJob('rescaleImage', {
|
|
39
|
-
from: this.oblecto.artworkUtils.episodeBannerPath(episode),
|
|
40
|
-
to: this.oblecto.artworkUtils.episodeBannerPath(episode, size),
|
|
41
|
-
width: this.oblecto.config.artwork.banner[size]
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async downloadSeriesPoster(series) {
|
|
47
|
-
await this.seriesArtworkRetriever.retrieveSeriesPoster(series);
|
|
48
|
-
|
|
49
|
-
_logger.default.log('DEBUG', `Poster for ${series.seriesName} downloaded`);
|
|
50
|
-
|
|
51
|
-
for (let size of Object.keys(this.oblecto.config.artwork.poster)) {
|
|
52
|
-
this.oblecto.queue.pushJob('rescaleImage', {
|
|
53
|
-
from: this.oblecto.artworkUtils.seriesPosterPath(series),
|
|
54
|
-
to: this.oblecto.artworkUtils.seriesPosterPath(series, size),
|
|
55
|
-
width: this.oblecto.config.artwork.poster[size]
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
exports.default = SeriesArtworkDownloader;
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _DebugExtendableError = _interopRequireDefault(require("../../../errors/DebugExtendableError"));
|
|
9
|
-
|
|
10
|
-
var _axiosTimeout = _interopRequireDefault(require("../../../../submodules/axiosTimeout"));
|
|
11
|
-
|
|
12
|
-
var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
class FanarttvSeriesArtworkRetriever {
|
|
17
|
-
constructor(oblecto) {
|
|
18
|
-
this.oblecto = oblecto;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async retrieveEpisodeBanner(episode) {
|
|
22
|
-
return [];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async retrieveSeriesPoster(series) {
|
|
26
|
-
if (!series.tvdbid) throw new _DebugExtendableError.default(`Fanart.tv Series poster retriever failed for ${series.seriesName}`);
|
|
27
|
-
let {
|
|
28
|
-
data
|
|
29
|
-
} = await (0, _axiosTimeout.default)({
|
|
30
|
-
method: 'get',
|
|
31
|
-
url: `http://webservice.fanart.tv/v3/tv/${series.tvdbid}?api_key=${this.oblecto.config['fanart.tv'].key}`
|
|
32
|
-
});
|
|
33
|
-
let urls = [];
|
|
34
|
-
|
|
35
|
-
for (let poster of data.tvposter) {
|
|
36
|
-
urls.push(poster.url);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return urls;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
exports.default = FanarttvSeriesArtworkRetriever;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _DebugExtendableError = _interopRequireDefault(require("../../../errors/DebugExtendableError"));
|
|
9
|
-
|
|
10
|
-
var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
class TmdbSeriesArtworkRetriever {
|
|
15
|
-
constructor(oblecto) {
|
|
16
|
-
this.oblecto = oblecto;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
* @param {Episode} episode
|
|
21
|
-
* @returns {Promise<string>}
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
async retrieveEpisodeBanner(episode) {
|
|
26
|
-
if (!episode.tmdbid) throw new _DebugExtendableError.default(`TMDB Episode banner retriever failed for ${episode.episodeName}`);
|
|
27
|
-
let series = await episode.getSeries();
|
|
28
|
-
let data = await (0, _promiseTimeout.default)(this.oblecto.tmdb.episodeImages({
|
|
29
|
-
id: series.tmdbid,
|
|
30
|
-
episode_number: episode.airedEpisodeNumber,
|
|
31
|
-
season_number: episode.airedSeason
|
|
32
|
-
}));
|
|
33
|
-
let urls = [];
|
|
34
|
-
|
|
35
|
-
for (let image of data.stills) {
|
|
36
|
-
urls.push(`https://image.tmdb.org/t/p/original${image['file_path']}`);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return urls;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
*
|
|
43
|
-
* @param {Series} series
|
|
44
|
-
* @returns {Promise<string>}
|
|
45
|
-
*/
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
async retrieveSeriesPoster(series) {
|
|
49
|
-
if (!series.tmdbid) throw new _DebugExtendableError.default(`TMDB Series poster retriever failed for ${series.seriesName}`);
|
|
50
|
-
let data = await (0, _promiseTimeout.default)(this.oblecto.tmdb.tvImages({
|
|
51
|
-
id: series.tmdbid
|
|
52
|
-
}));
|
|
53
|
-
let urls = [];
|
|
54
|
-
|
|
55
|
-
for (let image of data.posters) {
|
|
56
|
-
urls.push(`https://image.tmdb.org/t/p/original${image['file_path']}`);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return urls;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
exports.default = TmdbSeriesArtworkRetriever;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _DebugExtendableError = _interopRequireDefault(require("../../../errors/DebugExtendableError"));
|
|
9
|
-
|
|
10
|
-
var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
class TvdbSeriesArtworkRetriever {
|
|
15
|
-
constructor(oblecto) {
|
|
16
|
-
this.oblecto = oblecto;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
* @param {Episode} episode
|
|
21
|
-
* @returns {Promise<string>}
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
async retrieveEpisodeBanner(episode) {
|
|
26
|
-
if (!episode.tvdbid) throw new _DebugExtendableError.default(`TVDB Episode banner retriever failed for ${episode.episodeName}`);
|
|
27
|
-
let data = await (0, _promiseTimeout.default)(this.oblecto.tvdb.getEpisodeById(episode.tvdbid));
|
|
28
|
-
return [`https://thetvdb.com/banners/_cache/${data.filename}`];
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
*
|
|
32
|
-
* @param {Series} series
|
|
33
|
-
* @returns {Promise<string>}
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
async retrieveSeriesPoster(series) {
|
|
38
|
-
if (!series.tvdbid) throw new _DebugExtendableError.default(`TVDB Series poster retriever failed for ${series.seriesName}`);
|
|
39
|
-
let data = await (0, _promiseTimeout.default)(this.oblecto.tvdb.getSeriesPosters(series.tvdbid));
|
|
40
|
-
let urls = [];
|
|
41
|
-
|
|
42
|
-
for (let image of data) {
|
|
43
|
-
urls.push(`http://thetvdb.com/banners/${image.fileName}`);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return urls;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
exports.default = TvdbSeriesArtworkRetriever;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _fs = require("fs");
|
|
9
|
-
|
|
10
|
-
var _file = require("../../models/file");
|
|
11
|
-
|
|
12
|
-
var _movie = require("../../models/movie");
|
|
13
|
-
|
|
14
|
-
var _episode = require("../../models/episode");
|
|
15
|
-
|
|
16
|
-
var _logger = _interopRequireDefault(require("../../submodules/logger"));
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
|
-
class FileCleaner {
|
|
21
|
-
constructor(oblecto) {
|
|
22
|
-
this.oblecto = oblecto;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async removedDeletedFiled() {
|
|
26
|
-
_logger.default.log('INFO', 'Removing all non existent files from the database');
|
|
27
|
-
|
|
28
|
-
let files = await _file.File.findAll();
|
|
29
|
-
|
|
30
|
-
for (let file of files) {
|
|
31
|
-
try {
|
|
32
|
-
await _fs.promises.stat(file.path);
|
|
33
|
-
} catch (e) {
|
|
34
|
-
_logger.default.log('INFO', file.path, 'not found. Removing from database');
|
|
35
|
-
|
|
36
|
-
await file.destroy();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
async removeAssoclessFiles() {
|
|
42
|
-
_logger.default.log('INFO', 'Removing files from the database without any attached media items');
|
|
43
|
-
|
|
44
|
-
let results = await _file.File.findAll({
|
|
45
|
-
include: [_movie.Movie, _episode.Episode]
|
|
46
|
-
});
|
|
47
|
-
results.forEach(item => {
|
|
48
|
-
if (item.Movies.length === 0 && item.Episodes.length === 0) {
|
|
49
|
-
item.destroy();
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
exports.default = FileCleaner;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _movie = require("../../models/movie");
|
|
9
|
-
|
|
10
|
-
var _file = require("../../models/file");
|
|
11
|
-
|
|
12
|
-
var _logger = _interopRequireDefault(require("../../submodules/logger"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
class MovieCleaner {
|
|
17
|
-
/**
|
|
18
|
-
* @param {Oblecto} oblecto
|
|
19
|
-
*/
|
|
20
|
-
constructor(oblecto) {
|
|
21
|
-
this.oblecto = oblecto;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
async removeFileLessMovies() {
|
|
25
|
-
_logger.default.log('INFO', 'Removing movies without linked files');
|
|
26
|
-
|
|
27
|
-
let results = await _movie.Movie.findAll({
|
|
28
|
-
include: [_file.File]
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
for (let item of results) {
|
|
32
|
-
if (item.Files && item.Files.length > 0) continue;
|
|
33
|
-
|
|
34
|
-
_logger.default.log('INFO', 'Removing', item.movieName, 'as it has no linked files');
|
|
35
|
-
|
|
36
|
-
await item.destroy();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
exports.default = MovieCleaner;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _episode = require("../../models/episode");
|
|
9
|
-
|
|
10
|
-
var _file = require("../../models/file");
|
|
11
|
-
|
|
12
|
-
var _series = require("../../models/series");
|
|
13
|
-
|
|
14
|
-
var _logger = _interopRequireDefault(require("../../submodules/logger"));
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
class SeriesCleaner {
|
|
19
|
-
/**
|
|
20
|
-
* @param {Oblecto} oblecto
|
|
21
|
-
*/
|
|
22
|
-
constructor(oblecto) {
|
|
23
|
-
this.oblecto = oblecto;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
async removeFileLessEpisodes() {
|
|
27
|
-
_logger.default.log('INFO', 'Removing all episodes without linked files');
|
|
28
|
-
|
|
29
|
-
let results = await _episode.Episode.findAll({
|
|
30
|
-
include: [_file.File]
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
for (let item of results) {
|
|
34
|
-
if (item.Files && item.Files.length > 0) continue;
|
|
35
|
-
|
|
36
|
-
_logger.default.log('INFO', 'Removing', item.episodeName, 'as it has no linked files');
|
|
37
|
-
|
|
38
|
-
await item.destroy();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
async removePathLessShows() {
|
|
43
|
-
_logger.default.log('INFO', 'Removing series without at attached path');
|
|
44
|
-
|
|
45
|
-
await _series.Series.destroy({
|
|
46
|
-
where: {
|
|
47
|
-
directory: ''
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async removeEpisodeslessShows() {
|
|
53
|
-
_logger.default.log('INFO', 'Removing series without attached episodes');
|
|
54
|
-
|
|
55
|
-
let results = await _series.Series.findAll({
|
|
56
|
-
include: [_episode.Episode]
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
for (let item of results) {
|
|
60
|
-
if (item.Episodes && item.Episodes.length > 0) continue;
|
|
61
|
-
|
|
62
|
-
_logger.default.log('INFO', 'Removing', item.seriesName, 'as it has no linked episodes');
|
|
63
|
-
|
|
64
|
-
await item.destroy();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
exports.default = SeriesCleaner;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _IdentificationError = _interopRequireDefault(require("../errors/IdentificationError"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
class AggregateIdentifier {
|
|
13
|
-
/**
|
|
14
|
-
* Wrapper class to combine multiple identifiers and return information as a combined json output
|
|
15
|
-
*/
|
|
16
|
-
constructor() {
|
|
17
|
-
this.identifiers = [];
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
* @param {MediaIdentifier} identifier
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
loadIdentifier(identifier) {
|
|
26
|
-
this.identifiers.push(identifier);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async identify(...args) {
|
|
30
|
-
let identification = {};
|
|
31
|
-
|
|
32
|
-
for (let identifier of this.identifiers) {
|
|
33
|
-
let currentIdentification;
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
currentIdentification = await identifier.identify(...args);
|
|
37
|
-
} catch (e) {
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
identification = { ...identification,
|
|
42
|
-
...currentIdentification
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (Object.keys(identification).length === 0) throw new _IdentificationError.default(`Could not identify: ${args[0]}`);
|
|
47
|
-
return identification;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
exports.default = AggregateIdentifier;
|
|
53
|
-
;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _logger = _interopRequireDefault(require("../../submodules/logger"));
|
|
9
|
-
|
|
10
|
-
var _IdentificationError = _interopRequireDefault(require("../errors/IdentificationError"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
class AggregateUpdateRetriever {
|
|
15
|
-
constructor() {
|
|
16
|
-
this.retrievers = [];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
loadRetriever(retriever) {
|
|
20
|
-
this.retrievers.push(retriever);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async retrieveInformation(...args) {
|
|
24
|
-
let information = {};
|
|
25
|
-
|
|
26
|
-
for (let retriever of this.retrievers) {
|
|
27
|
-
try {
|
|
28
|
-
let currentInformation = await retriever.retrieveInformation(...args);
|
|
29
|
-
information = { ...information,
|
|
30
|
-
...currentInformation
|
|
31
|
-
};
|
|
32
|
-
} catch (e) {
|
|
33
|
-
_logger.default.log(e);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (Object.keys(information).length === 0) throw new _IdentificationError.default('No identification match could be found');
|
|
38
|
-
return information;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
exports.default = AggregateUpdateRetriever;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _fs = require("fs");
|
|
9
|
-
|
|
10
|
-
var _axiosTimeout = _interopRequireDefault(require("../../submodules/axiosTimeout"));
|
|
11
|
-
|
|
12
|
-
var _logger = _interopRequireDefault(require("../../submodules/logger"));
|
|
13
|
-
|
|
14
|
-
var _DebugExtendableError = _interopRequireDefault(require("../errors/DebugExtendableError"));
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
class Downloader {
|
|
19
|
-
constructor(oblecto) {
|
|
20
|
-
this.oblecto = oblecto;
|
|
21
|
-
this.oblecto.queue.addJob('downloadFile', async job => {
|
|
22
|
-
await Downloader.download(job.url, job.dest, job.overwrite);
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
static async download(url, dest, overwrite) {
|
|
27
|
-
let writeMode = 'wx';
|
|
28
|
-
|
|
29
|
-
if (overwrite) {
|
|
30
|
-
writeMode = 'w';
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
let response = await (0, _axiosTimeout.default)({
|
|
34
|
-
method: 'get',
|
|
35
|
-
url: url,
|
|
36
|
-
responseType: 'arraybuffer',
|
|
37
|
-
responseEncoding: 'binary'
|
|
38
|
-
});
|
|
39
|
-
await _fs.promises.writeFile(dest, response.data, {
|
|
40
|
-
flags: writeMode
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
static async attemptDownload(urls, path) {
|
|
45
|
-
for (let url of urls) {
|
|
46
|
-
try {
|
|
47
|
-
await Downloader.download(url, path);
|
|
48
|
-
return;
|
|
49
|
-
} catch (err) {
|
|
50
|
-
_logger.default.log('DEBUG', `Error while downloading ${url}. Continuing to next url`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
throw new _DebugExtendableError.default('Failed to download any url from array');
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
exports.default = Downloader;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _ExtendableError = _interopRequireDefault(require("./ExtendableError"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
class DebugExtendableError extends _ExtendableError.default {
|
|
13
|
-
constructor(message) {
|
|
14
|
-
super(message);
|
|
15
|
-
this.level = 'DEBUG';
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
exports.default = DebugExtendableError;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
class ExtendableError extends Error {
|
|
9
|
-
constructor(message) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.name = this.constructor.name;
|
|
12
|
-
|
|
13
|
-
if (typeof Error.captureStackTrace === 'function') {
|
|
14
|
-
Error.captureStackTrace(this, this.constructor);
|
|
15
|
-
} else {
|
|
16
|
-
this.stack = new Error(message).stack;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
exports.default = ExtendableError;
|