Skip to content

Commit 93a5eff

Browse files
Use Promise.all when generating stream thumbnails
1 parent cb7a1b5 commit 93a5eff

File tree

2 files changed

+73
-64
lines changed

2 files changed

+73
-64
lines changed

server/routes/events.js

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -500,39 +500,42 @@ router.get('/:eventId', async (req, res, next) => {
500500
return res.status(404).send(`Event (_id: ${escape(eventId)}) not found`);
501501
}
502502

503-
const stages = [];
504-
for (const stage of event.stages) {
505-
const streamKey = stage.streamInfo.streamKey;
506-
const {data: {isLive}} = await axios.get(`http://localhost:${process.env.RTMP_SERVER_HTTP_PORT}/api/streams/live/${streamKey}`, {
507-
headers: {Authorization: rtmpServer.auth.header}
508-
});
503+
const stages = await Promise.all(event.stages.map(stage => {
504+
return async () => {
505+
const streamKey = stage.streamInfo.streamKey;
506+
const rtmpServerURL = `http://localhost:${process.env.RTMP_SERVER_HTTP_PORT}/api/streams/live/${streamKey}`;
507+
const {data: {isLive}} = await axios.get(rtmpServerURL, {
508+
headers: {Authorization: rtmpServer.auth.header}
509+
});
509510

510-
let thumbnailURL;
511-
if (isLive) {
512-
try {
513-
thumbnailURL = await getThumbnail(streamKey);
514-
} catch (err) {
515-
LOGGER.info('An error occurred when getting thumbnail for stream (stream key: {}). Returning splash thumbnail. Error: {}', streamKey, err);
511+
let thumbnailURL;
512+
if (isLive) {
513+
try {
514+
thumbnailURL = await getThumbnail(streamKey);
515+
} catch (err) {
516+
LOGGER.info('An error occurred when getting thumbnail for stream (stream key: {}). ' +
517+
'Returning splash thumbnail. Error: {}', streamKey, err);
518+
thumbnailURL = stage.getSplashThumbnailURL();
519+
}
520+
} else {
516521
thumbnailURL = stage.getSplashThumbnailURL();
517522
}
518-
} else {
519-
thumbnailURL = stage.getSplashThumbnailURL();
520-
}
521523

522-
stages.push({
523-
_id: stage._id,
524-
isLive,
525-
stageName: stage.stageName,
526-
thumbnailURL,
527-
streamInfo: {
528-
streamKey: stage.streamInfo.streamKey,
529-
title: stage.streamInfo.title,
530-
genre: stage.streamInfo.genre,
531-
category: stage.streamInfo.category,
532-
viewCount: stage.streamInfo.viewCount
533-
}
534-
});
535-
}
524+
return {
525+
_id: stage._id,
526+
isLive,
527+
stageName: stage.stageName,
528+
thumbnailURL,
529+
streamInfo: {
530+
streamKey: stage.streamInfo.streamKey,
531+
title: stage.streamInfo.title,
532+
genre: stage.streamInfo.genre,
533+
category: stage.streamInfo.category,
534+
viewCount: stage.streamInfo.viewCount
535+
}
536+
};
537+
};
538+
}));
536539

537540
const socketIOURL = (process.env.NODE_ENV === 'production' ? 'https' : 'http')
538541
+ `://${process.env.SERVER_HOST}:${process.env.SOCKET_IO_PORT}?eventId=${eventId}`;

server/routes/livestreams.js

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,21 @@ router.get('/', async (req, res, next) => {
5050
User.paginate(query, options, async (err, result) => {
5151
if (err) {
5252
LOGGER.error('An error occurred when finding User livestream info: {}', err);
53-
next(err);
54-
} else {
55-
const streams = [];
56-
for (const user of result.docs) {
53+
return next(err);
54+
}
55+
56+
const streams = await Promise.all(result.docs.map(user => {
57+
return async () => {
5758
const streamKey = user.streamInfo.streamKey;
5859
let thumbnailURL;
5960
try {
6061
thumbnailURL = await getThumbnail(streamKey);
6162
} catch (err) {
62-
LOGGER.info('An error occurred when getting thumbnail for stream (stream key: {}). Returning default thumbnail. Error: {}', streamKey, err);
63+
LOGGER.info('An error occurred when getting thumbnail for stream (stream key: {}). ' +
64+
'Returning default thumbnail. Error: {}', streamKey, err);
6365
thumbnailURL = config.defaultThumbnailURL;
6466
}
65-
streams.push({
67+
return {
6668
username: user.username,
6769
displayName: user.displayName,
6870
profilePicURL: user.getProfilePicURL(),
@@ -72,13 +74,14 @@ router.get('/', async (req, res, next) => {
7274
viewCount: user.streamInfo.viewCount,
7375
startTime: user.streamInfo.startTime,
7476
thumbnailURL
75-
});
76-
}
77-
res.json({
78-
streams,
79-
nextPage: result.nextPage
80-
});
81-
}
77+
};
78+
};
79+
}));
80+
81+
res.json({
82+
streams,
83+
nextPage: result.nextPage
84+
});
8285
});
8386
});
8487

@@ -151,28 +154,31 @@ router.get('/event-stages', async (req, res, next) => {
151154
return next(err);
152155
}
153156

154-
const streams = [];
155-
for (const eventStage of result.docs) {
156-
const streamKey = eventStage.streamInfo.streamKey;
157-
let thumbnailURL;
158-
try {
159-
thumbnailURL = await getThumbnail(streamKey);
160-
} catch (err) {
161-
LOGGER.info('An error occurred when getting thumbnail for stream (stream key: {}). Returning default thumbnail. Error: {}', streamKey, err);
162-
thumbnailURL = config.defaultThumbnailURL;
163-
}
164-
streams.push({
165-
eventStageId: eventStage._id,
166-
stageName: eventStage.stageName,
167-
event: eventStage.event,
168-
title: eventStage.streamInfo.title,
169-
genre: eventStage.streamInfo.genre,
170-
category: eventStage.streamInfo.category,
171-
viewCount: eventStage.streamInfo.viewCount,
172-
startTime: eventStage.streamInfo.startTime,
173-
thumbnailURL
174-
});
175-
}
157+
const streams = await Promise.all(result.docs.map(eventStage => {
158+
return async () => {
159+
const streamKey = eventStage.streamInfo.streamKey;
160+
let thumbnailURL;
161+
try {
162+
thumbnailURL = await getThumbnail(streamKey);
163+
} catch (err) {
164+
LOGGER.info('An error occurred when getting thumbnail for stream (stream key: {}). ' +
165+
'Returning default thumbnail. Error: {}', streamKey, err);
166+
thumbnailURL = config.defaultThumbnailURL;
167+
}
168+
return {
169+
eventStageId: eventStage._id,
170+
stageName: eventStage.stageName,
171+
event: eventStage.event,
172+
title: eventStage.streamInfo.title,
173+
genre: eventStage.streamInfo.genre,
174+
category: eventStage.streamInfo.category,
175+
viewCount: eventStage.streamInfo.viewCount,
176+
startTime: eventStage.streamInfo.startTime,
177+
thumbnailURL
178+
};
179+
};
180+
}));
181+
176182
res.json({
177183
streams,
178184
nextPage: result.nextPage

0 commit comments

Comments
 (0)