diff --git a/html/webpage/assets/js/schedulebank.js b/html/webpage/assets/js/schedulebank.js
index 6c9e437..5975d02 100644
--- a/html/webpage/assets/js/schedulebank.js
+++ b/html/webpage/assets/js/schedulebank.js
@@ -101,6 +101,8 @@ $(document).ready(function () {
let $schedulehour = $schedulemodal.find('#schedulehour');
// number input 0-59
let $scheduleminute = $schedulemodal.find('#scheduleminute');
+
+ //TODO ganti dropdown with list of messages from MessageBank
// text input
let $schedulesoundpath = $schedulemodal.find('#schedulesoundpath');
// number input 0-5
diff --git a/src/web/WebApp.kt b/src/web/WebApp.kt
index 6cedfde..8c93a1e 100644
--- a/src/web/WebApp.kt
+++ b/src/web/WebApp.kt
@@ -21,6 +21,7 @@ import database.MariaDB
import database.Messagebank
import database.SoundChannel
import database.Soundbank
+import database.ScheduleBank
import db
import io.javalin.Javalin
import io.javalin.apibuilder.ApiBuilder.before
@@ -202,7 +203,8 @@ class WebApp(val listenPort: Int, val userlist: List>) {
it.result(MariaDB.ArrayListtoString(db.soundDB.List))
}
get("ListFiles"){
- it.result(objectmapper.writeValueAsString(ListAudioFiles("C:\\soundbank")))
+ //it.result(objectmapper.writeValueAsString(ListAudioFiles("C:\\soundbank")))
+
}
post("Add") {
try {
@@ -644,6 +646,7 @@ class WebApp(val listenPort: Int, val userlist: List>) {
// get timer list
it.result(MariaDB.ArrayListtoString(db.scheduleDB.List))
}
+
delete("List") {
// truncate timer table
if (db.scheduleDB.Clear()) {
@@ -655,6 +658,38 @@ class WebApp(val listenPort: Int, val userlist: List>) {
}
post("Add"){
// TODO add new schedule
+ // recheck lagi tambahan steph
+ val json: JsonNode = objectmapper.readTree(it.body())
+ val description = json.get("Description")?.asText("") ?: ""
+ val day = json.get("Day")?.asText("") ?: ""
+ val time = json.get("Time")?.asText("") ?: ""
+ val soundpath = json.get("Soundpath")?.asText("") ?: ""
+ val repeat = json.get("Repeat")?.asInt()?.toUByte() ?: 0u
+ val enable = json.get("Enable")?.asBoolean() ?: false
+ val broadcast_zones = json.get("BroadcastZones")?.asText("") ?: ""
+ val language = json.get("Language")?.asText("") ?: ""
+ if (ValidString(description)){
+ if (ValidString(day) && ValidScheduleDay(day)){
+ if (ValidString(time) && ValidScheduleTime(time)){
+ if (ValidString(soundpath) && ValidFile(soundpath)){
+ if (repeat in 0u..127u){
+ if (ValidString(broadcast_zones)){
+ val zones = broadcast_zones.split(";")
+ if (zones.all { zz -> db.broadcastDB.List.any { xx -> xx.description.equals(zz,true) } }){
+ if (ValidString(language) && Language.entries.any{ lang -> lang.name == language }){
+ val newvalue = ScheduleBank(0u, description, day, time, soundpath, repeat, enable, broadcast_zones, language)
+ if (db.scheduleDB.Add(newvalue)){
+ db.scheduleDB.Resort()
+ it.result(objectmapper.writeValueAsString(resultMessage("OK")))
+ } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add schedule to database")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Contains unsupported BroadcastZones")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid BroadcastZones")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Repeat, must be between 0-127")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Soundpath")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Time format, must be HH:mm")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Day format")))
+ } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Description")))
}
delete("DeleteByIndex/{index}") {
// delete by index
@@ -785,6 +820,17 @@ class WebApp(val listenPort: Int, val userlist: List>) {
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
+
+ //Kirim list message dan broadcast zones untuk ADD/Edit schedule
+ //TODO add at js file for messagebank and broadcast zones values
+ get("GetMessageAndBroadcastZones") {
+ val result = object {
+ //TODO filter message without input variable
+ val messages = db.messageDB.List.filter { mb -> !mb.Message_Detail.contains("[") && !mb.Message_Detail.contains("]") }
+ val broadcastzones = db.broadcastDB.List
+ }
+ it.result(objectmapper.writeValueAsString(result))
+ }
}
path("Log") {
get("List") { get1 ->
@@ -1084,6 +1130,73 @@ class WebApp(val listenPort: Int, val userlist: List>) {
}
}
}
+
+ // Steph : coba tambah untuk QueuePaging Table. Belum ada di JS file(?)
+ path("QueuePaging"){
+
+ get("List"){
+ it.result(MariaDB.ArrayListtoString(db.queuepagingDB.List))
+ }
+
+ delete("List"){
+ // truncate queue paging table
+ if (db.queuepagingDB.Clear()) {
+ db.queuepagingDB.Get()
+ it.result(objectmapper.writeValueAsString(resultMessage("OK")))
+ } else {
+ it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate queue paging table")))
+ }
+ }
+ delete("DeleteByIndex/{index}") {
+ // delete by index
+ val index = it.pathParam("index").toUIntOrNull()
+ if (index == null) {
+ it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
+ } else {
+ if (db.queuepagingDB.DeleteByIndex(index.toInt())) {
+ db.queuepagingDB.Resort()
+ it.result(objectmapper.writeValueAsString(resultMessage("OK")))
+ } else {
+ it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete queue paging with index $index")))
+ }
+ }
+ }
+
+ }
+
+ // Steph : coba tambah untuk QueueTable Table. Belum ada di JS file(?)
+ path("QueueTable"){
+
+ get("List"){
+ it.result(MariaDB.ArrayListtoString(db.queuetableDB.List))
+ }
+
+ delete("List"){
+ // truncate queue table
+ if (db.queuetableDB.Clear()) {
+ db.queuetableDB.Get()
+ it.result(objectmapper.writeValueAsString(resultMessage("OK")))
+ } else {
+ it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate queue sound table")))
+ }
+ }
+
+ delete("DeleteByIndex/{index}") {
+ // delete by index
+ val index = it.pathParam("index").toUIntOrNull()
+ if (index == null) {
+ it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
+ } else {
+ if (db.queuetableDB.DeleteByIndex(index.toInt())) {
+ db.queuetableDB.Resort()
+ it.result(objectmapper.writeValueAsString(resultMessage("OK")))
+ } else {
+ it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete queue sound with index $index")))
+ }
+ }
+ }
+ }
+
}
}
}.start(listenPort)