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.
Files changed (167) hide show
  1. package/Oblecto-Web/dist/web/index.html +24 -3
  2. package/Oblecto-Web/dist/web/static/index-C-JsqHHk.css +1 -0
  3. package/Oblecto-Web/dist/web/static/index-DSZgpOOu.js +576 -0
  4. package/README.md +43 -7
  5. package/dist/bin/oblecto.js +12468 -61
  6. package/dist/index.js +10676 -6
  7. package/package.json +68 -36
  8. package/res/AGENTS.md +8 -0
  9. package/res/config.json +34 -7
  10. package/Oblecto-Web/LICENSE +0 -674
  11. package/Oblecto-Web/README.md +0 -20
  12. package/Oblecto-Web/dist/web/static/css/app.921835f8c2878caee6d1085d9982fa86.css +0 -1
  13. package/Oblecto-Web/dist/web/static/css/app.921835f8c2878caee6d1085d9982fa86.css.map +0 -1
  14. package/Oblecto-Web/dist/web/static/js/app.758b833f6395444695b6.js +0 -6896
  15. package/Oblecto-Web/dist/web/static/js/app.758b833f6395444695b6.js.map +0 -1
  16. package/Oblecto-Web/dist/web/static/js/manifest.d327d604ee57c29a75d0.js +0 -154
  17. package/Oblecto-Web/dist/web/static/js/manifest.d327d604ee57c29a75d0.js.map +0 -1
  18. package/Oblecto-Web/dist/web/static/js/vendor.84f1e8002f100f63d6ef.js +0 -32455
  19. package/Oblecto-Web/dist/web/static/js/vendor.84f1e8002f100f63d6ef.js.map +0 -1
  20. package/Oblecto-Web/package.json +0 -118
  21. package/dist/bin/cliManager.js +0 -102
  22. package/dist/bin/scripts/adduser.js +0 -50
  23. package/dist/bin/scripts/changepassword.js +0 -48
  24. package/dist/bin/scripts/deluser.js +0 -34
  25. package/dist/bin/scripts/helpers/argumentError.js +0 -12
  26. package/dist/bin/scripts/helpers/generateAssetDirectories.js +0 -37
  27. package/dist/bin/scripts/init/assets.js +0 -24
  28. package/dist/bin/scripts/init/database.js +0 -21
  29. package/dist/bin/scripts/init/general.js +0 -54
  30. package/dist/bin/scripts/init/index.js +0 -26
  31. package/dist/bin/scripts/removepassword.js +0 -42
  32. package/dist/config.js +0 -45
  33. package/dist/core/graphical.js +0 -179
  34. package/dist/core/index.js +0 -24
  35. package/dist/lib/artwork/ArtworkScaler.js +0 -31
  36. package/dist/lib/artwork/ArtworkUtils.js +0 -35
  37. package/dist/lib/artwork/movies/AggregateMovieArtworkRetriever.js +0 -58
  38. package/dist/lib/artwork/movies/MovieArtworkCollector.js +0 -93
  39. package/dist/lib/artwork/movies/MovieArtworkDownloader.js +0 -65
  40. package/dist/lib/artwork/movies/artworkRetrievers/FanarttvMovieArtworkRetriever.js +0 -57
  41. package/dist/lib/artwork/movies/artworkRetrievers/TmdbMovieArtworkRetriever.js +0 -47
  42. package/dist/lib/artwork/series/AggregateSeriesArtworkRetriever.js +0 -58
  43. package/dist/lib/artwork/series/SeriesArtworkCollector.js +0 -95
  44. package/dist/lib/artwork/series/SeriesArtworkDownloader.js +0 -62
  45. package/dist/lib/artwork/series/artworkRetrievers/FanarttvSeriesArtworkRetriever.js +0 -44
  46. package/dist/lib/artwork/series/artworkRetrievers/TmdbSeriesArtworkRetriever.js +0 -64
  47. package/dist/lib/artwork/series/artworkRetrievers/TvdbSeriesArtworkRetriever.js +0 -51
  48. package/dist/lib/cleaners/FileCleaner.js +0 -56
  49. package/dist/lib/cleaners/MovieCleaner.js +0 -42
  50. package/dist/lib/cleaners/SeriesCleaner.js +0 -70
  51. package/dist/lib/common/AggregateIdentifier.js +0 -53
  52. package/dist/lib/common/AggregateUpdateRetriever.js +0 -43
  53. package/dist/lib/downloader/index.js +0 -59
  54. package/dist/lib/errors/DebugExtendableError.js +0 -20
  55. package/dist/lib/errors/ExtendableError.js +0 -22
  56. package/dist/lib/errors/FileExistsError.js +0 -14
  57. package/dist/lib/errors/IdentificationError.js +0 -14
  58. package/dist/lib/errors/InfoExtendableError.js +0 -20
  59. package/dist/lib/errors/VideoAnalysisError.js +0 -14
  60. package/dist/lib/errors/VideoIdentificationError.js +0 -14
  61. package/dist/lib/errors/WarnExtendableError.js +0 -20
  62. package/dist/lib/federation/client/FederationClient.js +0 -127
  63. package/dist/lib/federation/client/FederationClientController.js +0 -45
  64. package/dist/lib/federation/client/FederationDataClient.js +0 -56
  65. package/dist/lib/federation/client/FederationMediaClient.js +0 -70
  66. package/dist/lib/federation/server/FederationController.js +0 -32
  67. package/dist/lib/federation/server/FederationDataServer.js +0 -22
  68. package/dist/lib/federation/server/FederationDataServerConnection.js +0 -96
  69. package/dist/lib/federation/server/FederationMediaServer.js +0 -22
  70. package/dist/lib/federation/server/FederationMediaServerConnection.js +0 -83
  71. package/dist/lib/federation/server/FederationServer.js +0 -40
  72. package/dist/lib/federation/server/FederationServerConnection.js +0 -97
  73. package/dist/lib/federationindexer/FederationEpisodeIndexer.js +0 -65
  74. package/dist/lib/federationindexer/FederationMovieIndexer.js +0 -48
  75. package/dist/lib/indexers/MediaIdentifier.js +0 -15
  76. package/dist/lib/indexers/files/FileIndexer.js +0 -103
  77. package/dist/lib/indexers/files/cleaner.js +0 -43
  78. package/dist/lib/indexers/movies/AggregateMovieIdentifier.js +0 -45
  79. package/dist/lib/indexers/movies/MovieCollector.js +0 -65
  80. package/dist/lib/indexers/movies/MovieIdentifier.js +0 -22
  81. package/dist/lib/indexers/movies/MovieIndexer.js +0 -47
  82. package/dist/lib/indexers/movies/identifiers/TmdbMovieidentifier.js +0 -50
  83. package/dist/lib/indexers/series/AggregateEpisodeIdentifier.js +0 -46
  84. package/dist/lib/indexers/series/AggregateSeriesIdentifier.js +0 -46
  85. package/dist/lib/indexers/series/EpisodeIdentifier.js +0 -24
  86. package/dist/lib/indexers/series/SeriesCollector.js +0 -65
  87. package/dist/lib/indexers/series/SeriesIdentifer.js +0 -23
  88. package/dist/lib/indexers/series/SeriesIndexer.js +0 -134
  89. package/dist/lib/indexers/series/identifiers/TmdbEpisodeIdentifier.js +0 -38
  90. package/dist/lib/indexers/series/identifiers/TmdbSeriesIdentifier.js +0 -66
  91. package/dist/lib/indexers/series/identifiers/TvdbEpisodeIdentifier.js +0 -71
  92. package/dist/lib/indexers/series/identifiers/TvdbSeriesIdentifier.js +0 -82
  93. package/dist/lib/oblecto/index.js +0 -125
  94. package/dist/lib/queue/index.js +0 -82
  95. package/dist/lib/realtime/RealtimeClient.js +0 -137
  96. package/dist/lib/realtime/RealtimeController.js +0 -50
  97. package/dist/lib/sets/tv/MovieSetCollector.js +0 -49
  98. package/dist/lib/streamSessions/StreamSession.js +0 -148
  99. package/dist/lib/streamSessions/StreamSessionController.js +0 -78
  100. package/dist/lib/streamSessions/StreamSessionTypes/DirectHttpStreamSession.js +0 -105
  101. package/dist/lib/streamSessions/StreamSessionTypes/DirectStreamSession.js +0 -47
  102. package/dist/lib/streamSessions/StreamSessionTypes/HLSStreamer.js +0 -126
  103. package/dist/lib/streamSessions/StreamSessionTypes/RecodeFederationStreamSession.js +0 -72
  104. package/dist/lib/streamSessions/StreamSessionTypes/RecodeStreamSession.js +0 -65
  105. package/dist/lib/updaters/files/FileUpdateCollector.js +0 -44
  106. package/dist/lib/updaters/files/FileUpdater.js +0 -194
  107. package/dist/lib/updaters/movies/AggregateMovieUpdateRetriever.js +0 -44
  108. package/dist/lib/updaters/movies/MovieUpdateCollector.js +0 -48
  109. package/dist/lib/updaters/movies/MovieUpdater.js +0 -38
  110. package/dist/lib/updaters/movies/informationRetrievers/TmdbMovieRetriever.js +0 -42
  111. package/dist/lib/updaters/series/AggregateEpisodeUpdateRetriever.js +0 -41
  112. package/dist/lib/updaters/series/AggregateSeriesUpdateRetriever.js +0 -44
  113. package/dist/lib/updaters/series/SeriesUpdateCollector.js +0 -79
  114. package/dist/lib/updaters/series/SeriesUpdater.js +0 -84
  115. package/dist/lib/updaters/series/informationRetrievers/TmdbEpisodeRetriever.js +0 -66
  116. package/dist/lib/updaters/series/informationRetrievers/TmdbSeriesRetriever.js +0 -63
  117. package/dist/lib/updaters/series/informationRetrievers/TvdbEpisodeRetriever.js +0 -38
  118. package/dist/lib/updaters/series/informationRetrievers/TvdbSeriesRetriever.js +0 -50
  119. package/dist/models/episode.js +0 -62
  120. package/dist/models/episodeFiles.js +0 -14
  121. package/dist/models/file.js +0 -32
  122. package/dist/models/movie.js +0 -35
  123. package/dist/models/movieFiles.js +0 -14
  124. package/dist/models/movieSet.js +0 -26
  125. package/dist/models/series.js +0 -55
  126. package/dist/models/seriesSet.js +0 -17
  127. package/dist/models/stream.js +0 -81
  128. package/dist/models/trackEpisode.js +0 -17
  129. package/dist/models/trackEpisodes.js +0 -8
  130. package/dist/models/trackMovie.js +0 -17
  131. package/dist/models/trackMovies.js +0 -8
  132. package/dist/models/tvshow.js +0 -46
  133. package/dist/models/tvshowSet.js +0 -8
  134. package/dist/models/user.js +0 -26
  135. package/dist/submodules/REST/index.js +0 -59
  136. package/dist/submodules/REST/middleware/auth.js +0 -28
  137. package/dist/submodules/REST/routes/auth.js +0 -48
  138. package/dist/submodules/REST/routes/clients.js +0 -54
  139. package/dist/submodules/REST/routes/episodes.js +0 -275
  140. package/dist/submodules/REST/routes/files.js +0 -92
  141. package/dist/submodules/REST/routes/index.js +0 -48
  142. package/dist/submodules/REST/routes/movies.js +0 -305
  143. package/dist/submodules/REST/routes/sets.js +0 -35
  144. package/dist/submodules/REST/routes/settings/index.js +0 -22
  145. package/dist/submodules/REST/routes/settings/maintenance.js +0 -87
  146. package/dist/submodules/REST/routes/settings/misc.js +0 -38
  147. package/dist/submodules/REST/routes/settings/sources.js +0 -61
  148. package/dist/submodules/REST/routes/tvshows.js +0 -140
  149. package/dist/submodules/REST/routes/users.js +0 -107
  150. package/dist/submodules/REST/routes/web.js +0 -43
  151. package/dist/submodules/axiosTimeout.js +0 -30
  152. package/dist/submodules/database.js +0 -180
  153. package/dist/submodules/ffmpeg.js +0 -23
  154. package/dist/submodules/ffprobe.js +0 -22
  155. package/dist/submodules/guessit.js +0 -48
  156. package/dist/submodules/handlers/DirectStreamer.js +0 -68
  157. package/dist/submodules/handlers/FFMPEGHandlers/DvdStreamer.js +0 -52
  158. package/dist/submodules/handlers/FFMPEGHandlers/RemuxStreamer.js +0 -33
  159. package/dist/submodules/handlers/FFMPEGHandlers/TranscodeStreamer.js +0 -33
  160. package/dist/submodules/handlers/FFMPEGStreamer.js +0 -56
  161. package/dist/submodules/handlers/FederationStreamer.js +0 -23
  162. package/dist/submodules/handlers/HLSSessionHandler.js +0 -141
  163. package/dist/submodules/logger/index.js +0 -43
  164. package/dist/submodules/promiseTimeout.js +0 -28
  165. package/dist/submodules/zeroconf.js +0 -19
  166. package/dist/transcoders/dvd.js +0 -26
  167. 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;