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,46 +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 AggregateSeriesIdentifier {
|
|
13
|
-
constructor(oblecto) {
|
|
14
|
-
this.oblecto = oblecto;
|
|
15
|
-
this.identifiers = [];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
loadIdentifier(identifier) {
|
|
19
|
-
this.identifiers.push(identifier);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async identify(seriesPath) {
|
|
23
|
-
let identification = {};
|
|
24
|
-
|
|
25
|
-
for (let identifier of this.identifiers) {
|
|
26
|
-
let currentIdentification;
|
|
27
|
-
|
|
28
|
-
try {
|
|
29
|
-
currentIdentification = await identifier.identify(seriesPath);
|
|
30
|
-
} catch (e) {
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
identification = { ...identification,
|
|
35
|
-
...currentIdentification
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (Object.keys(identification).length === 0) throw new _IdentificationError.default();
|
|
40
|
-
return identification;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
exports.default = AggregateSeriesIdentifier;
|
|
46
|
-
;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _MediaIdentifier = _interopRequireDefault(require("../MediaIdentifier"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
class EpisodeIdentifier extends _MediaIdentifier.default {
|
|
13
|
-
/**
|
|
14
|
-
* Identify an Episode based a file path and series information
|
|
15
|
-
* @param {String} path File path to the Episode
|
|
16
|
-
* @params {JSON} Guessit identification object
|
|
17
|
-
* @param {Series} series Series object from Sequalize
|
|
18
|
-
* @returns {Promise<JSON>}
|
|
19
|
-
*/
|
|
20
|
-
async identify(path, guessitIdentification, series) {}
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
exports.default = EpisodeIdentifier;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _recursiveReaddir = _interopRequireDefault(require("recursive-readdir"));
|
|
9
|
-
|
|
10
|
-
var _path = _interopRequireDefault(require("path"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
class SeriesCollector {
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* @param {Oblecto} oblecto
|
|
18
|
-
*/
|
|
19
|
-
constructor(oblecto) {
|
|
20
|
-
this.oblecto = oblecto;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
*
|
|
24
|
-
* @param {String} directory - Which directory to add to the index queue
|
|
25
|
-
* @returns {Promise<void>}
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
async collectDirectory(directory) {
|
|
30
|
-
let files = await (0, _recursiveReaddir.default)(directory);
|
|
31
|
-
files.forEach(file => {
|
|
32
|
-
this.collectFile(file);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
* @param {String} file - File path to add to the index queue
|
|
38
|
-
* @returns {Promise<void>}
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
async collectFile(file) {
|
|
43
|
-
let extension = _path.default.parse(file).ext.toLowerCase();
|
|
44
|
-
|
|
45
|
-
if (this.oblecto.config.fileExtensions.video.indexOf(extension) !== -1) {
|
|
46
|
-
this.oblecto.queue.queueJob('indexEpisode', {
|
|
47
|
-
path: file
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
*
|
|
53
|
-
* @returns {Promise<void>}
|
|
54
|
-
*/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
async collectAll() {
|
|
58
|
-
this.oblecto.config.tvshows.directories.forEach(directory => {
|
|
59
|
-
this.collectDirectory(directory.path);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
exports.default = SeriesCollector;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _MediaIdentifier = _interopRequireDefault(require("../MediaIdentifier"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
class SeriesIdentifier extends _MediaIdentifier.default {
|
|
13
|
-
/**
|
|
14
|
-
* Identify a Series of an Episode based a file path
|
|
15
|
-
* @param {String} path File path to the Episode
|
|
16
|
-
* @param {JSON} Guessit identification object
|
|
17
|
-
* @returns {Promise<JSON>}
|
|
18
|
-
*/
|
|
19
|
-
async identify(path, guessitIdentification) {}
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
exports.default = SeriesIdentifier;
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _sequelize = require("sequelize");
|
|
9
|
-
|
|
10
|
-
var _AggregateIdentifier = _interopRequireDefault(require("../../common/AggregateIdentifier"));
|
|
11
|
-
|
|
12
|
-
var _TmdbSeriesIdentifier = _interopRequireDefault(require("./identifiers/TmdbSeriesIdentifier"));
|
|
13
|
-
|
|
14
|
-
var _TmdbEpisodeIdentifier = _interopRequireDefault(require("./identifiers/TmdbEpisodeIdentifier"));
|
|
15
|
-
|
|
16
|
-
var _TvdbSeriesIdentifier = _interopRequireDefault(require("./identifiers/TvdbSeriesIdentifier"));
|
|
17
|
-
|
|
18
|
-
var _TvdbEpisodeIdentifier = _interopRequireDefault(require("./identifiers/TvdbEpisodeIdentifier"));
|
|
19
|
-
|
|
20
|
-
var _series = require("../../../models/series");
|
|
21
|
-
|
|
22
|
-
var _episode = require("../../../models/episode");
|
|
23
|
-
|
|
24
|
-
var _IdentificationError = _interopRequireDefault(require("../../errors/IdentificationError"));
|
|
25
|
-
|
|
26
|
-
var _logger = _interopRequireDefault(require("../../../submodules/logger"));
|
|
27
|
-
|
|
28
|
-
var _guessit = _interopRequireDefault(require("../../../submodules/guessit"));
|
|
29
|
-
|
|
30
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
-
|
|
32
|
-
class SeriesIndexer {
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
* @param {Oblecto} oblecto
|
|
36
|
-
*/
|
|
37
|
-
constructor(oblecto) {
|
|
38
|
-
this.oblecto = oblecto;
|
|
39
|
-
this.seriesIdentifier = new _AggregateIdentifier.default();
|
|
40
|
-
this.episodeIdentifer = new _AggregateIdentifier.default();
|
|
41
|
-
const seriesIdentifiers = {
|
|
42
|
-
'tmdb': _TmdbSeriesIdentifier.default,
|
|
43
|
-
'tvdb': _TvdbSeriesIdentifier.default
|
|
44
|
-
};
|
|
45
|
-
const episodeIdentifiers = {
|
|
46
|
-
'tmdb': _TmdbEpisodeIdentifier.default,
|
|
47
|
-
'tvdb': _TvdbEpisodeIdentifier.default
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
for (let identifier of this.oblecto.config.tvshows.seriesIdentifiers) {
|
|
51
|
-
_logger.default.log('DEBUG', `Loading ${identifier} series identifier`);
|
|
52
|
-
|
|
53
|
-
this.seriesIdentifier.loadIdentifier(new seriesIdentifiers[identifier](this.oblecto));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
for (let identifier of this.oblecto.config.tvshows.episodeIdentifiers) {
|
|
57
|
-
_logger.default.log('DEBUG', `Loading ${identifier} episode identifier`);
|
|
58
|
-
|
|
59
|
-
this.episodeIdentifer.loadIdentifier(new episodeIdentifiers[identifier](this.oblecto));
|
|
60
|
-
} // Register task availability to Oblecto queue
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.oblecto.queue.addJob('indexEpisode', async job => await this.indexFile(job.path));
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async indexSeries(file, guessitIdentification) {
|
|
67
|
-
let seriesIdentification;
|
|
68
|
-
|
|
69
|
-
try {
|
|
70
|
-
seriesIdentification = await this.seriesIdentifier.identify(file.path, guessitIdentification);
|
|
71
|
-
} catch (e) {
|
|
72
|
-
throw new _IdentificationError.default(`Could not identify series of ${file.path}`);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
_logger.default.log('DEBUG', `${file.path} series identified: ${seriesIdentification.seriesName}`);
|
|
76
|
-
|
|
77
|
-
const identifiers = ['tvdbid', 'tmdbid'];
|
|
78
|
-
let seriesQuery = [];
|
|
79
|
-
|
|
80
|
-
for (let identifier of identifiers) {
|
|
81
|
-
if (!seriesIdentification[identifier]) continue;
|
|
82
|
-
seriesQuery.push({
|
|
83
|
-
[identifier]: seriesIdentification[identifier]
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
let [series, seriesCreated] = await _series.Series.findOrCreate({
|
|
88
|
-
where: {
|
|
89
|
-
[_sequelize.Op.or]: seriesQuery
|
|
90
|
-
},
|
|
91
|
-
defaults: seriesIdentification
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
if (seriesCreated) {
|
|
95
|
-
this.oblecto.queue.pushJob('updateSeries', series);
|
|
96
|
-
this.oblecto.queue.queueJob('downloadSeriesPoster', series);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return series;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
async indexFile(episodePath) {
|
|
103
|
-
let file = await this.oblecto.fileIndexer.indexVideoFile(episodePath);
|
|
104
|
-
const guessitIdentification = await _guessit.default.identify(episodePath);
|
|
105
|
-
let series = await this.indexSeries(file, guessitIdentification);
|
|
106
|
-
let episodeIdentification;
|
|
107
|
-
|
|
108
|
-
try {
|
|
109
|
-
episodeIdentification = await this.episodeIdentifer.identify(episodePath, guessitIdentification, series);
|
|
110
|
-
} catch (e) {
|
|
111
|
-
throw new _IdentificationError.default(`Could not identify episode ${episodePath}`);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
_logger.default.log('DEBUG', `${file.path} episode identified ${episodeIdentification.episodeName}`);
|
|
115
|
-
|
|
116
|
-
let [episode, episodeCreated] = await _episode.Episode.findOrCreate({
|
|
117
|
-
where: {
|
|
118
|
-
airedSeason: episodeIdentification.airedSeason || 1,
|
|
119
|
-
airedEpisodeNumber: episodeIdentification.airedEpisodeNumber,
|
|
120
|
-
SeriesId: series.id
|
|
121
|
-
},
|
|
122
|
-
defaults: episodeIdentification
|
|
123
|
-
});
|
|
124
|
-
await episode.addFile(file);
|
|
125
|
-
|
|
126
|
-
if (episodeCreated) {
|
|
127
|
-
this.oblecto.queue.pushJob('updateEpisode', episode);
|
|
128
|
-
this.oblecto.queue.queueJob('downloadEpisodeBanner', episode);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
exports.default = SeriesIndexer;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _guessit = _interopRequireDefault(require("../../../../submodules/guessit"));
|
|
9
|
-
|
|
10
|
-
var _IdentificationError = _interopRequireDefault(require("../../../errors/IdentificationError"));
|
|
11
|
-
|
|
12
|
-
var _EpisodeIdentifier = _interopRequireDefault(require("../EpisodeIdentifier"));
|
|
13
|
-
|
|
14
|
-
var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout"));
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
class TmdbEpisodeIdentifier extends _EpisodeIdentifier.default {
|
|
19
|
-
async identify(path, guessitIdentification, series) {
|
|
20
|
-
if (!series.tmdbid) throw new _IdentificationError.default();
|
|
21
|
-
let episode = await (0, _promiseTimeout.default)(this.oblecto.tmdb.episodeInfo({
|
|
22
|
-
id: series.tmdbid,
|
|
23
|
-
season_number: guessitIdentification.season || 1,
|
|
24
|
-
episode_number: guessitIdentification.episode
|
|
25
|
-
}));
|
|
26
|
-
return {
|
|
27
|
-
tmdbid: episode.id,
|
|
28
|
-
episodeName: episode.name,
|
|
29
|
-
airedEpisodeNumber: episode.episode_number,
|
|
30
|
-
airedSeason: episode.season_number,
|
|
31
|
-
overview: episode.overview,
|
|
32
|
-
firstAired: episode.air_date
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
exports.default = TmdbEpisodeIdentifier;
|
|
@@ -1,66 +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
|
-
var _SeriesIdentifer = _interopRequireDefault(require("../SeriesIdentifer"));
|
|
11
|
-
|
|
12
|
-
var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
class TmdbSeriesIdentifier extends _SeriesIdentifer.default {
|
|
17
|
-
constructor(oblecto) {
|
|
18
|
-
super(oblecto);
|
|
19
|
-
this.tvShowCache = {};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
retrieveSeries(tmdbSearch, guessitIdentification) {
|
|
23
|
-
for (let series of tmdbSearch) {
|
|
24
|
-
if (!series.first_air_date) continue;
|
|
25
|
-
if (guessitIdentification.year.toString() !== series.first_air_date.substr(0, 4).toString()) continue;
|
|
26
|
-
return series;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
throw new _IdentificationError.default();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async identify(path, guessitIdentification) {
|
|
33
|
-
let cacheId = guessitIdentification.title;
|
|
34
|
-
|
|
35
|
-
if (guessitIdentification.year) {
|
|
36
|
-
cacheId += guessitIdentification.year;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (this.tvShowCache[cacheId]) {
|
|
40
|
-
return this.tvShowCache[cacheId];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
let tmdbSearch = (await (0, _promiseTimeout.default)(this.oblecto.tmdb.searchTv({
|
|
44
|
-
query: guessitIdentification.title
|
|
45
|
-
}))).results;
|
|
46
|
-
|
|
47
|
-
if (tmdbSearch.length < 1) {
|
|
48
|
-
throw new _IdentificationError.default();
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
let series = tmdbSearch[0];
|
|
52
|
-
|
|
53
|
-
if (guessitIdentification.year) {
|
|
54
|
-
series = this.retrieveSeries(tmdbSearch, guessitIdentification);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return this.tvShowCache[cacheId] = {
|
|
58
|
-
tmdbid: series.id,
|
|
59
|
-
seriesName: series.name,
|
|
60
|
-
overview: series.overview
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
exports.default = TmdbSeriesIdentifier;
|
|
@@ -1,71 +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
|
-
var _EpisodeIdentifier = _interopRequireDefault(require("../EpisodeIdentifier"));
|
|
11
|
-
|
|
12
|
-
var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
class TvdbEpisodeIdentifier extends _EpisodeIdentifier.default {
|
|
17
|
-
constructor(oblecto) {
|
|
18
|
-
super(oblecto);
|
|
19
|
-
this.episodeCache = {};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async getEpisodes(tvdbId) {
|
|
23
|
-
// TODO: Caching should be moved somewhere else or at least improved. This implementation is terrible
|
|
24
|
-
if (this.episodeCache[tvdbId]) {
|
|
25
|
-
return this.episodeCache[tvdbId];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (this.episodeCache.length > 100) this.episodeCache = {};
|
|
29
|
-
this.episodeCache[tvdbId] = await (0, _promiseTimeout.default)(this.oblecto.tvdb.getEpisodesBySeriesId(tvdbId));
|
|
30
|
-
return this.episodeCache[tvdbId];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
async retrieveEpisode(series, guessitIdentification) {
|
|
34
|
-
let tvdbEpisodes = await this.getEpisodes(series.tvdbid);
|
|
35
|
-
|
|
36
|
-
for (let episode of tvdbEpisodes) {
|
|
37
|
-
if (episode.episodeName === guessitIdentification.episode_name) return episode;
|
|
38
|
-
if (episode.airedSeason !== guessitIdentification.season) continue;
|
|
39
|
-
if (episode.airedEpisodeNumber !== guessitIdentification.episode) continue;
|
|
40
|
-
return episode;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
throw new _IdentificationError.default();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async identify(path, guessitIdentification, series) {
|
|
47
|
-
if (!series.tvdbid) throw new _IdentificationError.default('tvdbid was not supplied'); // Some single season shows don't have a season in the title, therefor whe should set it to 1 by default
|
|
48
|
-
// TODO: This should probably be done directly in the SeriesIndex.js file to avoid duplication in every identifier
|
|
49
|
-
|
|
50
|
-
if (!guessitIdentification.season) {
|
|
51
|
-
guessitIdentification.season = 1;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
let episode = await this.retrieveEpisode(series, guessitIdentification);
|
|
55
|
-
return {
|
|
56
|
-
tvdbid: episode.id,
|
|
57
|
-
imdbid: episode.imdbId,
|
|
58
|
-
episodeName: episode.episodeName,
|
|
59
|
-
airedEpisodeNumber: episode.airedEpisodeNumber,
|
|
60
|
-
airedSeason: episode.airedSeason,
|
|
61
|
-
dvdEpisodeNumber: episode.dvdEpisodeNumber,
|
|
62
|
-
dvdSeason: episode.dvdSeason,
|
|
63
|
-
absoluteNumber: episode.absoluteNumber,
|
|
64
|
-
overview: episode.overview,
|
|
65
|
-
firstAired: episode.firstAired
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
exports.default = TvdbEpisodeIdentifier;
|
|
@@ -1,82 +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
|
-
var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout.js"));
|
|
11
|
-
|
|
12
|
-
var _SeriesIdentifer = _interopRequireDefault(require("../SeriesIdentifer"));
|
|
13
|
-
|
|
14
|
-
var _fastestLevenshtein = require("fastest-levenshtein");
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
class TvdbSeriesIdentifier extends _SeriesIdentifer.default {
|
|
19
|
-
/**
|
|
20
|
-
* @param {Oblecto} oblecto
|
|
21
|
-
*/
|
|
22
|
-
constructor(oblecto) {
|
|
23
|
-
super(oblecto);
|
|
24
|
-
this.tvShowCache = {};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
findMatch(found, guessitId) {
|
|
28
|
-
// We need to do this as TVDB search ordering is pretty terrible
|
|
29
|
-
// When the tvdb identifier attempts to index "Doctor Who", it will identify it as "Doctor Who Confidential"
|
|
30
|
-
// if we use the first search result. Finding for the closest named match seems like the best solution
|
|
31
|
-
let shortestDistance = -1;
|
|
32
|
-
let shortestItem;
|
|
33
|
-
|
|
34
|
-
for (let item of found) {
|
|
35
|
-
let currentDistance = (0, _fastestLevenshtein.distance)(guessitId.title, item.seriesName);
|
|
36
|
-
|
|
37
|
-
if (shortestDistance == -1 || currentDistance < shortestDistance) {
|
|
38
|
-
shortestDistance = currentDistance;
|
|
39
|
-
shortestItem = item;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return shortestItem;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async searchSeries(guessitIdentification) {
|
|
47
|
-
let tvdbSearch = await (0, _promiseTimeout.default)(this.oblecto.tvdb.getSeriesByName(guessitIdentification.title));
|
|
48
|
-
if (!guessitIdentification.year) return this.findMatch(tvdbSearch, guessitIdentification);
|
|
49
|
-
let candidates = [];
|
|
50
|
-
|
|
51
|
-
for (let series of tvdbSearch) {
|
|
52
|
-
if (!series.firstAired) continue;
|
|
53
|
-
if (guessitIdentification.year.toString() !== series.firstAired.substr(0, 4)) continue;
|
|
54
|
-
candidates.push(series);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (candidates.length === 0) throw new _IdentificationError.default();
|
|
58
|
-
return this.findMatch(candidates, guessitIdentification);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async identify(path, guessitIdentification) {
|
|
62
|
-
let cacheId = guessitIdentification.title;
|
|
63
|
-
|
|
64
|
-
if (guessitIdentification.year) {
|
|
65
|
-
cacheId += guessitIdentification.year;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (this.tvShowCache[cacheId]) {
|
|
69
|
-
return this.tvShowCache[cacheId];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
let series = await this.searchSeries(guessitIdentification);
|
|
73
|
-
return this.tvShowCache[cacheId] = {
|
|
74
|
-
tvdbid: series.id,
|
|
75
|
-
seriesName: series.seriesName,
|
|
76
|
-
overview: series.overview
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
exports.default = TvdbSeriesIdentifier;
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _nodeTvdb = _interopRequireDefault(require("node-tvdb"));
|
|
9
|
-
|
|
10
|
-
var _moviedbPromise = require("moviedb-promise");
|
|
11
|
-
|
|
12
|
-
var _queue = _interopRequireDefault(require("../queue"));
|
|
13
|
-
|
|
14
|
-
var _ArtworkScaler = _interopRequireDefault(require("../artwork/ArtworkScaler"));
|
|
15
|
-
|
|
16
|
-
var _downloader = _interopRequireDefault(require("../downloader"));
|
|
17
|
-
|
|
18
|
-
var _SeriesIndexer = _interopRequireDefault(require("../indexers/series/SeriesIndexer"));
|
|
19
|
-
|
|
20
|
-
var _MovieIndexer = _interopRequireDefault(require("../indexers/movies/MovieIndexer"));
|
|
21
|
-
|
|
22
|
-
var _SeriesCollector = _interopRequireDefault(require("../indexers/series/SeriesCollector"));
|
|
23
|
-
|
|
24
|
-
var _MovieCollector = _interopRequireDefault(require("../indexers/movies/MovieCollector"));
|
|
25
|
-
|
|
26
|
-
var _REST = _interopRequireDefault(require("../../submodules/REST"));
|
|
27
|
-
|
|
28
|
-
var _RealtimeController = _interopRequireDefault(require("../realtime/RealtimeController"));
|
|
29
|
-
|
|
30
|
-
var _ArtworkUtils = _interopRequireDefault(require("../artwork/ArtworkUtils"));
|
|
31
|
-
|
|
32
|
-
var _MovieArtworkCollector = _interopRequireDefault(require("../artwork/movies/MovieArtworkCollector"));
|
|
33
|
-
|
|
34
|
-
var _SeriesArtworkCollector = _interopRequireDefault(require("../artwork/series/SeriesArtworkCollector"));
|
|
35
|
-
|
|
36
|
-
var _SeriesArtworkDownloader = _interopRequireDefault(require("../artwork/series/SeriesArtworkDownloader"));
|
|
37
|
-
|
|
38
|
-
var _MovieArtworkDownloader = _interopRequireDefault(require("../artwork/movies/MovieArtworkDownloader"));
|
|
39
|
-
|
|
40
|
-
var _FileUpdater = _interopRequireDefault(require("../updaters/files/FileUpdater"));
|
|
41
|
-
|
|
42
|
-
var _SeriesUpdater = _interopRequireDefault(require("../updaters/series/SeriesUpdater"));
|
|
43
|
-
|
|
44
|
-
var _MovieUpdater = _interopRequireDefault(require("../updaters/movies/MovieUpdater"));
|
|
45
|
-
|
|
46
|
-
var _FileUpdateCollector = _interopRequireDefault(require("../updaters/files/FileUpdateCollector"));
|
|
47
|
-
|
|
48
|
-
var _SeriesUpdateCollector = _interopRequireDefault(require("../updaters/series/SeriesUpdateCollector"));
|
|
49
|
-
|
|
50
|
-
var _MovieUpdateCollector = _interopRequireDefault(require("../updaters/movies/MovieUpdateCollector"));
|
|
51
|
-
|
|
52
|
-
var _FederationController = _interopRequireDefault(require("../federation/server/FederationController"));
|
|
53
|
-
|
|
54
|
-
var _FederationClientController = _interopRequireDefault(require("../federation/client/FederationClientController"));
|
|
55
|
-
|
|
56
|
-
var _FederationEpisodeIndexer = _interopRequireDefault(require("../federationindexer/FederationEpisodeIndexer"));
|
|
57
|
-
|
|
58
|
-
var _FederationMovieIndexer = _interopRequireDefault(require("../federationindexer/FederationMovieIndexer"));
|
|
59
|
-
|
|
60
|
-
var _MovieCleaner = _interopRequireDefault(require("../cleaners/MovieCleaner"));
|
|
61
|
-
|
|
62
|
-
var _SeriesCleaner = _interopRequireDefault(require("../cleaners/SeriesCleaner"));
|
|
63
|
-
|
|
64
|
-
var _FileCleaner = _interopRequireDefault(require("../cleaners/FileCleaner"));
|
|
65
|
-
|
|
66
|
-
var _FileIndexer = _interopRequireDefault(require("../indexers/files/FileIndexer"));
|
|
67
|
-
|
|
68
|
-
var _database = require("../../submodules/database");
|
|
69
|
-
|
|
70
|
-
var _StreamSessionController = _interopRequireDefault(require("../streamSessions/StreamSessionController"));
|
|
71
|
-
|
|
72
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
73
|
-
|
|
74
|
-
class Oblecto {
|
|
75
|
-
constructor(config) {
|
|
76
|
-
this.config = config;
|
|
77
|
-
this.database = (0, _database.initDatabase)();
|
|
78
|
-
this.tvdb = new _nodeTvdb.default(this.config.tvdb.key);
|
|
79
|
-
this.tmdb = new _moviedbPromise.MovieDb(this.config.themoviedb.key);
|
|
80
|
-
this.queue = new _queue.default(this.config.queue.concurrency);
|
|
81
|
-
this.oblectoAPI = new _REST.default(this);
|
|
82
|
-
this.realTimeController = new _RealtimeController.default(this);
|
|
83
|
-
this.downloader = new _downloader.default(this);
|
|
84
|
-
this.fileIndexer = new _FileIndexer.default(this);
|
|
85
|
-
this.seriesIndexer = new _SeriesIndexer.default(this);
|
|
86
|
-
this.movieIndexer = new _MovieIndexer.default(this);
|
|
87
|
-
this.seriesCollector = new _SeriesCollector.default(this);
|
|
88
|
-
this.movieCollector = new _MovieCollector.default(this);
|
|
89
|
-
this.seriesArtworkDownloader = new _SeriesArtworkDownloader.default(this);
|
|
90
|
-
this.movieArtworkDownloader = new _MovieArtworkDownloader.default(this);
|
|
91
|
-
this.movieArtworkCollector = new _MovieArtworkCollector.default(this);
|
|
92
|
-
this.seriesArtworkCollector = new _SeriesArtworkCollector.default(this);
|
|
93
|
-
this.artworkUtils = new _ArtworkUtils.default(this);
|
|
94
|
-
this.imageScaler = new _ArtworkScaler.default(this);
|
|
95
|
-
this.fileUpdater = new _FileUpdater.default(this);
|
|
96
|
-
this.seriesUpdater = new _SeriesUpdater.default(this);
|
|
97
|
-
this.movieUpdater = new _MovieUpdater.default(this);
|
|
98
|
-
this.fileUpdateCollector = new _FileUpdateCollector.default(this);
|
|
99
|
-
this.seriesUpdateCollector = new _SeriesUpdateCollector.default(this);
|
|
100
|
-
this.movieUpdateCollector = new _MovieUpdateCollector.default(this);
|
|
101
|
-
this.fileCleaner = new _FileCleaner.default(this);
|
|
102
|
-
this.movieCleaner = new _MovieCleaner.default(this);
|
|
103
|
-
this.seriesCleaner = new _SeriesCleaner.default(this);
|
|
104
|
-
this.streamSessionController = new _StreamSessionController.default(this);
|
|
105
|
-
|
|
106
|
-
if (config.federation.enable) {
|
|
107
|
-
this.fedartionController = new _FederationController.default(this);
|
|
108
|
-
this.federationClientController = new _FederationClientController.default(this);
|
|
109
|
-
this.federationEpisodeIndexer = new _FederationEpisodeIndexer.default(this);
|
|
110
|
-
this.federationMovieIndexer = new _FederationMovieIndexer.default(this);
|
|
111
|
-
this.federationClientController.addAllSyncMasters();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
close() {
|
|
116
|
-
for (let item of Object.keys(this)) {
|
|
117
|
-
if (this[item].close) {
|
|
118
|
-
this[item].close();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
exports.default = Oblecto;
|