584 lines
23 KiB
JavaScript
Executable File
584 lines
23 KiB
JavaScript
Executable File
/**
|
|
* Copyright (c) 2020
|
|
*
|
|
* CENTIRM HotelTV UI-WELCOME module javascript.
|
|
*
|
|
* @summary short description for the file
|
|
* @author Joel <joel.kim@centirm.com>
|
|
*
|
|
* Created at : 2020-11-26 02:21:56
|
|
* Last modified : 2020-11-26 15:31:40
|
|
*/
|
|
const gRmtKey = {
|
|
left: 37,
|
|
right: 39,
|
|
up: 38,
|
|
down: 40,
|
|
enter: 13,
|
|
back: 461,
|
|
red: 403,
|
|
green: 404,
|
|
yellow: 405,
|
|
blue: 406,
|
|
stop: 413,
|
|
play: 415,
|
|
|
|
num0: 48,
|
|
num1: 49,
|
|
num2: 50,
|
|
num3: 51,
|
|
num4: 52,
|
|
num5: 53,
|
|
num6: 54,
|
|
num7: 55,
|
|
num8: 56,
|
|
num9: 57,
|
|
|
|
chup: 427,
|
|
chdown: 428,
|
|
chprev: 711,
|
|
|
|
/** ENNPLE SPECIAL KEY */
|
|
amenity: -2072433963,
|
|
roomservice: -2072437788,
|
|
flight: -2072437533,
|
|
weather: -2072438298,
|
|
tv: -2072443143,
|
|
}
|
|
|
|
HotelTV.namespace('HotelTV.ui_welcome');
|
|
HotelTV.ui_welcome = (function() {
|
|
//// 의존 관계 선언
|
|
let hndl_langSel = null;
|
|
let _media_status = null;
|
|
|
|
//// 비공개 프로퍼티
|
|
|
|
/// 초기화 루틴
|
|
/**
|
|
* HotelTV UI Wrapper Function::> received event handling function
|
|
* @param {boolean} e event
|
|
*/
|
|
function __uifxn_WC_OnMediaEvt(e) {
|
|
let _state = HotelTV.state;
|
|
console.log("media_event_received = " + e.eventType);
|
|
let _stateMedia = e.eventType;
|
|
switch (_stateMedia) {
|
|
case 'play_start':
|
|
_media_status = 'playing';
|
|
HotelTV.hal.VideoWinSize(null);
|
|
|
|
//Hide welcome page
|
|
__uifxn_WC_Show(null, function() {
|
|
_state.menu.stage.cur = "playWelcomeMovie";
|
|
|
|
$('#lst_langsel').off('changed.owl.carousel');
|
|
$('#lst_langsel').owlCarousel('destroy');
|
|
$('.welcome #lst_langsel div').remove();
|
|
|
|
if ($(".control .skip_video").css('display') == 'none') {
|
|
$(".control .skip_video").fadeIn(1000);
|
|
setTimeout(() => {
|
|
$(".control .skip_video").fadeOut(3000);
|
|
}, 10000);
|
|
}
|
|
});
|
|
break;
|
|
case 'play_end':
|
|
_media_status = 'stopped';
|
|
HotelTV.hal.MediaShutdown(
|
|
function() {
|
|
$(".control .skip_video").hide();
|
|
console.log("Media Desory::Done");
|
|
HotelTV.UnloadWelCome();
|
|
},
|
|
function() {
|
|
console.log("Media Desory::Fail");
|
|
$(".control .skip_video").hide();
|
|
HotelTV.UnloadWelCome();
|
|
});
|
|
break;
|
|
case 'play_end_need_destory':
|
|
HotelTV.hal.MediaShutdown(
|
|
function() {
|
|
$(".control .skip_video").hide();
|
|
console.log("Media Desory::Done");
|
|
HotelTV.UnloadWelCome();
|
|
},
|
|
function() {
|
|
console.log("Media Desory::Fail");
|
|
$(".control .skip_video").hide();
|
|
HotelTV.UnloadWelCome();
|
|
});
|
|
break;
|
|
case 'error_in_playing':
|
|
break;
|
|
case 'buffer_full':
|
|
break;
|
|
case 'file_not_found':
|
|
break;
|
|
case 'network_disconnected':
|
|
break;
|
|
case 'network_busy':
|
|
break;
|
|
case 'seek_done':
|
|
break;
|
|
|
|
case 'play_stop_requtested':
|
|
_media_status = 'stopped';
|
|
HotelTV.hal.MediaShutdown(
|
|
function() {
|
|
$(".control .skip_video").hide();
|
|
console.log("Media Desory::Done");
|
|
HotelTV.UnloadWelCome();
|
|
},
|
|
function() {
|
|
console.log("Media Desory::Fail");
|
|
$(".control .skip_video").hide();
|
|
HotelTV.UnloadWelCome();
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* HotelTV UI Wrapper Function::> received event handling function
|
|
* @param {dictionary} _evt event information
|
|
*/
|
|
function __uifxn_WC_OnNetEvt(_evt) {
|
|
let _state = HotelTV.state;
|
|
console.log("network_event_received = " + _evt['eventType']);
|
|
let _typeNetEvt = _evt['eventType'];
|
|
|
|
switch (_typeNetEvt) {
|
|
case hcap.network.NetworkEventType.ABLE_REACH_DNS:
|
|
break;
|
|
case hcap.network.NetworkEventType.ABLE_REACH_GATEWAY:
|
|
break;
|
|
case hcap.network.NetworkEventType.ABLE_REACH_INTERNET:
|
|
break;
|
|
case hcap.network.NetworkEventType.DHCP_FAIL:
|
|
break;
|
|
case hcap.network.NetworkEventType.DHCP_SUCCESS:
|
|
break;
|
|
case hcap.network.NetworkEventType.ETHERNET_PLUGGED:
|
|
break;
|
|
case hcap.network.NetworkEventType.ETHERNET_UNPLUGGED:
|
|
break;
|
|
case hcap.network.NetworkEventType.IP_CONFLICT:
|
|
break;
|
|
case hcap.network.NetworkEventType.IP_NOT_CONFLICT:
|
|
break;
|
|
case hcap.network.NetworkEventType.UNABLE_REACH_DNS:
|
|
break;
|
|
case hcap.network.NetworkEventType.UNABLE_REACH_GATEWAY:
|
|
break;
|
|
case hcap.network.NetworkEventType.UNABLE_REACH_INTERNET:
|
|
break;
|
|
case hcap.network.NetworkEventType.UNKNOWN:
|
|
break;
|
|
case hcap.network.NetworkEventType.WIFI_AP_SEARCH_COMPLETE:
|
|
break;
|
|
case hcap.network.NetworkEventType.WIFI_CONNECT_FAIL:
|
|
break;
|
|
case hcap.network.NetworkEventType.WIFI_CONNECTED:
|
|
break;
|
|
case hcap.network.NetworkEventType.WIFI_DONGLE_PLUGGED:
|
|
break;
|
|
case hcap.network.NetworkEventType.WIFI_DONGLE_UNPLUGGED:
|
|
break;
|
|
case hcap.network.NetworkEventType.WIFI_LINK_DROPPED:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* HotelTV UI Wrapper Function::> Show Welcome Hotel Logo
|
|
* @param {boolean} uri_img background image url
|
|
*/
|
|
function __uifxn_WC_SetHotelLogo(uri_img) {
|
|
let _elmnt_img_hotellogo = $(".welcome > .frame > .msgwin #hotellogo");
|
|
if (uri_img != null) {
|
|
_elmnt_img_hotellogo.css({
|
|
"background-image": "url(" + uri_img + ")",
|
|
"background-size": "100% 100%"
|
|
});
|
|
} else {
|
|
_elmnt_img_hotellogo.css({ "background": "none" });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* HotelTV UI Wrapper Function::> Fillup welcome contents
|
|
* @param {boolean} sz_name Guest Name
|
|
* * @param {boolean} sz_msg Greeting Message
|
|
*/
|
|
function __uifxn_WC_SetCtz(sz_name, sz_msg) {
|
|
let _state = HotelTV.state;
|
|
let _trTbl = HotelTV.translation;
|
|
let _elmnt_guest_name = $(".welcome > .frame > .msgwin #guestname");
|
|
let _elmnt_welcomemsg = $(".welcome > .frame > .msgwin #welcomemsg");
|
|
let _elmnt_img_guide = $(".welcome > .frame > .guide#langsel");
|
|
|
|
if (sz_name != null) {
|
|
_elmnt_guest_name.html(sz_name + '<br />');
|
|
} else {
|
|
_elmnt_guest_name.html('<br />');
|
|
}
|
|
|
|
if (sz_msg[_state.lang] != null) {
|
|
_elmnt_welcomemsg.html(sz_msg[_state.lang].replace(/(?:\r\n|\r|\n)/g, '<br>'));
|
|
} else {
|
|
_elmnt_welcomemsg.html('<br />');
|
|
}
|
|
_elmnt_img_guide.text(_trTbl.ui.welcome.guide_wc_langsel[_state.lang]);
|
|
}
|
|
|
|
/**
|
|
* HotelTV UI Wrapper Function::> build welcome Main UI
|
|
* @param {boolean} uri_img background image url
|
|
*/
|
|
function __uifxn_WC_BldPage() {
|
|
let _ctzOpening = HotelTV.opening;
|
|
let _ctzWc = _ctzOpening.welcome;
|
|
let _state = HotelTV.state;
|
|
|
|
|
|
//Supported Language Count
|
|
let _langCnt = Object.keys(_ctzOpening.languages).length;
|
|
let _SupportedLang = _ctzOpening.languages;
|
|
|
|
//Add html elements for language selection
|
|
let _div_langsel = document.querySelector('.welcome #lst_langsel');
|
|
for (let __lang in _SupportedLang) {
|
|
let _div_lang_btn = document.createElement('div');
|
|
let _sz_styleOpt = null;
|
|
|
|
_div_lang_btn.className = 'item';
|
|
_div_lang_btn.id = 'wc_eit_langsel_' + __lang;
|
|
_div_lang_btn.textContent = _SupportedLang[__lang].name;
|
|
_div_lang_btn.setAttribute("lang", __lang);
|
|
_sz_styleOpt = "--btn_focus:url(images/bt_language_tab_focus.png); --btn_unfocus:url(images/bt_language_tab_unfocus.png);";
|
|
_div_lang_btn.setAttribute("style", _sz_styleOpt);
|
|
_div_langsel.appendChild(_div_lang_btn);
|
|
}
|
|
|
|
//
|
|
let _start_pos = 0;
|
|
for (let __lang in _SupportedLang) {
|
|
if (_state.lang == __lang) {
|
|
break;
|
|
}
|
|
_start_pos++;
|
|
}
|
|
hndl_langSel = $('#lst_langsel');
|
|
hndl_langSel.owlCarousel({
|
|
center: true,
|
|
items: 3,//Number(_langCnt - 1), //Number of Items on Screen what you want
|
|
loop: true,
|
|
margin: 0,
|
|
smartSpeed: 700,
|
|
autoWidth: false,
|
|
mouseDrag: false,
|
|
touchDrag: false,
|
|
pullDrag: false,
|
|
freeDrag: false,
|
|
startPosition: _start_pos,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* HotelTV UI Wrapper Function::> show welcome Main UI
|
|
* @param {boolean} uri_img background image url
|
|
*/
|
|
function __uifxn_WC_Show(uri_img, _callback) {
|
|
if (uri_img != null) {
|
|
//Decision fist displyed language
|
|
let _state = HotelTV.state;
|
|
let _ctzOpening = HotelTV.opening;
|
|
let _ctzWc = _ctzOpening.welcome;
|
|
let _ctzGst = HotelTV.guestinfo;
|
|
let _ctzHotel = HotelTV.hotelinfo;
|
|
|
|
hndl_langSel = $('#lst_langsel');
|
|
$(".welcome").show();
|
|
$(".welcome > .frame").css("background-image", "url(" + uri_img + ")");
|
|
$(".welcome > .frame").fadeIn(500, function() {
|
|
hndl_langSel.show();
|
|
//배경 출력후 1.5초 뒤에 호텔 로그와 웰컴 메시지 출력하도록 타임아웃 적용
|
|
setTimeout(function() {
|
|
__uifxn_WC_SetHotelLogo(_ctzHotel.mainLogo.download);
|
|
setTimeout(function() {
|
|
$('.welcome .frame .msgwin #welcomemsg').fadeIn(500, function() {
|
|
$('.welcome .frame .msgwin #guestname').fadeIn(500, function() {
|
|
_state.menu.stage.cur = "langSel"
|
|
});
|
|
});
|
|
}, 500);
|
|
}, 500);
|
|
});
|
|
|
|
|
|
|
|
$(document).on('keydown', function(_evt) { //attach event listener
|
|
console.log("LANGSEL KEY EVENT::> " + _evt.keyCode);
|
|
if (_state.menu.stage.cur == "langSel") {
|
|
if (_evt.keyCode == gRmtKey.left) {
|
|
$('#lst_langsel').trigger('prev.owl')
|
|
} else if (_evt.keyCode == gRmtKey.right) {
|
|
$('#lst_langsel').trigger('next.owl')
|
|
} else if (_evt.keyCode == gRmtKey.enter) {
|
|
_state.menu.stage.cur = "preparingWelcomeCtz";
|
|
|
|
let found_dev_locale = false;
|
|
// SET PLATFORM LANGUAGE
|
|
// HotelTV.hal.SetPlatformLanguage(_state.lang);
|
|
if ( 'getLocaleList' in HotelTV.devinfo )
|
|
{
|
|
for( let _localeIdx in HotelTV.devinfo.getLocaleList )
|
|
{
|
|
if ( HotelTV.devinfo.getLocaleList[_localeIdx].specifier== _state.lang ){
|
|
found_dev_locale = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ( found_dev_locale==true ){
|
|
HotelTV.hal.SetDeviceLocale(_state.lang);
|
|
}else{
|
|
console.log("Set Default device locale set to en-US");
|
|
HotelTV.hal.SetDeviceLocale('en-US');
|
|
}
|
|
|
|
|
|
// LANGUAGE 선택
|
|
if (_ctzWc.intro == 'image') {
|
|
/** Play slide shows */
|
|
|
|
} else if (_ctzWc.intro == 'video') {
|
|
HotelTV.ui_utils.SetBusy(true);
|
|
/** Play movie clip */
|
|
HotelTV.hal.MediaPlay(
|
|
_ctzWc.videos[_state.lang].download,
|
|
null,
|
|
"video/mp4",
|
|
1,
|
|
() => {
|
|
setTimeout(HotelTV.ui_utils.SetBusy, 2000, false);
|
|
console.log("STARTUP Done CB.");
|
|
//Shows up skip button
|
|
let _elmnt_btn_skip = $(".control .skip_video");
|
|
_elmnt_btn_skip.css({
|
|
"background-image": "url(" + "./images/bt_skip_en.png" + ")",
|
|
"background-size": "100% 100%"
|
|
});
|
|
},
|
|
() => {
|
|
console.log("STARTUP Fail CB.");
|
|
HotelTV.ui_utils.SetBusy(false);
|
|
HotelTV.UnloadWelCome();
|
|
}
|
|
);
|
|
} else {
|
|
console.log("No welcome post contents");
|
|
HotelTV.UnloadWelCome();
|
|
}
|
|
}
|
|
} else if (_state.menu.stage.cur == "playWelcomeMovie") {
|
|
if (_evt.keyCode == gRmtKey.stop) {
|
|
// STOP KEY Event
|
|
if (_media_status == 'playing') {
|
|
_media_status = 'preparing_stop_playing';
|
|
var _evt = new Event('media_event_received');
|
|
_evt['command_id'] = "media_ctrl_event";
|
|
_evt['eventType'] = "play_end_need_destory";
|
|
document.dispatchEvent(_evt);
|
|
}
|
|
} else {
|
|
console.log(">>");
|
|
if (_media_status == 'playing') {
|
|
if ($(".control .skip_video").css('display') == 'none') {
|
|
$(".control .skip_video").fadeIn(1000);
|
|
setTimeout(() => {
|
|
$(".control .skip_video").fadeOut(1000);
|
|
}, 3000);
|
|
} else {
|
|
const _evt = new Event('media_event_received');
|
|
_evt['command_id'] = "media_ctrl_event";
|
|
_evt['eventType'] = "play_stop_requtested";
|
|
document.dispatchEvent(_evt);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
|
|
hndl_langSel.on('changed.owl.carousel', function(event) {
|
|
const __ifxn_sendNextLangUsrData = async function(_nextLang, __cbFxnFailure=null, __cbFxn_Success=null) {
|
|
try {
|
|
let _usrDataJson = {
|
|
'next_lang': _nextLang,
|
|
};
|
|
_result = await HotelTV.api.SetUsrDataset(_usrDataJson);
|
|
console.log("The app main page will be reloaded");
|
|
} catch ( __err ){
|
|
console.log("CALL API::>" + __err);
|
|
}
|
|
}
|
|
|
|
// Update Language
|
|
console.log("LANG SEL[CHANGED]::>" + event.page.index);
|
|
_state.lang = Object.keys(_ctzOpening.languages)[event.page.index];
|
|
__ifxn_sendNextLangUsrData(_state.lang);
|
|
|
|
__uifxn_WC_SetCtz(_ctzGst.name, _ctzWc.message);
|
|
});
|
|
} else {
|
|
//Hide welcome main frame
|
|
if (_callback != null) {
|
|
$(".welcome").fadeOut(1000, _callback); // display 속성을 none 으로 바꾼다.
|
|
} else {
|
|
$(".welcome").fadeOut(1000); // display 속성을 none 으로 바꾼다.
|
|
}
|
|
}
|
|
}
|
|
|
|
//// 공개 API
|
|
return {
|
|
Init: function(width, height) {
|
|
//ADD Media related event handler
|
|
document.addEventListener("media_event_received", __uifxn_WC_OnMediaEvt, false);
|
|
//ADD Network related event handler
|
|
document.addEventListener("network_event_received", __uifxn_WC_OnNetEvt, false);
|
|
|
|
// Build up Welcome Page
|
|
__uifxn_WC_BldPage();
|
|
},
|
|
|
|
Show: function() {
|
|
let _ctzWc = HotelTV.opening.welcome;
|
|
__uifxn_WC_Show(_ctzWc.background.file.download, null);
|
|
},
|
|
|
|
MqttEvent: function(_evt) {
|
|
let _state = HotelTV.state;
|
|
|
|
console.log("MQTT RECEVED MESSAGE::> " + _evt);
|
|
if (_evt == "EVENT-MESSAGE-CREATE" || _evt == "EVENT-MESSAGE-UPDATE" || _evt == "EVENT-MESSAGE-DELETE") {
|
|
//DO NOT NEED MESSAGE on WELCOME
|
|
} else if (_evt == "EVENT-NEWS-UPDATE") {
|
|
//DO NEW NEWS
|
|
} else if (_evt == "EVENT-EMERGENCY-START") {
|
|
|
|
} else if (_evt == "EVENT-EMERGENCY-STOT") {
|
|
|
|
} else if (_evt == "COMMAND-SYSTEM-RESTART") {
|
|
let _tmval = 10;
|
|
let _state = HotelTV.state;
|
|
let _trTbl = HotelTV.translation;
|
|
|
|
HotelTV.ui_utils.ShowSysNoticeMsg(true,
|
|
"notice",
|
|
"SYSTEM NOTICE",
|
|
_trTbl.system.notice.event.mqtt.system_reboot[_state.lang], {
|
|
"timeout": _tmval,
|
|
"cb_disp": function() {
|
|
_tmval -= 1;
|
|
console.log("time..." + _tmval);
|
|
if ($('.error #countdown').css("display") == "none") {
|
|
$('.error #countdown').fadeIn(1000);
|
|
}
|
|
$('.error #countdown #message').text(`System will be shutdown in ${_tmval} second...`);
|
|
},
|
|
"cb_eoe": function() {
|
|
setTimeout(HotelTV.hal.Reboot, 500);
|
|
HotelTV.api.ReportEvent([{'power': false, 'location':null}])
|
|
}
|
|
});
|
|
} else if (_evt == "COMMAND-GUEST-CHECKIN") {
|
|
let _tmval = 10;
|
|
let _state = HotelTV.state;
|
|
let _trTbl = HotelTV.translation;
|
|
|
|
HotelTV.ui_utils.ShowSysNoticeMsg(true,
|
|
"notice",
|
|
"SYSTEM NOTICE",
|
|
_trTbl.system.notice.event.mqtt.system_reboot[_state.lang], {
|
|
"timeout": _tmval,
|
|
"cb_disp": function() {
|
|
_tmval -= 1;
|
|
console.log("time..." + _tmval);
|
|
if ($('.error #countdown').css("display") == "none") {
|
|
$('.error #countdown').fadeIn(1000);
|
|
}
|
|
$('.error #countdown #message').text(`System will be restart in ${_tmval} second...`);
|
|
},
|
|
"cb_eoe": function() {
|
|
setTimeout(HotelTV.hal.Reboot, 500);
|
|
HotelTV.api.ReportEvent([{'power': false, 'location':null}])
|
|
}
|
|
});
|
|
} else if (_evt == "COMMAND-GUEST-CHECKOUT" || _evt == "COMMAND-SYSTEM-STOP") {
|
|
let _tmval = 30;
|
|
let _state = HotelTV.state;
|
|
let _trTbl = HotelTV.translation;
|
|
|
|
HotelTV.ui_utils.ShowSysNoticeMsg(true,
|
|
"notice",
|
|
"SYSTEM NOTICE",
|
|
_trTbl.system.notice.event.mqtt.checkout[_state.lang], {
|
|
"timeout": _tmval,
|
|
"cb_disp": function() {
|
|
_tmval -= 1;
|
|
console.log("time..." + _tmval);
|
|
if ($('.error #countdown').css("display") == "none") {
|
|
$('.error #countdown').fadeIn(1000);
|
|
}
|
|
$('.error #countdown #message').text(`System will be shutdown in ${_tmval} second...`);
|
|
},
|
|
"cb_eoe": function() {
|
|
//setTimeout(HotelTV.hal.PwrOff, 500);
|
|
setTimeout(HotelTV.hal.Reboot, 500);
|
|
HotelTV.api.ReportEvent([{'power': false, 'location':null}])
|
|
}
|
|
});
|
|
} else if (_evt == "COMMAND-GUEST-UPDATE") {
|
|
|
|
} else if (_evt == "COMMAND-GUEST-ROOMCHANGE") {
|
|
let _tmval = 30;
|
|
let _state = HotelTV.state;
|
|
let _trTbl = HotelTV.translation;
|
|
|
|
HotelTV.ui_utils.ShowSysNoticeMsg(true,
|
|
"notice",
|
|
"SYSTEM NOTICE",
|
|
_trTbl.system.notice.event.mqtt.room_change[_state.lang], {
|
|
"timeout": _tmval,
|
|
"cb_disp": function() {
|
|
_tmval -= 1;
|
|
console.log("time..." + _tmval);
|
|
if ($('.error #countdown').css("display") == "none") {
|
|
$('.error #countdown').fadeIn(1000);
|
|
}
|
|
$('.error #countdown #message').text(`System will be restart in ${_tmval} second...`);
|
|
},
|
|
"cb_eoe": function() {
|
|
setTimeout(HotelTV.hal.Reboot, 500);
|
|
HotelTV.api.ReportEvent([{'power': false, 'location':null}])
|
|
}
|
|
});
|
|
} else if (_evt == "COMMAND-LAB-FACTORY") {
|
|
} else if (_evt == "COMMAND-LAB-AGING") {
|
|
} else if (_evt == "COMMAND-LAB-SHOW-ID") {
|
|
}
|
|
},
|
|
|
|
Close: function() {
|
|
SpatialNavigation.clear();
|
|
},
|
|
|
|
|
|
}
|
|
})(); |