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,126 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _StreamSession = _interopRequireDefault(require("../StreamSession"));
9
-
10
- var _mkdirp = _interopRequireDefault(require("mkdirp"));
11
-
12
- var _os = _interopRequireDefault(require("os"));
13
-
14
- var _ffmpeg = _interopRequireDefault(require("../../../submodules/ffmpeg"));
15
-
16
- var _fs = _interopRequireWildcard(require("fs"));
17
-
18
- var _DirectHttpStreamSession = _interopRequireDefault(require("./DirectHttpStreamSession"));
19
-
20
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
21
-
22
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
-
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
- class HLSStreamer extends _StreamSession.default {
27
- constructor(file, options, oblecto) {
28
- super(file, options, oblecto);
29
- this.timeoutTime = 10000;
30
- this.paused = true;
31
- this.maxGenCount = 10;
32
-
33
- if (this.videoCodec === this.file.videoCodec || this.file.videoCodec in this.targetVideoCodecs) {
34
- this.videoCodec = 'copy';
35
- }
36
-
37
- if (this.audioCodec === this.file.audioCodec || this.file.audioCodec in this.targetAudioCodecs) {
38
- this.audioCodec = 'copy';
39
- }
40
-
41
- this.startTimeout(); // Create temporary directory to store HLS segments
42
-
43
- _mkdirp.default.sync(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}`);
44
-
45
- this.process = (0, _ffmpeg.default)(this.file.path) //.native()
46
- .videoCodec(this.getFfmpegVideoCodec()).audioCodec(this.audioCodec).seekInput(this.offset).outputOptions([//'-hls_time 10',
47
- //'-hls_list_size 10',
48
- //'-hls_init_time 2',
49
- '-hls_playlist_type event', '-hls_base_url', `/HLS/${this.sessionId}/segment/`, '-hls_segment_filename', `${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/%03d.ts`]);
50
- this.process.on('start', cmd => this.segmenterStart(cmd));
51
- this.process.on('error', err => {});
52
- this.segmentCheckerInterval = setInterval(() => this.segmentChecker(), 100);
53
- this.startSegmenter();
54
- }
55
-
56
- async endSession() {
57
- super.endSession();
58
- clearInterval(this.segmentCheckerInterval);
59
- await _fs.promises.rmdir(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/`, {
60
- recursive: true
61
- });
62
- }
63
-
64
- segmenterStart(cmd) {
65
- this.paused = false;
66
- }
67
-
68
- startSegmenter() {
69
- this.process.save(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/index.m3u8`);
70
- }
71
-
72
- async segmentChecker() {
73
- if (!this.process) return;
74
- let files = await _fs.promises.readdir(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/`);
75
- const segments = files.filter(s => s.includes('.ts'));
76
-
77
- if (segments.length > this.maxGenCount) {
78
- this.pauseSegmenting();
79
- } else {
80
- this.resumeSegmenting();
81
- }
82
- }
83
-
84
- pauseSegmenting() {
85
- if (!this.process) return;
86
- if (this.paused) return;
87
- this.paused = true;
88
- this.process.kill('SIGSTOP');
89
- }
90
-
91
- resumeSegmenting() {
92
- if (!this.process) return;
93
- if (!this.paused) return;
94
- this.paused = false;
95
- this.process.kill('SIGCONT');
96
- }
97
-
98
- sendPlaylistFile(res) {
99
- this.startTimeout();
100
- res.writeHead(200, {
101
- 'Content-Type': 'application/x-mpegURL'
102
- });
103
-
104
- _fs.default.createReadStream(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/index.m3u8`).pipe(res);
105
- }
106
-
107
- async streamSegment(req, res, segmentId) {
108
- this.startTimeout();
109
-
110
- _DirectHttpStreamSession.default.httpStreamHandler(req, res, `${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/${('000' + segmentId).substr(-3)}.ts`);
111
-
112
- let files = await _fs.promises.readdir(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/`);
113
-
114
- for (let file of files) {
115
- let sequenceId = file.replace('index', '').replace('.vtt', '').replace('.ts', '');
116
- sequenceId = parseInt(sequenceId);
117
-
118
- if (segmentId > sequenceId) {
119
- await _fs.promises.unlink(`${_os.default.tmpdir()}/oblecto/sessions/${this.sessionId}/${file}`);
120
- }
121
- }
122
- }
123
-
124
- }
125
-
126
- exports.default = HLSStreamer;
@@ -1,72 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _StreamSession = _interopRequireDefault(require("../StreamSession"));
9
-
10
- var _ffmpeg = _interopRequireDefault(require("../../../submodules/ffmpeg"));
11
-
12
- var _stream = _interopRequireDefault(require("stream"));
13
-
14
- var _FederationMediaClient = _interopRequireDefault(require("../../federation/client/FederationMediaClient"));
15
-
16
- var _logger = _interopRequireDefault(require("../../../submodules/logger"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class RecodeFederationStreamSession extends _StreamSession.default {
21
- constructor(file, options, oblecto) {
22
- super(file, options, oblecto);
23
- }
24
-
25
- async addDestination(destination) {
26
- await super.addDestination(destination);
27
- }
28
-
29
- endSession() {
30
- super.endSession();
31
- this.federationClient.closeConnection();
32
- }
33
-
34
- async startStream() {
35
- await super.startStream();
36
- if (this.started) return;
37
- this.started = true;
38
- await this.initFederationStream();
39
- let inputOptions = ['-noaccurate_seek'];
40
- let outputOptions = ['-movflags', 'empty_moov', '-copyts'];
41
-
42
- if (this.oblecto.config.transcoding.hardwareAcceleration) {
43
- inputOptions.push('-hwaccel ' + this.oblecto.config.transcoding.hardwareAccelerator); // The Nvidia NVENC encoder doesn't support 10 bit encoding, so we need to force 8 bit
44
- // if the cuda accelerator has been selected
45
-
46
- if (this.oblecto.config.transcoding.hardwareAccelerator === 'cuda') {
47
- outputOptions.push('-pix_fmt yuv420p');
48
- }
49
- }
50
-
51
- this.process = (0, _ffmpeg.default)(this.inputStream).format(this.format).videoCodec(this.getFfmpegVideoCodec()).audioCodec(this.audioCodec).inputOptions(inputOptions).outputOptions(outputOptions).on('start', cmd => {
52
- _logger.default.log('INFO', this.sessionId, cmd);
53
- });
54
- this.process.on('error', err => {
55
- if (err.message !== 'ffmpeg was killed with signal SIGKILL') _logger.default.log('ERROR', this.sessionId, err);
56
- });
57
- this.process.pipe(this.outputStream, {
58
- end: true
59
- });
60
- }
61
-
62
- async initFederationStream() {
63
- this.federationClient = new _FederationMediaClient.default(this.oblecto, this.file.host);
64
- await this.federationClient.connect();
65
- await this.federationClient.setStreamDestination(this.inputStream);
66
- await this.federationClient.setStreamOffset(this.offset);
67
- await this.federationClient.startStreamFile(this.file.path);
68
- }
69
-
70
- }
71
-
72
- exports.default = RecodeFederationStreamSession;
@@ -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 _StreamSession = _interopRequireDefault(require("../StreamSession"));
9
-
10
- var _ffmpeg = _interopRequireDefault(require("../../../submodules/ffmpeg"));
11
-
12
- var _logger = _interopRequireDefault(require("../../../submodules/logger"));
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- class RecodeStreamSession extends _StreamSession.default {
17
- constructor(file, options, oblecto) {
18
- super(file, options, oblecto);
19
-
20
- if (this.videoCodec === this.file.videoCodec || this.file.videoCodec in this.targetVideoCodecs) {
21
- this.videoCodec = 'copy';
22
- }
23
-
24
- if (this.audioCodec === this.file.audioCodec || this.file.audioCodec in this.targetAudioCodecs) {
25
- this.audioCodec = 'copy';
26
- }
27
- }
28
-
29
- async addDestination(destination) {
30
- await super.addDestination(destination);
31
- }
32
-
33
- async startStream() {
34
- await super.startStream();
35
- if (this.started) return;
36
- this.started = true;
37
- let inputOptions = ['-noaccurate_seek'];
38
- let outputOptions = ['-movflags empty_moov', '-copyts'];
39
-
40
- if (this.oblecto.config.transcoding.hardwareAcceleration) {
41
- inputOptions.push('-hwaccel ' + this.oblecto.config.transcoding.hardwareAccelerator); // The Nvidia NVENC encoder doesn't support 10 bit encoding, so we need to force 8 bit
42
- // if the cuda accelerator has been selected
43
- // TODO: Fix washed out colors for some 10 bit video streams when using the NVENC encoder
44
- // Depending on the input color range, this may result in washed out colors since the color range is kept
45
- // but considered to be a full range color space even if the input range is limited.
46
-
47
- if (this.oblecto.config.transcoding.hardwareAccelerator === 'cuda') {
48
- outputOptions.push('-pix_fmt yuv420p');
49
- }
50
- }
51
-
52
- this.process = (0, _ffmpeg.default)(this.file.path).format(this.format).videoCodec(this.getFfmpegVideoCodec()).audioCodec(this.audioCodec).seekInput(this.offset).inputOptions(inputOptions).outputOptions(outputOptions).on('start', cmd => {
53
- _logger.default.log('INFO', this.sessionId, cmd);
54
- });
55
- this.process.on('error', err => {
56
- if (err.message !== 'ffmpeg was killed with signal SIGKILL') _logger.default.log('ERROR', this.sessionId, err);
57
- });
58
- this.process.pipe(this.outputStream, {
59
- end: true
60
- });
61
- }
62
-
63
- }
64
-
65
- exports.default = RecodeStreamSession;
@@ -1,44 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _file = require("../../../models/file");
9
-
10
- class FileUpdateCollector {
11
- /**
12
- *
13
- * @param {Oblecto} oblecto
14
- */
15
- constructor(oblecto) {
16
- this.oblecto = oblecto;
17
- }
18
- /**
19
- *
20
- * @param {File} file - File entity to update
21
- * @returns {Promise<void>}
22
- */
23
-
24
-
25
- async collectFile(file) {
26
- this.oblecto.queue.queueJob('updateFile', file);
27
- }
28
- /**
29
- *
30
- * @returns {Promise<void>}
31
- */
32
-
33
-
34
- async collectAllFiles() {
35
- let files = await _file.File.findAll();
36
-
37
- for (let file of files) {
38
- this.collectFile(file);
39
- }
40
- }
41
-
42
- }
43
-
44
- exports.default = FileUpdateCollector;
@@ -1,194 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _crypto = _interopRequireDefault(require("crypto"));
9
-
10
- var _fs = require("fs");
11
-
12
- var _ffprobe = _interopRequireDefault(require("../../../submodules/ffprobe"));
13
-
14
- var _VideoAnalysisError = _interopRequireDefault(require("../../errors/VideoAnalysisError"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- class FileUpdater {
19
- /**
20
- * @param {Oblecto} oblecto
21
- */
22
- constructor(oblecto) {
23
- this.oblecto = oblecto;
24
- this.oblecto.queue.addJob('updateFile', async file => {
25
- await this.updateFile(file);
26
- });
27
- this.oblecto.queue.addJob('updateFileHash', async file => {
28
- await this.updateFileHash(file);
29
- });
30
- this.oblecto.queue.addJob('updateFileSize', async file => {
31
- await this.updateFileSize(file);
32
- });
33
- this.oblecto.queue.addJob('updateFileExtension', async file => {
34
- await this.updateFileExtension(file);
35
- });
36
- this.oblecto.queue.addJob('updateFileFFProbe', async file => {
37
- await this.updateFileFFProbe(file);
38
- });
39
- }
40
-
41
- static async getPrimaryVideoStream(metadata) {
42
- let streams = metadata.streams;
43
- let primaryStream = {
44
- duration: 0
45
- };
46
-
47
- for (const stream of streams) {
48
- if (stream.duration || 1 >= primaryStream.duration) {
49
- if (stream['codec_type'] !== 'video') continue;
50
- primaryStream = stream;
51
- }
52
- }
53
-
54
- return primaryStream;
55
- }
56
-
57
- static async getPrimaryAudioStream(metadata) {
58
- let streams = metadata.streams;
59
- let primaryStream = {
60
- duration: 0
61
- };
62
-
63
- for (const stream of streams) {
64
- if (stream.duration || 1 >= primaryStream.duration) {
65
- if (stream['codec_type'] !== 'audio') continue;
66
- primaryStream = stream;
67
- }
68
- }
69
-
70
- return primaryStream;
71
- }
72
- /**
73
- *
74
- * @param {File} file
75
- * @returns {Promise<void>}
76
- */
77
-
78
-
79
- async updateFile(file) {
80
- if (this.oblecto.config.files.doHash && !file.hash) {
81
- this.oblecto.queue.lowPriorityJob('updateFileHash', file);
82
- }
83
-
84
- if (!file.size || file.size === 0) {
85
- this.oblecto.queue.queueJob('updateFileSize', file);
86
- }
87
-
88
- if (file.extension.includes('.')) {
89
- this.oblecto.queue.queueJob('updateFileExtension', file);
90
- }
91
-
92
- if (!file.duration || file.duration === 0) {
93
- this.oblecto.queue.queueJob('updateFileFFProbe', file);
94
- this.oblecto.queue.queueJob('indexFileStreams', file);
95
- }
96
- }
97
- /**
98
- *
99
- * @param {File} file
100
- * @returns {Promise<string>}
101
- */
102
-
103
-
104
- getHashFromFile(file) {
105
- return new Promise((resolve, reject) => {
106
- let fd = (0, _fs.createReadStream)(file.path);
107
-
108
- let hash = _crypto.default.createHash('sha1');
109
-
110
- hash.setEncoding('hex');
111
- fd.on('end', function () {
112
- hash.end();
113
- resolve(hash.read());
114
- });
115
- fd.on('error', () => {
116
- reject(new _VideoAnalysisError.default(`Failed to calculate hash for ${file.path}`));
117
- });
118
- fd.pipe(hash);
119
- });
120
- }
121
- /**
122
- *
123
- * @param {File} file
124
- * @returns {Promise<void>}
125
- */
126
-
127
-
128
- async updateFileHash(file) {
129
- let hash = await this.getHashFromFile(file);
130
- await file.update({
131
- hash
132
- });
133
- }
134
- /**
135
- *
136
- * @param {File} file
137
- * @returns {Promise<void>}
138
- */
139
-
140
-
141
- async updateFileSize(file) {
142
- let size = (await _fs.promises.stat(file.path)).size;
143
- await file.update({
144
- size
145
- });
146
- }
147
- /**
148
- *
149
- * @param {File} file
150
- * @returns {Promise<void>}
151
- */
152
-
153
-
154
- async updateFileExtension(file) {
155
- let extension = file.extension.replace('.', '');
156
- await file.update({
157
- extension
158
- });
159
- }
160
- /**
161
- *
162
- * @param {File} file
163
- * @returns {Promise<void>}
164
- */
165
-
166
-
167
- async updateFileFFProbe(file) {
168
- let metadata;
169
-
170
- try {
171
- metadata = await (0, _ffprobe.default)(file.path);
172
- } catch (e) {
173
- throw new _VideoAnalysisError.default(`Failed to ffprobe ${file.path}`);
174
- }
175
-
176
- let primaryVideoStream = await FileUpdater.getPrimaryVideoStream(metadata);
177
- let primaryAudioStream = await FileUpdater.getPrimaryAudioStream(metadata);
178
- let duration = metadata.format.duration;
179
-
180
- if (isNaN(duration)) {
181
- throw new _VideoAnalysisError.default(`Could not extract duration from ${file.path}`);
182
- }
183
-
184
- await file.update({
185
- duration,
186
- container: metadata.format['format_name'],
187
- videoCodec: primaryVideoStream['codec_name'],
188
- audioCodec: primaryAudioStream['codec_name']
189
- });
190
- }
191
-
192
- }
193
-
194
- exports.default = FileUpdater;
@@ -1,44 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _IdentificationError = _interopRequireDefault(require("../../errors/IdentificationError"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class AggregateMovieUpdateRetriever {
13
- constructor() {
14
- this.retrievers = [];
15
- }
16
-
17
- loadRetriever(retriever) {
18
- this.retrievers.push(retriever);
19
- }
20
-
21
- async retrieveMovieInformation(movie) {
22
- let information = {};
23
-
24
- for (let retriever of this.retrievers) {
25
- let currentInformation;
26
-
27
- try {
28
- currentInformation = await retriever.retrieveMovieInformation(movie);
29
- } catch (e) {
30
- continue;
31
- }
32
-
33
- information = { ...information,
34
- ...currentInformation
35
- };
36
- }
37
-
38
- if (Object.keys(information).length === 0) throw new Error();
39
- return information;
40
- }
41
-
42
- }
43
-
44
- exports.default = AggregateMovieUpdateRetriever;
@@ -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 _database = _interopRequireDefault(require("../../../submodules/database"));
9
-
10
- var _movie = require("../../../models/movie");
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- class MovieUpdateCollector {
15
- /**
16
- *
17
- * @param {Oblecto} oblecto
18
- */
19
- constructor(oblecto) {
20
- this.oblecto = oblecto;
21
- }
22
- /**
23
- *
24
- * @param {Movie} movie - Which movie entity to update;
25
- * @returns {Promise<void>}
26
- */
27
-
28
-
29
- async collectMovie(movie) {
30
- this.oblecto.queue.queueJob('updateMovie', movie);
31
- }
32
- /**
33
- *
34
- * @returns {Promise<void>}
35
- */
36
-
37
-
38
- async collectAllMovies() {
39
- let movies = await _movie.Movie.findAll();
40
-
41
- for (let movie of movies) {
42
- this.collectMovie(movie);
43
- }
44
- }
45
-
46
- }
47
-
48
- exports.default = MovieUpdateCollector;
@@ -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 _AggregateUpdateRetriever = _interopRequireDefault(require("../../common/AggregateUpdateRetriever"));
9
-
10
- var _TmdbMovieRetriever = _interopRequireDefault(require("./informationRetrievers/TmdbMovieRetriever"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- class MovieUpdater {
15
- constructor(oblecto) {
16
- this.oblecto = oblecto;
17
- this.aggregateMovieUpdateRetriever = new _AggregateUpdateRetriever.default();
18
- this.aggregateMovieUpdateRetriever.loadRetriever(new _TmdbMovieRetriever.default(this.oblecto)); // Register task availability to Oblecto queue
19
-
20
- this.oblecto.queue.addJob('updateMovie', async job => {
21
- await this.updateMovie(job);
22
- });
23
- }
24
- /**
25
- *
26
- * @param {Movie} movie
27
- * @returns {Promise<void>}
28
- */
29
-
30
-
31
- async updateMovie(movie) {
32
- let data = await this.aggregateMovieUpdateRetriever.retrieveInformation(movie);
33
- await movie.update(data);
34
- }
35
-
36
- }
37
-
38
- exports.default = MovieUpdater;
@@ -1,42 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _promiseTimeout = _interopRequireDefault(require("../../../../submodules/promiseTimeout"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class TmdbMovieRetriever {
13
- /**
14
- * @param {Oblecto} oblecto
15
- */
16
- constructor(oblecto) {
17
- this.oblecto = oblecto;
18
- }
19
-
20
- async retrieveInformation(movie) {
21
- let movieInfo = await (0, _promiseTimeout.default)(this.oblecto.tmdb.movieInfo({
22
- id: movie.tmdbid
23
- }));
24
- let data = {
25
- imdbid: movieInfo.imdb_id,
26
- movieName: movieInfo.title,
27
- originalName: movieInfo.original_title,
28
- tagline: movieInfo.tagline,
29
- originalLanguage: movieInfo.original_language,
30
- budget: movieInfo.budget,
31
- revenue: movieInfo.revenue,
32
- runtime: movieInfo.runtime,
33
- overview: movieInfo.overview,
34
- popularity: movieInfo.popularity,
35
- releaseDate: movieInfo.release_date
36
- };
37
- return data;
38
- }
39
-
40
- }
41
-
42
- exports.default = TmdbMovieRetriever;