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,14 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _DebugExtendableError = _interopRequireDefault(require("./DebugExtendableError"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class FileExistsError extends _DebugExtendableError.default {}
13
-
14
- exports.default = FileExistsError;
@@ -1,14 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _InfoExtendableError = _interopRequireDefault(require("./InfoExtendableError"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class IdentificationError extends _InfoExtendableError.default {}
13
-
14
- exports.default = IdentificationError;
@@ -1,20 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _ExtendableError = _interopRequireDefault(require("./ExtendableError"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class InfoExtendableError extends _ExtendableError.default {
13
- constructor(message) {
14
- super(message);
15
- this.level = 'INFO';
16
- }
17
-
18
- }
19
-
20
- exports.default = InfoExtendableError;
@@ -1,14 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _WarnExtendableError = _interopRequireDefault(require("./WarnExtendableError"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class VideoAnalysisError extends _WarnExtendableError.default {}
13
-
14
- exports.default = VideoAnalysisError;
@@ -1,14 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _ExtendableError = _interopRequireDefault(require("./ExtendableError"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class VideoIdentificationError extends _ExtendableError.default {}
13
-
14
- exports.default = VideoIdentificationError;
@@ -1,20 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _ExtendableError = _interopRequireDefault(require("./ExtendableError"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class WarnExtendableError extends _ExtendableError.default {
13
- constructor(message) {
14
- super(message);
15
- this.level = 'WARN';
16
- }
17
-
18
- }
19
-
20
- exports.default = WarnExtendableError;
@@ -1,127 +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 = require("fs");
11
-
12
- var _nodeRsa = _interopRequireDefault(require("node-rsa"));
13
-
14
- var _events = _interopRequireDefault(require("events"));
15
-
16
- var _logger = _interopRequireDefault(require("../../../submodules/logger"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class FederationClient {
21
- /**
22
- *
23
- * @param {Oblecto} oblecto
24
- * @param {string} server
25
- */
26
- constructor(oblecto, server) {
27
- this.oblecto = oblecto;
28
- this.serverName = server;
29
- this.host = oblecto.config.federation.servers[server].address;
30
- this.port = 9131;
31
- this.isSecure = false;
32
- this.authenticated = false;
33
- this.eventEmitter = new _events.default();
34
- this.dataRead = '';
35
- }
36
-
37
- async connect() {
38
- _logger.default.log('INFO', 'Connecting to federation master:', this.serverName);
39
-
40
- this.socket = _tls.default.connect({
41
- host: this.host,
42
- port: this.port,
43
- ca: [(0, _fs.readFileSync)(this.oblecto.config.federation.servers[this.serverName].ca)]
44
- });
45
- this.socket.on('data', chunk => this.dataHandler(chunk));
46
- this.socket.on('secureConnect', () => this.secureConnectHandler());
47
- this.socket.on('error', error => this.errorHandler(error));
48
- this.socket.on('close', () => this.closeHandler());
49
- if (!this.isSecure) await this.waitForSecure();
50
- this.socket.write(`IAM:${this.oblecto.config.federation.uuid}\n`);
51
- await this.waitForAuth();
52
- }
53
-
54
- write(header, content) {
55
- this.socket.write(`${header}:${content}\n`);
56
- }
57
-
58
- dataHandler(chunk) {
59
- this.dataRead += chunk.toString();
60
- let split = this.dataRead.split('\n');
61
- if (split.length < 2) return;
62
-
63
- for (let item of split) {
64
- if (item === '') continue;
65
- this.dataRead = this.dataRead.replace(item + '\n', '');
66
- this.headerHandler(item);
67
- }
68
- }
69
-
70
- headerHandler(data) {
71
- let split = data.split(':');
72
-
73
- switch (split[0]) {
74
- case 'CHALLENGE':
75
- this.challengeHandler(split[1]);
76
- break;
77
-
78
- case 'AUTH':
79
- this.authAcceptHandler(split[1]);
80
- break;
81
- }
82
- }
83
-
84
- async challengeHandler(data) {
85
- const pemKey = await _fs.promises.readFile(this.oblecto.config.federation.key);
86
- const key = (0, _nodeRsa.default)(pemKey);
87
- const decrypted = key.decrypt(data, 'ascii');
88
- this.write('CHALLENGE', decrypted);
89
- }
90
-
91
- async authAcceptHandler(data) {
92
- if (data === 'ACCEPTED') {
93
- this.authenticated = true;
94
- this.eventEmitter.emit('auth');
95
- return;
96
- }
97
-
98
- delete this;
99
- }
100
-
101
- secureConnectHandler() {
102
- this.isSecure = true;
103
- }
104
-
105
- errorHandler(error) {}
106
-
107
- closeHandler() {}
108
-
109
- waitForSecure() {
110
- return new Promise((resolve, reject) => {
111
- this.socket.once('secureConnect', resolve);
112
- });
113
- }
114
-
115
- waitForAuth() {
116
- return new Promise((resolve, reject) => {
117
- this.eventEmitter.once('auth', resolve);
118
- });
119
- }
120
-
121
- close() {
122
- this.socket.destroy();
123
- }
124
-
125
- }
126
-
127
- exports.default = FederationClient;
@@ -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 _FederationDataClient = _interopRequireDefault(require("./FederationDataClient"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class FederationClientController {
13
- constructor(oblecto) {
14
- this.oblecto = oblecto;
15
- this.syncServers = [];
16
- }
17
-
18
- async addAllSyncMasters() {
19
- for (let server in this.oblecto.config.federation.servers) {
20
- await this.addSyncMaster(server);
21
- }
22
- }
23
-
24
- async addSyncMaster(server) {
25
- let client = new _FederationDataClient.default(this.oblecto, server);
26
- await client.connect();
27
- await client.requestFullSync();
28
- this.syncServers.push(client);
29
- }
30
-
31
- requestFullSync() {
32
- for (let server of this.syncServers) {
33
- server.requestFullSync();
34
- }
35
- }
36
-
37
- close() {
38
- for (let server of this.syncServers) {
39
- server.close();
40
- }
41
- }
42
-
43
- }
44
-
45
- exports.default = FederationClientController;
@@ -1,56 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _FederationClient = _interopRequireDefault(require("./FederationClient"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class FederationDataClient extends _FederationClient.default {
13
- /**
14
- *
15
- * @param {Oblecto} oblecto
16
- * @param {string} server
17
- */
18
- constructor(oblecto, server) {
19
- super(oblecto, server);
20
- this.port = oblecto.config.federation.servers[server].dataPort;
21
- }
22
-
23
- headerHandler(data) {
24
- super.headerHandler(data);
25
- let split = data.split(':');
26
-
27
- switch (split[0]) {
28
- case 'FILE':
29
- this.fileHandler(split[1]);
30
- break;
31
- }
32
- }
33
-
34
- requestFullSync() {
35
- this.write('SYNC', 'FULL');
36
- }
37
-
38
- async fileHandler(data) {
39
- let input = Buffer.from(data, 'base64').toString();
40
- let file = JSON.parse(input);
41
- file.host = this.serverName;
42
-
43
- switch (file.fileInfo.type) {
44
- case 'episode':
45
- this.oblecto.queue.queueJob('federationIndexEpisode', file);
46
- break;
47
-
48
- case 'movie':
49
- this.oblecto.queue.queueJob('federationIndexMovie', file);
50
- break;
51
- }
52
- }
53
-
54
- }
55
-
56
- exports.default = FederationDataClient;
@@ -1,70 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _FederationClient = _interopRequireDefault(require("./FederationClient"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- class FederationMediaClient extends _FederationClient.default {
13
- constructor(oblecto, server) {
14
- super(oblecto, server);
15
- this.port = oblecto.config.federation.servers[server].mediaPort;
16
- this.fileId = null;
17
- this.streamDestination = null;
18
- }
19
-
20
- headerHandler(data) {
21
- super.headerHandler(data);
22
- let split = data.split(':');
23
-
24
- switch (split[0]) {
25
- case 'READY':
26
- this.readyHandler(split[1]);
27
- break;
28
- }
29
- }
30
-
31
- async startStreamFile(fileId) {
32
- this.fileId = fileId;
33
- this.socket.write(`FILEID:${fileId}\n`);
34
- }
35
-
36
- async setStreamDestination(dest) {
37
- this.streamDestination = dest;
38
- dest.on('close', () => {
39
- this.socket.destroy();
40
- });
41
- }
42
-
43
- async readyHandler(data) {
44
- if (data !== this.fileId) {
45
- // The server didn't respect the file id
46
- // This really shouldn't happen so we destroy the client
47
- this.socket.destroy();
48
- }
49
-
50
- this.socket.pipe(this.streamDestination);
51
- this.startStream();
52
- }
53
-
54
- async startStream() {
55
- if (!this.streamDestination) throw new Error('No destination');
56
- this.socket.write('START:START\n');
57
- }
58
-
59
- async setStreamOffset(offset) {
60
- this.socket.write(`OFFSET:${offset}\n`);
61
- }
62
-
63
- async closeConnection() {
64
- this.socket.destroy();
65
- delete this;
66
- }
67
-
68
- }
69
-
70
- exports.default = FederationMediaClient;
@@ -1,32 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _FederationMediaServer = _interopRequireDefault(require("./FederationMediaServer"));
9
-
10
- var _FederationDataServer = _interopRequireDefault(require("./FederationDataServer"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- class FederationController {
15
- constructor(oblecto) {
16
- this.oblecto = oblecto;
17
- this.initiateFederation();
18
- }
19
-
20
- initiateFederation() {
21
- this.federationMediaServer = new _FederationMediaServer.default(this.oblecto, this.oblecto.config.federation.mediaPort);
22
- this.federationDataServer = new _FederationDataServer.default(this.oblecto, this.oblecto.config.federation.dataPort);
23
- }
24
-
25
- close() {
26
- this.federationDataServer.close();
27
- this.federationMediaServer.close();
28
- }
29
-
30
- }
31
-
32
- exports.default = FederationController;
@@ -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 _FederationServer = _interopRequireDefault(require("./FederationServer"));
9
-
10
- var _FederationDataServerConnection = _interopRequireDefault(require("./FederationDataServerConnection"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- class FederationMediaServer extends _FederationServer.default {
15
- secureConnectionHandler(socket) {
16
- super.secureConnectionHandler(socket);
17
- let connection = new _FederationDataServerConnection.default(this.oblecto, socket);
18
- }
19
-
20
- }
21
-
22
- exports.default = FederationMediaServer;
@@ -1,96 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _FederationServerConnection = _interopRequireDefault(require("./FederationServerConnection"));
9
-
10
- var _file = require("../../../models/file");
11
-
12
- var _movie = require("../../../models/movie");
13
-
14
- var _episode = require("../../../models/episode");
15
-
16
- var _series = require("../../../models/series");
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class FederationDataServerConnection extends _FederationServerConnection.default {
21
- constructor(oblecto, socket) {
22
- super(oblecto, socket);
23
- this.fullSyncPermitted = true;
24
- }
25
-
26
- async headerHandler(data) {
27
- super.headerHandler(data);
28
- if (!this.authenticated) return;
29
- let split = data.split(':');
30
-
31
- switch (split[0]) {
32
- case 'SYNC':
33
- this.syncHandler(split[1]);
34
- break;
35
- }
36
- }
37
-
38
- syncHandler(data) {
39
- if (data === 'FULL') {
40
- if (!this.fullSyncPermitted) return false;
41
- return this.startFullSync();
42
- }
43
- }
44
-
45
- async startFullSync() {
46
- await this.syncFiles();
47
- }
48
-
49
- async syncFiles() {
50
- let results = await _file.File.findAll({
51
- include: [_movie.Movie, {
52
- model: _episode.Episode,
53
- include: [_series.Series]
54
- }]
55
- });
56
-
57
- for (let result of results) {
58
- if (this.socket.destroyed) return;
59
- let file = result.toJSON();
60
- let fileInfo = {};
61
-
62
- if (file.Episodes[0]) {
63
- fileInfo.type = 'episode';
64
- fileInfo.episode = file.Episodes[0].airedEpisodeNumber;
65
- fileInfo.season = file.Episodes[0].airedSeason;
66
- if (file.Episodes[0].tvdbid) fileInfo.tvdbid = file.Episodes[0].tvdbid;
67
- if (file.Episodes[0].tmdbid) fileInfo.tmdbid = file.Episodes[0].tmdbid;
68
- if (file.Episodes[0].Series.tvdbid) fileInfo.seriesTvdbid = file.Episodes[0].Series.tvdbid;
69
- if (file.Episodes[0].Series.tmdbid) fileInfo.seriesTmdbid = file.Episodes[0].Series.tmdbid;
70
- }
71
-
72
- if (file.Movies[0]) {
73
- fileInfo.type = 'movie';
74
- fileInfo.tmdbid = file.Movies[0].tmdbid;
75
- }
76
-
77
- let syncInfo = {
78
- id: file.id,
79
- duration: file.duration,
80
- fileInfo
81
- };
82
- this.write('FILE', Buffer.from(JSON.stringify(syncInfo)).toString('base64')); // TODO: Negotiate a syncing speed
83
-
84
- await sleep(100);
85
- }
86
- }
87
-
88
- }
89
-
90
- exports.default = FederationDataServerConnection;
91
-
92
- function sleep(ms) {
93
- return new Promise(resolve => {
94
- setTimeout(resolve, ms);
95
- });
96
- }
@@ -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 _FederationServer = _interopRequireDefault(require("./FederationServer"));
9
-
10
- var _FederationMediaServerConnection = _interopRequireDefault(require("./FederationMediaServerConnection"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- class FederationMediaServer extends _FederationServer.default {
15
- secureConnectionHandler(socket) {
16
- super.secureConnectionHandler(socket);
17
- let connection = new _FederationMediaServerConnection.default(this.oblecto, socket);
18
- }
19
-
20
- }
21
-
22
- exports.default = FederationMediaServer;
@@ -1,83 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _FederationServerConnection = _interopRequireDefault(require("./FederationServerConnection"));
9
-
10
- var _file = require("../../../models/file");
11
-
12
- var _logger = _interopRequireDefault(require("../../../submodules/logger"));
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- class FederationMediaServerConnection extends _FederationServerConnection.default {
17
- constructor(oblecto, socket) {
18
- super(oblecto, socket);
19
- this.fileId = null;
20
- this.fileInfo = null;
21
- this.offset = 0;
22
- }
23
-
24
- async headerHandler(data) {
25
- super.headerHandler(data);
26
- if (!this.authenticated) return;
27
- let split = data.split(':');
28
-
29
- switch (split[0]) {
30
- case 'FILEID':
31
- await this.setFileId(split[1]);
32
- break;
33
-
34
- case 'OFFSET':
35
- this.setOffset(split[1]);
36
- break;
37
-
38
- case 'START':
39
- await this.startStream();
40
- break;
41
- }
42
- }
43
-
44
- setOffset(offset) {
45
- this.offset = offset;
46
- }
47
-
48
- async setFileId(data) {
49
- this.fileId = data;
50
- this.fileInfo = null;
51
-
52
- try {
53
- this.fileInfo = await _file.File.findByPk(this.fileId);
54
- this.socket.write(`READY:${this.fileId}\n`);
55
- } catch (e) {
56
- this.socket.write('ERROR:FILEID\n');
57
- }
58
- }
59
-
60
- async startStream() {
61
- if (!this.fileInfo) return;
62
- let streamSession = this.oblecto.streamSessionController.newSession(this.fileInfo, {
63
- streamType: 'recode',
64
- target: {
65
- formats: ['matroska'],
66
- videoCodecs: ['copy'],
67
- audioCodecs: ['copy']
68
- },
69
- offset: this.offset
70
- });
71
- await streamSession.addDestination({
72
- stream: this.socket
73
- });
74
- await streamSession.startStream();
75
- }
76
-
77
- async closeHandler() {
78
- _logger.default.log('INFO', 'Federation media stream has closed');
79
- }
80
-
81
- }
82
-
83
- exports.default = FederationMediaServerConnection;