const path = require('path'); const { ipcRenderer } = require('electron'); exports.render_event_records = function () { console.log('Rendering event records...'); //console.log(tbl_event); //console.log(event_id); tbl_event.iterate(function(value, key, iteration) { if (value.id == event_id) { console.log('*** Event id ('+event_id+') found in table.'); document.getElementById('event_name').innerHTML = '@'+value.name; document.getElementById('event_files_menu').getElementsByTagName('ul')[0].id = 'event_files_list_'+value.id; } else { console.log('Event not it.'); } }).then(function() { console.log('idb_to_ui: Iterate tbl_event_file complete') tbl_event_complete = true; }); } exports.render_event_location_records = async function () { console.log('Rendering event location records...'); await tbl_event_location.iterate(function(value, key, iteration) { if (value.id == event_location_id) { console.log('*** Event location id ('+event_location_id+') found in table.'); document.getElementById('location_name').innerHTML = ' '+value.name; document.getElementById('location_files_menu').getElementsByTagName('ul')[0].id = 'location_files_list_'+value.id; /* let location_files_ul_node = document.createElement('UL'); location_files_ul_node.id = 'event_presentation_files_list_'+value.id; location_files_ul_node.className = 'list-group list-group-flush location_files location_files_list event_files_list'; document.getElementById('location_files_menu').appendChild(location_files_ul_node); */ } else { console.log('Event location not it.'); } }).then(function() { console.log('idb_to_ui: Iterate tbl_event_file complete') tbl_event_location_complete = true; }); return true; } exports.render_event_session_records = async function () { console.log('Rendering event session records...'); // First: update or add sessions tbl_event_session.iterate(function(value, key, iteration) { if (value.event_id == event_id && value.event_location_id == event_location_id) { console.log('*** Event session id ('+value.id+') is part of this event location.'); // *** ** * 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; } else { // Unhide the sessions menu if (document.getElementById('sessions_menu').classList.contains('d-none') ) { document.getElementById('sessions_menu').classList.remove('d-none'); document.getElementById('sessions_menu').classList.add('d-block'); } // 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-info d-flex justify-content-between align-items-center btn_view_session'; node.setAttribute('data-session_id', value.id); let text_node = document.createTextNode(value.name); node.appendChild(text_node); document.getElementById('sessions_menu').getElementsByTagName('ul')[0].appendChild(node); } let session_startdatetime = new Date(value.start_datetime); // *** ** * Checking if the session is already in the launcher sessions detail * ** *** 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'); } 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 h2_node = document.createElement('H2'); h2_node.className = 'session_title d-flex 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); let h2_span_node = document.createElement('SPAN'); h2_span_node.className = 'badge badge-pill badge-info'; let h2_span_text_node = document.createTextNode(dateFns.format(session_startdatetime, 'ddd h:mm A')); h2_span_node.appendChild(h2_span_text_node); h2_node.appendChild(h2_span_node); div_node.appendChild(h2_node); // Add placeholder cards for session files and session presentations // Files let files_div_node = document.createElement('DIV'); files_div_node.id = 'event_session_files_'+value.id; files_div_node.className = 'card session_files'; let files_header_div_node = document.createElement('DIV'); files_header_div_node.className = 'card-header'; let files_header_text_node = document.createTextNode('Session Files:'); files_header_div_node.appendChild(files_header_text_node); let files_body_div_node = document.createElement('DIV'); files_body_div_node.className = 'card-body'; let files_body_ul_node = document.createElement('UL'); files_body_ul_node.id = 'session_files_list_'+value.id; files_body_ul_node.className = 'list-group list-group-flush session_files_list event_files_list'; files_body_div_node.appendChild(files_body_ul_node); files_div_node.appendChild(files_header_div_node); files_div_node.appendChild(files_body_div_node); div_node.appendChild(files_div_node); // Presentations let presentations_div_node = document.createElement('DIV'); presentations_div_node.id = 'session_presentations_'+value.id; presentations_div_node.className = 'card session_presentations'; let presentations_header_div_node = document.createElement('DIV'); presentations_header_div_node.className = 'card-header'; let presentations_header_text_node = document.createTextNode('Presentations:'); presentations_header_div_node.appendChild(presentations_header_text_node); let presentations_body_div_node = document.createElement('DIV'); presentations_body_div_node.className = 'card-body'; let presentations_body_ul_node = document.createElement('UL'); presentations_body_ul_node.id = 'session_presentations_list_'+value.id; presentations_body_ul_node.className = 'list-group list-group-flush session_presentations_list'; presentations_body_ul_node.setAttribute('data-session_id', value.id); presentations_body_div_node.appendChild(presentations_body_ul_node); presentations_div_node.appendChild(presentations_header_div_node); presentations_div_node.appendChild(presentations_body_div_node); div_node.appendChild(presentations_div_node); document.getElementById('launcher_sessions').appendChild(div_node); } } else { //console.log('Event session not it.'); } }).then(function() { console.log('idb_to_ui: Iterate tbl_event_session complete'); tbl_event_session_complete = true; }).then(function() { // Second: remove sessions from the launcher sessions menu and sessions list // This is basing the removal of sessions only on the menu list of sessions. // In theory this should be safe as long as nothing gets out sync... console.log('Looking for removed sessions...'); let session_list_items = document.getElementById('sessions_menu').getElementsByTagName('ul')[0].childNodes; //console.log(session_list_items); let session_list = document.getElementById('sessions_menu').getElementsByTagName('ul')[0].children; if (session_list_items.length) { for (let i=0, len=session_list_items.length; i < len; i++) { console.log('Checking session_id='+session_list_items[i].getAttribute('data-session_id')); let session_id = session_list_items[i].getAttribute('data-session_id'); let session_valid = false; tbl_event_session.iterate(function(value, key, iteration) { //console.log(value.event_id+' ?= '+event_id+' : '+value.event_location_id+' ?= '+event_location_id+' : '+value.id+' ?= '+session_id); if (value.event_id == event_id && value.event_location_id == event_location_id && value.id == session_id) { // The session is still part of the event and the location session_valid = true; } else { // The session is no longer part of the event and or the location //console.log('Need to remove session id '+session_id); } }).then(function() { console.log('idb_to_ui: Iterate tbl_event_session looking for sessions to remove is complete') if (session_valid) { //console.log('Keep session id '+session_id); } else { console.log('Remove session id '+session_id); document.getElementById('menu_event_session_'+session_id).remove(); // Remove the node from the launcher sessions menu list document.getElementById('detail_session_'+session_id).remove(); // Remove the node from the launcher sessions list } }); } } }); // Third: re-index view session buttons // NOTE: Should this go in a .then() section? // NOTE: It might make even more sense to only have this done individually per add. Should also do a remove to keep things clean. //index_launcher_sessions('btn_view_session'); index_launcher_sessions('btn_view_session'); } exports.render_event_session_file_records = function (events) { console.log('Rendering event session file records...'); } exports.render_event_presentation_records = async function (events) { console.log('Rendering event presentation records...'); console.log('****************** Presentations ******************'); let launcher_sessions = document.getElementById('launcher_sessions').childNodes; //_list_items //console.log(launcher_sessions); for (let i=0, len=launcher_sessions.length; i < len; i++) { //for (let i in launcher_sessions) { console.log('Current launcher session_id='+launcher_sessions[i].getAttribute('data-session_id')); let session_id = launcher_sessions[i].getAttribute('data-session_id'); let presentations_list = launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].childNodes; //console.log(presentations_list); // First: update or delete presentations if (presentations_list.length) { console.log('Presentations listed under this session (id='+session_id+'). (launcher sessions loop i = '+i+')'); console.log(launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')); for (let j=0, len=presentations_list.length; j < len; j++) { console.log('Current launcher presentation_id='+presentations_list[j].getAttribute('data-presentation_id')); let presentation_id = presentations_list[j].getAttribute('data-presentation_id'); await tbl_event_presentation.iterate(function(value, key, iteration) { //console.log('*** 1: session_id='+session_id+' | presentation.event_session_id='+value.event_session_id+' | presentation_id='+presentation_id+' | presentation.id='+value.id+' (launcher sessions loop i='+i+')'); looping_tbl_event_presentation = true; if (session_id == value.event_session_id && presentation_id == value.id) { // Found presentation in that session. Updating... 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'); } else if (session_id != value.event_session_id && presentation_id == value.id) { // Found presentation in a session that it should not be in. Removing... console.log('Presentation exists but should not be part of this session. Removing...'); console.log('*** Presentation id ('+value.id+') is NOT part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); document.getElementById('event_presentation_'+presentation_id).remove(); // Remove the node from the launcher presentations list } else { //console.log('Not doing anything'); } }).then(function() { console.log('idb_to_ui: Iterate tbl_event_presentation looking for presentations to update or remove is complete'); looping_tbl_event_presentation = false; }); } } else { // Close for if presentations_list.length } // Close for if presentations_list.length // Now that the updates and removals have been done we need to add presentations. await tbl_event_presentation.iterate(function(value, key, iteration) { //console.log('*** 2: session_id='+session_id+' | presentation.event_session_id='+value.event_session_id+' | presentation.id='+value.id+' (launcher sessions loop i='+i+')'); looping_tbl_event_presentation = true; let add_presentation = true; if (session_id == value.event_session_id) { // This presentation should be part of the session. Adding if not there... presentations_list = launcher_sessions[i].getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].childNodes; console.log(presentations_list); if (presentations_list.length) { // One more presentations are already in this session. // Need to check if this one needs to be added. for (let j=0, len=presentations_list.length; j < len; j++) { let presentation_id = presentations_list[j].getAttribute('data-presentation_id'); if (presentation_id == value.id) { // Nothing here so it for sure needs to be added. add_presentation = false; } else { // Don't reset the add_presentation back to true } } } else { // Nothing here, so it for sure needs to be added. //add_presentation = true; } } else { add_presentation = false; } if (add_presentation) { // Presentation not found. Adding... console.log('Presentation was not found in the session but should be. Adding...'); console.log('Presentation id ('+value.id+') is part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); // Add the new presentation to the launcher presentation list let presentation_li_node = document.createElement('LI'); presentation_li_node.id = 'event_presentation_'+value.id; presentation_li_node.className = 'list-group-item event_presentation'; presentation_li_node.setAttribute('data-session_id', value.event_session_id); presentation_li_node.setAttribute('data-presentation_id', value.id); let presentation_li_heading_div_node = document.createElement('DIV'); presentation_li_heading_div_node.className = 'list-group-item-heading d-flex justify-content-between align-items-center'; let presentation_name_strong_node = document.createElement('STRONG'); let presentation_name_text_node= document.createTextNode(value.name); 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'; let presentation_startdatetime = new Date(value.start_datetime); let presentation_heading_span_text_node = document.createTextNode(dateFns.format(presentation_startdatetime, 'h:mm A')); presentation_heading_span_node.appendChild(presentation_heading_span_text_node); presentation_li_heading_div_node.appendChild(presentation_name_strong_node); presentation_li_heading_div_node.appendChild(presentation_heading_span_node); let presentation_li_text_div_node = document.createElement('DIV'); //presentation_li_text_div_node.id = 'event_presentation_files_'+value.id; presentation_li_text_div_node.className = 'list-group-item-text'; let presentation_files_ul_group_node = document.createElement('UL'); presentation_files_ul_group_node.id = 'presentation_files_list_'+value.id; presentation_files_ul_group_node.className = 'list-group list-group-flush presentation_files presentation_files_list event_files_list'; let presentation_presenters_ul_group_node = document.createElement('UL'); presentation_presenters_ul_group_node.id = 'event_presentation_presenters_'+value.id; presentation_presenters_ul_group_node.className = 'list-group list-group-flush presentation_presenters presentation_presenters_list'; presentation_presenters_ul_group_node.setAttribute('data-session_id', value.event_session_id); presentation_presenters_ul_group_node.setAttribute('data-presentation_id', value.id); presentation_li_text_div_node.appendChild(presentation_files_ul_group_node); presentation_li_text_div_node.appendChild(presentation_presenters_ul_group_node); presentation_li_node.appendChild(presentation_li_heading_div_node); presentation_li_node.appendChild(presentation_li_text_div_node); //console.log(launcher_sessions[i].getElementsByClassName('session_presentations')); let launcher_session_details = document.getElementById('detail_session_'+session_id); //console.log(launcher_session_details.getElementsByClassName('session_presentations')); // Trying to remove old ID in case there is one already rendered try { document.getElementById('event_presentation_'+value.id).remove(); } catch(err) { console.log('A node with the ID of event_presentation_'+value.id+' was not found. In most cases this is expected.'); console.log(err.message); } let session = document.getElementById('detail_session_'+session_id).getElementsByClassName('session_presentations')[0].getElementsByTagName('ul')[0].appendChild(presentation_li_node); presentation_id_found = true; } else { // Presentation not part of this session. Moving on... //console.log('Presentation was not found in the session and should not be. Moving on...'); //console.log('*** Presentation id ('+value.id+') is not part of this session ('+session_id+'). (launcher sessions loop i='+i+')'); } }).then(function() { console.log('idb_to_ui: Iterate tbl_event_presentation looking for presentations to add is complete'); looping_tbl_event_presentation = false; }); } return true; } exports.render_event_presention_file_records = function (events) { console.log('Rendering event presentation file records...'); } exports.render_event_presenter_records = async function (events) { console.log('Rendering event presenter records...'); console.log('****************** Presenters ******************'); if (looping_tbl_event_presenter) { console.log('Already looping through the tbl_event_presenter table. Not starting until finished.'); return false; } else { } looping_tbl_event_presenter = true; let presentations_presenters_lists = document.getElementsByClassName('presentation_presenters'); // from the UL nodes for presenters console.log(presentations_presenters_lists); // First: Loop through the presenters table looking for presenters for each presentation list await tbl_event_presenter.iterate(function(value, key, iteration) { let tbl_session_id = value.event_session_id; let tbl_presentation_id = value.event_presentation_id; let tbl_presenter_id = value.id; console.log('tbl_event_presenter iteration='+iteration+' | tbl_presenter_id='+tbl_presenter_id+' for tbl_presentation_id='+tbl_presentation_id); // Second: Loop through the presentations presenter UL placeholder (assumes there is a ul for presenters under each presentation) if (presentations_presenters_lists.length) { for (var i = 0; i < presentations_presenters_lists.length; i++) { let ul_session_id = presentations_presenters_lists[i].getAttribute('data-session_id'); let ul_presentation_id = presentations_presenters_lists[i].getAttribute('data-presentation_id'); console.log('presentation i='+i+' | ul_presentation_id='+ul_presentation_id); // Check if this presenter is part of this presentation let add_presenter_id = true; // Set flag to true. Update if found. Add if not found. let remove_presenter_id = true; // Set flag to true. Update if found. Add if not found. if (tbl_presentation_id == ul_presentation_id) { console.log('This tbl_presentation_id '+tbl_presentation_id+' matches this ul_presentation_id '+ul_presentation_id+'. Trying to loop through list of presenters to see if it needs to be updated or added...'); // Get a list of list items under the UL presenters node for a presentation let presentation_presenters_list_items = presentations_presenters_lists[i].children; // Third: Loop through the presenters (LI) in a specific list under a presentation. if (presentation_presenters_list_items.length) { for (let j=0, len=presentation_presenters_list_items.length; j < len; j++) { console.log('Checking li_presenter_id='+presentation_presenters_list_items[j].getAttribute('data-presenter_id')); let li_presentation_id = presentation_presenters_list_items[j].getAttribute('data-presentation_id'); let li_presenter_id = presentation_presenters_list_items[j].getAttribute('data-presenter_id'); if ( tbl_presentation_id == li_presentation_id && tbl_presenter_id == li_presenter_id ) { console.log('Updating presenter ID '+li_presenter_id); // Update the presenter information document.getElementById('event_presenter_'+tbl_presenter_id).getElementsByClassName('presenter_name')[0].innerHTML = value.given_name+' '+value.family_name; // Could have used getElementsByTagName('strong') instead add_presenter_id = false; remove_presenter_id = false; } else if (tbl_presentation_id != li_presentation_id ) { console.log('Set flag to add presenter ID '+li_presenter_id+' to false. Set flag to remove presenter ID '+li_presenter_id+' to true.'); add_presenter_id = false; remove_presenter_id = true; // The default is already set to true. Is this needed? } else { // NOTE: This section is not finished??? } } } else { // No need to remove anything if the list is empty. console.log('Ignoring this presentation\'s list ('+ul_presentation_id+') of presenters because it is empty. Adding this presenter ('+tbl_presenter_id+') to the list...'); add_presenter_id = true; // Technically this line is not needed since the value was initialized to true. remove_presenter_id = false; } } else { //NOTE: This probably needs to be reviewed again. //console.log('This tbl_presentation_id '+tbl_presentation_id+' does not match this ul_presentation_id '+ul_presentation_id+'. Do not add presenter ID. ***But leave remove presenter ID as true???'); add_presenter_id = false; remove_presenter_id = false; } // The presenter ID was not found. Need to add. if ( add_presenter_id ) { console.log('Adding this presenter ('+tbl_presenter_id+') to the list of presenters for this presentation ('+ul_presentation_id+').'); // Trying to remove old ID in case there is one already rendered console.log('Trying to remove an old presenter LI node if it exists...'); try { document.getElementById('event_presenter_'+tbl_presenter_id).remove(); } catch(err) { //console.log('A node with the ID of event_presenter_'+tbl_presenter_id+' was not found.'); console.log('This presenter list item node was not found. In most cases this is expected.'); console.log(err.message); } let presenter_li_node = document.createElement('LI'); presenter_li_node.id = 'event_presenter_'+tbl_presenter_id; presenter_li_node.className = 'list-group-item event_presenter'; presenter_li_node.setAttribute('data-session_id', value.event_session_id); presenter_li_node.setAttribute('data-presentation_id', ul_presentation_id); presenter_li_node.setAttribute('data-presenter_id', tbl_presenter_id); let presenter_name_strong_node = document.createElement('STRONG'); presenter_name_strong_node.className = 'list-group-item-heading presenter_name'; let presenter_name_text_node= document.createTextNode(value.given_name+' '+value.family_name); presenter_name_strong_node.appendChild(presenter_name_text_node); presenter_li_node.appendChild(presenter_name_strong_node); let presentation_presenters_ul_group_node = document.createElement('UL'); presentation_presenters_ul_group_node.id = 'presenter_files_list_'+tbl_presenter_id; presentation_presenters_ul_group_node.className = 'list-group list-group-flush list-group-item-text presenter_files presenter_files_list event_files_list'; presentation_presenters_ul_group_node.setAttribute('data-presenter_id', tbl_presenter_id); presenter_li_node.appendChild(presentation_presenters_ul_group_node); document.getElementById('event_presentation_presenters_'+tbl_presentation_id).appendChild(presenter_li_node); remove_presenter_id = false; } else { //console.log('Not going to add this presenter ('+tbl_presenter_id+') to the list of presenters for this presentation ('+ul_presentation_id+').'); } // The presenter ID was found, but not part of this presentation. Need to remove. if ( remove_presenter_id ) { if ( ul_presentation_id != tbl_presentation_id ) { console.log('Removing this presenter ('+tbl_presenter_id+') from the list of presenters for this presentation ('+ul_presentation_id+').'); // Trying to remove old ID in case there is one already rendered console.log('Trying to remove a presenter LI node...'); try { document.getElementById('event_presenter_'+tbl_presenter_id).remove(); } catch(err) { //console.log('A node with the ID of event_presenter_'+tbl_presenter_id+' was not found.'); console.log('This presenter list item node was not found. In some cases this is expected.'); console.log(err.message); } } } else { //console.log('This presenter ('+tbl_presenter_id+') is already part of the list of presenters for this presentation ('+ul_presentation_id+') and is correct.'); } } } else { console.log('No UL placeholder list for presenters found under any presentations. Something might have gone wrong?'); } }).then(function() { console.log('idb_to_ui: Iterate tbl_event_presenter looking for presenters to update, add, or remove is complete'); looping_tbl_event_presenter = false; }); return true; } // This function is used to render all event, location, session, presentation, and presenter file records to the UI. exports.render_event_file_records = async function () { console.log('Rendering all event, location, session, presentation, and presenter file records...'); console.log('****************** Files ******************'); if (looping_tbl_event_file) { console.log('Already looping through the tbl_event_file table. Not starting until finished.'); return false; } else { } looping_tbl_event_file = true; console.log('Iterating through the tbl_event_file table...'); await tbl_event_file.iterate(function(value, key, iteration) { let tbl_file_id = value.id; let tbl_hosted_file_id = value.id; let tbl_event_id = value.event_id; let tbl_location_id = value.event_location_id; let tbl_session_id = value.event_session_id; let tbl_presentation_id = value.event_presentation_id; let tbl_presenter_id = value.event_presenter_id; let tbl_for_type = value.for_type; let tbl_for_id = value.for_id; let tbl_hash_sha256 = value.hash_sha256; let tbl_filename = value.filename; // This could also be event_file_filename, internal_filename, private_filename, or public_filename let tbl_size = value.size; let tbl_created_on = value.created_on; let tbl_internal_os = value.internal_os; console.log('tbl_event_file iteration='+iteration+' | tbl_file_id='+tbl_file_id+' for tbl_event_id='+tbl_event_id+' at location tbl_location_id='+tbl_location_id+'.'); if (tbl_event_id == event_id && tbl_for_type == 'event') { console.log('EVENT FILE **************************'); document.getElementById('event_files_menu').classList.remove('d-none'); document.getElementById('event_files_menu').classList.add('d-block'); } if (tbl_location_id == event_location_id && tbl_for_type == 'location') { console.log('LOCATION FILE **************************'); document.getElementById('location_files_menu').classList.remove('d-none'); document.getElementById('location_files_menu').classList.add('d-block'); } if (tbl_event_id == event_id/* && tbl_location_id == event_location_id*/) { console.log('Match for event_id='+event_id+' and event_location_id='+event_location_id); event_file_li_node = document.getElementById('event_file_'+tbl_file_id); if (event_file_li_node) { console.log('event_file ('+tbl_file_id+') node found... check and remove/update.'); } else { console.log('event_file ('+tbl_file_id+') node NOT found... check and add.'); let node_id = tbl_for_type+'_files_list_'+tbl_for_id; console.log(node_id); let parent_ul_node = document.getElementById(node_id); console.log(parent_ul_node); if (parent_ul_node) { let file_li_node = document.createElement('LI'); file_li_node.id = 'event_file_'+tbl_file_id; 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.setAttribute('data-file_id', tbl_file_id); file_li_node.setAttribute('data-event_id', tbl_event_id); file_li_node.setAttribute('data-location_id', tbl_location_id); file_li_node.setAttribute('data-session_id', tbl_session_id); file_li_node.setAttribute('data-presentation_id', tbl_presentation_id); file_li_node.setAttribute('data-presenter_id', tbl_presenter_id); file_li_node.setAttribute('data-for_type', tbl_for_type); file_li_node.setAttribute('data-for_id', tbl_for_id); file_li_node.setAttribute('data-hash_sha256', tbl_hash_sha256+'.file'); file_li_node.setAttribute('data-filename', tbl_filename); let file_fa_span_node = document.createElement('SPAN'); file_fa_span_node.className = 'fas fa-external-link-alt'; let file_filename_span_node = document.createElement('SPAN'); file_filename_span_node.className = 'filename'; let filename_text_node = document.createTextNode(tbl_filename); file_filename_span_node.appendChild(filename_text_node); file_li_node.appendChild(file_fa_span_node); file_li_node.appendChild(file_filename_span_node); // We do not want the badge to show in the left menu. Not enough space. if (tbl_for_type != 'event' && tbl_for_type != 'location') { let file_badge_span_node = document.createElement('SPAN'); file_badge_span_node.className = 'badge badge-pill badge-light float-right'; let badge_text_node = document.createTextNode(format_bytes(tbl_size, 2)+'; '+dateFns.format(tbl_created_on, 'MMM M h:mm A')+'; '+tbl_internal_os); file_badge_span_node.appendChild(badge_text_node); file_li_node.appendChild(file_badge_span_node); } console.log(file_li_node); parent_ul_node.appendChild(file_li_node); } } } else { console.log('This file ('+tbl_file_id+') is not part of this event and or location'); console.log('tbl_event_id='+tbl_event_id+' ?= event_id='+event_id); console.log('tbl_location_id='+tbl_location_id+' ?= event_location_id='+event_location_id); } /* if (tbl_for_type == 'event') { } else { } if (tbl_for_type == 'location') { } else { } */ }).then(function() { console.log('idb_to_ui: Iterate tbl_event_file looking for files to add is complete'); looping_tbl_event_file = false; }); index_open_file_buttons('open_local_file'); return true; /* xxx.classList.remove('d-none'); xxx.classList.add('d-block'); */ /* tbl_event_file.iterate(function(value, key, iteration) { if (value.id == event_id) { console.log('This event file ('+value.id+') is part of the this event ('+event_id+').'); document.getElementById('event_name').innerHTML = '@'+value.name; } else { console.log('This event file ('+value.id+') is NOT part of the this event ('+event_id+').'); } }).then(function() { console.log('idb_to_ui: Iterate tbl_event_file complete') tbl_event_complete = true; }); document.getElementById('event_files_menu').innerHTML = '

Event Files

'; document.getElementById('event_files_menu').innerHTML += ''; */ } /* Updated 2020-01-31 */ function index_launcher_sessions(class_name) { console.log('Indexing launcher sessions with class name: '+class_name); var class_elements = document.getElementsByClassName(class_name); for (var i = 0; i < class_elements.length; i++) { class_elements[i].addEventListener( 'click', function() {view_session( this.getAttribute('data-session_id')) } ); } console.log(class_elements); return true; } /* Updated 2020-01-31 */ function view_session(session_id) { var class_elements = document.getElementsByClassName('session_detail'); // This class name should be the class names for each div container console.log('View session ID: '+session_id); for (var i = 0; i < class_elements.length; i++) { //console.log('*** checking: '+class_elements[i].getAttribute('data-session_id')); if (class_elements[i].getAttribute('data-session_id') == session_id) { //console.log('show'); class_elements[i].classList.remove('d-none'); class_elements[i].classList.add('d-block'); } else { //console.log('hide'); class_elements[i].classList.remove('d-block'); class_elements[i].classList.add('d-none'); } } return true; } /* Updated 2020-02-13 */ function index_open_file_buttons(class_name) { var class_elements = document.getElementsByClassName(class_name); for (var i = 0; i < class_elements.length; i++) { // Do not use an anonymous function. If you do then it will keep adding event listeners. // Adding the exact same event listeners over and over doesn't hurt anything. // No need to use removeEventListener() class_elements[i].addEventListener( 'click', open_local_file ); } return true; } /* Updated 2020-02-13 */ function open_local_file(element) { console.log(element); let file_path = path.join(host_file_cache_path, element.getAttribute('data-hash_sha256')); let filename = element.getAttribute('data-filename'); console.log(file_path); console.log(filename); ipcRenderer.send('open_local_file', file_path, filename); } function format_bytes(bytes, decimals = 2) { if (bytes === 0) return '0 Bytes'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; }