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,275 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _sequelize = _interopRequireDefault(require("sequelize"));
|
|
9
|
-
|
|
10
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
-
|
|
12
|
-
var _restifyErrors = _interopRequireDefault(require("restify-errors"));
|
|
13
|
-
|
|
14
|
-
var _sharp = _interopRequireDefault(require("sharp"));
|
|
15
|
-
|
|
16
|
-
var _auth = _interopRequireDefault(require("../middleware/auth"));
|
|
17
|
-
|
|
18
|
-
var _episode = require("../../../models/episode");
|
|
19
|
-
|
|
20
|
-
var _series = require("../../../models/series");
|
|
21
|
-
|
|
22
|
-
var _trackEpisode = require("../../../models/trackEpisode");
|
|
23
|
-
|
|
24
|
-
var _file = require("../../../models/file");
|
|
25
|
-
|
|
26
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
|
-
|
|
28
|
-
const Op = _sequelize.default.Op;
|
|
29
|
-
|
|
30
|
-
var _default = (server, oblecto) => {
|
|
31
|
-
// Endpoint to get a list of episodes from all series
|
|
32
|
-
server.get('/episodes/list/:sorting', _auth.default.requiresAuth, async function (req, res, next) {
|
|
33
|
-
let limit = 20;
|
|
34
|
-
let page = 0;
|
|
35
|
-
let AllowedOrders = ['desc', 'asc'];
|
|
36
|
-
if (AllowedOrders.indexOf(req.params.order.toLowerCase()) === -1) return next(new _restifyErrors.default.BadRequestError('Sorting order is invalid'));
|
|
37
|
-
if (!(req.params.sorting in _episode.Episode.rawAttributes)) return next(new _restifyErrors.default.BadRequestError('Sorting method is invalid'));
|
|
38
|
-
if (req.params.count && Number.isInteger(req.params.count)) limit = parseInt(req.params.count);
|
|
39
|
-
if (req.params.page && Number.isInteger(req.params.page)) page = parseInt(req.params.page);
|
|
40
|
-
let results = await _episode.Episode.findAll({
|
|
41
|
-
include: [_series.Series, {
|
|
42
|
-
model: _trackEpisode.TrackEpisode,
|
|
43
|
-
required: false,
|
|
44
|
-
where: {
|
|
45
|
-
userId: req.authorization.user.id
|
|
46
|
-
}
|
|
47
|
-
}],
|
|
48
|
-
order: [[req.params.sorting, req.params.order]],
|
|
49
|
-
limit,
|
|
50
|
-
offset: limit * page
|
|
51
|
-
});
|
|
52
|
-
res.send(results);
|
|
53
|
-
}); // Endpoint to get a banner image for an episode based on the local episode ID
|
|
54
|
-
|
|
55
|
-
server.get('/episode/:id/banner', async function (req, res, next) {
|
|
56
|
-
// Get episode data
|
|
57
|
-
let episode;
|
|
58
|
-
|
|
59
|
-
try {
|
|
60
|
-
episode = await _episode.Episode.findByPk(req.params.id, {
|
|
61
|
-
include: [_file.File]
|
|
62
|
-
});
|
|
63
|
-
} catch (e) {
|
|
64
|
-
return next(new _restifyErrors.default.NotFoundError('Episode not found'));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
let imagePath = oblecto.artworkUtils.episodeBannerPath(episode, req.params.size || 'medium');
|
|
68
|
-
|
|
69
|
-
_fs.default.createReadStream(imagePath).on('error', () => {
|
|
70
|
-
return next(new _restifyErrors.default.NotFoundError('No banner found'));
|
|
71
|
-
}).pipe(res);
|
|
72
|
-
});
|
|
73
|
-
server.put('/episode/:id/banner', _auth.default.requiresAuth, async function (req, res, next) {
|
|
74
|
-
let episode = await _episode.Episode.findByPk(req.params.id, {
|
|
75
|
-
include: [_file.File]
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
if (!episode) {
|
|
79
|
-
return next(new _restifyErrors.default.NotFoundError('Episode does not exist'));
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
let thumbnailPath = this.oblecto.artworkUtils.episodeBannerPath(episode);
|
|
83
|
-
|
|
84
|
-
if (req.files.length < 1) {
|
|
85
|
-
return next(new _restifyErrors.default.MissingParameter('Image file is missing'));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
let uploadPath = req.files[Object.keys(req.files)[0]].path;
|
|
89
|
-
|
|
90
|
-
try {
|
|
91
|
-
let image = await (0, _sharp.default)(uploadPath);
|
|
92
|
-
let metadata = await image.metadata();
|
|
93
|
-
let ratio = metadata.height / metadata.width;
|
|
94
|
-
|
|
95
|
-
if (!(1 <= ratio <= 2)) {
|
|
96
|
-
return next(new _restifyErrors.default.InvalidContent('Image aspect ratio is incorrect'));
|
|
97
|
-
}
|
|
98
|
-
} catch (e) {
|
|
99
|
-
return next(new _restifyErrors.default.InvalidContent('File is not an image'));
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
try {
|
|
103
|
-
_fs.default.copyFile(uploadPath, thumbnailPath, err => {
|
|
104
|
-
if (err) throw err;
|
|
105
|
-
|
|
106
|
-
for (let size of Object.keys(this.oblecto.config.artwork.poster)) {
|
|
107
|
-
this.oblecto.queue.pushJob('rescaleImage', {
|
|
108
|
-
from: this.oblecto.artworkUtils.episodeBannerPath(episode),
|
|
109
|
-
to: this.oblecto.artworkUtils.episodeBannerPath(episode, size),
|
|
110
|
-
width: this.oblecto.config.artwork.poster[size]
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
res.send(['success']);
|
|
115
|
-
});
|
|
116
|
-
} catch (e) {
|
|
117
|
-
console.log(e);
|
|
118
|
-
return next(new _restifyErrors.default.Internal('An error has occured during upload of banner'));
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
next();
|
|
122
|
-
}); // Endpoint to list all stored files for the specific episode
|
|
123
|
-
|
|
124
|
-
server.get('/episode/:id/files', _auth.default.requiresAuth, async function (req, res) {
|
|
125
|
-
let episode = await _episode.Episode.findByPk(req.params.id, {
|
|
126
|
-
include: [_file.File]
|
|
127
|
-
});
|
|
128
|
-
res.send(episode.files);
|
|
129
|
-
}); // Endpoint to send episode video file to the client
|
|
130
|
-
// TODO: move this to the file route and use file id to play, abstracting this from episodes
|
|
131
|
-
|
|
132
|
-
server.get('/episode/:id/play', async function (req, res, next) {
|
|
133
|
-
// search for attributes
|
|
134
|
-
let episode = await _episode.Episode.findByPk(req.params.id, {
|
|
135
|
-
include: [_file.File]
|
|
136
|
-
});
|
|
137
|
-
let file = episode.files[0];
|
|
138
|
-
res.redirect(`/stream/${file.id}`, next);
|
|
139
|
-
}); // Endpoint to retrieve episode details based on the local episode ID
|
|
140
|
-
|
|
141
|
-
server.get('/episode/:id/info', _auth.default.requiresAuth, async function (req, res) {
|
|
142
|
-
// search for attributes
|
|
143
|
-
let episode = await _episode.Episode.findByPk(req.params.id, {
|
|
144
|
-
include: [_file.File, _series.Series, {
|
|
145
|
-
model: _trackEpisode.TrackEpisode,
|
|
146
|
-
required: false,
|
|
147
|
-
where: {
|
|
148
|
-
userId: req.authorization.user.id
|
|
149
|
-
}
|
|
150
|
-
}]
|
|
151
|
-
});
|
|
152
|
-
res.send(episode);
|
|
153
|
-
}); // Endpoint to retrieve the episode next in series based on the local episode ID
|
|
154
|
-
|
|
155
|
-
server.get('/episode/:id/next', _auth.default.requiresAuth, async function (req, res) {
|
|
156
|
-
// search for attributes
|
|
157
|
-
let results = await _episode.Episode.findByPk(req.params.id);
|
|
158
|
-
let episode = await _episode.Episode.findOne({
|
|
159
|
-
where: {
|
|
160
|
-
SeriesId: results.SeriesId,
|
|
161
|
-
[Op.or]: [{
|
|
162
|
-
[Op.and]: [{
|
|
163
|
-
airedEpisodeNumber: {
|
|
164
|
-
[Op.gt]: results.airedEpisodeNumber
|
|
165
|
-
}
|
|
166
|
-
}, {
|
|
167
|
-
airedSeason: {
|
|
168
|
-
[Op.gte]: results.airedSeason
|
|
169
|
-
}
|
|
170
|
-
}]
|
|
171
|
-
}, {
|
|
172
|
-
[Op.and]: [{
|
|
173
|
-
airedSeason: {
|
|
174
|
-
[Op.gt]: results.airedSeason
|
|
175
|
-
}
|
|
176
|
-
}]
|
|
177
|
-
}]
|
|
178
|
-
},
|
|
179
|
-
order: [['airedSeason', 'ASC'], ['airedEpisodeNumber', 'ASC']]
|
|
180
|
-
});
|
|
181
|
-
res.send(episode);
|
|
182
|
-
});
|
|
183
|
-
server.get('/episodes/search/:name', _auth.default.requiresAuth, async function (req, res) {
|
|
184
|
-
// search for attributes
|
|
185
|
-
let episode = await _episode.Episode.findAll({
|
|
186
|
-
where: {
|
|
187
|
-
episodeName: {
|
|
188
|
-
[Op.like]: '%' + req.params.name + '%'
|
|
189
|
-
}
|
|
190
|
-
},
|
|
191
|
-
include: [_file.File, _series.Series, {
|
|
192
|
-
model: _trackEpisode.TrackEpisode,
|
|
193
|
-
required: false,
|
|
194
|
-
where: {
|
|
195
|
-
userId: req.authorization.user.id
|
|
196
|
-
}
|
|
197
|
-
}]
|
|
198
|
-
});
|
|
199
|
-
res.send(episode);
|
|
200
|
-
}); // Endpoint to get the episodes currently being watched
|
|
201
|
-
|
|
202
|
-
server.get('/episodes/watching', _auth.default.requiresAuth, async function (req, res) {
|
|
203
|
-
// search for attributes
|
|
204
|
-
let watching = await _episode.Episode.findAll({
|
|
205
|
-
include: [_series.Series, {
|
|
206
|
-
model: _trackEpisode.TrackEpisode,
|
|
207
|
-
required: true,
|
|
208
|
-
where: {
|
|
209
|
-
userId: req.authorization.user.id,
|
|
210
|
-
progress: {
|
|
211
|
-
[_sequelize.default.Op.lt]: 0.9
|
|
212
|
-
},
|
|
213
|
-
updatedAt: {
|
|
214
|
-
[_sequelize.default.Op.gt]: new Date() - 1000 * 60 * 60 * 24 * 7
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}],
|
|
218
|
-
order: [['updatedAt', 'DESC']]
|
|
219
|
-
}); // We are only interested in the episode objects, so extract all the episode object from
|
|
220
|
-
// each track object and send the final mapped array to the client
|
|
221
|
-
|
|
222
|
-
res.send(watching);
|
|
223
|
-
});
|
|
224
|
-
server.get('/episodes/next', _auth.default.requiresAuth, async function (req, res, next) {
|
|
225
|
-
// Next episodes currently doesn't work on sqlite as the LPAD function doesn't exist
|
|
226
|
-
// Todo: Fix next episodes endpoint to support sqlite
|
|
227
|
-
if (oblecto.config.database.dialect === 'sqlite') return next(new _restifyErrors.default.NotImplementedError('Next episode is not supported when using sqlite (yet)')); // search for attributes
|
|
228
|
-
|
|
229
|
-
let latestWatched = await _episode.Episode.findAll({
|
|
230
|
-
attributes: {
|
|
231
|
-
include: [[_sequelize.default.fn('MAX', _sequelize.default.col('absoluteNumber')), 'absoluteNumber'], [_sequelize.default.fn('MAX', _sequelize.default.fn('concat', _sequelize.default.fn('LPAD', _sequelize.default.col('airedSeason'), 2, '0'), _sequelize.default.fn('LPAD', _sequelize.default.col('airedEpisodeNumber'), 2, '0'))), 'seasonepisode'], [_sequelize.default.fn('MAX', _sequelize.default.col('firstAired')), 'firstAired']]
|
|
232
|
-
},
|
|
233
|
-
include: [{
|
|
234
|
-
model: _trackEpisode.TrackEpisode,
|
|
235
|
-
required: true,
|
|
236
|
-
where: {
|
|
237
|
-
userId: req.authorization.user.id,
|
|
238
|
-
progress: {
|
|
239
|
-
[_sequelize.default.Op.gt]: 0.9
|
|
240
|
-
},
|
|
241
|
-
updatedAt: {
|
|
242
|
-
[_sequelize.default.Op.gt]: new Date() - 1000 * 60 * 60 * 24 * 7
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}],
|
|
246
|
-
group: ['SeriesId']
|
|
247
|
-
});
|
|
248
|
-
let nextUp = [];
|
|
249
|
-
|
|
250
|
-
for (let latest of latestWatched) {
|
|
251
|
-
latest = latest.toJSON();
|
|
252
|
-
let next = await _episode.Episode.findOne({
|
|
253
|
-
attributes: {
|
|
254
|
-
include: [[_sequelize.default.fn('concat', _sequelize.default.fn('LPAD', _sequelize.default.col('airedSeason'), 2, '0'), _sequelize.default.fn('LPAD', _sequelize.default.col('airedEpisodeNumber'), 2, '0')), 'seasonepisode']]
|
|
255
|
-
},
|
|
256
|
-
include: [_series.Series, {
|
|
257
|
-
model: _trackEpisode.TrackEpisode,
|
|
258
|
-
where: {
|
|
259
|
-
userId: req.authorization.user.id
|
|
260
|
-
}
|
|
261
|
-
}],
|
|
262
|
-
where: _sequelize.default.and(_sequelize.default.where(_sequelize.default.col('SeriesId'), '=', latest.SeriesId), _sequelize.default.where(_sequelize.default.fn('concat', _sequelize.default.fn('LPAD', _sequelize.default.col('airedSeason'), 2, '0'), _sequelize.default.fn('LPAD', _sequelize.default.col('airedEpisodeNumber'), 2, '0')), '>', latest.seasonepisode)),
|
|
263
|
-
order: [_sequelize.default.col('seasonepisode')]
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
if (next) {
|
|
267
|
-
nextUp.push(next);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
res.send(nextUp);
|
|
272
|
-
});
|
|
273
|
-
};
|
|
274
|
-
|
|
275
|
-
exports.default = _default;
|
|
@@ -1,92 +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 _auth = _interopRequireDefault(require("../middleware/auth"));
|
|
11
|
-
|
|
12
|
-
var _file = require("../../../models/file");
|
|
13
|
-
|
|
14
|
-
var _DirectHttpStreamSession = _interopRequireDefault(require("../../../lib/streamSessions/StreamSessionTypes/DirectHttpStreamSession"));
|
|
15
|
-
|
|
16
|
-
var _HLSStreamer = _interopRequireDefault(require("../../../lib/streamSessions/StreamSessionTypes/HLSStreamer"));
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
* @param {Server} server
|
|
23
|
-
* @param {Oblecto} oblecto
|
|
24
|
-
*/
|
|
25
|
-
var _default = (server, oblecto) => {
|
|
26
|
-
server.get('/HLS/:sessionId/segment/:id', async function (req, res, next) {
|
|
27
|
-
if (!oblecto.streamSessionController.sessionExists(req.params.sessionId)) {
|
|
28
|
-
return next(new _restifyErrors.default.InvalidCredentialsError('Stream session token does not exist'));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
let streamSession = oblecto.streamSessionController.sessions[req.params.sessionId]; // TODO: Send approriate error if session is not a HLS stream session
|
|
32
|
-
|
|
33
|
-
if (!(streamSession instanceof _HLSStreamer.default)) return next();
|
|
34
|
-
let segmentId = parseInt(req.params.id);
|
|
35
|
-
streamSession.streamSegment(req, res, segmentId);
|
|
36
|
-
});
|
|
37
|
-
server.get('/HLS/:sessionId/playlist', async function (req, res, next) {
|
|
38
|
-
if (!oblecto.streamSessionController.sessionExists(req.params.sessionId)) {
|
|
39
|
-
return next(new _restifyErrors.default.InvalidCredentialsError('Stream session token does not exist'));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
let streamSession = oblecto.streamSessionController.sessions[req.params.sessionId]; // TODO: Send approriate error if session is not a HLS stream session
|
|
43
|
-
|
|
44
|
-
if (!(streamSession instanceof _HLSStreamer.default)) return next(new _restifyErrors.default.InvalidContentError('Not a HLS stream'));
|
|
45
|
-
streamSession.sendPlaylistFile(res);
|
|
46
|
-
});
|
|
47
|
-
server.get('/session/create/:id', _auth.default.requiresAuth, async function (req, res, next) {
|
|
48
|
-
let file;
|
|
49
|
-
|
|
50
|
-
try {
|
|
51
|
-
file = await _file.File.findByPk(req.params.id);
|
|
52
|
-
} catch (ex) {
|
|
53
|
-
return next(new _restifyErrors.default.NotFoundError('File does not exist'));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!file) return next(new _restifyErrors.default.NotFoundError('File does not exist'));
|
|
57
|
-
let streamType = 'recode';
|
|
58
|
-
if (req.params.type in ['recode', 'directhttp', 'hls']) streamType = req.params.type;
|
|
59
|
-
if (req.params.noremux) streamType = 'directhttp';
|
|
60
|
-
let streamSession = oblecto.streamSessionController.newSession(file, {
|
|
61
|
-
streamType,
|
|
62
|
-
target: {
|
|
63
|
-
formats: (req.params.format || 'mp4').split(','),
|
|
64
|
-
videoCodecs: (req.params.videoCodec || 'h264').split(','),
|
|
65
|
-
audioCodecs: (req.params.audioCodec || 'aac').split(',')
|
|
66
|
-
},
|
|
67
|
-
offset: req.params.offset || 0
|
|
68
|
-
});
|
|
69
|
-
res.send({
|
|
70
|
-
sessionId: streamSession.sessionId,
|
|
71
|
-
seeking: streamSession instanceof _DirectHttpStreamSession.default ? 'client' : 'server'
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
server.get('/session/stream/:sessionId', async function (req, res, next) {
|
|
75
|
-
if (!oblecto.streamSessionController.sessionExists(req.params.sessionId)) {
|
|
76
|
-
return next(new _restifyErrors.default.InvalidCredentialsError('Stream session token does not exist'));
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return next();
|
|
80
|
-
}, async function (req, res, next) {
|
|
81
|
-
oblecto.streamSessionController.sessions[req.params.sessionId].offset = req.params.offset || 0;
|
|
82
|
-
await oblecto.streamSessionController.sessions[req.params.sessionId].addDestination({
|
|
83
|
-
request: req,
|
|
84
|
-
stream: res,
|
|
85
|
-
type: 'http'
|
|
86
|
-
});
|
|
87
|
-
if (req.params.nostart) return;
|
|
88
|
-
await oblecto.streamSessionController.sessions[req.params.sessionId].startStream();
|
|
89
|
-
});
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
exports.default = _default;
|
|
@@ -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 _auth = _interopRequireDefault(require("./auth"));
|
|
9
|
-
|
|
10
|
-
var _episodes = _interopRequireDefault(require("./episodes"));
|
|
11
|
-
|
|
12
|
-
var _files = _interopRequireDefault(require("./files"));
|
|
13
|
-
|
|
14
|
-
var _movies = _interopRequireDefault(require("./movies"));
|
|
15
|
-
|
|
16
|
-
var _tvshows = _interopRequireDefault(require("./tvshows"));
|
|
17
|
-
|
|
18
|
-
var _settings = _interopRequireDefault(require("./settings"));
|
|
19
|
-
|
|
20
|
-
var _users = _interopRequireDefault(require("./users"));
|
|
21
|
-
|
|
22
|
-
var _web = _interopRequireDefault(require("./web"));
|
|
23
|
-
|
|
24
|
-
var _sets = _interopRequireDefault(require("./sets"));
|
|
25
|
-
|
|
26
|
-
var _clients = _interopRequireDefault(require("./clients"));
|
|
27
|
-
|
|
28
|
-
var _config = _interopRequireDefault(require("../../../config"));
|
|
29
|
-
|
|
30
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
-
|
|
32
|
-
var _default = (server, oblecto) => {
|
|
33
|
-
if (_config.default.web.enabled) {
|
|
34
|
-
(0, _web.default)(server, oblecto);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
(0, _auth.default)(server, oblecto);
|
|
38
|
-
(0, _episodes.default)(server, oblecto);
|
|
39
|
-
(0, _files.default)(server, oblecto);
|
|
40
|
-
(0, _movies.default)(server, oblecto);
|
|
41
|
-
(0, _tvshows.default)(server, oblecto);
|
|
42
|
-
(0, _settings.default)(server, oblecto);
|
|
43
|
-
(0, _users.default)(server, oblecto);
|
|
44
|
-
(0, _sets.default)(server, oblecto);
|
|
45
|
-
(0, _clients.default)(server, oblecto);
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
exports.default = _default;
|