Files
OSIT-AE-App-Native-Electron/app/js/module_app_idb 2020-01-24.js.bak
2020-01-24 19:51:14 -05:00

369 lines
16 KiB
JavaScript

const os = require('os');
const path = require('path');
const fs = require('fs');
const { ipcRenderer } = require('electron');
exports.launcher_cache_check = async function (launcher, api_base_url, api_temporary_token, host_file_cache_path) {
if (typeof launcher.event === 'undefined') {
launcher.event = await api.get_event_details(axios, launcher.event_id);
tbl_event.setItem(launcher.event.id.toString(), launcher.event);
/*
.then(function (data) {
console.log(data.id);
idbKeyval.set(data.id, data, tbl_event);
//for (var i in response) {
//var event_record = data[i];
//idbKeyval.set(response[i].id, response[i], tbl_event);
//}
});
*/
}
if (typeof launcher.location === 'undefined') {
launcher.location = await api.get_event_location_details(axios, launcher.event_id, launcher.event_location_id);
tbl_event_location.setItem(launcher.location.id.toString(), launcher.location);
}
if (typeof launcher.event_files === 'undefined') {
console.log('Check for global event files.');
let for_id = launcher.event_id;
launcher.event_files = await api.get_files_for_type_for_id(axios, 'event', for_id);
for (var i in launcher.event_files) {
console.log('f: ('+launcher.event_files[i].event_file_id+') '+launcher.event_files[i].event_file_filename+' ***')
tbl_event_file.setItem(launcher.event_files[i].event_file_id.toString(), launcher.event_files[i]);
file_id = launcher.event_files[i].event_file_id; // NOTE: the .id is the hosted_file.id!
let filename = launcher.event_files[i].hash_sha256+'.file';
save_path = path.join(host_file_cache_path, filename);
if (fs.existsSync(save_path)) {
console.log('Local file already exists: '+save_path);
} else {
console.log('File not found locally. Downloading file: '+save_path);
let api_endpoint = '/event/file/'+file_id+'/download';
ipcRenderer.send('download_file', api_base_url, api_endpoint, api_temporary_token, save_path); // Must download file using main node.js thread.
}
}
} else {
console.log('No check for global event files');
}
if (typeof launcher.location_files === 'undefined') {
console.log('Check for location specific files.');
let for_id = launcher.event_location_id;
launcher.location_files = await api.get_files_for_type_for_id(axios, 'location', for_id);
for (var i in launcher.location_files) {
console.log('f: ('+launcher.location_files[i].event_file_id+') '+launcher.location_files[i].event_file_filename+' ***')
tbl_event_file.setItem(launcher.location_files[i].event_file_id.toString(), launcher.location_files[i]);
file_id = launcher.location_files[i].event_file_id; // NOTE: the .id is the hosted_file.id!
let filename = launcher.location_files[i].hash_sha256+'.file';
save_path = path.join(host_file_cache_path, filename);
if (fs.existsSync(save_path)) {
console.log('Local file already exists: '+save_path);
} else {
console.log('File not found locally. Downloading file: '+save_path);
let api_endpoint = '/event/file/'+file_id+'/download';
ipcRenderer.send('download_file', api_base_url, api_endpoint, api_temporary_token, save_path); // Must download file using main node.js thread.
}
}
} else {
console.log('No check for location specific files.');
}
if (typeof launcher.sessions === 'undefined') {
console.log('Check for location sessions.');
launcher.sessions = await api.get_event_location_sessions(axios, launcher.event_id, launcher.event_location_id);
for (var i in launcher.sessions) {
console.log('*** '+launcher.sessions[i].name+' ***')
tbl_event_session.setItem(launcher.sessions[i].id.toString(), launcher.sessions[i]);
// Check for session files start
if (typeof launcher.sessions[i].files === 'undefined') {
console.log('Check for session files.');
let for_id = launcher.sessions[i].id;
launcher.sessions[i].files = await api.get_files_for_type_for_id(axios, 'session', for_id);
if (launcher.sessions[i].files) {
console.log('Session files found.');
for (var j in launcher.sessions[i].files) {
console.log('f: ('+launcher.sessions[i].files[j].event_file_id+') '+launcher.sessions[i].files[j].event_file_filename+' ***');
tbl_event_file.setItem(launcher.sessions[i].files[j].event_file_id.toString(), launcher.sessions[i].files[j]);
file_id = launcher.sessions[i].files[j].event_file_id; // NOTE: the .id is the hosted_file.id!
let filename = launcher.sessions[i].files[j].hash_sha256+'.file';
save_path = path.join(host_file_cache_path, filename);
if (fs.existsSync(save_path)) {
console.log('Local file already exists: '+save_path);
} else {
console.log('File not found locally. Downloading file: '+save_path);
let api_endpoint = '/event/file/'+file_id+'/download';
ipcRenderer.send('download_file', api_base_url, api_endpoint, api_temporary_token, save_path); // Must download file using main node.js thread.
}
}
} else {
console.log('No session files found.');
}
} else {
console.log('No check for session files.');
}
// Check for session files end
// Get session presentations and associated files
launcher.sessions[i].presentations = await api.get_session_presentations(axios, launcher.event_id, launcher.sessions[i].id);
for (var j in launcher.sessions[i].presentations) {
console.log('* '+launcher.sessions[i].presentations[j].name);
tbl_event_presentation.setItem(launcher.sessions[i].presentations[j].id.toString(), launcher.sessions[i].presentations[j]);
// Check for presentation files start
if (typeof launcher.sessions[i].presentations[j].files === 'undefined') {
console.log('Check for presentation files.');
let for_id = launcher.sessions[i].presentations[j].id;
launcher.sessions[i].presentations[j].files = await api.get_files_for_type_for_id(axios, 'presentation', for_id);
if (launcher.sessions[i].presentations[j].files) {
console.log('Presentation files found.');
for (var k in launcher.sessions[i].presentations[j].files) {
console.log('f: ('+launcher.sessions[i].presentations[j].files[k].event_file_id+') '+launcher.sessions[i].presentations[j].files[k].event_file_filename+' ***');
tbl_event_file.setItem(launcher.sessions[i].presentations[j].files[k].event_file_id.toString(), launcher.sessions[i].presentations[j].files[k]);
file_id = launcher.sessions[i].presentations[j].files[k].event_file_id; // NOTE: the .id is the hosted_file.id!
let filename = launcher.sessions[i].presentations[j].files[k].hash_sha256+'.file';
save_path = path.join(host_file_cache_path, filename);
if (fs.existsSync(save_path)) {
console.log('Local file already exists: '+save_path);
} else {
console.log('File not found locally. Downloading file: '+save_path);
let api_endpoint = '/event/file/'+file_id+'/download';
ipcRenderer.send('download_file', api_base_url, api_endpoint, api_temporary_token, save_path); // Must download file using main node.js thread.
}
}
} else {
console.log('No presentation files found.');
}
} else {
console.log('No check for presentation files.');
}
// Check for presentation files end
// Get session presentations presenters and associated files
//let event_presentation_id = launcher.sessions[i].presentations[j].id;
launcher.sessions[i].presentations[j].presenters = await api.get_presentation_presenters(axios, launcher.event_id, launcher.sessions[i].id, launcher.sessions[i].presentations[j].id);
for (var k in launcher.sessions[i].presentations[j].presenters) {
console.log('-- '+launcher.sessions[i].presentations[j].presenters[k].given_name+' '+launcher.sessions[i].presentations[j].presenters[k].family_name)
tbl_event_presenter.setItem(launcher.sessions[i].presentations[j].presenters[k].id.toString(), launcher.sessions[i].presentations[j].presenters[k]);
// Check for presenter files start
if (typeof launcher.sessions[i].presentations[j].presenters[k].files === 'undefined') {
console.log('Check for presenter files.');
let for_id = launcher.sessions[i].presentations[j].presenters[k].id;
launcher.sessions[i].presentations[j].presenters[k].files = await api.get_files_for_type_for_id(axios, 'presenter', for_id);
if (launcher.sessions[i].presentations[j].presenters[k].files) {
console.log('Presenter files found.');
for (var l in launcher.sessions[i].presentations[j].presenters[k].files) {
console.log('f: ('+launcher.sessions[i].presentations[j].presenters[k].files[l].event_file_id+') '+launcher.sessions[i].presentations[j].presenters[k].files[l].event_file_filename+' ***');
tbl_event_file.setItem(launcher.sessions[i].presentations[j].presenters[k].files[l].event_file_id.toString(), launcher.sessions[i].presentations[j].presenters[k].files[l]);
file_id = launcher.sessions[i].presentations[j].presenters[k].files[l].event_file_id; // NOTE: the .id is the hosted_file.id!
let filename = launcher.sessions[i].presentations[j].presenters[k].files[l].hash_sha256+'.file';
save_path = path.join(host_file_cache_path, filename);
if (fs.existsSync(save_path)) {
console.log('Local file already exists: '+save_path);
} else {
console.log('File not found locally. Downloading file: '+save_path);
let api_endpoint = '/event/file/'+file_id+'/download';
ipcRenderer.send('download_file', api_base_url, api_endpoint, api_temporary_token, save_path); // Must download file using main node.js thread.
}
}
} else {
console.log('No presenter files found.');
}
} else {
console.log('No check for presenter files.');
}
// Check for presenter files end
}
}
}
} else {
console.log('No check for location sessions.');
}
console.log('Location cache check finished.');
return true;
}
exports.idb_to_launcher = async function idb_to_launcher() {
//tbl_example.iterate(tbl_check, tbl_check_success, tbl_check_error); //tbl_check(value, key, iteration)
//let launcher = new Object();
// Look for *events*
let tmp_event = [];
tbl_event.iterate(function(event_value, key, iteration) {
tmp_event.push(event_value);
});
launcher.event = tmp_event;
// Look for *event files*
let tmp_event_file = []
tbl_event_file.iterate(function(file_value, key, iteration) {
//console.log('event id: '+launcher.event[0].id+' -> file_id: '+file_value.id+'for type: '+file_value.for_type+' for id: '+file_value.id);
if (file_value.for_type == 'event' && launcher.event[0].id == file_value.for_id) {
tmp_event_file.push(file_value);
}
}).then(function() {
console.log('idb_to_launcher: Iterate tbl_event_file complete')
});
launcher.event_file = tmp_event_file;
// Look for *locations*
let tmp_event_location = []
tbl_event_location.iterate(function(location_value, key, iteration) {
tmp_event_location.push(location_value);
});
launcher.location = tmp_event_location;
// Look for *event location files*
let tmp_event_location_file = []
tbl_event_file.iterate(function(file_value, key, iteration) {
if (file_value.for_type == 'location' && launcher.location[0].id == file_value.for_id) {
tmp_event_location_file.push(file_value);
}
});
launcher.location_file = tmp_event_location_file;
// Look for *sessions*
let tmp_event_session = []
tbl_event_session.iterate(function(session_value, session_key, session_iteration) {
//console.log('session id: '+session_value.id);
// Look for *session files*
session_value.file = [];
tbl_event_file.iterate(function(session_file_value, session_file_key, session_file_iteration) {
if (session_file_value.for_type == 'session' && session_value.id == session_file_value.for_id) {
//console.log('session id: '+session_value.id+' -> file id: '+session_file_value.id);
session_value.file.push(session_file_value)
//tmp_event_session_file.push(session_file_value);
}
});
// Look for *presentations per session*
session_value.presentation = [];
tbl_event_presentation.iterate(function(presentation_value, presentation_key, presentation_iteration) {
if (session_value.id == presentation_value.event_session_id) {
//console.log('session id: '+session_value.id+' -> presentation id: '+presentation_value.id);
// Look for *presentation files*
presentation_value.file = [];
tbl_event_file.iterate(function(presentation_file_value, presentation_file_key, presentation_file_iteration) {
if (presentation_file_value.for_type == 'presentation' && presentation_value.id == presentation_file_value.for_id) {
presentation_value.file.push(presentation_file_value);
}
});
// Look for *presenters per presentation*
presentation_value.presenter = [];
tbl_event_presenter.iterate(function(presenter_value, presenter_key, presenter_iteration) {
if (presentation_value.id == presenter_value.event_presentation_id) {
//console.log('presentation id: '+presentation_value.id+' -> presenter id: '+presenter_value.id);
// Look for *presenter files*
presenter_value.file = [];
tbl_event_file.iterate(function(presenter_file_value, presenter_file_key, presenter_file_iteration) {
if (presenter_file_value.for_type == 'presenter' && presenter_value.id == presenter_file_value.for_id) {
presenter_value.file.push(presenter_file_value);
}
});
//NOTE for some reason this is adding duplicate presenters to a session
//NOTE is this iterating twice or something???
/*
tbl_event_file.iterate(function(presenter_file_value, key, iteration) {
});
*/
presentation_value.presenter.push(presenter_value);
}
});
//NOTE add in presenters and then presenter's files
session_value.presentation.push(presentation_value);
}//);
});
//});
tmp_event_session.push(session_value);
}).then(function() {
console.log('idb_to_launcher: Iterate tbl_event_session complete')
});
launcher.session = tmp_event_session;
/*
console.log('v2 idb to launcher object: ***');
console.log(launcher);
console.log('v2 idb to launcher object: ^^^');
*/
return true;
}
exports.check_file_cache = async function () {
console.log('Checking the local file cache against the remote server.');
tbl_event_file.iterate(function(file_value, key, iteration) {
if (file_value.event_location_id == event_location_id) {
console.log('f: ('+file_value.event_file_id+') '+file_value.event_file_filename+' ***')
file_id = file_value.event_file_id; // NOTE: the .id is the hosted_file.id!
let filename = file_value.hash_sha256+'.file';
save_path = path.join(host_file_cache_path, filename);
if (fs.existsSync(save_path)) {
console.log('Local file already exists: '+save_path);
} else {
console.log('File not found locally. Downloading file: '+save_path);
let api_endpoint = '/event/file/'+file_id+'/download';
ipcRenderer.send('download_file', api_base_url, api_endpoint, api_temporary_token, save_path); // Must download file using main node.js thread.
}
}
});
}
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);
}