diff --git a/app/css/style.css b/app/css/style.css index e5e707b..7f02d62 100644 --- a/app/css/style.css +++ b/app/css/style.css @@ -44,3 +44,27 @@ align-items: center; justify-content: center; } + +.filename { + /* + margin-left: .1rem; + padding-left: .1rem; + */ +} + +.menu_session_code, .detail_session_code { + margin-left: .1rem; + padding-left: .1rem; + font-size: .5em; +} + +.session_detail>h2 { + background-color: #F7F7F7; + /*border-bottom: solid .1rem black;*/ +} + +.detail_session_code { + margin-left: .1rem; + padding-left: .1rem; + font-size: .5em; +} diff --git a/app/index.html b/app/index.html index 6564e27..bc4a278 100644 --- a/app/index.html +++ b/app/index.html @@ -61,6 +61,9 @@
Reset Launcher
+
+ Network Status +
@@ -121,6 +124,14 @@ let event_id = app_config.event_id; let event_location_id = app_config.event_location_id; + + // Start of API section + + const api_token_loop_interval = app_config.api_token_loop_interval; + let api_update_period = app_config.idb_event_location_check_period; + let api_update_datetime = Date.now(); + let waiting_on_api_token = false; + const secret_key = app_config.api_secret_key; let api_temporary_token = null; @@ -135,12 +146,95 @@ axios.defaults.baseURL = api_base_url; axios.defaults.headers.post['Access-Control-Allow-Origin'] = app_config.access_control_allow_origin; // '*'; - api_token_request_async(axios, secret_key).then( function(result) { - console.log('Setting temporary API token to axios Authorization header: '+result); - axios.defaults.headers.common['Authorization'] = `Token ${result}`; - api_temporary_token = result; - return result; - }); + // Axios needs to authenticate first + let axios_headers_set = false; + + /*if (app_online) { + api_token_request_async(axios, secret_key).then( function(result) { + console.log('Setting temporary API token to axios Authorization header: '+result); + axios.defaults.headers.common['Authorization'] = `Token ${result}`; + api_temporary_token = result; + return result; + }); + } else { + console.log('Currently offline. Can not request temporary API token.'); + }*/ + + let app_online = false; + window.addEventListener('online', app.currently_online); + window.addEventListener('offline', app.currently_offline); + + let update_event_ui = true; + let update_event_location_ui = true; + let update_event_session_ui = true; + let update_event_presentation_ui = true; + let update_event_presenter_ui = true; + let update_event_file_ui = true; + + if (window.onLine) { + app.currently_online(); + + } else { + app.currently_offline(); + + update_event_ui = true; + update_event_location_ui = true; + update_event_session_ui = true; + update_event_presentation_ui = true; + update_event_presenter_ui = true; + update_event_file_ui = true; + } + + var api_token_loop = setInterval(function() { + if (app_online && api_update_datetime < Date.now()) { + + + let api_temporary_token = api_token_request_async(axios, secret_key) + .then(function (result) { + if (result) { + console.log('Setting temporary API token to axios Authorization header: '+result); + axios.defaults.headers.common['Authorization'] = `Token ${result}`; + api_temporary_token = result; + + console.log('Axios headers have been set.'); + axios_headers_set = true; + api_update_datetime = Date.now() + api_update_period; + } else { + console.log('Not online?????????????????????????'); + console.log(window.onLine); + if (window.onLine) { + app.currently_online(); + } else { + app.currently_offline(); + } + } + }) + .catch(function (error) { + console.log('Something went wrong'); + console.log(error); + }); + + + /* + api_token_request_async(axios, secret_key).then( function(result) { + console.log('Setting temporary API token to axios Authorization header: '+result); + axios.defaults.headers.common['Authorization'] = `Token ${result}`; + api_temporary_token = result; + + console.log('Axios headers have been set.'); + axios_headers_set = true; + api_update_datetime = Date.now() + api_update_period; + return result; + }); + */ + } else if (app_online) { + //console.log('Currently online, but not asking for a new temporary token yet.'); + } else { + console.log('Currently offline. Can not request a new temporary API token.'); + } + }, api_token_loop_interval); + + // End of API section let idb_name = app_config.idb_name; @@ -248,17 +342,16 @@ */ - const api_auth_loop_interval = 100; // only runs on start up + //const api_auth_loop_interval = 100; // only runs on start up const open_tables_loop_interval = 10; // only runs on start up - const api_token_update_loop_interval = 120000; // loop forever + //const api_token_update_loop_interval = 120000; // loop forever - const update_idb_loop_interval = 500; // loop forever; update when check datetime has passed + const update_idb_loop_interval = app_config.update_idb_loop_interval; // loop forever //const update_render_loop_interval = 10000; // loop forever; only run when the launcher object is safe const check_file_cache_loop_interval = 250; // loop forever; only run after the event_file table has updated + const update_render_loop_interval = app_config.update_render_loop_interval; // loop forever - // Axios needs to authenticate first - let axios_headers_set = false; // IDB tables need to be opened let idb_tables_opened = false; @@ -290,20 +383,14 @@ const host_file_cache_path = app_config.host_file_cache_path; //'file_cache/'; //const host_file_cache_check_period = app_config.host_file_cache_check_period; //30000; // 30 seconds - let idb_tables_have_records = false; + const display_session_codes = app_config.display_session_codes; + const display_session_badges = app_config.display_session_badges; + const display_presentation_codes = app_config.display_presentation_codes; // NOTE: not currently used + const display_presentation_badges = app_config.display_presentation_badges; + const display_presenter_codes = app_config.display_presenter_codes; // NOTE: not currently used + const display_presenter_badges = app_config.display_presenter_badges; // NOTE: not currently used - var api_auth_loop = setInterval(function() { - if (typeof axios.defaults.headers.common['Authorization'] !== 'undefined' - && axios.defaults.headers.common['Authorization'] != null) { - console.log('Axios headers have been set.'); - axios_headers_set = true; - //run_update_idb = true; - clearInterval(api_auth_loop); - } else { - axios_headers_set = false; - console.log('Waiting for Axios headers to be set.'); - } - }, api_auth_loop_interval); + let idb_tables_have_records = false; var open_tables_loop = setInterval(function() { @@ -323,20 +410,11 @@ }, open_tables_loop_interval); - var api_token_update_loop = setInterval(function() { - api_token_request_async(axios, secret_key).then( function(result) { - console.log('Setting temporary API token to axios Authorization header: '+result); - axios.defaults.headers.common['Authorization'] = `Token ${result}`; - api_temporary_token = result; - return result; - }); - }, api_token_update_loop_interval); - - var update_idb_loop = setInterval(async function() { //console.log('FLAG: axios_headers_set='+axios_headers_set); //console.log('FLAG: idb_tables_opened='+idb_tables_opened); - if (axios_headers_set && idb_tables_opened) { + + if (app_online && axios_headers_set && idb_tables_opened) { if (idb_event_check_datetime < Date.now()) { console.log('**** *** ** * Time to check events'); let v2_account_events = await v2_get_account_events(axios, account_id) @@ -345,7 +423,8 @@ tbl_event.setItem(response[i].id.toString(), response[i]); } idb_event_check_datetime = Date.now() + idb_event_check_period; - let render_event_records_result = render_event_records(); // NOTE: v2 idb to ui + //let render_event_records_result = render_event_records(); // NOTE: v2 idb to ui + update_event_ui = true; }) .catch(function (error) { console.log('Trying to check events. Something went wrong. Expired token?'); @@ -361,7 +440,8 @@ tbl_event_location.setItem(v2_event_locations[i].id.toString(), v2_event_locations[i]); } idb_event_location_check_datetime = Date.now() + idb_event_location_check_period; - let render_event_location_records_result = render_event_location_records(); // NOTE: v2 idb to ui + //let render_event_location_records_result = render_event_location_records(); // NOTE: v2 idb to ui + update_event_location_ui = true; } if (idb_event_session_check_datetime < Date.now()) { @@ -372,7 +452,8 @@ tbl_event_session.setItem(v2_event_sessions[i].id.toString(), v2_event_sessions[i]); } idb_event_session_check_datetime = Date.now() + idb_event_session_check_period; - let render_event_session_records_result = render_event_session_records(); // NOTE: v2 idb to ui + //let render_event_session_records_result = render_event_session_records(); // NOTE: v2 idb to ui + update_event_session_ui = true; } if (idb_event_presentation_check_datetime < Date.now()) { @@ -382,7 +463,8 @@ tbl_event_presentation.setItem(v2_event_presentations[i].id.toString(), v2_event_presentations[i]); } idb_event_presentation_check_datetime = Date.now() + idb_event_presentation_check_period; - let render_event_presentation_records_result = await render_event_presentation_records(); // NOTE: v2 idb to ui + //let render_event_presentation_records_result = await render_event_presentation_records(); // NOTE: v2 idb to ui + update_event_presentation_ui = true; } if (idb_event_presenter_check_datetime < Date.now()) { @@ -393,7 +475,8 @@ } idb_event_presenter_check_datetime = Date.now() + idb_event_presenter_check_period; - let render_event_presenter_records_result = await render_event_presenter_records(); // NOTE: v2 idb to ui + //let render_event_presenter_records_result = await render_event_presenter_records(); // NOTE: v2 idb to ui + update_event_presenter_ui = true; } if (idb_event_file_check_datetime < Date.now()) { @@ -427,21 +510,62 @@ run_check_file_cache = true; // Set to true so that the local file cache will be checked against the updated event files idb_event_file_check_datetime = Date.now() + idb_event_file_check_period; - let render_event_file_records_result = await render_event_file_records(); // NOTE: v2 idb to ui + //let render_event_file_records_result = await render_event_file_records(); // NOTE: v2 idb to ui + update_event_file_ui = true; } - - + + } else if (app_online && idb_tables_opened && !axios_headers_set) { + console.log('Online and waiting for the Axios headers to be set.'); + console.log('Using cached IDB data'); + /* + let render_event_records_result = render_event_records(); + let render_event_location_records_result = render_event_location_records(); + let render_event_session_records_result = render_event_session_records(); + let render_event_presentation_records_result = await render_event_presentation_records(); + let render_event_presenter_records_result = await render_event_presenter_records(); + let render_event_file_records_result = await render_event_file_records(); + */ + } else if (app_online && axios_headers_set && !idb_tables_opened) { + console.log('Online and Axios headers are set. Waiting for the IDB tables to be opened'); + } else if (!app_online) { + console.log('Waiting to update IDB once online.'); + console.log('Using cached IDB data'); } else { - console.log('Waiting for the Axios headers to be set and/or IDB tables opened...'); + console.log('This should not happen.'); } }, update_idb_loop_interval); - - - /*var update_render_loop = setInterval(async function() { - }, update_render_loop_interval);*/ + var update_render_loop = setInterval(async function() { + console.log('*** Update Render Loop ***'); + + if (update_event_ui) { + let render_event_records_result = render_event_records(); + update_event_ui = false; + } + if (update_event_location_ui) { + let render_event_location_records_result = render_event_location_records(); + update_event_location_ui = false; + } + if (update_event_session_ui) { + let render_event_session_records_result = render_event_session_records(); + update_event_session_ui = false; + } + if (update_event_presentation_ui) { + let render_event_presentation_records_result = await render_event_presentation_records(); + update_event_presentation_ui = false; + } + if (update_event_presenter_ui) { + let render_event_presenter_records_result = await render_event_presenter_records(); + update_event_presenter_ui = false; + } + if (update_event_file_ui) { + let render_event_file_records_result = await render_event_file_records(); + update_event_file_ui = false; + } + + }, update_render_loop_interval); var check_file_cache_loop = setInterval(async function() { diff --git a/app/js/app_api.js b/app/js/app_api.js index 9ccdb18..7bdb726 100644 --- a/app/js/app_api.js +++ b/app/js/app_api.js @@ -1,5 +1,21 @@ async function api_token_request_async(axios, secret_key) { console.log('Requesting API temporary token...'); + + if (waiting_on_api_token) { + console.log('Already waiting on an API token request. Not starting another until finished.'); + return false; + } else { + + } + + if (navigator.onLine) { + } else { + app_online = false; + return false; + } + + waiting_on_api_token = true; + const url = '/api_token_request'; let data = { secret_key: secret_key }; @@ -13,8 +29,10 @@ async function api_token_request_async(axios, secret_key) { }) .catch(function (error) { console.error(error); - return error; + return false; }); + + waiting_on_api_token = false; return response; } diff --git a/app/js/app_ui_files.js b/app/js/app_ui_files.js index 87c824b..e6d85bf 100644 --- a/app/js/app_ui_files.js +++ b/app/js/app_ui_files.js @@ -100,8 +100,10 @@ async function render_event_file_records() { file_li_node.id = 'event_file_'+tbl_file_id; if (tbl_for_type != 'event' && tbl_for_type != 'location') { file_li_node.className = 'list-group-item btn btn-primary d-flex justify-content-between align-items-center open_local_file event_file'; + //file_li_node.className = 'list-group-item btn btn-primary justify-content-between align-items-center open_local_file event_file'; } else { file_li_node.className = 'list-group-item btn btn-sm btn-secondary d-flex justify-content-between align-items-center open_local_file event_file'; + //file_li_node.className = 'list-group-item btn btn-sm btn-secondary justify-content-between align-items-center open_local_file event_file'; } file_li_node.setAttribute('data-file_id', tbl_file_id); diff --git a/app/js/app_ui_presentations.js b/app/js/app_ui_presentations.js index 585252f..c973968 100644 --- a/app/js/app_ui_presentations.js +++ b/app/js/app_ui_presentations.js @@ -38,7 +38,10 @@ async function render_event_presentation_records(events) { console.log('Presentation ('+presentation_id+') was found in the session ('+session_id+'). Updating...'); document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('strong')[0].innerHTML = value.name; let presentation_startdatetime = new Date(value.start_datetime); - document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerHTML = dateFns.format(presentation_startdatetime, 'h:mm A'); + + let presentation_startdatetime_string = dateFns.format(presentation_startdatetime, 'h:mm A') + + document.getElementById('event_presentation_'+value.id).getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerHTML = presentation_startdatetime_string; } else if (session_id != value.event_session_id && presentation_id == value.id) { // Found presentation in a session that it should not be in. Removing... @@ -120,10 +123,32 @@ async function render_event_presentation_records(events) { presentation_name_strong_node.appendChild(presentation_name_text_node); let presentation_heading_span_node = document.createElement('SPAN'); - presentation_heading_span_node.className = 'badge badge-pill badge-info'; + + if (display_presentation_badges) { + presentation_heading_span_node.className = 'badge badge-pill badge-info d-inline'; + } else { + presentation_heading_span_node.className = 'badge badge-pill badge-info d-none'; + } + + /* + // Create the session code span + let span_session_code_node = document.createElement('SPAN'); + span_session_code_node.id = 'detail_session_code_'+value.id; + if ( display_session_codes && value.code && value.code.length) { + span_session_code_node.className = 'd-inline detail_session_code'; + } else { + span_session_code_node.className = 'd-none detail_session_code'; + } + + let span_session_code_text_node = document.createTextNode('('+value.code+')'); + span_session_code_node.appendChild(span_session_code_text_node); + */ + + //let presenation_font = ' '; let presentation_startdatetime = new Date(value.start_datetime); - let presentation_heading_span_text_node = document.createTextNode(dateFns.format(presentation_startdatetime, 'h:mm A')); + let presentation_startdatetime_string = dateFns.format(presentation_startdatetime, 'h:mm A'); + let presentation_heading_span_text_node = document.createTextNode(presentation_startdatetime_string); presentation_heading_span_node.appendChild(presentation_heading_span_text_node); presentation_li_heading_div_node.appendChild(presentation_name_strong_node); diff --git a/app/js/app_ui_sessions.js b/app/js/app_ui_sessions.js index b2b2f16..c5bc2bf 100644 --- a/app/js/app_ui_sessions.js +++ b/app/js/app_ui_sessions.js @@ -19,7 +19,7 @@ async function render_event_session_records() { // *** ** * Checking if the session is already in the launcher menu * ** *** if (document.getElementById('menu_event_session_'+value.id)) { // Update the session menu list item - document.getElementById('menu_event_session_'+value.id).innerHTML = value.name; + document.getElementById('menu_session_name_'+value.id).innerHTML = value.name; } else { // Unhide the sessions menu if (document.getElementById('sessions_menu').classList.contains('d-none') ) { @@ -28,18 +28,38 @@ async function render_event_session_records() { } // Add the new session to the session menu - let node = document.createElement('LI'); - node.id = 'menu_event_session_'+value.id; - node.className = 'list-group-item btn btn-success d-flex justify-content-between align-items-center btn_view_session'; - node.setAttribute('data-session_id', value.id); + let li_session_node = document.createElement('LI'); + li_session_node.id = 'menu_event_session_'+value.id; + //li_session_node.className = 'list-group-item btn btn-success d-flex justify-content-between align-items-center btn_view_session'; + li_session_node.className = 'list-group-item btn btn-success justify-content-between align-items-center btn_view_session'; + li_session_node.setAttribute('data-session_id', value.id); - node.title = 'id='+value.id+' session_id='+value.id; + li_session_node.title = 'id='+value.id+' session_id='+value.id; - let text_node = document.createTextNode(value.name); + // Create the session name span + let li_span_name_node = document.createElement('SPAN'); + li_span_name_node.id = 'menu_session_name_'+value.id; + li_span_name_node.className = 'd-inline menu_session_name'; - node.appendChild(text_node); + let li_span_name_text_node = document.createTextNode(value.name); + li_span_name_node.appendChild(li_span_name_text_node); - document.getElementById('sessions_menu').getElementsByTagName('ul')[0].appendChild(node); + // Create the session code span + let li_span_badge_node = document.createElement('SPAN'); + if ( display_session_codes && value.code && value.code.length) { + li_span_badge_node.className = 'd-inline menu_session_code'; + } else { + li_span_badge_node.className = 'd-none'; + } + + let li_span_badge_text_node = document.createTextNode('('+value.code+')'); + li_span_badge_node.appendChild(li_span_badge_text_node); + + + li_session_node.appendChild(li_span_name_node); + li_session_node.appendChild(li_span_badge_node); + + document.getElementById('sessions_menu').getElementsByTagName('ul')[0].appendChild(li_session_node); } let session_startdatetime = new Date(value.start_datetime); @@ -48,33 +68,68 @@ async function render_event_session_records() { if (document.getElementById('detail_session_'+value.id)) { // Update the launcher sessions list // NOTE: Updating this text is very awkward? - document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].firstChild.data = value.name; - console.log(document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0]); - document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].getElementsByTagName('span')[0].innerHTML = dateFns.format(session_startdatetime, 'ddd h:mm A'); + //document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].firstChild.data = value.name; + document.getElementById('detail_session_name_'+value.id).innerHTML = value.name; + document.getElementById('detail_session_code_'+value.id).innerHTML = '('+value.code+')'; + //console.log(document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0]); + document.getElementById('detail_session_badge_'+value.id).innerHTML = dateFns.format(session_startdatetime, 'ddd h:mm A'); } else { // Add the new session to the launcher sessions list - let div_node = document.createElement('DIV'); - div_node.id = 'detail_session_'+value.id; - div_node.className = 'container d-none session_detail event_session'; - div_node.setAttribute('data-session_id', value.id); + let div_session_node = document.createElement('DIV'); + div_session_node.id = 'detail_session_'+value.id; + div_session_node.className = 'container d-none session_detail event_session'; + div_session_node.setAttribute('data-session_id', value.id); - let h2_node = document.createElement('H2'); - h2_node.className = 'session_title d-flex justify-content-between align-items-center'; + let h2_session_node = document.createElement('H2'); + h2_session_node.className = 'session_heading d-flex justify-content-between align-items-center border-bottom border-primary'; + //h2_session_node.className = 'detail_session_title justify-content-between align-items-center'; - // NOTE: Instead of a text node should this just be wrapped in a set of tags? - // Updating this is kind of awkward... see above - let h2_text_node = document.createTextNode(value.name); - h2_node.appendChild(h2_text_node); + // Group the name and code together for the title + let span_session_title_node = document.createElement('SPAN'); + span_session_title_node.className = 'session_title'; - let h2_span_node = document.createElement('SPAN'); - h2_span_node.className = 'badge badge-pill badge-info'; + // Create the session name span + let span_session_name_node = document.createElement('SPAN'); + span_session_name_node.id = 'detail_session_name_'+value.id; + span_session_name_node.className = 'detail_session_name'; - let h2_span_text_node = document.createTextNode(dateFns.format(session_startdatetime, 'ddd h:mm A')); - h2_span_node.appendChild(h2_span_text_node); + let span_session_name_text_node = document.createTextNode('('+value.name+')'); + span_session_name_node.appendChild(span_session_name_text_node); - h2_node.appendChild(h2_span_node); + //h2_session_node.appendChild(span_session_name_node); + span_session_title_node.appendChild(span_session_name_node); - div_node.appendChild(h2_node); + // Create the session code span + let span_session_code_node = document.createElement('SPAN'); + span_session_code_node.id = 'detail_session_code_'+value.id; + if ( display_session_codes && value.code && value.code.length) { + span_session_code_node.className = 'd-inline detail_session_code'; + } else { + span_session_code_node.className = 'd-none detail_session_code'; + } + + let span_session_code_text_node = document.createTextNode('('+value.code+')'); + span_session_code_node.appendChild(span_session_code_text_node); + + //h2_session_node.appendChild(span_session_code_node); + span_session_title_node.appendChild(span_session_code_node); + h2_session_node.appendChild(span_session_title_node); + + let span_session_badge_node = document.createElement('SPAN'); + span_session_badge_node.id = 'detail_session_badge_'+value.id; + + if (display_session_badges) { + span_session_badge_node.className = 'badge badge-pill badge-info d-inline'; + } else { + span_session_badge_node.className = 'badge badge-pill badge-info d-none'; + } + + let span_session_badge_text_node = document.createTextNode(dateFns.format(session_startdatetime, 'ddd h:mm A')); + span_session_badge_node.appendChild(span_session_badge_text_node); + + h2_session_node.appendChild(span_session_badge_node); + + div_session_node.appendChild(h2_session_node); // Add placeholder cards for session files and session presentations // Files @@ -100,7 +155,7 @@ async function render_event_session_records() { files_div_node.appendChild(files_header_div_node); files_div_node.appendChild(files_body_div_node); - div_node.appendChild(files_div_node); + div_session_node.appendChild(files_div_node); // Presentations let presentations_div_node = document.createElement('DIV'); @@ -126,10 +181,10 @@ async function render_event_session_records() { presentations_div_node.appendChild(presentations_header_div_node); presentations_div_node.appendChild(presentations_body_div_node); - div_node.appendChild(presentations_div_node); + div_session_node.appendChild(presentations_div_node); - document.getElementById('launcher_sessions').appendChild(div_node); + document.getElementById('launcher_sessions').appendChild(div_session_node); } } else { diff --git a/app/js/module_app.js b/app/js/module_app.js index 22c82ff..09ac018 100644 --- a/app/js/module_app.js +++ b/app/js/module_app.js @@ -63,5 +63,29 @@ exports.load_config = function () { } else { //close(); } + //console.log(config); return config; } + +exports.currently_online = function() { + //alert('You are currently online'); + console.log('Currently online'); + app_online = true; + document.getElementById('network_status1').classList.remove('btn-warning'); + document.getElementById('network_status1').classList.add('btn-success'); + document.getElementById('network_status1').innerHTML = ' Currently Online'; + //document.getElementById('network_status1').innerHTML('Currently Online'); +} + +exports.currently_offline = function() { + //alert('You are currently offline'); + console.log('Currently offline'); + app_online = false; + document.getElementById('network_status1').classList.remove('btn-success'); + document.getElementById('network_status1').classList.add('btn-warning'); + document.getElementById('network_status1').innerHTML = ' Currently Offline'; + //document.getElementById('network_status1').innerHTML('Currently Offline'); +} + +//window.addEventListener('online', currently_online); +//window.addEventListener('offline', currently_offline); diff --git a/config.json.default b/config.json.default index 0f64f81..be8fa8f 100644 --- a/config.json.default +++ b/config.json.default @@ -1,7 +1,15 @@ { + "device_id": null, + "account_id": 12, + "event_id": 14, + "event_location_id": 13, + "main_loop_interval": 2000, "api_secret_key": "YWAAk39H2qH0edK6lPH0yg", + "use_local_api": true, + "use_local_db": false, "api_remote_base_url": "https://api.oneskyit.com", "api_local_base_url": "http://api.localhost:5001", + "access_control_allow_origin": "*", "remote_db_server": "db.oneskyit.com", "remote_db_port": "3306", "remote_db_name": "onesky_ams_test", @@ -12,7 +20,19 @@ "local_db_name": "onesky_ams_test", "local_db_username": "username_here", "local_db_password": "password_here", - "local_file_cache":"file_cache", + "idb_name": "osit", + "idb_check_period": 30000, + "idb_event_check_period": 120000, + "idb_event_location_check_period": 90000, + "idb_event_session_check_period": 60000, + "idb_event_presentation_check_period": 60000, + "idb_event_presenter_check_period": 60000, + "idb_event_file_check_period": 60000, + "host_file_cache_path": "file_cache", + "host_file_cache_check_period": 30000, + "display_session_codes": true, + "display_presentation_codes": true, + "display_presenter_codes": true, "display_arrangement": "mirror_and_extend", "display_builtin_resolution": "", "display_builtin_refresh": "", @@ -20,8 +40,8 @@ "display_external_resolution": "", "display_external_refresh": "", "display_external_rotation": "", - "audio_out_volume": "", - "audio_in_volume": "", + "audio_out_volume": null, + "audio_in_volume": null, "fps": 30, "show_cursor": true, "highlight_clicks": false, diff --git a/config.json.default.bak b/config.json.default.bak new file mode 100644 index 0000000..0f64f81 --- /dev/null +++ b/config.json.default.bak @@ -0,0 +1,42 @@ +{ + "api_secret_key": "YWAAk39H2qH0edK6lPH0yg", + "api_remote_base_url": "https://api.oneskyit.com", + "api_local_base_url": "http://api.localhost:5001", + "remote_db_server": "db.oneskyit.com", + "remote_db_port": "3306", + "remote_db_name": "onesky_ams_test", + "remote_db_username": "username_here", + "remote_db_password": "password_here", + "local_db_server": "db.localhost", + "local_db_port": "3306", + "local_db_name": "onesky_ams_test", + "local_db_username": "username_here", + "local_db_password": "password_here", + "local_file_cache":"file_cache", + "display_arrangement": "mirror_and_extend", + "display_builtin_resolution": "", + "display_builtin_refresh": "", + "display_builtin_rotation": "", + "display_external_resolution": "", + "display_external_refresh": "", + "display_external_rotation": "", + "audio_out_volume": "", + "audio_in_volume": "", + "fps": 30, + "show_cursor": true, + "highlight_clicks": false, + "screen_id": null, + "audio_device_id": null, + "known_builtin_screen_ids": [69732032, 69733952, 69733248], + "known_builtin_audio_device_ids": [ "AppleHDAEngineInput:1B,0,1,0:1", "BuiltInMicrophoneDevice" ], + "video_codec": "h264", + "recordings_path": "[home]/recordings", + "base_filename": "recording", + "aperture_bin_path": null, + "recording_start_datetime": "2019-10-12 01:01:01Z", + "recording_stop_datetime": "2019-10-31 23:59:59Z", + "recordings_datetime": [ + { "start": "2019-10-11T09:50:00.00", "stop": "2019-10-11T10:15:00.00" }, + { "start": "2019-10-11T10:50:00.00", "stop": "2019-10-11T11:15:00.00" } + ] +} diff --git a/package-lock.json b/package-lock.json index 7c657be..5441605 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@electron/get": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.7.2.tgz", - "integrity": "sha512-LSE4LZGMjGS9TloDx0yO44D2UTbaeKRk+QjlhWLiQlikV6J4spgDCjb6z4YIcqmPAwNzlNCnWF4dubytwI+ATA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.8.0.tgz", + "integrity": "sha512-p9q2KNfN12lhLzcSJwjOKbHHZcPCP+DMHXWLE/nFzJfyFDiPFAvOgLdKwz8WvGfzn2Y8YtYk1BhqvaNRow78ag==", "requires": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -48,16 +48,16 @@ } }, "@types/node": { - "version": "12.12.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.20.tgz", - "integrity": "sha512-VAe+DiwpnC/g448uN+/3gRl4th0BTdrR9gSLIOHA+SUQskaYZQDOHG7xmjiE7JUhjbXnbXytf6Ih+/pA6CtMFQ==" + "version": "12.12.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.29.tgz", + "integrity": "sha512-yo8Qz0ygADGFptISDj3pOC9wXfln/5pQaN/ysDIzOaAWXt73cNHmtEC8zSO2Y+kse/txmwIAJzkYZ5fooaS5DQ==" }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -106,17 +106,16 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", - "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" + "follow-redirects": "1.5.10" } }, "bcrypt-pbkdf": { @@ -156,9 +155,9 @@ } }, "boolean": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.0.tgz", - "integrity": "sha512-OElxJ1lUSinuoUnkpOgLmxp0DC4ytEhODEL6QJU0NpxE/mI4rUSh8h1P1Wkvfi3xQEBcxXR2gBIPNYNuaFcAbQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz", + "integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==", "optional": true }, "buffer-from": { @@ -260,9 +259,9 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "core-js": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.5.0.tgz", - "integrity": "sha512-Ifh3kj78gzQ7NAoJXeTu+XwzDld0QRIwjBLRqAMhuLhP3d2Av5wmgE9ycfnvK6NAEjTkQ1sDPeoEZAWO3Hx1Uw==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", "optional": true }, "core-util-is": { @@ -300,9 +299,9 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "defer-to-connect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.1.tgz", - "integrity": "sha512-J7thop4u3mRTkYRQ+Vpfwy2G5Ehoy82I14+14W4YMDLKdWloI9gSzRbV30s/NckQGVJtPkWNcW4oMAUigTdqiQ==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, "define-properties": { "version": "1.1.3", @@ -349,9 +348,9 @@ } }, "electron": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/electron/-/electron-7.1.5.tgz", - "integrity": "sha512-jagsvNz6Axu2Lsp5PqDgkcR+4BwoPP9YyLgMu9lhpFNRNKpNgfsEqUbtNolkFN/TtmWjxGO+iioWRrGqZHmJ8w==", + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/electron/-/electron-7.1.14.tgz", + "integrity": "sha512-y9Nbja4rl+5fPVw9e/lFudwRax3a+jenzS7WXzUkjF7GI8YFxNH2eH9K9PZFNuSwc/OOCja2ul70+D44tKTQEw==", "requires": { "@electron/get": "^1.0.1", "@types/node": "^12.0.12", @@ -426,9 +425,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" }, "fast-json-stable-stringify": { "version": "2.1.0", @@ -528,24 +527,24 @@ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" }, "global-agent": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.7.tgz", - "integrity": "sha512-ooK7eqGYZku+LgnbfH/Iv0RJ74XfhrBZDlke1QSzcBt0bw1PmJcnRADPAQuFE+R45pKKDTynAr25SBasY2kvow==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.8.tgz", + "integrity": "sha512-VpBe/rhY6Rw2VDOTszAMNambg+4Qv8j0yiTNDYEXXXxkUNGWLHp8A3ztK4YDBbFNcWF4rgsec6/5gPyryya/+A==", "optional": true, "requires": { "boolean": "^3.0.0", - "core-js": "^3.4.1", + "core-js": "^3.6.4", "es6-error": "^4.1.1", - "matcher": "^2.0.0", - "roarr": "^2.14.5", - "semver": "^6.3.0", + "matcher": "^2.1.0", + "roarr": "^2.15.2", + "semver": "^7.1.2", "serialize-error": "^5.0.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==", "optional": true } } @@ -629,9 +628,9 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "http-cache-semantics": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", - "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "http-signature": { "version": "1.2.0", @@ -653,11 +652,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -754,16 +748,16 @@ } }, "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" }, "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "requires": { - "mime-db": "1.42.0" + "mime-db": "1.43.0" } }, "mimic-response": { @@ -953,9 +947,9 @@ "optional": true }, "psl": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz", - "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" }, "pump": { "version": "3.0.0", @@ -1009,9 +1003,9 @@ } }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -1020,7 +1014,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -1030,7 +1024,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } @@ -1044,14 +1038,14 @@ } }, "roarr": { - "version": "2.14.6", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.14.6.tgz", - "integrity": "sha512-qjbw0BEesKA+3XFBPt+KVe1PC/Z6ShfJ4wPlx2XifqH5h2Lj8/KQT5XJTsy3n1Es5kai+BwKALaECW3F70B1cg==", + "version": "2.15.2", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.2.tgz", + "integrity": "sha512-jmaDhK9CO4YbQAV8zzCnq9vjAqeO489MS5ehZ+rXmFiPFFE6B+S9KYO6prjmLJ5A0zY3QxVlQdrIya7E/azz/Q==", "optional": true, "requires": { "boolean": "^3.0.0", "detect-node": "^2.0.4", - "globalthis": "^1.0.0", + "globalthis": "^1.0.1", "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" @@ -1252,19 +1246,12 @@ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "truncate-utf8-bytes": { @@ -1362,9 +1349,9 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "verror": { "version": "1.10.0", diff --git a/package.json b/package.json index 05b7792..1a218a8 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,12 @@ "author": "", "license": "ISC", "dependencies": { - "axios": "^0.19.0", - "electron": "^7.1.5", + "axios": "^0.19.2", + "electron": "^7.1.14", "fs": "0.0.1-security", "os": "^0.1.1", "path": "^0.12.7", - "request": "^2.88.0", + "request": "^2.88.2", "screen": "^0.2.10", "usb": "^1.6.2" }