oblecto 0.2.8 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Oblecto-Web/dist/web/index.html +24 -3
- package/Oblecto-Web/dist/web/static/index-C-JsqHHk.css +1 -0
- package/Oblecto-Web/dist/web/static/index-DSZgpOOu.js +576 -0
- package/README.md +43 -7
- package/dist/bin/oblecto.js +12468 -61
- package/dist/index.js +10676 -6
- package/package.json +68 -36
- package/res/AGENTS.md +8 -0
- package/res/config.json +34 -7
- package/Oblecto-Web/LICENSE +0 -674
- package/Oblecto-Web/README.md +0 -20
- package/Oblecto-Web/dist/web/static/css/app.921835f8c2878caee6d1085d9982fa86.css +0 -1
- package/Oblecto-Web/dist/web/static/css/app.921835f8c2878caee6d1085d9982fa86.css.map +0 -1
- package/Oblecto-Web/dist/web/static/js/app.758b833f6395444695b6.js +0 -6896
- package/Oblecto-Web/dist/web/static/js/app.758b833f6395444695b6.js.map +0 -1
- package/Oblecto-Web/dist/web/static/js/manifest.d327d604ee57c29a75d0.js +0 -154
- package/Oblecto-Web/dist/web/static/js/manifest.d327d604ee57c29a75d0.js.map +0 -1
- package/Oblecto-Web/dist/web/static/js/vendor.84f1e8002f100f63d6ef.js +0 -32455
- package/Oblecto-Web/dist/web/static/js/vendor.84f1e8002f100f63d6ef.js.map +0 -1
- package/Oblecto-Web/package.json +0 -118
- package/dist/bin/cliManager.js +0 -102
- package/dist/bin/scripts/adduser.js +0 -50
- package/dist/bin/scripts/changepassword.js +0 -48
- package/dist/bin/scripts/deluser.js +0 -34
- package/dist/bin/scripts/helpers/argumentError.js +0 -12
- package/dist/bin/scripts/helpers/generateAssetDirectories.js +0 -37
- package/dist/bin/scripts/init/assets.js +0 -24
- package/dist/bin/scripts/init/database.js +0 -21
- package/dist/bin/scripts/init/general.js +0 -54
- package/dist/bin/scripts/init/index.js +0 -26
- package/dist/bin/scripts/removepassword.js +0 -42
- package/dist/config.js +0 -45
- package/dist/core/graphical.js +0 -179
- package/dist/core/index.js +0 -24
- package/dist/lib/artwork/ArtworkScaler.js +0 -31
- package/dist/lib/artwork/ArtworkUtils.js +0 -35
- package/dist/lib/artwork/movies/AggregateMovieArtworkRetriever.js +0 -58
- package/dist/lib/artwork/movies/MovieArtworkCollector.js +0 -93
- package/dist/lib/artwork/movies/MovieArtworkDownloader.js +0 -65
- package/dist/lib/artwork/movies/artworkRetrievers/FanarttvMovieArtworkRetriever.js +0 -57
- package/dist/lib/artwork/movies/artworkRetrievers/TmdbMovieArtworkRetriever.js +0 -47
- package/dist/lib/artwork/series/AggregateSeriesArtworkRetriever.js +0 -58
- package/dist/lib/artwork/series/SeriesArtworkCollector.js +0 -95
- package/dist/lib/artwork/series/SeriesArtworkDownloader.js +0 -62
- package/dist/lib/artwork/series/artworkRetrievers/FanarttvSeriesArtworkRetriever.js +0 -44
- package/dist/lib/artwork/series/artworkRetrievers/TmdbSeriesArtworkRetriever.js +0 -64
- package/dist/lib/artwork/series/artworkRetrievers/TvdbSeriesArtworkRetriever.js +0 -51
- package/dist/lib/cleaners/FileCleaner.js +0 -56
- package/dist/lib/cleaners/MovieCleaner.js +0 -42
- package/dist/lib/cleaners/SeriesCleaner.js +0 -70
- package/dist/lib/common/AggregateIdentifier.js +0 -53
- package/dist/lib/common/AggregateUpdateRetriever.js +0 -43
- package/dist/lib/downloader/index.js +0 -59
- package/dist/lib/errors/DebugExtendableError.js +0 -20
- package/dist/lib/errors/ExtendableError.js +0 -22
- package/dist/lib/errors/FileExistsError.js +0 -14
- package/dist/lib/errors/IdentificationError.js +0 -14
- package/dist/lib/errors/InfoExtendableError.js +0 -20
- package/dist/lib/errors/VideoAnalysisError.js +0 -14
- package/dist/lib/errors/VideoIdentificationError.js +0 -14
- package/dist/lib/errors/WarnExtendableError.js +0 -20
- package/dist/lib/federation/client/FederationClient.js +0 -127
- package/dist/lib/federation/client/FederationClientController.js +0 -45
- package/dist/lib/federation/client/FederationDataClient.js +0 -56
- package/dist/lib/federation/client/FederationMediaClient.js +0 -70
- package/dist/lib/federation/server/FederationController.js +0 -32
- package/dist/lib/federation/server/FederationDataServer.js +0 -22
- package/dist/lib/federation/server/FederationDataServerConnection.js +0 -96
- package/dist/lib/federation/server/FederationMediaServer.js +0 -22
- package/dist/lib/federation/server/FederationMediaServerConnection.js +0 -83
- package/dist/lib/federation/server/FederationServer.js +0 -40
- package/dist/lib/federation/server/FederationServerConnection.js +0 -97
- package/dist/lib/federationindexer/FederationEpisodeIndexer.js +0 -65
- package/dist/lib/federationindexer/FederationMovieIndexer.js +0 -48
- package/dist/lib/indexers/MediaIdentifier.js +0 -15
- package/dist/lib/indexers/files/FileIndexer.js +0 -103
- package/dist/lib/indexers/files/cleaner.js +0 -43
- package/dist/lib/indexers/movies/AggregateMovieIdentifier.js +0 -45
- package/dist/lib/indexers/movies/MovieCollector.js +0 -65
- package/dist/lib/indexers/movies/MovieIdentifier.js +0 -22
- package/dist/lib/indexers/movies/MovieIndexer.js +0 -47
- package/dist/lib/indexers/movies/identifiers/TmdbMovieidentifier.js +0 -50
- package/dist/lib/indexers/series/AggregateEpisodeIdentifier.js +0 -46
- package/dist/lib/indexers/series/AggregateSeriesIdentifier.js +0 -46
- package/dist/lib/indexers/series/EpisodeIdentifier.js +0 -24
- package/dist/lib/indexers/series/SeriesCollector.js +0 -65
- package/dist/lib/indexers/series/SeriesIdentifer.js +0 -23
- package/dist/lib/indexers/series/SeriesIndexer.js +0 -134
- package/dist/lib/indexers/series/identifiers/TmdbEpisodeIdentifier.js +0 -38
- package/dist/lib/indexers/series/identifiers/TmdbSeriesIdentifier.js +0 -66
- package/dist/lib/indexers/series/identifiers/TvdbEpisodeIdentifier.js +0 -71
- package/dist/lib/indexers/series/identifiers/TvdbSeriesIdentifier.js +0 -82
- package/dist/lib/oblecto/index.js +0 -125
- package/dist/lib/queue/index.js +0 -82
- package/dist/lib/realtime/RealtimeClient.js +0 -137
- package/dist/lib/realtime/RealtimeController.js +0 -50
- package/dist/lib/sets/tv/MovieSetCollector.js +0 -49
- package/dist/lib/streamSessions/StreamSession.js +0 -148
- package/dist/lib/streamSessions/StreamSessionController.js +0 -78
- package/dist/lib/streamSessions/StreamSessionTypes/DirectHttpStreamSession.js +0 -105
- package/dist/lib/streamSessions/StreamSessionTypes/DirectStreamSession.js +0 -47
- package/dist/lib/streamSessions/StreamSessionTypes/HLSStreamer.js +0 -126
- package/dist/lib/streamSessions/StreamSessionTypes/RecodeFederationStreamSession.js +0 -72
- package/dist/lib/streamSessions/StreamSessionTypes/RecodeStreamSession.js +0 -65
- package/dist/lib/updaters/files/FileUpdateCollector.js +0 -44
- package/dist/lib/updaters/files/FileUpdater.js +0 -194
- package/dist/lib/updaters/movies/AggregateMovieUpdateRetriever.js +0 -44
- package/dist/lib/updaters/movies/MovieUpdateCollector.js +0 -48
- package/dist/lib/updaters/movies/MovieUpdater.js +0 -38
- package/dist/lib/updaters/movies/informationRetrievers/TmdbMovieRetriever.js +0 -42
- package/dist/lib/updaters/series/AggregateEpisodeUpdateRetriever.js +0 -41
- package/dist/lib/updaters/series/AggregateSeriesUpdateRetriever.js +0 -44
- package/dist/lib/updaters/series/SeriesUpdateCollector.js +0 -79
- package/dist/lib/updaters/series/SeriesUpdater.js +0 -84
- package/dist/lib/updaters/series/informationRetrievers/TmdbEpisodeRetriever.js +0 -66
- package/dist/lib/updaters/series/informationRetrievers/TmdbSeriesRetriever.js +0 -63
- package/dist/lib/updaters/series/informationRetrievers/TvdbEpisodeRetriever.js +0 -38
- package/dist/lib/updaters/series/informationRetrievers/TvdbSeriesRetriever.js +0 -50
- package/dist/models/episode.js +0 -62
- package/dist/models/episodeFiles.js +0 -14
- package/dist/models/file.js +0 -32
- package/dist/models/movie.js +0 -35
- package/dist/models/movieFiles.js +0 -14
- package/dist/models/movieSet.js +0 -26
- package/dist/models/series.js +0 -55
- package/dist/models/seriesSet.js +0 -17
- package/dist/models/stream.js +0 -81
- package/dist/models/trackEpisode.js +0 -17
- package/dist/models/trackEpisodes.js +0 -8
- package/dist/models/trackMovie.js +0 -17
- package/dist/models/trackMovies.js +0 -8
- package/dist/models/tvshow.js +0 -46
- package/dist/models/tvshowSet.js +0 -8
- package/dist/models/user.js +0 -26
- package/dist/submodules/REST/index.js +0 -59
- package/dist/submodules/REST/middleware/auth.js +0 -28
- package/dist/submodules/REST/routes/auth.js +0 -48
- package/dist/submodules/REST/routes/clients.js +0 -54
- package/dist/submodules/REST/routes/episodes.js +0 -275
- package/dist/submodules/REST/routes/files.js +0 -92
- package/dist/submodules/REST/routes/index.js +0 -48
- package/dist/submodules/REST/routes/movies.js +0 -305
- package/dist/submodules/REST/routes/sets.js +0 -35
- package/dist/submodules/REST/routes/settings/index.js +0 -22
- package/dist/submodules/REST/routes/settings/maintenance.js +0 -87
- package/dist/submodules/REST/routes/settings/misc.js +0 -38
- package/dist/submodules/REST/routes/settings/sources.js +0 -61
- package/dist/submodules/REST/routes/tvshows.js +0 -140
- package/dist/submodules/REST/routes/users.js +0 -107
- package/dist/submodules/REST/routes/web.js +0 -43
- package/dist/submodules/axiosTimeout.js +0 -30
- package/dist/submodules/database.js +0 -180
- package/dist/submodules/ffmpeg.js +0 -23
- package/dist/submodules/ffprobe.js +0 -22
- package/dist/submodules/guessit.js +0 -48
- package/dist/submodules/handlers/DirectStreamer.js +0 -68
- package/dist/submodules/handlers/FFMPEGHandlers/DvdStreamer.js +0 -52
- package/dist/submodules/handlers/FFMPEGHandlers/RemuxStreamer.js +0 -33
- package/dist/submodules/handlers/FFMPEGHandlers/TranscodeStreamer.js +0 -33
- package/dist/submodules/handlers/FFMPEGStreamer.js +0 -56
- package/dist/submodules/handlers/FederationStreamer.js +0 -23
- package/dist/submodules/handlers/HLSSessionHandler.js +0 -141
- package/dist/submodules/logger/index.js +0 -43
- package/dist/submodules/promiseTimeout.js +0 -28
- package/dist/submodules/zeroconf.js +0 -19
- package/dist/transcoders/dvd.js +0 -26
- package/dist/transcoders/index.js +0 -42
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _restifyErrors = _interopRequireDefault(require("restify-errors"));
|
|
9
|
-
|
|
10
|
-
var _bcrypt = _interopRequireDefault(require("bcrypt"));
|
|
11
|
-
|
|
12
|
-
var _config = _interopRequireDefault(require("../../../config"));
|
|
13
|
-
|
|
14
|
-
var _auth = _interopRequireDefault(require("../middleware/auth"));
|
|
15
|
-
|
|
16
|
-
var _user = require("../../../models/user");
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
|
-
var _default = (server, oblecto) => {
|
|
21
|
-
server.get('/users', async function (req, res, next) {
|
|
22
|
-
let users = await _user.User.findAll({
|
|
23
|
-
attributes: ['username', 'name', 'email', 'id']
|
|
24
|
-
});
|
|
25
|
-
res.send(users);
|
|
26
|
-
next();
|
|
27
|
-
});
|
|
28
|
-
server.get('/user/:id', _auth.default.requiresAuth, async function (req, res, next) {
|
|
29
|
-
let user = await _user.User.findOne({
|
|
30
|
-
where: {
|
|
31
|
-
id: req.params.id
|
|
32
|
-
},
|
|
33
|
-
attributes: ['username', 'name', 'email', 'id']
|
|
34
|
-
});
|
|
35
|
-
res.send(user);
|
|
36
|
-
next();
|
|
37
|
-
});
|
|
38
|
-
server.del('/user/:id', _auth.default.requiresAuth, async function (req, res, next) {
|
|
39
|
-
let user = await _user.User.findOne({
|
|
40
|
-
where: {
|
|
41
|
-
id: req.params.id
|
|
42
|
-
},
|
|
43
|
-
attributes: ['username', 'name', 'email', 'id']
|
|
44
|
-
}); // Send the user information of the user to the client first
|
|
45
|
-
|
|
46
|
-
res.send(user); // Now delete the user
|
|
47
|
-
|
|
48
|
-
user.destroy();
|
|
49
|
-
next();
|
|
50
|
-
}); // Endpoint to update the entries of a certain user
|
|
51
|
-
|
|
52
|
-
server.put('/user/:id', _auth.default.requiresAuth, async function (req, res, next) {
|
|
53
|
-
let user = await _user.User.findByPk(req.params.id);
|
|
54
|
-
|
|
55
|
-
if (!user) {
|
|
56
|
-
return next(new _restifyErrors.default.BadRequestError('User with id does not exist'));
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (req.params.username) {
|
|
60
|
-
user.update({
|
|
61
|
-
username: req.params.username
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (req.params.password) {
|
|
66
|
-
user.update({
|
|
67
|
-
password: await _bcrypt.default.hash(req.params.password, _config.default.authentication.saltRounds)
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (req.params.email) {
|
|
72
|
-
user.update({
|
|
73
|
-
email: req.params.email
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (req.params.name) {
|
|
78
|
-
user.update({
|
|
79
|
-
name: req.params.name
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
next();
|
|
84
|
-
});
|
|
85
|
-
server.post('/user', _auth.default.requiresAuth, async function (req, res, next) {
|
|
86
|
-
// Make sure the required input fields are present, and if not send a bad request error with the associated information to the error
|
|
87
|
-
if (!req.params.username) return next(new _restifyErrors.default.BadRequestError('Username is missing'));
|
|
88
|
-
if (!req.params.email) return next(new _restifyErrors.default.BadRequestError('E-Mail is missing'));
|
|
89
|
-
if (!req.params.name) return next(new _restifyErrors.default.BadRequestError('Name is missing'));
|
|
90
|
-
let passwordHash;
|
|
91
|
-
if (req.params.password) passwordHash = await _bcrypt.default.hash(req.params.password, oblecto.config.authentication.saltRounds);
|
|
92
|
-
let [user] = await _user.User.findOrCreate({
|
|
93
|
-
where: {
|
|
94
|
-
username: req.params.username
|
|
95
|
-
},
|
|
96
|
-
defaults: {
|
|
97
|
-
name: req.params.name,
|
|
98
|
-
email: req.params.email,
|
|
99
|
-
password: passwordHash
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
res.send(user);
|
|
103
|
-
next();
|
|
104
|
-
});
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
exports.default = _default;
|
|
@@ -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 _restify = _interopRequireDefault(require("restify"));
|
|
9
|
-
|
|
10
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
var _default = (server, oblecto) => {
|
|
15
|
-
server.get('/web/static/*', _restify.default.plugins.serveStatic({
|
|
16
|
-
directory: __dirname + '/../../../../Oblecto-Web/dist/'
|
|
17
|
-
}));
|
|
18
|
-
server.get('/web/logo.png', async (req, res, next) => {
|
|
19
|
-
_fs.default.readFile(__dirname + '/../../../../images/logomark.png', function (err, body) {
|
|
20
|
-
res.writeHead(200, {
|
|
21
|
-
'Content-Length': Buffer.byteLength(body),
|
|
22
|
-
'Content-Type': 'image/png'
|
|
23
|
-
});
|
|
24
|
-
res.write(body);
|
|
25
|
-
res.end();
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
server.get('/web*', async (req, res, next) => {
|
|
29
|
-
_fs.default.readFile(__dirname + '/../../../../Oblecto-Web/dist/web/index.html', 'utf8', function (err, body) {
|
|
30
|
-
res.writeHead(200, {
|
|
31
|
-
'Content-Length': Buffer.byteLength(body),
|
|
32
|
-
'Content-Type': 'text/html'
|
|
33
|
-
});
|
|
34
|
-
res.write(body);
|
|
35
|
-
res.end();
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
server.get('/', async (req, res, next) => {
|
|
39
|
-
res.redirect('/web', next);
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
exports.default = _default;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = _default;
|
|
7
|
-
|
|
8
|
-
var _WarnExtendableError = _interopRequireDefault(require("../lib/errors/WarnExtendableError"));
|
|
9
|
-
|
|
10
|
-
var _axios = _interopRequireDefault(require("axios"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
function _default(...args) {
|
|
15
|
-
return new Promise(function (resolve, reject) {
|
|
16
|
-
let timedout = false;
|
|
17
|
-
let timeout = setTimeout(() => {
|
|
18
|
-
timedout = true;
|
|
19
|
-
reject(new _WarnExtendableError.default(`Timeout expired for ${args[0].url}`));
|
|
20
|
-
}, 10000);
|
|
21
|
-
(0, _axios.default)(...args).then(response => {
|
|
22
|
-
if (timedout) return;
|
|
23
|
-
clearTimeout(timeout);
|
|
24
|
-
resolve(response);
|
|
25
|
-
}).catch(err => {
|
|
26
|
-
clearTimeout(timeout);
|
|
27
|
-
reject(err);
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.initDatabase = initDatabase;
|
|
7
|
-
|
|
8
|
-
var _sequelize = _interopRequireDefault(require("sequelize"));
|
|
9
|
-
|
|
10
|
-
var _config = _interopRequireDefault(require("../config.js"));
|
|
11
|
-
|
|
12
|
-
var _logger = _interopRequireDefault(require("./logger"));
|
|
13
|
-
|
|
14
|
-
var _episode = require("../models/episode");
|
|
15
|
-
|
|
16
|
-
var _episodeFiles = require("../models/episodeFiles");
|
|
17
|
-
|
|
18
|
-
var _file = require("../models/file");
|
|
19
|
-
|
|
20
|
-
var _movie = require("../models/movie");
|
|
21
|
-
|
|
22
|
-
var _series = require("../models/series");
|
|
23
|
-
|
|
24
|
-
var _movieFiles = require("../models/movieFiles");
|
|
25
|
-
|
|
26
|
-
var _movieSet = require("../models/movieSet");
|
|
27
|
-
|
|
28
|
-
var _seriesSet = require("../models/seriesSet");
|
|
29
|
-
|
|
30
|
-
var _trackMovie = require("../models/trackMovie");
|
|
31
|
-
|
|
32
|
-
var _trackEpisode = require("../models/trackEpisode");
|
|
33
|
-
|
|
34
|
-
var _user = require("../models/user");
|
|
35
|
-
|
|
36
|
-
var _stream = require("../models/stream");
|
|
37
|
-
|
|
38
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
|
-
|
|
40
|
-
function initDatabase() {
|
|
41
|
-
let dialect = _config.default.database.dialect || 'sqlite';
|
|
42
|
-
let poolmax = _config.default.queue.concurrency;
|
|
43
|
-
|
|
44
|
-
if (dialect === 'sqlite') {
|
|
45
|
-
_logger.default.log('INFO', 'Using SQLITE, setting poolmax to 1');
|
|
46
|
-
|
|
47
|
-
poolmax = 1;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
let options = {
|
|
51
|
-
dialect,
|
|
52
|
-
logging: false,
|
|
53
|
-
//operatorsAliases: false,
|
|
54
|
-
pool: {
|
|
55
|
-
max: poolmax,
|
|
56
|
-
min: 0,
|
|
57
|
-
acquire: 30000,
|
|
58
|
-
idle: 10000
|
|
59
|
-
},
|
|
60
|
-
retry: {
|
|
61
|
-
max: 5
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
if (options.dialect !== 'sqlite') {
|
|
66
|
-
options.host = _config.default.database.host || 'localhost';
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (options.dialect === 'sqlite') {
|
|
70
|
-
options.storage = _config.default.database.storage || '/etc/oblecto/database.sqlite';
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const sequelize = new _sequelize.default(_config.default.database.database, _config.default.database.username, _config.default.database.password, options);
|
|
74
|
-
|
|
75
|
-
_episode.Episode.init(_episode.episodeColumns, {
|
|
76
|
-
sequelize
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
_movie.Movie.init(_movie.movieColumns, {
|
|
80
|
-
sequelize
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
_series.Series.init(_series.seriesColumns, {
|
|
84
|
-
sequelize
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
_file.File.init(_file.fileColumns, {
|
|
88
|
-
sequelize
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
_stream.Stream.init(_stream.streamColumns, {
|
|
92
|
-
sequelize
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
_episodeFiles.EpisodeFiles.init(_episodeFiles.episodeFilesColumns, {
|
|
96
|
-
sequelize
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
_movieFiles.MovieFiles.init(_movieFiles.movieFileColumns, {
|
|
100
|
-
sequelize
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
_movieSet.MovieSet.init(_movieSet.movieSetColumns, {
|
|
104
|
-
sequelize
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
_seriesSet.SeriesSet.init(_seriesSet.seriesSetColumns, {
|
|
108
|
-
sequelize
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
_trackMovie.TrackMovie.init(_trackMovie.trackMovieColumns, {
|
|
112
|
-
sequelize
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
_trackEpisode.TrackEpisode.init(_trackEpisode.trackEpisodesColumns, {
|
|
116
|
-
sequelize
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
_user.User.init(_user.userColumns, {
|
|
120
|
-
sequelize
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
_episode.Episode.belongsTo(_series.Series);
|
|
124
|
-
|
|
125
|
-
_series.Series.hasMany(_episode.Episode);
|
|
126
|
-
|
|
127
|
-
_movieSet.MovieSet.belongsToMany(_movie.Movie, {
|
|
128
|
-
through: 'MovieSetAllocations'
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
_movieSet.MovieSet.belongsToMany(_user.User, {
|
|
132
|
-
through: 'MovieSetUsers'
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
_movie.Movie.belongsToMany(_movieSet.MovieSet, {
|
|
136
|
-
through: 'MovieSetAllocations'
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
_seriesSet.SeriesSet.belongsToMany(_series.Series, {
|
|
140
|
-
through: 'SeriesSetAllocations'
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
_series.Series.belongsToMany(_seriesSet.SeriesSet, {
|
|
144
|
-
through: 'SeriesSetAllocations'
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
_episode.Episode.belongsToMany(_file.File, {
|
|
148
|
-
through: _episodeFiles.EpisodeFiles
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
_movie.Movie.belongsToMany(_file.File, {
|
|
152
|
-
through: _movieFiles.MovieFiles
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
_file.File.belongsToMany(_episode.Episode, {
|
|
156
|
-
through: _episodeFiles.EpisodeFiles
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
_file.File.belongsToMany(_movie.Movie, {
|
|
160
|
-
through: _movieFiles.MovieFiles
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
_stream.Stream.belongsTo(_file.File);
|
|
164
|
-
|
|
165
|
-
_file.File.hasMany(_stream.Stream);
|
|
166
|
-
|
|
167
|
-
_trackEpisode.TrackEpisode.belongsTo(_user.User);
|
|
168
|
-
|
|
169
|
-
_trackEpisode.TrackEpisode.belongsTo(_episode.Episode);
|
|
170
|
-
|
|
171
|
-
_trackMovie.TrackMovie.belongsTo(_user.User);
|
|
172
|
-
|
|
173
|
-
_trackMovie.TrackMovie.belongsTo(_movie.Movie);
|
|
174
|
-
|
|
175
|
-
_episode.Episode.hasMany(_trackEpisode.TrackEpisode);
|
|
176
|
-
|
|
177
|
-
_movie.Movie.hasMany(_trackMovie.TrackMovie);
|
|
178
|
-
|
|
179
|
-
return sequelize;
|
|
180
|
-
}
|
|
@@ -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 _fluentFfmpeg = _interopRequireDefault(require("fluent-ffmpeg"));
|
|
9
|
-
|
|
10
|
-
var _config = _interopRequireDefault(require("../config"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
if (_config.default.ffmpeg.pathFFprobe) {
|
|
15
|
-
_fluentFfmpeg.default.setFfprobePath(_config.default.ffmpeg.pathFFprobe);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (_config.default.ffmpeg.pathFFmpeg) {
|
|
19
|
-
_fluentFfmpeg.default.setFfmpegPath(_config.default.ffmpeg.pathFFmpeg);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
var _default = _fluentFfmpeg.default;
|
|
23
|
-
exports.default = _default;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = ffprobe;
|
|
7
|
-
|
|
8
|
-
var _ffmpeg = _interopRequireDefault(require("./ffmpeg"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
function ffprobe(path) {
|
|
13
|
-
return new Promise(function (resolve, reject) {
|
|
14
|
-
_ffmpeg.default.ffprobe(path, function (err, metadata) {
|
|
15
|
-
if (err) {
|
|
16
|
-
return reject(err);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return resolve(metadata);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
}
|
|
@@ -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 _guessitWrapper = _interopRequireDefault(require("guessit-wrapper"));
|
|
9
|
-
|
|
10
|
-
var _guessitExec = _interopRequireDefault(require("guessit-exec"));
|
|
11
|
-
|
|
12
|
-
var _which = _interopRequireDefault(require("which"));
|
|
13
|
-
|
|
14
|
-
var _logger = _interopRequireDefault(require("./logger"));
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
let use_binary = false;
|
|
19
|
-
(0, _which.default)('guessit', function (err, resolvedPath) {
|
|
20
|
-
if (err) {
|
|
21
|
-
_logger.default.log('INFO', 'Guessit binary has not been found');
|
|
22
|
-
|
|
23
|
-
_logger.default.log('INFO', 'Using the web based identifier');
|
|
24
|
-
|
|
25
|
-
_logger.default.log('INFO', 'This may significantly reduce indexing speeds');
|
|
26
|
-
|
|
27
|
-
_logger.default.log('INFO', 'Please install guessit from you package manager');
|
|
28
|
-
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
_logger.default.log('INFO', 'Guessit binary has been found');
|
|
33
|
-
|
|
34
|
-
_logger.default.log('INFO', 'Using local guessit binary');
|
|
35
|
-
|
|
36
|
-
use_binary = true;
|
|
37
|
-
});
|
|
38
|
-
var _default = {
|
|
39
|
-
async identify(search) {
|
|
40
|
-
if (use_binary) {
|
|
41
|
-
return (0, _guessitExec.default)(search);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return _guessitWrapper.default.parseName(search);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
};
|
|
48
|
-
exports.default = _default;
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _mimeTypes = _interopRequireDefault(require("mime-types"));
|
|
9
|
-
|
|
10
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
class _default {
|
|
15
|
-
static streamFile(oblecto, videoPath, req, res, next) {
|
|
16
|
-
let videoSize = _fs.default.statSync(videoPath).size;
|
|
17
|
-
|
|
18
|
-
let videoMime = _mimeTypes.default.lookup(videoPath);
|
|
19
|
-
|
|
20
|
-
if (req.headers.range) {
|
|
21
|
-
// meaning client (browser) has moved the forward/back slider
|
|
22
|
-
// which has sent this request back to this server logic ... cool
|
|
23
|
-
var range = req.headers.range;
|
|
24
|
-
var parts = range.replace(/bytes=/, '').split('-');
|
|
25
|
-
var partialstart = parts[0];
|
|
26
|
-
var partialend = parts[1];
|
|
27
|
-
var start = parseInt(partialstart, 10);
|
|
28
|
-
var end = partialend ? parseInt(partialend, 10) : videoSize - 1;
|
|
29
|
-
var chunksize = end - start + 1;
|
|
30
|
-
console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize);
|
|
31
|
-
|
|
32
|
-
try {
|
|
33
|
-
var file = _fs.default.createReadStream(videoPath, {
|
|
34
|
-
start: start,
|
|
35
|
-
end: end
|
|
36
|
-
});
|
|
37
|
-
} catch (e) {
|
|
38
|
-
console.log(e);
|
|
39
|
-
return next();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
res.writeHead(206, {
|
|
43
|
-
'Content-Range': 'bytes ' + start + '-' + end + '/' + videoSize,
|
|
44
|
-
'Accept-Ranges': 'bytes',
|
|
45
|
-
'Content-Length': chunksize,
|
|
46
|
-
'Content-Type': videoMime
|
|
47
|
-
});
|
|
48
|
-
return file.pipe(res);
|
|
49
|
-
} else {
|
|
50
|
-
console.log('ALL: ' + videoSize);
|
|
51
|
-
res.writeHead(200, {
|
|
52
|
-
'Content-Length': videoSize,
|
|
53
|
-
'Accept-Ranges': 'bytes',
|
|
54
|
-
'Content-Type': videoMime
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
try {
|
|
58
|
-
return _fs.default.createReadStream(videoPath).pipe(res);
|
|
59
|
-
} catch (e) {
|
|
60
|
-
console.log(e);
|
|
61
|
-
return next();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
exports.default = _default;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _ffmpeg = _interopRequireDefault(require("../../ffmpeg"));
|
|
9
|
-
|
|
10
|
-
var _ffprobe = _interopRequireDefault(require("../../ffprobe"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
class _default {
|
|
15
|
-
static async DvdSteamer(oblecto, video, offset, req, res) {
|
|
16
|
-
let probe = await (0, _ffprobe.default)(video.path);
|
|
17
|
-
let streams = probe.streams;
|
|
18
|
-
console.log(probe);
|
|
19
|
-
let mainFeatureId = streams[0].index;
|
|
20
|
-
let mainAudioId = streams[0].index;
|
|
21
|
-
|
|
22
|
-
for (const stream of streams) {
|
|
23
|
-
if (stream.profile === 'Main') {
|
|
24
|
-
mainFeatureId = stream.index;
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
for (const stream of streams) {
|
|
30
|
-
if (stream.codec_type === 'audio') {
|
|
31
|
-
mainAudioId = stream.index;
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
(0, _ffmpeg.default)(video.path) //.native()
|
|
37
|
-
.format('mp4').videoCodec('libx264').audioCodec('aac').seekInput(offset).outputOptions(['-movflags', 'empty_moov', `-map 0:${mainFeatureId}`, `-map 0:${mainAudioId}`]).on('start', cmd => {
|
|
38
|
-
console.log('--- ffmpeg start process ---');
|
|
39
|
-
console.log(`cmd: ${cmd}`);
|
|
40
|
-
}).on('end', () => {
|
|
41
|
-
console.log('--- end processing ---');
|
|
42
|
-
}).on('error', err => {
|
|
43
|
-
console.log('--- ffmpeg meets error ---');
|
|
44
|
-
console.log(err);
|
|
45
|
-
}).pipe(res, {
|
|
46
|
-
end: true
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
exports.default = _default;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _ffmpeg = _interopRequireDefault(require("../../ffmpeg"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
class _default {
|
|
13
|
-
static async RemuxSteamer(oblecto, video, offset, req, res) {
|
|
14
|
-
let process = (0, _ffmpeg.default)(video.path) //.native()
|
|
15
|
-
.format('mp4').videoCodec('copy').audioCodec('aac').seekInput(offset).inputOptions(['-noaccurate_seek']).outputOptions(['-movflags', 'empty_moov', '-copyts']).on('start', cmd => {
|
|
16
|
-
console.log('--- ffmpeg start process ---');
|
|
17
|
-
console.log(`cmd: ${cmd}`);
|
|
18
|
-
}).on('end', () => {
|
|
19
|
-
console.log('--- end processing ---');
|
|
20
|
-
});
|
|
21
|
-
process.on('error', err => {
|
|
22
|
-
console.log('--- ffmpeg meets error ---');
|
|
23
|
-
console.log(err);
|
|
24
|
-
process.kill();
|
|
25
|
-
});
|
|
26
|
-
process.pipe(res, {
|
|
27
|
-
end: true
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
exports.default = _default;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _ffmpeg = _interopRequireDefault(require("../../ffmpeg"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
class _default {
|
|
13
|
-
static async TranscodeStreamer(oblecto, video, offset, req, res) {
|
|
14
|
-
let process = (0, _ffmpeg.default)(video.path) //.native()
|
|
15
|
-
.format('mp4').videoCodec('libx264').audioCodec('aac').seekInput(offset).inputOptions(['-noaccurate_seek']).outputOptions(['-movflags', 'empty_moov', '-copyts']).on('start', cmd => {
|
|
16
|
-
console.log('--- ffmpeg start process ---');
|
|
17
|
-
console.log(`cmd: ${cmd}`);
|
|
18
|
-
}).on('end', () => {
|
|
19
|
-
console.log('--- end processing ---');
|
|
20
|
-
});
|
|
21
|
-
process.on('error', err => {
|
|
22
|
-
console.log('--- ffmpeg meets error ---');
|
|
23
|
-
console.log(err);
|
|
24
|
-
process.kill();
|
|
25
|
-
});
|
|
26
|
-
process.pipe(res, {
|
|
27
|
-
end: true
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
exports.default = _default;
|