Working on network online offline detection

This commit is contained in:
Scott Idem
2020-03-04 16:36:49 -05:00
parent 7bb17de8f6
commit e3c297fb98
11 changed files with 495 additions and 174 deletions

View File

@@ -61,6 +61,9 @@
<div id="reset1" class="btn btn-warning reset" data-spy="affix" data-offset-top="200">
<span class="fas fa-sync"></span> Reset Launcher
</div>
<div id="network_status1" class="btn btn-success network_status">
<span class="fas fa-globe"></span> Network Status
</div>
</div>
<div id="launcher_sessions" class="launcher_sessions col"></div> <!-- end location details div -->
@@ -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() {