Creating IDB direct to UI render. Version 2 of rendering the UI.

This commit is contained in:
Scott Idem
2020-01-31 11:34:44 -05:00
parent 5bd557e743
commit 9fd21b5221
6 changed files with 893 additions and 292 deletions

View File

@@ -226,30 +226,22 @@
});
*/
//let create_load_idb_result = idb.create_load_idb();
//console.log(tbl_event_session_key_count);
const api_auth_loop_interval = 100; // only runs on start up
const open_tables_loop_interval = 10; // only runs on start up
/*
// Check if table exists by trying to interate.
function tbl_check(value, key, iteration) {
console.log(value);
}
function tbl_check_success(result) {
console.log(result);
}
function tbl_check_error(result) {
console.log(result);
}
tbl_event_session.iterate(tbl_check, tbl_check_success, tbl_check_error); //tbl_check(value, key, iteration)
*/
const update_idb_loop_interval = 100; // loop forever; update when check datetime has passed
const idb_to_launcher_loop_interval = 250; // loop forever; only run when one or more tables are updated
const update_render_loop_interval = 1000; // 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
// Axios needs to authenticate first
let axios_headers_set = false;
//const loading_loop_interval = app_config.loading_loop_interval; // in milliseconds
const loading_loop_interval = 500;
//const main_loop_interval = app_config.main_loop_interval; // in milliseconds
const main_loop_interval = 1500; //10000; // 10 seconds
// IDB tables need to be opened
let idb_tables_opened = false;
// check periods and datetimes for update_idb_loop
idb_event_check_period = app_config.idb_event_check_period;
idb_event_check_datetime = Date.now();
idb_event_location_check_period = app_config.idb_event_location_check_period;
@@ -263,31 +255,45 @@
idb_event_file_check_period = app_config.idb_event_file_check_period;
idb_event_file_check_datetime = Date.now();
const idb_check_period = app_config.idb_check_period; //30000; // 60 seconds
let run_update_idb = false;
let run_idb_to_launcher = false;
let idb_to_launcher_in_progress = false;
let safe_to_render_launcher = false; // currently only set to true in module_app_idb.js
let run_check_file_cache = false;
//const loading_loop_interval = app_config.loading_loop_interval; // in milliseconds
//const loading_loop_interval = 500;
//const main_loop_interval = app_config.main_loop_interval; // in milliseconds
//const main_loop_interval = 1500; //10000; // 10 seconds
//const idb_check_period = app_config.idb_check_period; //30000; // 60 seconds
// The datetime is when it should be checked again, not when it was last checked.
// It may be good to split the object check period into event, location, session, presentation, presenter
let idb_check_datetime = Date.now(); // default to current datetime in ms
//let idb_check_datetime = Date.now(); // default to current datetime in ms
// The datetime is when it should be checked again, not when it was last checked.
// It may be good to split the file check period into event, location, session, presentation, presenter
let launcher_files_check_datetime = Date.now(); // default to current datetime in ms
//let launcher_files_check_datetime = Date.now(); // default to current datetime in ms
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
//const host_file_cache_check_period = app_config.host_file_cache_check_period; //30000; // 30 seconds
let launcher = new Object(); // This will create the something like location > sessions and location files > presenters and session files > presenter files
let idb_to_launcher_result = false;
//let launcher_cache_check_results = false;
let launcher_render_results = false;
let run_idb_to_launcher = false;
let run_check_file_cache = false;
//let run_check_file_cache = false;
let run_render_launcher = false;
let axios_headers_set = false;
let idb_tables_opened = false;
let idb_tables_have_records = false;
//let safe_to_render_launcher = false;
// Development variables:
//let account_id = 12;
@@ -298,178 +304,61 @@
//let event_presenter_id = 2539;
//let event_file_id = 28;
//console.log(tbl_event_session);
//console.log(tbl_event_file);
/*
while (!axios_headers_set && !idb_tables_opened && !idb_tables_have_records) {
var api_auth_loop = setInterval(function() {
if (typeof axios.defaults.headers.common['Authorization'] !== 'undefined'
&& axios.defaults.headers.common['Authorization'] != null) {
axios_headers_set = true;
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);
var open_tables_loop = setInterval(function() {
if (tbl_event && tbl_event_location && tbl_event_session
&& tbl_event_presentation && tbl_event_presenter
&& tbl_event_file) {
idb_tables_opened = true;
console.log('IDB tables have been opened');
} else {
idb_tables_opened = false;
console.log('Waiting for IDB tables to be opened');
}
if (tbl_event_key_count && tbl_event_location_key_count && tbl_event_session_key_count
&& tbl_event_presentation_key_count && tbl_event_presenter_key_count
&& tbl_event_file_key_count) {
idb_tables_have_records = true;
console.log('All IDB tables have records.');
} else {
console.log('No IDB records for one of the tables.');
}
//someanimation();
setTimeout(function(){
console.log('looping....');
}, 250);
};
*/
var load_cached_data_loop = setInterval(function() {
if (tbl_event && tbl_event_location && tbl_event_session
&& tbl_event_presentation && tbl_event_presenter
&& tbl_event_file) {
idb_tables_opened = true;
console.log('IDB tables have been opened');
clearInterval(open_tables_loop);
if (tbl_event_key_count != null && tbl_event_location_key_count != null && tbl_event_session_key_count != null
&& tbl_event_presentation_key_count != null && tbl_event_presenter_key_count != null
&& tbl_event_file_key_count != null) {
idb_tables_have_records = true;
console.log('All IDB tables have been checked for records.');
console.log('Running idb_to_launcher with cached data.');
idb.idb_to_launcher().then(function(response) {
console.log('Launcher object has now been created with cached data.');
console.log(response);
clearInterval(load_cached_data_loop);
launcher = response;
//let launcher_tmp = launcher;
//render_launcher_result = ui.render_launcher(response);
console.log('The launcher has now been rendered with cached data. ***');
});
/*
idb_to_launcer_result.then(function (response) {
console.log('Launcher object has now been created with cached data.');
console.log(response);
clearInterval(load_cached_data_loop);
launcher = response;
//let launcher_tmp = launcher;
render_launcher_result = ui.render_launcher(response);
console.log('The launcher has now been rendered with cached data. ***');
//render_launcher_result.then(function (response) {
// console.log('The launcher has now been rendered with cached data. ***');
// clearInterval(load_cached_data_loop);
//});
});
*/
/*
let launcher_new = idb.idb_to_launcher();
launcher_new_result.then
render_launcher_result = ui.render_launcher(launcher_new);
if (render_launcher_result) {
clearInterval(load_cached_data_loop);
} else {
console.log('Launcher object not really ready yet...');
}
//render_launcher_result.then(function (response) {
// console.log('The launcher has now been rendered with cached data. ***');
//});
*/
} else {
//console.log('One or more tables did not have any records. Moving on...');
console.log('Still waiting for the table record counts.');
}
idb_tables_opened = true;
run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt
} else {
console.log('IDB tables have not yet been created or opened');
idb_tables_opened = false;
console.log('Waiting for IDB tables to be opened');
}
}, 1000);
/*
function load_cached_data () {
idb_tables_opened = true;
console.log('IDB tables have been opened');
if (tbl_event_key_count && tbl_event_location_key_count && tbl_event_session_key_count
&& tbl_event_presentation_key_count && tbl_event_presenter_key_count
&& tbl_event_file_key_count) {
idb_tables_have_records = true;
console.log('All IDB tables have records.');
console.log('Running idb_to_launcher with cached data.');
idb_to_launcher_result = idb.idb_to_launcher(launcher);
idb_to_launcher_result.then(function (response) {
console.log('Launcher object has now been created with cached data.');
console.log(launcher);
let launcher_tmp = launcher;
render_launcher_result = ui.render_launcher(launcher_tmp);
render_launcher_result.then(function (response) {
console.log('The launcher has now been rendered with cached data. ***');
});
});
}
}
var load_cached_data_results = load_cached_data();
*/
}, open_tables_loop_interval);
// NOTE This loop needs to end at some point...
var load_auth_loop = setInterval(function() {
if (typeof axios.defaults.headers.common['Authorization'] !== 'undefined'
&& axios.defaults.headers.common['Authorization'] != null) {
axios_headers_set = true;
console.log('Axios headers have been set.');
clearInterval(load_auth_loop);
} else {
axios_headers_set = false;
console.log('Waiting for Axios headers to be set.');
}
}, loading_loop_interval);
setInterval(async function() {
if (axios_headers_set && idb_tables_opened && idb_tables_have_records) {
var update_idb_loop = setInterval(async function() {
//if (run_update_idb) {
// console.log('run_update_idb is set to true');
//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 (idb_event_check_datetime < Date.now()) {
console.log('Time to check events');
let v2_account_events = await api.v2_get_account_events(axios, account_id);
for (var i in v2_account_events) {
tbl_event.setItem(v2_account_events[i].id.toString(), v2_account_events[i]);
}
run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt
idb_event_check_datetime = Date.now() + idb_event_check_period;
let v2_account_events = await api.v2_get_account_events(axios, account_id)
.then(function (response) {
for (var i in response) {
tbl_event.setItem(response[i].id.toString(), response[i]);
}
run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt
safe_to_render_launcher = false; // Set to false so that the launcher render only starts after the launcher object has updated
idb_event_check_datetime = Date.now() + idb_event_check_period;
})
.catch(function (error) {
console.log('Trying to check events. Something went wrong. Expired token?');
console.log(error);
});
}
if (idb_event_location_check_datetime < Date.now()) {
@@ -479,6 +368,7 @@
tbl_event_location.setItem(v2_event_locations[i].id.toString(), v2_event_locations[i]);
}
run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt
safe_to_render_launcher = false; // Set to false so that the launcher render only starts after the launcher object has updated
idb_event_location_check_datetime = Date.now() + idb_event_location_check_period;
}
@@ -489,6 +379,7 @@
tbl_event_session.setItem(v2_event_sessions[i].id.toString(), v2_event_sessions[i]);
}
run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt
safe_to_render_launcher = false; // Set to false so that the launcher render only starts after the launcher object has updated
idb_event_session_check_datetime = Date.now() + idb_event_session_check_period;
}
@@ -499,6 +390,7 @@
tbl_event_presentation.setItem(v2_event_presentations[i].id.toString(), v2_event_presentations[i]);
}
run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt
safe_to_render_launcher = false; // Set to false so that the launcher render only starts after the launcher object has updated
idb_event_presentation_check_datetime = Date.now() + idb_event_presentation_check_period;
}
@@ -509,6 +401,7 @@
tbl_event_presenter.setItem(v2_event_presenters[i].id.toString(), v2_event_presenters[i]);
}
run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt
safe_to_render_launcher = false; // Set to false so that the launcher render only starts after the launcher object has updated
idb_event_presenter_check_datetime = Date.now() + idb_event_presenter_check_period;
}
@@ -519,109 +412,124 @@
tbl_event_file.setItem(v2_event_files[i].event_file_id.toString(), v2_event_files[i]);
}
run_idb_to_launcher = true; // Set to true so that the launcher object is rebuilt
safe_to_render_launcher = false; // Set to false so that the launcher render only starts after the launcher object has updated
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;
}
if (run_idb_to_launcher) {
console.log('Flag to run idb_to_launcher has been set to true.');
idb_to_launcher_result = idb.idb_to_launcher(launcher);
idb_to_launcher_result.then(function (response) {
console.log('Launcher object has now been updated.');
console.log(launcher);
run_idb_to_launcher = false;
run_render_launcher = true; // Set to true so that the launcher will be rendered again
});
}
if (run_check_file_cache) {
console.log('Flag to run check_file_cache has been set to true.');
check_file_cache_result = idb.check_file_cache();
check_file_cache_result.then(function (response) {
console.log('Cached files have now been updated.');
run_check_file_cache = false;
});
}
if (run_render_launcher) {
console.log('Flag to run render_launcher has been set to true.');
let launcher_tmp = launcher;
/*
//render_launcher_result = ui.render_launcher(launcher_tmp);
render_launcher_result.then(function (response) {
console.log('The launcher has now been rendered.');
run_render_launcher = false;
});
*/
// NOTE This is a terrible way to work around the page refreshing and blanking out.
setTimeout(() => {
render_launcher_result = ui.render_launcher(launcher_tmp);
render_launcher_result.then(function (response) {
console.log('The launcher has now been rendered.');
run_render_launcher = false;
});
}, 100);
}
/*
else {
console.log('index.html: v2 idb_to_launcher result is true ***');
if (idb_check_datetime < Date.now()) {
console.log('Render launcher...');
launcher_render_results = await ui.launcher_render(launcher);
idb_check_datetime = Date.now() + idb_check_period;
} else {
console.log('Waiting to render launcher again...');
}
}
*/
current_datetime = Date.now();
//let launcher_cache_check_results = false;
/*
if (idb_check_datetime < current_datetime) {
launcher_cache_check_results = idb.launcher_cache_check(launcher, api_base_url, api_temporary_token, host_file_cache_path);
launcher_cache_check_results.then(function (response) {
console.log(launcher);
idb_check_datetime = Date.now() + idb_check_period;
launcher_render_results = ui.launcher_render(launcher);
});
}
*/
} else {
console.log('Waiting '+main_loop_interval+'ms to see if Authorization header is set, tables are opened, and record counts have been done.');
console.log('Waiting for the Axios headers to be set and/or IDB tables opened...');
}
}, main_loop_interval);
//} else {
// console.log('run_update_idb is set to false');
//}
}, update_idb_loop_interval);
var idb_to_launcher_loop = setInterval(function() {
if (run_idb_to_launcher) {
console.log('FLAG: run_idb_to_launcher='+run_idb_to_launcher);
if (tbl_event_key_count != null && tbl_event_location_key_count != null && tbl_event_session_key_count != null
&& tbl_event_presentation_key_count != null && tbl_event_presenter_key_count != null
&& tbl_event_file_key_count != null) {
console.log('All IDB tables have records. Going to create/update the launcher object now...');
idb_tables_have_records = true;
run_idb_to_launcher = false;
if (!idb_to_launcher_in_progress) {
console.log('idb_to_launcher is NOT in progress');
let idb_to_launcher_result = idb.idb_to_launcher().then(function(response) {
console.log('idb_to_launcher is complete... I think?');
//console.log('*** idb_to_launcher response: *** Launcher object has now been created/updated with IDB data.');
//console.log(response);
//clearInterval(idb_to_launcher_loop);
//launcher = response;
//safe_to_render_launcher = true;
run_render_launcher = true;
});
idb_to_launcher_in_progress = true;
} else {
console.log('idb_to_launcher IS in progress');
}
//console.log('*** idb_to_launcher_result: ***');
//console.log(idb_to_launcher_result);
} else {
console.log('Not all IDB tables have records. Setting flag to true update IDB database.');
idb_tables_have_records = false;
safe_to_render_launcher = false;
run_update_idb = true;
}
} else {
//console.log('run_idb_to_launcher is set to false');
}
}, idb_to_launcher_loop_interval);
var update_render_loop = setInterval(async function() {
//if (run_render_launcher) {
// console.log('Flag to run idb_to_launcher is set to true');
current_plus10_datetime = Date.now() + 10000; // add 10 seconds
let enough_time_to_render = false;
if (
current_plus10_datetime < idb_event_check_datetime
&& current_plus10_datetime < idb_event_location_check_datetime
&& current_plus10_datetime < idb_event_session_check_datetime
&& current_plus10_datetime < idb_event_presentation_check_datetime
&& current_plus10_datetime < idb_event_presenter_check_datetime
&& current_plus10_datetime < idb_event_file_check_datetime
) {
console.log('SETTING FLAG: enough_time_to_render=true');
enough_time_to_render = true;
} else {
//console.log(current_plus10_datetime);
//console.log(idb_event_check_datetime);
//console.log(idb_event_location_check_datetime);
//console.log(idb_event_session_check_datetime);
//console.log(idb_event_presentation_check_datetime);
//console.log(idb_event_presenter_check_datetime);
//console.log(idb_event_file_check_datetime);
enough_time_to_render = false;
}
</script>
<script>
console.log('FLAG: safe_to_render_launcher='+safe_to_render_launcher);
console.log('FLAG: enough_time_to_render='+enough_time_to_render);
if (safe_to_render_launcher && enough_time_to_render) {
let render_launcher_result = ui.render_launcher(launcher);
run_render_launcher = false; // Set to true so that the launcher will be rendered again
safe_to_render_launcher = false;
} else {
}
//} else {
// console.log('Flag to run idb_to_launcher is set to false');
//}
}, update_render_loop_interval);
var check_file_cache_loop = setInterval(async function() {
if (run_check_file_cache) {
console.log('FLAG: check_file_cache='+run_check_file_cache);
check_file_cache_result = idb.check_file_cache();
check_file_cache_result.then(function (response) {
console.log('Cached files have now been updated.');
});
run_check_file_cache = false;
} else {
//console.log('Flag to run check_file_cache is set to false');
}
}, check_file_cache_loop_interval);
//const custom_store = new idbKeyval.Store('custom_db', 'custom_store_name');
//idbKeyval.set('foo', 'bar', custom_store);
</script>
<!-- <script src="js/launcher.js"></script>-->