commit 14/10/2025

combine with coding steph
This commit is contained in:
2025-10-14 08:21:07 +07:00
7 changed files with 215 additions and 259 deletions

View File

@@ -260,7 +260,7 @@ class MainExtension01 {
val value = variables["AL"].orEmpty()
if (ValidString(value)) {
val airplane =
sb.firstOrNull { it.Category == Category.Airline_Name.name && it.TAG == value }
sb.firstOrNull { it.Category == Category.Airplane_Name.name && it.TAG == value }
if (airplane != null) {
if (ValidFile(airplane.Path)) {
files.add(airplane.Path)

View File

@@ -111,11 +111,13 @@ class BarixConnection(val index: UInt, var channel: String, val ipaddress: Strin
try {
val chunk = ByteArray(if (bb.remaining() > maxUDPsize) maxUDPsize else bb.remaining())
bb.get(chunk)
println("Buffer remain: $bufferRemain, sending chunk size: ${chunk.size}")
while(bufferRemain<chunk.size){
delay(10)
println("Waiting until buffer enough..")
}
udp.send(DatagramPacket(chunk, chunk.size, inet))
delay(1)
//delay(1)
} catch (e: Exception) {
cbFail.accept("SendData to $ipaddress:$port failed, message: ${e.message}")
return@launch

View File

@@ -37,8 +37,10 @@ class TCP_Barix_Command_Server {
val key : String = socket.inetAddress.hostAddress
socketMap[key] = socket
Logger.info { "Start communicating with Streamer Output with IP : $key" }
try{
val din = socket.getInputStream()
while (isActive) {
if (din.available()>0){
val bb = ByteArray(din.available())
din.read(bb)
@@ -62,6 +64,10 @@ class TCP_Barix_Command_Server {
}
}
}
} catch (ex:Exception){
Logger.error { "Error in communication with Streamer Output with IP $key, Message : ${ex.message}" }
}
Logger.info { "Finished communicating with Streamer Output with IP $key" }
socketMap.remove(key)

View File

@@ -349,7 +349,7 @@ class TCP_Android_Command_Server {
.filter { it.isNotBlank() }
.forEach { al ->
val sb = db.soundDB.List
.filter { it.Category.equals(Category.Airline_Name.name, true) }
.filter { it.Category.equals(Category.Airplane_Name.name, true) }
.filter { it.TAG.equals(al, true)}
.distinctBy { it.TAG }
VARAPTOTAL.addAll(sb)

View File

@@ -3,7 +3,7 @@ package content
@Suppress("unused")
enum class Category(name: String) {
Airline_Code("Airline_Code"),
Airline_Name("Airline_Name"),
Airplane_Name("Airplane_Name"),
AlphabetNumeric("AlphabetNumeric"),
City("City"),
Phrase("Phrase"),

View File

@@ -2280,7 +2280,7 @@ class MariaDB(
fun Find_Soundbank_AirplaneName(tag: String) : List<Soundbank>{
return soundDB.List
.filter{ it.Category== Category.Airline_Name.name }
.filter{ it.Category== Category.Airplane_Name.name }
.filter { it.TAG.equals(tag,true)}
}

View File

@@ -20,6 +20,7 @@ import database.BroadcastZones
import database.LanguageLink
import database.MariaDB
import database.Messagebank
import database.ScheduleBank
import database.SoundChannel
import database.Soundbank
import database.UserDB
@@ -75,15 +76,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
val username = it.formParam("username")
val password = it.formParam("password")
if (username == null || password == null) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Username and password are required")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Username and password are required")))
return@post
}
// Check if user exists in userlist
val user = userlist.find { it.first == username && it.second == password }
if (user == null) {
it.status(401)
.result(objectmapper.writeValueAsString(resultMessage("Invalid username or password")))
it.status(401).result(objectmapper.writeValueAsString(resultMessage("Invalid username or password")))
return@post
}
// Set user session
@@ -136,27 +135,15 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
}
"getPagingQueue" ->{
SendReply(
wsMessageContext,
cmd.command,
objectmapper.writeValueAsString(db.queuepagingDB.List)
)
SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(db.queuepagingDB.List))
}
"getAASQueue" ->{
SendReply(
wsMessageContext,
cmd.command,
objectmapper.writeValueAsString(db.queuetableDB.List)
)
SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(db.queuetableDB.List))
}
"getStreamerOutputs" -> {
SendReply(
wsMessageContext,
cmd.command,
objectmapper.writeValueAsString(StreamerOutputs.values.toList())
)
SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(StreamerOutputs.values.toList()))
}
else -> {
@@ -250,7 +237,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
}
get("AirlineTags") { ctx ->
val value = db.soundDB.List
.filter { it.Category == Category.Airline_Name.name }
.filter { it.Category == Category.Airplane_Name.name }
.distinctBy { it.TAG }
.sortedBy { it.TAG }
.map { KeyValueMessage(it.TAG, it.Description) }
@@ -280,32 +267,20 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
if (ValidFile(addvalue.Path)) {
if (db.soundDB.Add(addvalue)) {
db.soundDB.Resort()
it.result(
objectmapper.writeValueAsString(
resultMessage(
"OK"
)
)
)
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to add soundbank to database")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Path, file does not exist")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("TAG=${addvalue.TAG} already exists for the same Language=${addvalue.Language} and Category=${addvalue.Category}")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Path")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Language")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Category")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid TAG")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Description")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Path")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Category")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid TAG")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Description")))
} catch (_: Exception) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid request body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid request body")))
}
}
delete("List") {
@@ -314,8 +289,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.soundDB.Get()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to truncate soundbank table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate soundbank table")))
}
}
delete("DeleteByIndex/{index}") {
@@ -328,8 +302,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.soundDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to delete soundbank with index $index")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete soundbank with index $index")))
}
}
}
@@ -343,14 +316,12 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
val sb = db.soundDB.List.find { xx -> xx.index == index }
if (sb == null) {
// soundbank dengan index tersebut tidak ditemukan
it.status(404)
.result(objectmapper.writeValueAsString(resultMessage("Soundbank with index $index not found")))
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Soundbank with index $index not found")))
} else {
// soundbank dengan index tersebut ditemukan, sekarang update
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _description = json.get("Description").asText("")
val _tag = json.get("TAG").asText("")
@@ -373,8 +344,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
sb.Category = _category
changed = true
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Category")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Category")))
return@patch
}
}
@@ -387,8 +357,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
sb.Path = _path
changed = true
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Path, file does not exist")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Path, file does not exist")))
return@patch
}
}
@@ -396,8 +365,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
if (db.soundDB.UpdateByIndex(index.toInt(), sb)) {
db.soundDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to update soundbank with index $index")))
} else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to update soundbank with index $index")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for soundbank with index $index")))
}
@@ -416,15 +384,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
xlsxdata.write(out)
}
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to export soundbank to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export soundbank to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
@@ -433,12 +399,10 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.soundDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to import soundbank from XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import soundbank from XLSX")))
}
} catch (e: Exception) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
}
@@ -468,32 +432,17 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
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
)
val mb = Messagebank(0u, description, language, ann_id, voice_type, message_detail, message_tags)
if (db.messageDB.Add(mb)){
db.messageDB.Resort()
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")))
} 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
@@ -501,8 +450,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.messageDB.Get()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to truncate messagebank table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate messagebank table")))
}
}
delete("DeleteByIndex/{index}") {
@@ -515,8 +463,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.messageDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to delete messagebank with index $index")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete messagebank with index $index")))
}
}
}
@@ -528,13 +475,11 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
} else {
val mb = db.messageDB.List.find { xx -> xx.index == index }
if (mb == null) {
it.status(404)
.result(objectmapper.writeValueAsString(resultMessage("Messagebank with index $index not found")))
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Messagebank with index $index not found")))
} else {
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _description = json.get("Description").asText("")
val _language = json.get("Language").asText("")
@@ -561,8 +506,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
mb.Voice_Type = _voice_type
changed = true
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Voice_Type")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Voice_Type")))
return@patch
}
}
@@ -598,15 +542,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
xlsxdata.write(out)
}
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to export messagebank to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export messagebank to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
@@ -615,12 +557,10 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.messageDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to import messagebank from XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import messagebank from XLSX")))
}
} catch (e: Exception) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
}
@@ -643,23 +583,19 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.languageDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to add language link to database")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add language link to database")))
println("Failed to add language link to database")
}
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("TAG=$tag already exists")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("TAG=$tag already exists")))
println("TAG=$tag already exists")
}
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Contains unsupported language")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Contains unsupported language")))
println("Contains unsupported language")
}
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid tag or language")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid tag or language")))
println("Invalid tag")
}
}
@@ -669,8 +605,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.languageDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to truncate language link table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate language link table")))
}
}
delete("DeleteByIndex/{index}") {
@@ -683,8 +618,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.languageDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to delete language link with index $index")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete language link with index $index")))
}
}
}
@@ -696,13 +630,11 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
} else {
val ll = db.languageDB.List.find { xx -> xx.index == index }
if (ll == null) {
it.status(404)
.result(objectmapper.writeValueAsString(resultMessage("Language link with index $index not found")))
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Language link with index $index not found")))
} else {
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _tag = json.get("tag").asText("")
val _language = json.get("language").asText("")
@@ -739,15 +671,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
xlsxdata.write(out)
}
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to export language link to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export language link to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
@@ -756,12 +686,10 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.languageDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to import language link from XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import language link from XLSX")))
}
} catch (e: Exception) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
}
@@ -776,12 +704,53 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.scheduleDB.Get()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to truncate schedulebank table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate schedulebank table")))
}
}
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
@@ -793,8 +762,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.scheduleDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to delete schedule with index $index")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete schedule with index $index")))
}
}
}
@@ -806,13 +774,11 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
} else {
val sb = db.scheduleDB.List.find { xx -> xx.index == index }
if (sb == null) {
it.status(404)
.result(objectmapper.writeValueAsString(resultMessage("Schedule with index $index not found")))
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Schedule with index $index not found")))
} else {
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _description = json.get("Description").asText("")
val _time = json.get("Time").asText("")
@@ -832,8 +798,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
sb.Time = _time
changed = true
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Time format, must be HH:mm")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Time format, must be HH:mm")))
return@patch
}
}
@@ -842,8 +807,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
sb.Day = _day
changed = true
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Day format")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Day format")))
return@patch
}
}
@@ -868,8 +832,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
sb.Language = _language
changed = true
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Language")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language")))
return@patch
}
}
@@ -897,15 +860,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
xlsxdata.write(out)
}
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to export schedulebank to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export schedulebank to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
@@ -1085,10 +1046,20 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
.result(objectmapper.writeValueAsString(resultMessage("Failed to import user table from XLSX")))
}
} catch (e: Exception) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
//TODO kirim list message dan broadcast zones untuk ADD/Edit schedule
get("GetMessageAndBroadcastZones") {
val result = object {
//TODO filter message without input variable
val messages = db.messageDB.List
val broadcastzones = db.broadcastDB.List
}
it.result(objectmapper.writeValueAsString(result))
}
}
path("Log") {
get("List") { get1 ->
@@ -1108,8 +1079,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
}
} else {
println("Invalid logdate=$logdate")
get1.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid logdate")))
get1.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid logdate")))
}
}
get("ExportXLSX") { get1 ->
@@ -1132,11 +1102,9 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
xlsxdata.write(out)
}
} else {
get1.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to export log to XLSX")))
get1.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export log to XLSX")))
}
} else get1.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid logdate")))
} else get1.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid logdate")))
}
}
path("BroadcastZones"){
@@ -1155,8 +1123,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.broadcastDB.Get()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to truncate broadcast zones table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate broadcast zones table")))
}
}
post("Add") {
@@ -1173,16 +1140,11 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
if (db.broadcastDB.Add(newbp)){
db.broadcastDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to add broadcast zone to database")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Relay")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid Box")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid SoundChannel")))
} else it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid description")))
} else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add broadcast zone to database")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Relay")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Box")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid SoundChannel")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid description")))
}
delete("DeleteByIndex/{index}") {
// delete by index
@@ -1194,8 +1156,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.broadcastDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to delete broadcast zone with index $index")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete broadcast zone with index $index")))
}
}
}
@@ -1207,13 +1168,11 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
} else {
val bz = db.broadcastDB.List.find { xx -> xx.index == index }
if (bz == null) {
it.status(404)
.result(objectmapper.writeValueAsString(resultMessage("Broadcast zone with index $index not found")))
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Broadcast zone with index $index not found")))
} else {
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _description = json.get("description").asText("")
val _soundchannel = json.get("SoundChannel").asText("")
@@ -1261,15 +1220,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
xlsxdata.write(out)
}
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to export broadcast zones to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export broadcast zones to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
@@ -1278,12 +1235,10 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.broadcastDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to import broadcast zones from XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import broadcast zones from XLSX")))
}
} catch (e: Exception) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
@@ -1301,8 +1256,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.soundchannelDB.Get()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to truncate sound channel table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate sound channel table")))
}
}
patch("UpdateByIndex/{index}"){
@@ -1314,15 +1268,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
val sc = db.soundchannelDB.List.find { xx -> xx.index == index }
if (sc == null) {
println("Sound channel with index $index not found")
it.status(404)
.result(objectmapper.writeValueAsString(resultMessage("Sound channel with index $index not found")))
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Sound channel with index $index not found")))
} else {
val json: JsonNode = objectmapper.readTree(it.body())
println("Received JSON: $json")
if (json.isEmpty) {
println("UpdateByIndex with index=$index has empty body")
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _channel = json.get("description").asText("")
val _ip = json.get("ip").asText("")
@@ -1331,8 +1283,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
if (ValidIPV4(_ip)){
if (_channel.equals(sc.channel) && _ip.equals(sc.ip)) {
println("Nothing has changed for sound channel with index $index")
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for sound channel with index $index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for sound channel with index $index")))
return@patch
} else {
@@ -1359,13 +1310,11 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
} else {
println("Invalid IP address")
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid IP address")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid IP address")))
}
} else {
println("Invalid channel")
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Invalid channel")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid channel")))
}
}
}
@@ -1386,15 +1335,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
xlsxdata.write(out)
}
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to export sound channel to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export sound channel to XLSX")))
}
}
post("ImportXLSX"){
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
@@ -1403,8 +1350,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
db.soundchannelDB.Resort()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500)
.result(objectmapper.writeValueAsString(resultMessage("Failed to import sound channel from XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import sound channel from XLSX")))
}
} catch (e: Exception) {
it.status(400)
@@ -1444,6 +1390,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
}
// Steph : coba tambah untuk QueueTable Table. Belum ada di JS file(?)
path("QueueTable"){
get("List"){
@@ -1473,6 +1420,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
}
}
}
}
}
}.start(listenPort)