Skip to content

Commit fbe60c3

Browse files
committed
fixes
1 parent 16ee101 commit fbe60c3

File tree

6 files changed

+291
-241
lines changed

6 files changed

+291
-241
lines changed

assets/js/core.js

Lines changed: 21 additions & 230 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* eslint n/no-unsupported-features/node-builtins: "off" */
22
/* globals initPhotoSwipeFromDOM initRemoteBuzzerFromDOM processChromaImage remoteBuzzerClient rotaryController globalGalleryHandle photoboothTools photoboothPreview virtualKeyboard */
33

4+
/* global createScreensaver */
45
const photoBooth = (function () {
56
const PhotoStyle = {
67
PHOTO: 'photo',
@@ -64,7 +65,7 @@ const photoBooth = (function () {
6465
config.preview.asBackground &&
6566
config.preview.mode === PreviewMode.DEVICE.valueOf() &&
6667
((config.commands.preview && !config.preview.bsm) || !config.commands.preview),
67-
timeToLive = parseInt(config.picture.time_to_live) * 1000,
68+
timeToLive = parseInt(config.picture.time_to_live, 10) * 1000,
6869
continuousCollageTime = config.collage.continuous_time * 1000,
6970
retryTimeout = config.picture.retry_timeout * 1000,
7071
notificationTimeout = config.ui.notification_timeout * 1000,
@@ -91,11 +92,7 @@ const photoBooth = (function () {
9192
command,
9293
startTime,
9394
endTime,
94-
totalTime,
95-
screensaverTimeout,
96-
screensaverSwitchTimeout,
97-
screensaverFlip = false,
98-
screensaverLastGallerySource = '';
95+
totalTime;
9996

10097
const galleryFallbackSource = () => config.screensaver.image_source || '';
10198

@@ -166,230 +163,24 @@ const photoBooth = (function () {
166163
api.screensaver.resetTimer();
167164
};
168165

169-
api.screensaver = {
170-
resolveSource: function () {
171-
const base = environment.publicFolders.api;
172-
switch (screensaverMode) {
173-
case 'video':
174-
return config.screensaver.video_source;
175-
case 'image':
176-
return config.screensaver.image_source;
177-
case 'folder':
178-
return base + '/randomImg.php?dir=' + encodeURIComponent('screensavers') + '&t=' + Date.now();
179-
case 'gallery':
180-
return base + '/randomImg.php?dir=' + encodeURIComponent('data/images') + '&t=' + Date.now();
181-
default:
182-
return '';
183-
}
184-
},
185-
hide: function () {
186-
if (!screensaverOverlay.length) {
187-
return;
188-
}
189-
screensaverOverlay.removeClass('screensaver-overlay--active');
190-
screensaverOverlay.css('display', 'none');
191-
startPage.removeClass('stage--screensaver');
192-
clearInterval(screensaverSwitchTimeout);
193-
194-
if (screensaverVideo.length) {
195-
const vid = screensaverVideo.get(0);
196-
vid.pause();
197-
vid.currentTime = 0;
198-
screensaverVideo.attr('src', '');
199-
}
200-
screensaverImage.hide().attr('src', '');
201-
screensaverTextTop.text('').hide();
202-
screensaverTextCenter.text('').hide();
203-
screensaverTextBottom.text('').hide();
204-
},
205-
toggleGalleryText: function () {
206-
const screensaverText = config.screensaver.text;
207-
const eventText = [config.event.textLeft, config.event.textRight].filter(Boolean).join(' ').trim();
208-
const showEvent = screensaverMode === 'gallery';
209-
const hasScreensaver = !!screensaverText;
210-
const hasEvent = showEvent && !!eventText;
211-
212-
const position = config.screensaver.text_position || 'center';
213-
const showTop = position === 'top-center';
214-
const showCenter = position === 'center';
215-
const showBottom = position === 'bottom-center';
216-
217-
const resetSlots = () => {
218-
screensaverTextTop.removeClass('screensaver-overlay__text--center').hide().text('');
219-
screensaverTextCenter.hide().text('');
220-
screensaverTextBottom.hide().text('');
221-
};
222-
223-
const setSlot = (text) => {
224-
resetSlots();
225-
if (showCenter) {
226-
screensaverTextCenter.text(text).show();
227-
return;
228-
}
229-
if (showTop) {
230-
screensaverTextTop.text(text).show();
231-
}
232-
if (showBottom) {
233-
screensaverTextBottom.text(text).show();
234-
}
235-
};
236-
237-
if (hasScreensaver && hasEvent) {
238-
if (screensaverFlip) {
239-
setSlot(screensaverText);
240-
// place event in the opposite available slot
241-
if (showTop && showBottom) {
242-
screensaverTextBottom.text(eventText).show();
243-
} else if (showCenter) {
244-
screensaverTextBottom.text(eventText).show();
245-
} else if (showTop) {
246-
screensaverTextBottom.text(eventText).show();
247-
} else {
248-
screensaverTextTop.text(eventText).show();
249-
}
250-
} else {
251-
setSlot(eventText);
252-
if (showTop && showBottom) {
253-
screensaverTextBottom.text(screensaverText).show();
254-
} else if (showCenter) {
255-
screensaverTextBottom.text(screensaverText).show();
256-
} else if (showTop) {
257-
screensaverTextBottom.text(screensaverText).show();
258-
} else {
259-
screensaverTextTop.text(screensaverText).show();
260-
}
261-
}
262-
} else {
263-
const singleText = hasScreensaver ? screensaverText : hasEvent ? eventText : '';
264-
if (singleText) {
265-
setSlot(singleText);
266-
} else {
267-
resetSlots();
268-
}
269-
}
270-
271-
screensaverFlip = !screensaverFlip;
272-
},
273-
stepScreensaver: function () {
274-
const mode = screensaverOverlay.data('mode') || screensaverMode;
275-
photoboothTools.console.logDev('Screensaver: step in mode \'' + mode + '\'');
276-
277-
let nextSource = api.screensaver.resolveSource();
278-
if (!nextSource && mode === 'gallery') {
279-
nextSource = galleryFallbackSource();
280-
}
281-
282-
// Try to avoid immediate repeat
283-
if (mode === 'gallery' || mode === 'folder') {
284-
let guard = 5;
285-
while (nextSource === screensaverLastGallerySource && guard > 0) {
286-
nextSource = api.screensaver.resolveSource();
287-
guard--;
288-
}
289-
screensaverLastGallerySource = nextSource;
290-
}
291-
photoboothTools.console.logDev('Screensaver: next source \'' + nextSource + '\'');
292-
if (nextSource) {
293-
if (mode === 'folder') {
294-
screensaverOverlay.css('background-image', nextSource ? `url(${urlSafe(nextSource)})` : 'none');
295-
} else if (mode === 'gallery') {
296-
screensaverImage
297-
.one('error', function () {
298-
const fallback = galleryFallbackSource();
299-
if (fallback && fallback !== nextSource) {
300-
screensaverLastGallerySource = fallback;
301-
$(this).attr('src', urlSafe(fallback));
302-
}
303-
})
304-
.attr('src', urlSafe(nextSource))
305-
.show();
306-
}
307-
}
308-
if (mode === 'gallery') {
309-
api.screensaver.toggleGalleryText();
310-
}
311-
},
312-
show: function () {
313-
if (!screensaverEnabled || !screensaverOverlay.length) {
314-
return;
315-
}
316-
const mode = screensaverMode;
317-
if (!startPage.hasClass('stage--active')) {
318-
api.screensaver.resetTimer();
319-
return;
320-
}
321-
322-
if (mode === 'gallery') {
323-
screensaverOverlay.addClass('screensaver-overlay--gallery');
324-
} else {
325-
screensaverOverlay.removeClass('screensaver-overlay--gallery');
326-
}
327-
328-
const source = api.screensaver.resolveSource();
329-
let finalSource = source;
330-
if (!source) {
331-
finalSource = galleryFallbackSource();
332-
}
333-
if (!finalSource) {
334-
api.screensaver.resetTimer();
335-
return;
336-
}
337-
if (mode === 'gallery') {
338-
screensaverLastGallerySource = finalSource;
339-
}
340-
341-
if (mode === 'video') {
342-
screensaverOverlay.css('background-image', 'none');
343-
screensaverVideo.attr('src', urlSafe(finalSource));
344-
screensaverVideo.show();
345-
const vid = screensaverVideo.get(0);
346-
vid.play().catch((err) => {
347-
photoboothTools.console.logDev('Idle video play failed: ' + err);
348-
});
349-
screensaverImage.hide();
350-
api.screensaver.toggleGalleryText();
351-
} else if (mode === 'gallery') {
352-
screensaverVideo.hide();
353-
screensaverOverlay.css('background-image', 'none');
354-
screensaverImage
355-
.one('error', function () {
356-
const fallback = galleryFallbackSource();
357-
if (fallback && fallback !== finalSource) {
358-
screensaverLastGallerySource = fallback;
359-
$(this).attr('src', urlSafe(fallback));
360-
}
361-
})
362-
.attr('src', urlSafe(finalSource))
363-
.show();
364-
api.screensaver.toggleGalleryText();
365-
} else {
366-
screensaverVideo.hide();
367-
screensaverImage.hide();
368-
api.screensaver.toggleGalleryText();
369-
screensaverOverlay.css('background-image', finalSource ? `url(${urlSafe(finalSource)})` : 'none');
370-
screensaverOverlay.css('background-size', 'cover');
371-
}
372-
373-
startPage.addClass('stage--screensaver');
374-
screensaverOverlay.addClass('screensaver-overlay--active');
375-
screensaverOverlay.css('display', 'flex');
376-
377-
clearInterval(screensaverSwitchTimeout);
378-
if ((mode === 'folder' || mode === 'gallery') && screensaverSwitchMs > 0) {
379-
screensaverSwitchTimeout = setInterval(function nextIdleFrame() {
380-
api.screensaver.stepScreensaver();
381-
}, screensaverSwitchMs);
382-
}
383-
},
384-
resetTimer: function () {
385-
if (!screensaverEnabled) {
386-
return;
387-
}
388-
clearTimeout(screensaverTimeout);
389-
api.screensaver.hide();
390-
screensaverTimeout = setTimeout(api.screensaver.show, screensaverTimeoutMs);
391-
}
392-
};
166+
api.screensaver = createScreensaver({
167+
config,
168+
environment,
169+
startPage,
170+
overlay: screensaverOverlay,
171+
videoEl: screensaverVideo,
172+
imageEl: screensaverImage,
173+
textTop: screensaverTextTop,
174+
textCenter: screensaverTextCenter,
175+
textBottom: screensaverTextBottom,
176+
screensaverEnabled,
177+
screensaverMode,
178+
screensaverTimeoutMs,
179+
screensaverSwitchMs,
180+
urlSafe,
181+
galleryFallbackSource,
182+
photoboothTools
183+
});
393184

394185
api.navbar = {
395186
open: function () {

0 commit comments

Comments
 (0)