diff --git a/config.properties b/config.properties index 61631d0..7d23ab5 100644 --- a/config.properties +++ b/config.properties @@ -1,5 +1,5 @@ #Configuration file -#Tue Oct 21 17:17:50 WIB 2025 +#Thu Oct 23 15:01:47 WIB 2025 database.host=localhost database.name=aas database.password=admin @@ -10,3 +10,8 @@ remark.GBD= remark.GFC= remark.GOP= soundbank.directory=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\AAS_NewGen\\soundbank +webapp.admin.password=password +webapp.admin.username=admin +webapp.port=3030 +webapp.viewer.password=password +webapp.viewer.username=viewer diff --git a/html/webpage/assets/js/script.js b/html/webpage/assets/js/script.js index 2122c4c..aa0b862 100644 --- a/html/webpage/assets/js/script.js +++ b/html/webpage/assets/js/script.js @@ -60,6 +60,7 @@ window.messagebankdata ??= []; function reloadMessageBank(APIURL = "MessageBank/", cbOK = null) { window.messagebankdata ??= []; fetchAPI(APIURL + "List", "GET", {}, null, (okdata) => { + //console.log("Message bank data loaded : ", okdata); if (Array.isArray(okdata)) { window.messagebankdata.push(...okdata); window.selectedmessagerow = null; @@ -67,6 +68,7 @@ function reloadMessageBank(APIURL = "MessageBank/", cbOK = null) { if (cbOK) cbOK(); } }, (errdata) => { + //console.error("Error loading messagebank : ", errdata); alert("Error loading messagebank : " + errdata.message); }); } @@ -186,14 +188,16 @@ function fetchImg(url, cbOK, cbError) { /** * Reload voice types from server + * @param {Function|null} cbOK callback on success, default null */ -function getVoiceTypes() { +function getVoiceTypes(cbOK = null) { window.voiceTypes = []; fetchAPI("VoiceType", "GET", {}, null, (okdata) => { // okdata is a string contains elements separated by semicolon ; if (Array.isArray(okdata)) { window.voiceTypes = okdata.filter(item => item.trim().length > 0); //console.log("Loaded " + voiceTypes.length + " voice types : " + voiceTypes.join(", ")); + if (cbOK) cbOK(); } else console.log("getVoiceTypes: okdata is not array"); }, (errdata) => { alert("Error loading voice types : " + errdata.message); @@ -202,14 +206,16 @@ function getVoiceTypes() { /** * Reload categories from server + * @param {Function|null} cbOK callback on success, default null */ -function getCategories() { +function getCategories(cbOK = null) { window.categories = []; fetchAPI("Category", "GET", {}, null, (okdata) => { // okdata is a string contains elements separated by semicolon ; if (Array.isArray(okdata)) { window.categories = okdata.filter(item => item.trim().length > 0); //console.log("Loaded " + categories.length + " categories : " + categories.join(", ")); + if (cbOK) cbOK(); } else console.log("getCategories: okdata is not array"); }, (errdata) => { alert("Error loading categories : " + errdata.message); @@ -218,14 +224,16 @@ function getCategories() { /** * Reload languages from server + * @param {Function|null} cbOK callback on success, default null */ -function getLanguages() { +function getLanguages(cbOK = null) { window.languages = []; fetchAPI("Language", "GET", {}, null, (okdata) => { // okdata is a string contains elements separated by semicolon ; if (Array.isArray(okdata)) { window.languages = okdata.filter(item => item.trim().length > 0); //console.log("Loaded " + languages.length + " languages : " + languages.join(", ") ); + if (cbOK) cbOK(); } else console.log("getLanguages: okdata is not array"); }, (errdata) => { alert("Error loading languages : " + errdata.message); diff --git a/html/webpage/assets/js/setting.js b/html/webpage/assets/js/setting.js new file mode 100644 index 0000000..da26ff0 --- /dev/null +++ b/html/webpage/assets/js/setting.js @@ -0,0 +1,160 @@ +let selected_language = null; +let selected_category = null; +let selected_voice = null; + +/** + * Load setting language dropdown + */ +function load_setting_language(){ + selected_language = null; + $("#setting_language").empty().off('change'); + + getLanguages( () => { + window.languages.forEach( (lang) => { + let $option = $("").attr("value", lang).text(lang); + $("#setting_language").append($option); + }); + $("#setting_language").on('change', function() { + selected_language = $(this).val(); + change_droparea_enable(); + }); + }); +} + +/** + * Load setting category dropdown + */ +function load_setting_category(){ + selected_category = null; + $("#setting_category").empty().off('change'); + getCategories( () => { + window.categories.forEach( (cat) => { + let $option = $("").attr("value", cat).text(cat); + $("#setting_category").append($option); + }); + $("#setting_category").on('change', function() { + selected_category = $(this).val(); + change_droparea_enable(); + }); + }); +} + +/** + * Load setting voice dropdown + */ +function load_setting_voice(){ + selected_voice = null; + $("#setting_voice").empty().off('change'); + getVoiceTypes( () => { + window.voiceTypes.forEach( (voice) => { + let $option = $("").attr("value", voice).text(voice); + $("#setting_voice").append($option); + }); + $("#setting_voice").on('change', function() { + selected_voice = $(this).val(); + change_droparea_enable(); + }); + }); +} + +function get_soundbank_path(){ + fetchAPI("Settings/SoundbankDirectory", "GET", {}, null, (okdata) => { + console.log("Soundbank path : " + okdata); + $("#setting_path").val(okdata); + }, (errdata) => { + alert("Error getting soundbank path : " + errdata.message); + }); +} + +/** + * Enable or disable drop area based on selections + */ +function change_droparea_enable(){ + if (selected_category && selected_language && selected_voice) { + $("#drop-area").removeClass("disabled"); + } else { + $("#drop-area").addClass("disabled"); + } +} + +function load_messagebank(cbOK = null){ + $("#input_GOP").empty(); + $("#input_GBD").empty(); + $("#input_GFC").empty(); + $("#input_FLD").empty(); + + // get messagebank data from server + reloadMessageBank(()=>{ + console.log("Will load " + window.messagebankdata.length + " message bank items into selection."); + window.messagebankdata.forEach((item)=>{ + let opt = `${item.description} [${item.aNN_ID}]`; + console.log("Adding option: " + opt); + $("#input_GOP").append($("").attr("value", opt).text(opt)); + $("#input_GBD").append($("").attr("value", opt).text(opt)); + $("#input_GFC").append($("").attr("value", opt).text(opt)); + $("#input_FLD").append($("").attr("value", opt).text(opt)); + }); + if (window.messagebankdata.length > 0) { + if (cbOK) cbOK(); + } + }); +} + +function load_remark_selection(){ + fetchAPI("Settings/FISCode", "GET", {}, null, (okdata) => { + $("#input_GOP").val(okdata.GOP); + $("#input_GBD").val(okdata.GBD); + $("#input_GFC").val(okdata.GFC); + $("#input_FLD").val(okdata.FLD); + }, (errdata) => { + alert("Error getting FIS codes : " + errdata.message); + }); +} + +$(document).ready(function() { + console.log("setting.js loaded"); + + + $("#save_directory").off('click').on('click', function() { + let new_path = $("#setting_path").val(); + if (new_path && new_path.trim().length > 0) { + fetchAPI("Settings/SoundbankDirectory", "POST", {}, { directory: new_path }, (okdata) => { + alert("Soundbank directory path saved successfully."); + }, (errdata) => { + alert("Error saving soundbank directory path : " + errdata.message); + }); + } else { + alert("Please enter a valid soundbank directory path."); + } + }); + + + // get_soundbank_path(); + load_setting_category(); + load_setting_language(); + load_setting_voice(); + load_messagebank(()=> load_remark_selection()); + $("#fiscodesave").off('click').on('click', function() { + let gop = $("#input_GOP").val(); + let gbd = $("#input_GBD").val(); + let gfc = $("#input_GFC").val(); + let fld = $("#input_FLD").val(); + if (gop && gbd && gfc && fld) { + let data = { + GOP: gop, + GBD: gbd, + GFC: gfc, + FLD: fld + }; + fetchAPI("Settings/FISCode", "POST", {}, data, (okdata) => { + alert("FIS codes saved successfully."); + }, (errdata) => { + alert("Error saving FIS codes : " + errdata.message); + }); + } else { + alert("Please select all FIS codes (GOP, GBD, GFC, FLD) before saving."); + } + + }); + +}); \ No newline at end of file diff --git a/html/webpage/setting.html b/html/webpage/setting.html index 006b5b5..50a1a05 100644 --- a/html/webpage/setting.html +++ b/html/webpage/setting.html @@ -59,8 +59,8 @@