Compare commits

..

7 Commits

7 changed files with 276 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
@@ -135,28 +134,16 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
SendReply(wsMessageContext, cmd.command, "OK")
}
"getPagingQueue" -> {
SendReply(
wsMessageContext,
cmd.command,
objectmapper.writeValueAsString(db.queuepagingDB.List)
)
"getPagingQueue" ->{
SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(db.queuepagingDB.List))
}
"getAASQueue" -> {
SendReply(
wsMessageContext,
cmd.command,
objectmapper.writeValueAsString(db.queuetableDB.List)
)
"getAASQueue" ->{
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 -> {
@@ -194,19 +181,19 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
before { CheckUsers(it) }
}
path("api") {
path("VoiceType") {
get {
path("VoiceType"){
get{
it.result(objectmapper.writeValueAsString(VoiceType.entries.map { vt -> vt.name }))
}
}
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") {
get {
it.result(objectmapper.writeValueAsString(Language.entries.map { lang -> lang.name }))
it.result(objectmapper.writeValueAsString(Language.entries.map { lang -> lang.name }) )
}
}
path("ScheduleDay") {
@@ -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")))
}
}
}
@@ -462,38 +426,23 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
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.messageDB.Add(mb)) {
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.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")))
}
}
}
@@ -629,37 +569,33 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
// get language link list
it.result(MariaDB.ArrayListtoString(db.languageDB.List))
}
post("Add") {
post("Add"){
// Parse JSON from request body
val json: JsonNode = objectmapper.readTree(it.body())
val tag = json.get("tag").asText("")
val languages = json.get("language").asText("").split(";")
println("Add Language Link, tag=$tag, languages=$languages")
if (ValidString(tag)) {
if (languages.all { xx -> Language.entries.any { yy -> yy.name.equals(xx, true) } }) {
if (!db.languageDB.List.any { ll -> ll.TAG.equals(tag, true) }) {
if (ValidString(tag)){
if (languages.all { xx -> Language.entries.any { yy -> yy.name.equals(xx,true)} }){
if (!db.languageDB.List.any { ll -> ll.TAG.equals(tag,true) }) {
val newvalue = LanguageLink(0u, tag, languages.joinToString(";"))
if (db.languageDB.Add(newvalue)) {
if (db.languageDB.Add(newvalue)){
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") {
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
}
}
@@ -864,12 +828,11 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
changed = true
}
if (ValidString(_language) && _language != sb.Language) {
if (Language.entries.any { lang -> lang.name == _language }) {
if (Language.entries.any{ lang -> lang.name == _language }) {
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 ->
@@ -1118,9 +1088,9 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
println("Export log to XLSX, date=$logdate, filter=$logfilter")
if (ValiDateForLogHtml(logdate)) {
val xlsxdata = if (ValidString(logfilter)) {
db.Export_Log_XLSX(logdate.replace('-', '/'), logfilter)
db.Export_Log_XLSX(logdate.replace('-','/'), logfilter)
} else {
db.Export_Log_XLSX(logdate.replace('-', '/'), "")
db.Export_Log_XLSX(logdate.replace('-','/'), "")
}
if (xlsxdata != null) {
get1.header(
@@ -1132,14 +1102,12 @@ 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") {
path("BroadcastZones"){
get("List") {
it.result(MariaDB.ArrayListtoString(db.broadcastDB.List))
}
@@ -1155,34 +1123,28 @@ 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") {
val json: JsonNode = objectmapper.readTree(it.body())
val json : JsonNode = objectmapper.readTree(it.body())
val _description = json.get("description").asText("")
val _soundchannel = json.get("SoundChannel").asText("")
val _box = json.get("Box").asText("")
val _relay = json.get("Relay").asText("")
if (ValidString(_description)) {
if (ValidString(_soundchannel)) {
if (ValidString(_box)) {
if (ValidString(_relay)) {
val newbp = BroadcastZones(0u, _description, _soundchannel, _box, _relay)
if (db.broadcastDB.Add(newbp)) {
if (ValidString(_description)){
if (ValidString(_soundchannel)){
if (ValidString(_box)){
if (ValidString(_relay)){
val newbp = BroadcastZones(0u,_description,_soundchannel,_box,_relay)
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,18 +1235,16 @@ 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")))
}
}
}
path("SoundChannel") {
get("List") {
path("SoundChannel"){
get("List"){
it.result(MariaDB.ArrayListtoString(db.soundchannelDB.List))
}
get("SoundChannelDescriptions") {
@@ -1301,11 +1256,10 @@ 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}") {
patch("UpdateByIndex/{index}"){
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
@@ -1314,25 +1268,22 @@ 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("")
println("Update sound channel with index $index, channel=$_channel, ip=$_ip")
if (ValidString(_channel)) {
if (ValidIPV4(_ip)) {
if (ValidString(_channel)){
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")))
}
}
}
@@ -1374,7 +1323,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
}
get("ExportXLSX") {
get("ExportXLSX"){
val xlsxdata = db.soundchannelDB.Export_XLSX()
if (xlsxdata != null) {
it.header(
@@ -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") {
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)
@@ -1412,6 +1358,69 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
}
}
}
// 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)