diff --git a/html/webpage/assets/js/script.js b/html/webpage/assets/js/script.js
index f9577dd..7d45816 100644
--- a/html/webpage/assets/js/script.js
+++ b/html/webpage/assets/js/script.js
@@ -56,6 +56,15 @@
* @property {string} text
*/
+/**
+ * @typedef {Object} BroadcastZone
+ * @property {number} index
+ * @property {string} description
+ * @property {String} SoundChannel
+ * @property {String} Box
+ * @property {String} Relay
+ */
+
/**
* List of Soundbank data loaded from server
* @type {SoundBank[]}
@@ -106,12 +115,9 @@ let soundbankfiles = [];
/**
* Select2 data source
* See https://select2.org/data-sources/formats
- * @type {Object}
- * @property {Select2item[]} results
+ * @type {Select2item[]}
*/
-let select2results = {
- results: []
-};
+let select2data = [];
/**
* List of voice types available
@@ -135,6 +141,21 @@ let languages = [];
*/
let scheduledays = []
+/**
+ * List of broadcast zones available
+ * @type {BroadcastZone[]}
+ */
+let BroadcastZoneList = [];
+
+/**
+ * Create a list item element
+ * @param {String} text Text Content for the list item
+ * @param {String} className Specific class name for the list item
+ * @returns {JQuery}
+ */
+function ListItem(text, className=""){
+ return $('').addClass(className).text(text);
+}
/**
* Fill soundbank table body with values
@@ -368,9 +389,9 @@ function fetchAPI(endpoint, method, headers = {}, body = null, cbOK, cbError) {
/**
* Reload sound bank from server
- * @param {String} APIURL API URL endpoint
+ * @param {String} APIURL API URL endpoint, default "SoundBank/"
*/
-function reloadSoundBank(APIURL) {
+function reloadSoundBank(APIURL = "SoundBank/") {
soundbankdata = [];
fetchAPI(APIURL + "List", "GET", {}, null, (okdata) => {
if (Array.isArray(okdata)) {
@@ -385,9 +406,9 @@ function reloadSoundBank(APIURL) {
/**
* Reload message bank from server
-* @param {string} APIURL API URL endpoint
+* @param {string} APIURL API URL endpoint, default "MessageBank/"
*/
-function reloadMessageBank(APIURL) {
+function reloadMessageBank(APIURL = "MessageBank/") {
messagebankdata = [];
fetchAPI(APIURL + "List", "GET", {}, null, (okdata) => {
if (Array.isArray(okdata)) {
@@ -402,9 +423,9 @@ function reloadMessageBank(APIURL) {
/**
* Reload language bank from server
- * @param {string} APIURL API URL endpoint
+ * @param {string} APIURL API URL endpoint, default "LanguageLink/"
*/
-function reloadLanguageBank(APIURL) {
+function reloadLanguageBank(APIURL = "LanguageLink/") {
languagebankdata = [];
fetchAPI(APIURL + "List", "GET", {}, null, (okdata) => {
if (Array.isArray(okdata)) {
@@ -419,9 +440,9 @@ function reloadLanguageBank(APIURL) {
/**
* Reload timer bank from server
- * @param {string} APIURL API URL endpoint
+ * @param {string} APIURL API URL endpoint, default "ScheduleBank/"
*/
-function reloadTimerBank(APIURL) {
+function reloadTimerBank(APIURL = "ScheduleBank/") {
schedulebankdata = [];
fetchAPI(APIURL + "List", "GET", {}, null, (okdata) => {
if (Array.isArray(okdata)) {
@@ -436,11 +457,11 @@ function reloadTimerBank(APIURL) {
/**
* Reload logs from server with date and filter
- * @param {String} APIURL API URL endpoint
+ * @param {String} APIURL API URL endpoint , default "Log/"
* @param {String} date date in format dd-mm-yyyy
* @param {String} filter log filter text
*/
-function reloadLogs(APIURL, date, filter) {
+function reloadLogs(APIURL = "Log/", date, filter) {
const params = new URLSearchParams({
date: date,
filter: filter
@@ -460,22 +481,38 @@ function reloadLogs(APIURL, date, filter) {
* Reload soundbank files from server
* @param {String} APIURL API URL endpoint (default "SoundBank/")
*/
-function regetSoundbankFiles(APIURL = "SoundBank/") {
+function reloadSoundbankFiles(APIURL = "SoundBank/") {
soundbankfiles = [];
fetchAPI(APIURL + "ListFiles", "GET", {}, null, (okdata) => {
// okdata is a string contains elements separated by semicolon ;
if (Array.isArray(okdata)) {
soundbankfiles = okdata.filter(item => item.trim().length > 0);
- //console.log("Loaded " + soundbankfiles.length + " sound files : " + soundbankfiles.join(", ") );
-
- // refill select2results
- select2results.results = soundbankfiles.map((item, index) => ({ id: index + 1, text: item }));
- } else console.log("regetSoundbankFiles: okdata is not array");
+ // refill select2data
+ select2data = soundbankfiles.map((item, index) => ({ id: index + 1, text: item }));
+ } else console.log("reloadSoundbankFiles: okdata is not array");
}, (errdata) => {
alert("Error loading soundbank files : " + errdata.message);
});
}
+/**
+ * Reload broadcast zones from server
+ * @param {String} APIURL API URL endpoint (default "BroadcastZones/")
+ */
+function reloadBroadcastZones(APIURL = "BroadcastZones/") {
+ BroadcastZoneList = [];
+ fetchAPI(APIURL + "List", "GET", {}, null, (okdata) => {
+ if (Array.isArray(okdata)) {
+ BroadcastZoneList = okdata;
+ fill_broadcastzonetablebody(BroadcastZoneList);
+ } else console.log("reloadBroadcastZones: okdata is not array");
+ }, (errdata) => {
+ alert("Error loading broadcast zones : " + errdata.message);
+ });
+}
+
+
+
/**
* Reload voice types from server
*/
@@ -646,7 +683,7 @@ $(document).ready(function () {
getCategories();
getLanguages();
getScheduledDays();
- regetSoundbankFiles();
+ reloadSoundbankFiles();
// Initialize WebSocket connection
ws = new WebSocket(window.location.pathname + '/ws');
@@ -723,11 +760,50 @@ $(document).ready(function () {
let $btnEdit = $('#btnEdit');
let $btnExport = $('#btnExport');
let $btnImport = $('#btnImport');
- let $modal = $('#soundbankmodal');
$btnRemove.prop('disabled', true);
$btnEdit.prop('disabled', true);
let APIURL = "SoundBank/";
+ let $modal = $('#soundbankmodal');
+ let $modalindex = $modal.find('#modalindex');
+ let $modaldescription = $modal.find('#modaldescription');
+ let $modaltag = $modal.find('#modaltag');
+ let $modalcategory = $modal.find('#modalcategory');
+ let $modallanguage = $modal.find('#modallanguage');
+ let $modalvoicetype = $modal.find('#modalvoicetype');
+ let $modalpath = $modal.find('#modalpath');
+ /**
+ * Clear soundbank modal inputs
+ */
+ function clearSoundbankModal() {
+ $modalindex.val('').prop('disabled', true);
+ $modaldescription.val('');
+ $modaltag.val('');
+ // fill modalcategory options from categories[]
+ $modalcategory.empty();
+ categories.forEach(cat => {
+ $modalcategory.append(new Option(cat, cat));
+ });
+ $modalcategory.val(null);
+ // fill modallanguage options from languages[]
+ $modallanguage.empty();
+ languages.forEach(lang => {
+ $modallanguage.append(new Option(lang, lang));
+ });
+ $modallanguage.val(null);
+ // fill modalvoicetype options from voiceTypes[]
+ $modalvoicetype.empty();
+ voiceTypes.forEach(vt => {
+ $modalvoicetype.append(new Option(vt, vt));
+ });
+ $modalvoicetype.val(null);
+ // fill modalpath options from soundbankfiles[]
+ // TODO read https://jeesite.com/front/jquery-select2/4.0/index.htm
+ console.log("select2data has " + select2data.length + " items");
+ $('#modalpath').select2({
+ data: select2data
+ })
+ }
reloadSoundBank(APIURL);
$('#findsoundbank').on('input', function () {
@@ -751,14 +827,12 @@ $(document).ready(function () {
});
$btnAdd.click(() => {
- $('.js-example-basic-single').select2({
- placeholder: 'Select a sound file',
- closeOnSelect: true,
- data: select2results,
- });
+
$modal.modal('show');
+ clearSoundbankModal();
// event on Click save button
$modal.off('click.soundbanksave').on('click.soundbanksave', '#soundbanksave', function () {
+ //TODO Add soundbank save process here
$modal.modal('hide');
});
// event on Click close button
@@ -805,9 +879,16 @@ $(document).ready(function () {
if (confirm(`Are you sure to edit soundbank [${sb.index}] Description=${sb.description} Tag=${sb.tag}?`)) {
$modal.modal('show');
$modal.off('hidden.bs.modal').on('hidden.bs.modal', function () {
- const desc = $('#description').val();
- console.log('Description input value:', desc);
- // You can use desc here (e.g., send to server)
+
+ // event on Click save button
+ $modal.off('click.soundbanksave').on('click.soundbanksave', '#soundbanksave', function () {
+ //TODO Add soundbank save process here
+ $modal.modal('hide');
+ });
+ // event on Click close button
+ $modal.off('click.soundbankclose').on('click.soundbankclose', '#soundbankclose', function () {
+ $modal.modal('hide');
+ });
});
}
}
@@ -848,6 +929,110 @@ $(document).ready(function () {
let APIURL = "MessageBank/";
let $findmessage = $('#findmessage');
+ // modal for add / edit messagebank
+ let $modal = $('#messagebankmodal');
+ // text input, disabled by default
+ let $messageindex = $modal.find('#messageindex');
+ // text input
+ let $messagedescription = $modal.find('#messagedescription');
+ // select input, options loaded from languages[]
+ let $messagelanguage = $modal.find('#messagelanguage');
+ // number input from 1 to 100
+ let $messageannid = $modal.find('#messageannid');
+ // select input, options loaded from voiceTypes[]
+ let $messagevoicetype = $modal.find('#messagevoicetype');
+ // list of available categories and phrases
+ let $messageavailablevariables = $modal.find('#messageavailablevariables');
+ // list of selected categories and phrases
+ let $messageselectedvariables = $modal.find('#messageselectedvariables');
+ // for clearing messageselectedvariables
+ let $btnclearlist = $modal.find('#btnclearlist');
+ // for removing selected item from messageselectedvariables
+ let $btnremovefromlist = $modal.find('#btnremovefromlist');
+ // for adding selected item from messageavailablevariables to messageselectedvariables
+ let $btnaddtolist = $modal.find('#btnaddtolist');
+
+ /**
+ * Refill messageavailablevariables options from categories[]
+ * and soundbankdata with category "Phrase" if messagelanguage and messagevoicetype are selected
+ */
+ function refill_messageavailablevariables() {
+ $messageavailablevariables.empty();
+ categories.forEach(cat => {
+ $messageavailablevariables.append(ListItem(`{${cat}}`));
+ });
+ if ($messagelanguage.val() && $messagevoicetype.val()) {
+ soundbankdata
+ .filter(sb => sb.language.toLowerCase() === $messagelanguage.val().toLowerCase())
+ .filter(sb => sb.voiceType.toLowerCase() === $messagevoicetype.val().toLowerCase())
+ .filter(sb => sb.category.toLowerCase() === "phrase")
+ .forEach(sb => {
+ $messageavailablevariables.append(ListItem(`[${sb.Description}]`));
+ });
+ }
+
+ }
+
+ /**
+ * Clear message modal to default state
+ */
+ function clearMessageModal() {
+ $messageindex.val('').prop('disabled', true);
+ $messagedescription.val('');
+ // fill messagelanguage options from languages[]
+ $messagelanguage.empty();
+ languages.forEach(lang => {
+ $messagelanguage.append(new Option(lang, lang));
+ });
+ $messagelanguage.val(null);
+ $messagelanguage.on('change', function () {
+ refill_messageavailablevariables();
+ });
+ // set default annid to 1
+ $messageannid.val(1);
+ // fill messagevoicetype options from voiceTypes[]
+ $messagevoicetype.empty();
+ voiceTypes.forEach(vt => {
+ $messagevoicetype.append(new Option(vt, vt));
+ });
+ $messagevoicetype.val(null);
+ $messagevoicetype.on('change', function () {
+ refill_messageavailablevariables();
+ });
+
+ refill_messageavailablevariables();
+ $messageselectedvariables.empty();
+
+ // event on btnclearlist
+ $btnclearlist.off('click').on('click', function () {
+ if ($messageselectedvariables.children().length > 0) {
+ if (confirm("Are you sure want to clear selected variables list?")) {
+ $messageselectedvariables.empty();
+ }
+ }
+ });
+
+ // event on btnremovefromlist
+ $btnremovefromlist.off('click').on('click', function () {
+ let $selected = $messageselectedvariables.find('option:selected');
+ if ($selected.length > 0) {
+ $selected.remove();
+ }
+
+ });
+
+ // event on btnaddtolist
+ $btnaddtolist.off('click').on('click', function () {
+ let $selected = $messageavailablevariables.find('option:selected');
+ if ($selected.length > 0) {
+ $selected.each(function () {
+ $messageselectedvariables.append($(this).clone());
+ });
+ }
+ });
+ }
+
+
$findmessage.on('input', function () {
let searchTerm = $findmessage.val().toLowerCase();
if (searchTerm.length > 0) {
@@ -872,18 +1057,83 @@ $(document).ready(function () {
});
$btnAdd.click(() => {
- let $modal = $('#messagebankmodal');
- $modal.modal('show');
- $modal.off('click.messagebanksave').on('click.messagebanksave', '#messagebanksave', function () {
- const index = $('#messageindex').val();
- const description = $('#messagedescription').val();
- const language = $('#messagelanguage').val();
- const ann_id = parseInt($('#messageannid').val());
- const voice_type = $('#messagevoicetype').val();
+ $modal.modal('show');
+ clearMessageModal();
+
+ // event on Click save button
+ $modal.off('click.messagebanksave').on('click.messagebanksave', '#messagebanksave', function () {
+ let description = $messagedescription.val().trim();
+ let language = $messagelanguage.val();
+ let annid = parseInt($messageannid.val());
+ let voicetype = $messagevoicetype.val();
+ let messagedetail = "";
+ let messagetags = "";
+
+ // iterate messageselectedvariables children
+ $messageselectedvariables.children().each(function () {
+ let val = $(this).text().trim();
+ if (val.length > 0) {
+ if (val.startsWith('[') && val.endsWith(']')) {
+ // categories
+ messagetags += (messagetags.length > 0 ? " " : "") + val;
+ messagedetail += (messagedetail.length > 0 ? " " : "") + val;
+ } else {
+ // phrases
+ // find in soundbankdata by description with specified language and voicetype
+ let sb = soundbankdata
+ .filter(sb => sb.language.toLowerCase() === language.toLowerCase())
+ .filter(sb => sb.voiceType.toLowerCase() === voicetype.toLowerCase())
+ .find(sb => sb.Description.toLowerCase() === val.toLowerCase());
+ if (sb) {
+ messagedetail += (messagedetail.length > 0 ? " " : "") + sb.Description;
+ messagetags += (messagetags.length > 0 ? " " : "") + sb.tag;
+ }
+ }
+ }
+ });
+
+ if (description.length === 0) {
+ alert("Description cannot be empty");
+ return;
+ }
+ if (!language) {
+ alert("Language cannot be empty");
+ return;
+ }
+ if (isNaN(annid) || annid < 1 || annid > 100) {
+ alert("ANN_ID must be a number between 1 and 100");
+ return;
+ }
+ if (!voicetype) {
+ alert("Voice Type cannot be empty");
+ return;
+ }
+ if (messagedetail.length === 0 || messagetags.length === 0) {
+ alert("Message haven't been constructed, please add categories and phrases");
+ return;
+ }
+
+
+ let mb = {
+ Description: description,
+ Language: language,
+ ANN_ID: annid,
+ Voice_Type: voicetype,
+ Message_Detail: messagedetail,
+ Message_TAGS: messagetags
+ };
+ // send to server using fetchAPI
+ fetchAPI(APIURL + "Add", "POST", mb, null, (okdata) => {
+ reloadMessageBank(APIURL);
+ alert("Success add new messagebank : " + okdata.message);
+ }, (errdata) => {
+ alert("Error add new messagebank : " + errdata.message);
+ });
$modal.modal('hide');
});
+ // event on Click close button
$modal.off('click.messagebankclose').on('click.messagebankclose', '#messagebankclose', function () {
$modal.modal('hide');
});
@@ -926,7 +1176,103 @@ $(document).ready(function () {
message_TAGS: cells.eq(6).text()
}
if (confirm(`Are you sure to edit messagebank [${mb.index}] Description=${mb.description} ANN_ID=${mb.aNN_ID} Language=${mb.language} Voice_Type=${mb.voice_Type} `)) {
- //TODO send edit command
+ $modal.modal('show');
+
+ clearMessageModal();
+ // Fill modal fields with selected messagebank data
+ $messageindex.val(mb.index).prop('disabled', true);
+ $messagedescription.val(mb.description);
+ // Fill messagelanguage options and select current
+ $messagelanguage.empty();
+ languages.forEach(lang => {
+ $messagelanguage.append(new Option(lang, lang));
+ });
+ $messagelanguage.val(mb.language);
+ // Fill messagevoicetype options and select current
+ $messagevoicetype.empty();
+ voiceTypes.forEach(vt => {
+ $messagevoicetype.append(new Option(vt, vt));
+ });
+ $messagevoicetype.val(mb.voice_Type);
+ // Set annid
+ $messageannid.val(mb.aNN_ID);
+ // Refill message available variables
+ refill_messageavailablevariables();
+ // Fill messageselectedvariables from message_Detail and message_TAGS
+ $messageselectedvariables.empty();
+ if (mb.message_Detail) {
+ mb.message_Detail.split(' ').forEach(val => {
+ $messageselectedvariables.append(ListItem(val));
+ });
+ }
+
+ // Save button event
+ $modal.off('click.messagebanksave').on('click.messagebanksave', '#messagebanksave', function () {
+ let description = $messagedescription.val().trim();
+ let language = $messagelanguage.val();
+ let annid = parseInt($messageannid.val());
+ let voicetype = $messagevoicetype.val();
+ let messagedetail = "";
+ let messagetags = "";
+ $messageselectedvariables.children().each(function () {
+ let val = $(this).text().trim();
+ if (val.length > 0) {
+ if (val.startsWith('[') && val.endsWith(']')) {
+ messagetags += (messagetags.length > 0 ? " " : "") + val;
+ messagedetail += (messagedetail.length > 0 ? " " : "") + val;
+ } else {
+ let sb = soundbankdata
+ .filter(sb => sb.language.toLowerCase() === language.toLowerCase())
+ .filter(sb => sb.voiceType.toLowerCase() === voicetype.toLowerCase())
+ .find(sb => sb.Description && sb.Description.toLowerCase() === val.toLowerCase());
+ if (sb) {
+ messagedetail += (messagedetail.length > 0 ? " " : "") + sb.Description;
+ messagetags += (messagetags.length > 0 ? " " : "") + sb.tag;
+ }
+ }
+ }
+ });
+ if (description.length === 0) {
+ alert("Description cannot be empty");
+ return;
+ }
+ if (!language) {
+ alert("Language cannot be empty");
+ return;
+ }
+ if (isNaN(annid) || annid < 1 || annid > 100) {
+ alert("ANN_ID must be a number between 1 and 100");
+ return;
+ }
+ if (!voicetype) {
+ alert("Voice Type cannot be empty");
+ return;
+ }
+ if (messagedetail.length === 0 || messagetags.length === 0) {
+ alert("Message haven't been constructed, please add categories and phrases");
+ return;
+ }
+ let mbUpdate = {
+ Description: description,
+ Language: language,
+ ANN_ID: annid,
+ Voice_Type: voicetype,
+ Message_Detail: messagedetail,
+ Message_TAGS: messagetags
+ };
+ fetchAPI(APIURL + "UpdateByIndex/" + mb.index, "PATCH", mbUpdate, null, (okdata) => {
+ reloadMessageBank(APIURL);
+ alert("Success edit messagebank : " + okdata.message);
+ }, (errdata) => {
+ alert("Error edit messagebank : " + errdata.message);
+ });
+ $modal.modal('hide');
+ });
+ // Close button event
+ $modal.off('click.messagebankclose').on('click.messagebankclose', '#messagebankclose', function () {
+ $modal.modal('hide');
+ });
+
}
}
});
@@ -1082,7 +1428,7 @@ $(document).ready(function () {
language: cells.eq(2).text()
}
if (confirm(`Are you sure to edit language [${ll.index}] Tag=${ll.tag} Language=${ll.language}?`)) {
-
+
clearLanguageModal();
$langid.val(ll.index);
$langtag.val(ll.tag);
@@ -1233,7 +1579,7 @@ $(document).ready(function () {
$schedulesaturday.prop('checked', false);
$schedulespecialdate.prop('checked', false);
$scheduledate.prop('disabled', true).val('');
-
+
}
@@ -1242,7 +1588,10 @@ $(document).ready(function () {
let searchTerm = $findschedule.val().toLowerCase();
if (searchTerm.length > 0) {
selectedtimerow = null;
- let filtered = schedulebankdata.filter(item => item.description.toLowerCase().includes(searchTerm) || item.soundpath.toLowerCase().includes(searchTerm) || item.broadcastZones.toLowerCase().includes(searchTerm));
+ let filtered = schedulebankdata.filter(item =>
+ item.description.toLowerCase().includes(searchTerm)
+ || item.soundpath.toLowerCase().includes(searchTerm)
+ || item.broadcastZones.toLowerCase().includes(searchTerm));
fill_schedulebanktablebody(filtered);
} else {
selectedtimerow = null;
@@ -1250,7 +1599,7 @@ $(document).ready(function () {
}
});
-
+
reloadTimerBank(APIURL);
$btnClear.click(() => {
DoClear(APIURL, "Timerbank", (okdata) => {
@@ -1262,7 +1611,6 @@ $(document).ready(function () {
});
$btnAdd.click(() => {
- //TODO form add timer
$schedulemodal.modal('show');
clearScheduleModal();
diff --git a/html/webpage/soundbank.html b/html/webpage/soundbank.html
index 4223a34..8d47760 100644
--- a/html/webpage/soundbank.html
+++ b/html/webpage/soundbank.html
@@ -89,7 +89,7 @@
-
+
-
diff --git a/src/content/Category.kt b/src/content/Category.kt
index 6bb0af3..7ee74ae 100644
--- a/src/content/Category.kt
+++ b/src/content/Category.kt
@@ -2,8 +2,8 @@ package content
@Suppress("unused")
enum class Category(name: String) {
- AirlineCode("Airline_Code"),
- AirplaneName("Airplane_Name"),
+ Airline_Code("Airline_Code"),
+ Airplane_Name("Airplane_Name"),
AlphabetNumeric("AlphabetNumeric"),
City("City"),
Phrase("Phrase"),
diff --git a/src/content/Language.kt b/src/content/Language.kt
index c7ea77f..9308031 100644
--- a/src/content/Language.kt
+++ b/src/content/Language.kt
@@ -7,10 +7,10 @@ package content
*/
@Suppress("unused")
enum class Language(name: String) {
- Indonesia("INDONESIA"),
- English("ENGLISH"),
- Local("LOCAL"),
- Japanese("JAPANESE"),
- Chinese("CHINESE"),
- Arabic("ARABIC");
+ INDONESIA("Indonesia"),
+ ENGLISH("English"),
+ LOCAL("Local"),
+ JAPANESE("Japanese"),
+ CHINESE("Chinese"),
+ ARABIC("Arabic");
}
\ No newline at end of file
diff --git a/src/content/VoiceType.kt b/src/content/VoiceType.kt
index 639f46d..2bfdcff 100644
--- a/src/content/VoiceType.kt
+++ b/src/content/VoiceType.kt
@@ -7,7 +7,7 @@ package content
*/
@Suppress("unused")
enum class VoiceType(voicename: String) {
- Voice1("VOICE_1"),
- Voice2("VOICE_2"),
- Voice3("VOICE_3");
+ VOICE_1("VOICE_1"),
+ VOICE_2("VOICE_2"),
+ VOICE_3("VOICE_3");
}
\ No newline at end of file
diff --git a/src/web/WebApp.kt b/src/web/WebApp.kt
index 48e9b7f..327d3fa 100644
--- a/src/web/WebApp.kt
+++ b/src/web/WebApp.kt
@@ -15,6 +15,7 @@ import content.ScheduleDay
import content.VoiceType
import database.LanguageLink
import database.MariaDB
+import database.Messagebank
import database.Soundbank
import io.javalin.Javalin
import io.javalin.apibuilder.ApiBuilder.before
@@ -172,7 +173,7 @@ class WebApp(val listenPort: Int, val userlist: List>, val
}
path("Category") {
get {
- it.result(objectmapper.writeValueAsString(Category.entries.map { cat -> cat.name }) )
+ it.result(objectmapper.writeValueAsString(Category.entries.map { cat -> cat.name}) )
}
}
path("Language") {
@@ -353,7 +354,30 @@ class WebApp(val listenPort: Int, val userlist: List>, val
it.result(MariaDB.ArrayListtoString(db.MessagebankList))
}
post("Add"){
- // TODO add new messagebank
+ val json : JsonNode = objectmapper.readTree(it.body())
+ val description = json.get("Description")?.asText() ?: ""
+ val language = json.get("Language")?.asText() ?: ""
+ val ann_id = json.get("ANN_ID")?.asInt()?.toUInt() ?: 0u
+ val voice_type = json.get("Voice_Type")?.asText() ?: ""
+ val message_detail = json.get("Message_Detail")?.asText() ?: ""
+ val message_tags = json.get("Message_TAGS")?.asText() ?: ""
+ if (description.isNotEmpty()){
+ if (language.isNotEmpty() && Language.entries.any{ lang -> lang.name == language }){
+ if (ann_id>0u){
+ if (voice_type.isNotEmpty() && VoiceType.entries.any{ vt -> vt.name == voice_type }){
+ if (message_detail.isNotEmpty()){
+ if (message_tags.isNotEmpty()){
+ val mb = Messagebank(0u, description, language, ann_id, voice_type, message_detail, message_tags)
+ if (db.Add_Messagebank(mb)){
+ db.Resort_Messagebank_by_ANN_ID()
+ it.result(objectmapper.writeValueAsString(resultMessage("OK")))
+ } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add messagebank to database")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Message_TAGS")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Message_Detail")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Voice_Type")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid ANN_ID")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Description")))
}
delete("List") {
// truncate messagebank table