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,40 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _tls = _interopRequireDefault(require("tls"));
9
-
10
- var _fs = _interopRequireDefault(require("fs"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- class FederationServer {
15
- constructor(oblecto, port) {
16
- this.oblecto = oblecto;
17
- let options = {
18
- key: _fs.default.readFileSync(this.oblecto.config.federation.key),
19
- cert: _fs.default.readFileSync('/etc/oblecto/keys/public-cert.pem')
20
- };
21
- this.server = _tls.default.createServer(options, socket => {});
22
- this.server.listen(port);
23
- this.server.on('error', err => this.errorHandler(err));
24
- this.server.on('connection', socket => this.connectionHandler(socket));
25
- this.server.on('secureConnection', socket => this.secureConnectionHandler(socket));
26
- }
27
-
28
- errorHandler(error) {}
29
-
30
- connectionHandler(socket) {}
31
-
32
- secureConnectionHandler(socket) {}
33
-
34
- close() {
35
- this.server.close();
36
- }
37
-
38
- }
39
-
40
- exports.default = FederationServer;
@@ -1,97 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _nodeRsa = _interopRequireDefault(require("node-rsa"));
9
-
10
- var _fs = require("fs");
11
-
12
- var _uuid = require("uuid");
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- class FederationServerConnection {
17
- constructor(oblecto, socket) {
18
- this.oblecto = oblecto;
19
- this.socket = socket;
20
- this.socket.on('data', chunk => this.dataHandler(chunk));
21
- this.socket.on('close', () => this.closeHandler());
22
- this.socket.on('error', error => this.errorHandler(error));
23
- this.dataRead = '';
24
- this.clientId = '';
25
- this.authenticated = false;
26
- this.challenge = (0, _uuid.v4)();
27
- }
28
-
29
- dataHandler(chunk) {
30
- this.dataRead += chunk.toString();
31
- let split = this.dataRead.split('\n');
32
- if (split.length < 2) return;
33
-
34
- for (let item of split) {
35
- if (item === '') continue;
36
- this.dataRead = this.dataRead.replace(item + '\n', '');
37
- this.headerHandler(item);
38
- }
39
- }
40
-
41
- headerHandler(data) {
42
- let split = data.split(':');
43
-
44
- switch (split[0]) {
45
- case 'IAM':
46
- this.clientIdHandler(split[1]);
47
- break;
48
-
49
- case 'CHALLENGE':
50
- this.authHandler(split[1]);
51
- break;
52
-
53
- default:
54
- if (!this.authenticated) {
55
- this.socket.destroy();
56
- }
57
-
58
- break;
59
- }
60
- }
61
-
62
- async clientIdHandler(clientId) {
63
- this.clientId = clientId; // Check if the client server is known
64
- // If an unknown client is trying to connect, we should just ignore it
65
-
66
- if (!this.oblecto.config.federation.clients[clientId]) return;
67
- let key = await _fs.promises.readFile(this.oblecto.config.federation.clients[clientId].key);
68
- this.key = (0, _nodeRsa.default)(key);
69
- this.write('CHALLENGE', this.key.encrypt(this.challenge, 'base64'));
70
- }
71
-
72
- authHandler(data) {
73
- if (data === this.challenge) {
74
- this.authenticated = true;
75
- this.write('AUTH', 'ACCEPTED');
76
- return;
77
- }
78
-
79
- this.write('AUTH', 'DENIED');
80
- this.socket.destroy();
81
- }
82
-
83
- closeHandler() {}
84
-
85
- errorHandler(error) {}
86
-
87
- write(header, content) {
88
- this.socket.write(`${header}:${content}\n`);
89
- }
90
-
91
- close() {
92
- this.socket.close();
93
- }
94
-
95
- }
96
-
97
- exports.default = FederationServerConnection;
@@ -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 _series = require("../../models/series");
9
-
10
- var _episode = require("../../models/episode");
11
-
12
- var _file = require("../../models/file");
13
-
14
- class FederationEpisodeIndexer {
15
- constructor(oblecto) {
16
- this.oblecto = oblecto; // Register task availability to Oblecto queue
17
-
18
- this.oblecto.queue.addJob('federationIndexEpisode', async job => {
19
- await this.indexEpisode(job);
20
- });
21
- }
22
-
23
- async indexEpisode(file) {
24
- let [fileEntity, fileInserted] = await _file.File.findOrCreate({
25
- where: {
26
- host: file.host,
27
- path: file.id
28
- },
29
- defaults: {
30
- name: '',
31
- directory: '',
32
- extension: '',
33
- duration: file.duration
34
- }
35
- });
36
- let seriesQuery = {};
37
- if (file.fileInfo.seriesTvdbid) seriesQuery.tvdbid = file.fileInfo.seriesTvdbid;
38
- if (file.fileInfo.seriesTmdbid) seriesQuery.tmdbid = file.fileInfo.seriesTmdbid;
39
- let [series, seriesInserted] = await _series.Series.findOrCreate({
40
- where: seriesQuery
41
- });
42
- let episodeQuery = {
43
- SeriesId: series.id
44
- };
45
- if (file.fileInfo.tvdbid) episodeQuery.tvdbid = file.fileInfo.tvdbid;
46
- if (file.fileInfo.tmdbid) episodeQuery.tmdbid = file.fileInfo.tmdbid;
47
- let [episode, episodeInserted] = await _episode.Episode.findOrCreate({
48
- where: episodeQuery,
49
- defaults: {
50
- airedEpisodeNumber: file.fileInfo.episode,
51
- airedSeason: file.fileInfo.season
52
- }
53
- });
54
- if (!episodeInserted) return;
55
- await episode.addFile(fileEntity);
56
- await this.oblecto.seriesUpdateCollector.collectEpisode(episode);
57
- await this.oblecto.seriesArtworkCollector.collectArtworkEpisodeBanner(episode);
58
- if (!seriesInserted) return;
59
- await this.oblecto.seriesUpdateCollector.collectSeries(series);
60
- await this.oblecto.seriesArtworkCollector.collectArtworkSeriesPoster(series);
61
- }
62
-
63
- }
64
-
65
- exports.default = FederationEpisodeIndexer;
@@ -1,48 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _file = require("../../models/file");
9
-
10
- var _movie = require("../../models/movie");
11
-
12
- class FederationMovieIndexer {
13
- constructor(oblecto) {
14
- this.oblecto = oblecto; // Register task availability to Oblecto queue
15
-
16
- this.oblecto.queue.addJob('federationIndexMovie', async job => {
17
- await this.indexMovie(job);
18
- });
19
- }
20
-
21
- async indexMovie(file) {
22
- let [fileEntity, fileInserted] = await _file.File.findOrCreate({
23
- where: {
24
- host: file.host,
25
- path: file.id
26
- },
27
- defaults: {
28
- name: '',
29
- directory: '',
30
- extension: '',
31
- duration: file.duration
32
- }
33
- });
34
- let [movie, movieInserted] = await _movie.Movie.findOrCreate({
35
- where: {
36
- tmdbid: file.fileInfo.tmdbid
37
- }
38
- });
39
- await movie.addFile(fileEntity);
40
- if (!movieInserted) return;
41
- await this.oblecto.movieUpdateCollector.collectMovie(movie);
42
- await this.oblecto.movieArtworkCollector.collectArtworkMovieFanart(movie);
43
- await this.oblecto.movieArtworkCollector.collectArtworkMoviePoster(movie);
44
- }
45
-
46
- }
47
-
48
- exports.default = FederationMovieIndexer;
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- class MediaIdentifier {
9
- constructor(oblecto) {
10
- this.oblecto = oblecto;
11
- }
12
-
13
- }
14
-
15
- exports.default = MediaIdentifier;
@@ -1,103 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _file = require("../../../models/file");
9
-
10
- var _path = _interopRequireDefault(require("path"));
11
-
12
- var _FileExistsError = _interopRequireDefault(require("../../errors/FileExistsError"));
13
-
14
- var _ffprobe = _interopRequireDefault(require("../../../submodules/ffprobe"));
15
-
16
- var _stream = require("../../../models/stream");
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class FileIndexer {
21
- /**
22
- * @param {Oblecto} oblecto
23
- */
24
- constructor(oblecto) {
25
- this.oblecto = oblecto;
26
- this.oblecto.queue.addJob('indexFileStreams', this.indexVideoFileStreams);
27
- }
28
-
29
- async indexVideoFile(videoPath) {
30
- let parsedPath = _path.default.parse(videoPath);
31
-
32
- let [file, fileInserted] = await _file.File.findOrCreate({
33
- where: {
34
- path: videoPath
35
- },
36
- defaults: {
37
- host: 'local',
38
- name: parsedPath.name,
39
- directory: parsedPath.dir,
40
- extension: parsedPath.ext.replace('.', '')
41
- }
42
- });
43
-
44
- if (!fileInserted) {
45
- throw new _FileExistsError.default(`${videoPath} is already in the file database`);
46
- }
47
-
48
- await this.oblecto.fileUpdateCollector.collectFile(file);
49
- return file;
50
- }
51
-
52
- async indexVideoFileStreams(file) {
53
- let metadata = await (0, _ffprobe.default)(file.path);
54
-
55
- for (let stream_base of metadata.streams) {
56
- for (let i in stream_base) {
57
- if (stream_base[i] === 'N/A' || stream_base[i] === 'unknown') {
58
- stream_base[i] = null;
59
- }
60
- }
61
-
62
- let stream = {
63
- FileId: file.id,
64
- stream_id: stream_base.id,
65
- disposition_default: stream_base.disposition.default,
66
- disposition_dub: stream_base.disposition.dub,
67
- disposition_original: stream_base.disposition.original,
68
- disposition_comment: stream_base.disposition.comment,
69
- disposition_lyrics: stream_base.disposition.lyrics,
70
- disposition_karaoke: stream_base.disposition.karaoke,
71
- disposition_forced: stream_base.disposition.forced,
72
- disposition_hearing_impaired: stream_base.disposition.hearing_impaired,
73
- disposition_clean_effects: stream_base.disposition.clean_effects,
74
- disposition_attached_pic: stream_base.disposition.attached_pic,
75
- disposition_timed_thumbnails: stream_base.disposition.timed_thumbnails,
76
- ...stream_base
77
- };
78
-
79
- if (stream_base.tags) {
80
- stream['tags_language'] = stream_base.tags.language;
81
- stream['tags_title'] = stream_base.tags.title;
82
- delete stream.tags;
83
- }
84
-
85
- delete stream.id;
86
- delete stream.disposition;
87
- delete stream.codec_long_name;
88
- delete stream.codec_tag;
89
- await _stream.Stream.findOrCreate({
90
- where: {
91
- FileId: stream.FileId,
92
- stream_id: stream.stream_id,
93
- index: stream.index,
94
- codec_name: stream.codec_name
95
- },
96
- defaults: stream
97
- });
98
- }
99
- }
100
-
101
- }
102
-
103
- exports.default = FileIndexer;
@@ -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 _fs = require("fs");
9
-
10
- var _database = _interopRequireDefault(require("../../../submodules/database"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- var _default = {
15
- async removedDeletedFiled() {
16
- console.log('Scanning for deleted files');
17
- let results = await _database.default.file.findAll();
18
-
19
- for (let i in results) {
20
- let item = results[i];
21
-
22
- if (!(await _fs.promises.exists(item.path))) {
23
- console.log('Deleting', item.path, 'because the file doesn\'t exist anymore');
24
- await item.destroy();
25
- }
26
- }
27
- },
28
-
29
- async removeAssoclessFiles() {
30
- console.log('Scanning for files without associated media entities');
31
- let results = await _database.default.file.findAll({
32
- include: [_database.default.movie, _database.default.episode]
33
- });
34
- results.forEach(item => {
35
- if (item.movies.length === 0 && item.episodes.length === 0) {
36
- console.log('Deleting', item.path, 'because the file doesn\'t have any media entities associated');
37
- item.destroy();
38
- }
39
- });
40
- }
41
-
42
- };
43
- exports.default = _default;
@@ -1,45 +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 AggregateMovieIdentifier {
13
- constructor() {
14
- this.identifiers = [];
15
- }
16
-
17
- loadIdentifier(identifier) {
18
- this.identifiers.push(identifier);
19
- }
20
-
21
- async identify(moviePath) {
22
- let identification = {};
23
-
24
- for (let identifier of this.identifiers) {
25
- let currentIdentification;
26
-
27
- try {
28
- currentIdentification = await identifier.identify(moviePath);
29
- } catch (e) {
30
- continue;
31
- }
32
-
33
- identification = { ...identification,
34
- ...currentIdentification
35
- };
36
- }
37
-
38
- if (Object.keys(identification).length === 0) throw new _IdentificationError.default();
39
- return identification;
40
- }
41
-
42
- }
43
-
44
- exports.default = AggregateMovieIdentifier;
45
- ;
@@ -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 MovieCollector {
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('indexMovie', {
47
- path: file
48
- });
49
- }
50
- }
51
- /**
52
- *
53
- * @returns {Promise<void>}
54
- */
55
-
56
-
57
- async collectAll() {
58
- this.oblecto.config.movies.directories.forEach(directory => {
59
- this.collectDirectory(directory.path);
60
- });
61
- }
62
-
63
- }
64
-
65
- exports.default = MovieCollector;
@@ -1,22 +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 MovieIdentifier extends _MediaIdentifier.default {
13
- /**
14
- * Identify a Movie based a file path
15
- * @param {String} path File path to the Movie
16
- * @returns {Promise<JSON>}
17
- */
18
- async identify(path) {}
19
-
20
- }
21
-
22
- exports.default = MovieIdentifier;
@@ -1,47 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _AggregateIdentifier = _interopRequireDefault(require("../../common/AggregateIdentifier"));
9
-
10
- var _TmdbMovieidentifier = _interopRequireDefault(require("./identifiers/TmdbMovieidentifier"));
11
-
12
- var _movie = require("../../../models/movie");
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- class MovieIndexer {
17
- /**
18
- *
19
- * @param {Oblecto} oblecto
20
- */
21
- constructor(oblecto) {
22
- this.oblecto = oblecto;
23
- this.movieIdentifer = new _AggregateIdentifier.default();
24
- this.movieIdentifer.loadIdentifier(new _TmdbMovieidentifier.default(this.oblecto)); // Register task availability to Oblecto queue
25
-
26
- this.oblecto.queue.addJob('indexMovie', async job => await this.indexFile(job.path, job.doReIndex));
27
- }
28
-
29
- async indexFile(moviePath) {
30
- let file = await this.oblecto.fileIndexer.indexVideoFile(moviePath);
31
- let movieIdentification = await this.movieIdentifer.identify(moviePath);
32
- let [movie, movieCreated] = await _movie.Movie.findOrCreate({
33
- where: {
34
- tmdbid: movieIdentification.tmdbid
35
- },
36
- defaults: movieIdentification
37
- });
38
- movie.addFile(file);
39
- if (!movieCreated) return;
40
- this.oblecto.queue.queueJob('updateMovie', movie);
41
- this.oblecto.queue.queueJob('downloadMovieFanart', movie);
42
- this.oblecto.queue.pushJob('downloadMoviePoster', movie);
43
- }
44
-
45
- }
46
-
47
- exports.default = MovieIndexer;
@@ -1,50 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _MovieIdentifier = _interopRequireDefault(require("../MovieIdentifier"));
9
-
10
- var _guessit = _interopRequireDefault(require("../../../../submodules/guessit"));
11
-
12
- var _IdentificationError = _interopRequireDefault(require("../../../errors/IdentificationError"));
13
-
14
- var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- class TmdbMovieIdentifier extends _MovieIdentifier.default {
19
- async identify(path) {
20
- let identification = await _guessit.default.identify(path);
21
-
22
- if (!identification.title) {
23
- throw new _IdentificationError.default('Title extraction was unsuccessful');
24
- }
25
-
26
- let query = {
27
- query: identification.title
28
- };
29
-
30
- if (identification.year) {
31
- query.primary_release_year = identification.year;
32
- }
33
-
34
- let res = await (0, _promiseTimeout.default)(this.oblecto.tmdb.searchMovie(query));
35
- let identifiedMovie = res.results[0];
36
-
37
- if (!identifiedMovie) {
38
- throw new _IdentificationError.default();
39
- }
40
-
41
- return {
42
- tmdbid: identifiedMovie.id,
43
- movieName: identifiedMovie.title,
44
- overview: identifiedMovie.overview
45
- };
46
- }
47
-
48
- }
49
-
50
- exports.default = TmdbMovieIdentifier;
@@ -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 AggregateEpisodeIdentifier {
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(episodePath, series) {
23
- let identification = {};
24
-
25
- for (let identifier of this.identifiers) {
26
- let currentIdentification;
27
-
28
- try {
29
- currentIdentification = await identifier.identify(episodePath, series);
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 = AggregateEpisodeIdentifier;
46
- ;