commit 03/09/2025
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
package database
|
||||
|
||||
@Suppress("unused")
|
||||
data class BroadcastZones(val index: UInt, val description: String, val SoundChannel: String, val Box: String, val Relay: String)
|
||||
data class BroadcastZones(var index: UInt, var description: String, var SoundChannel: String, var Box: String, var Relay: String)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package database
|
||||
|
||||
@Suppress("unused")
|
||||
data class IpZones(val index:UInt, val description: String, val ip: String)
|
||||
data class IpZones(var index:UInt, var description: String, var ip: String)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package database
|
||||
|
||||
@Suppress("unused")
|
||||
data class LanguageLink(val index: UInt, val TAG: String, val Language: String)
|
||||
data class LanguageLink(var index: UInt, var TAG: String, var Language: String)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,11 +1,11 @@
|
||||
package database
|
||||
|
||||
data class Messagebank(
|
||||
val index : UInt,
|
||||
val Description: String,
|
||||
val Language: String,
|
||||
val ANN_ID : UInt,
|
||||
val Voice_Type: String,
|
||||
val Message_Detail: String,
|
||||
val Message_TAGS: String
|
||||
var index : UInt,
|
||||
var Description: String,
|
||||
var Language: String,
|
||||
var ANN_ID : UInt,
|
||||
var Voice_Type: String,
|
||||
var Message_Detail: String,
|
||||
var Message_TAGS: String
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package database
|
||||
|
||||
@Suppress("unused")
|
||||
data class QueueFids(val index: UInt, val ALCODE: String, val FLNUM: String, val ORIGIN: String, val ETAD: String, val FREMARK: String)
|
||||
data class QueueFids(var index: UInt, var ALCODE: String, var FLNUM: String, var ORIGIN: String, var ETAD: String, var FREMARK: String)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package database
|
||||
|
||||
@Suppress("unused")
|
||||
data class QueuePaging(val index: UInt, val Date_Time: String, val Source: String, val Type: String, val Message: String, val BroadcastZones: String)
|
||||
data class QueuePaging(var index: UInt, var Date_Time: String, var Source: String, var Type: String, var Message: String, var BroadcastZones: String)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package database
|
||||
|
||||
@Suppress("unused")
|
||||
data class QueueTable(val index: UInt, val Date_Time: String, val Source: String, val Type: String, val Message: String, val SB_TAGS: String, val BroadcastZones: String, val Repeat: UInt, val Language: String)
|
||||
data class QueueTable(var index: UInt, var Date_Time: String, var Source: String, var Type: String, var Message: String, var SB_TAGS: String, var BroadcastZones: String, var Repeat: UInt, var Language: String)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package database
|
||||
|
||||
@Suppress("unused")
|
||||
data class ScheduleBank(val index: UInt, val Description: String, val Day: String, val Time: String, val Soundpath: String, val Repeat: UByte, val Enable: Boolean, val BroadcastZones: String, val Language: String)
|
||||
data class ScheduleBank(var index: UInt, var Description: String, var Day: String, var Time: String, var Soundpath: String, var Repeat: UByte, var Enable: Boolean, var BroadcastZones: String, var Language: String)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package database
|
||||
|
||||
data class Soundbank(
|
||||
val index: UInt,
|
||||
val Description: String,
|
||||
val TAG : String,
|
||||
val Category: String,
|
||||
val Language: String,
|
||||
val VoiceType: String,
|
||||
val Path: String,
|
||||
var index: UInt,
|
||||
var Description: String,
|
||||
var TAG : String,
|
||||
var Category: String,
|
||||
var Language: String,
|
||||
var VoiceType: String,
|
||||
var Path: String,
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package database
|
||||
|
||||
@Suppress("unused")
|
||||
data class UserDB(val index: UInt, val username: String, val password: String, val location: String)
|
||||
data class UserDB(var index: UInt, var username: String, var password: String, var location: String)
|
||||
|
||||
@@ -2,17 +2,23 @@ package web
|
||||
|
||||
import codes.Somecodes
|
||||
import codes.Somecodes.Companion.ValidDate
|
||||
import codes.Somecodes.Companion.ValidFile
|
||||
import codes.Somecodes.Companion.ValidString
|
||||
import com.fasterxml.jackson.databind.JsonNode
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import content.Category
|
||||
import database.MariaDB
|
||||
import database.Soundbank
|
||||
import io.javalin.Javalin
|
||||
import io.javalin.apibuilder.ApiBuilder.before
|
||||
import io.javalin.apibuilder.ApiBuilder.delete
|
||||
import io.javalin.apibuilder.ApiBuilder.get
|
||||
import io.javalin.apibuilder.ApiBuilder.patch
|
||||
import io.javalin.apibuilder.ApiBuilder.path
|
||||
import io.javalin.apibuilder.ApiBuilder.post
|
||||
import io.javalin.apibuilder.ApiBuilder.ws
|
||||
import io.javalin.http.Context
|
||||
import io.javalin.json.JavalinJackson
|
||||
import io.javalin.websocket.WsMessageContext
|
||||
import java.time.LocalDateTime
|
||||
|
||||
@@ -36,6 +42,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
|
||||
config ->
|
||||
config.useVirtualThreads = true
|
||||
config.staticFiles.add("/webpage")
|
||||
config.jsonMapper(JavalinJackson(jacksonObjectMapper()))
|
||||
config.router.apiBuilder {
|
||||
path("/"){
|
||||
get { ctx ->
|
||||
@@ -133,143 +140,250 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
|
||||
}
|
||||
path("soundbank.html") {
|
||||
before {CheckUsers(it)}
|
||||
get("List"){
|
||||
// get soundbank list
|
||||
it.result(MariaDB.ArrayListtoString(db.SoundbankList))
|
||||
}
|
||||
delete("List"){
|
||||
// truncate soundbank table
|
||||
if (db.Clear_Soundbank()){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to truncate soundbank table")
|
||||
}
|
||||
}
|
||||
delete("DeleteByIndex/{index}"){
|
||||
// delete by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
it.status(400).result("Invalid index")
|
||||
} else{
|
||||
if (db.Delete_Soundbank_by_index(index)){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to delete soundbank with index $index")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
path("messagebank.html") {
|
||||
before { CheckUsers(it) }
|
||||
get("List"){
|
||||
// get messagebank list
|
||||
it.result(MariaDB.ArrayListtoString(db.MessagebankList))
|
||||
}
|
||||
delete("List"){
|
||||
// truncate messagebank table
|
||||
if (db.Clear_Messagebank()){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to truncate messagebank table")
|
||||
}
|
||||
}
|
||||
delete("DeleteByIndex/{index}"){
|
||||
// delete by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
it.status(400).result("Invalid index")
|
||||
} else{
|
||||
if (db.Delete_Messagebank_by_index(index)){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to delete messagebank with index $index")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
path("language.html") {
|
||||
before { CheckUsers(it) }
|
||||
get("List"){
|
||||
// get language link list
|
||||
it.result(MariaDB.ArrayListtoString(db.LanguageLinkList))
|
||||
}
|
||||
delete("List"){
|
||||
// truncate language link table
|
||||
if (db.Clear_LanguageLink()){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to truncate language link table")
|
||||
}
|
||||
}
|
||||
delete("DeleteByIndex/{index}"){
|
||||
// delete by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
it.status(400).result("Invalid index")
|
||||
} else{
|
||||
if (db.Delete_LanguageLink_by_index(index)){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to delete language link with index $index")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
path("log.html") {
|
||||
before { CheckUsers(it) }
|
||||
get("List/<logdate>/<logfilter>"){ get1 ->
|
||||
val logdate = get1.pathParam("logdate")
|
||||
val logfilter = get1.pathParam("logfilter")
|
||||
if (ValidDate(logdate)){
|
||||
if (ValidString(logfilter)){
|
||||
// ada log filter
|
||||
db.GetLog(logdate, logfilter){
|
||||
get1.result(MariaDB.ArrayListtoString(it))
|
||||
}
|
||||
} else {
|
||||
db.GetLog(logdate){
|
||||
get1.result(MariaDB.ArrayListtoString(it))
|
||||
}
|
||||
}
|
||||
} else get1.status(400).result("Invalid logdate")
|
||||
}
|
||||
|
||||
}
|
||||
path("setting.html") {
|
||||
before { CheckUsers(it) }
|
||||
|
||||
}
|
||||
path("timer.html") {
|
||||
before { CheckUsers(it) }
|
||||
get("List"){
|
||||
// get timer list
|
||||
it.result(MariaDB.ArrayListtoString(db.SchedulebankList))
|
||||
}
|
||||
delete("List"){
|
||||
// truncate timer table
|
||||
if (db.Clear_Schedulebank()){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to truncate schedulebank table")
|
||||
}
|
||||
path("api"){
|
||||
path("SoundBank"){
|
||||
get("List"){
|
||||
// get soundbank list
|
||||
it.result(MariaDB.ArrayListtoString(db.SoundbankList))
|
||||
}
|
||||
}
|
||||
delete("DeleteByIndex/{index}"){
|
||||
// delete by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
it.status(400).result("Invalid index")
|
||||
} else{
|
||||
if (db.Delete_Schedulebank_by_index(index)){
|
||||
post("Add"){
|
||||
try {
|
||||
val addvalue = objectmapper.readValue(it.body(), Soundbank::class.java)
|
||||
if (ValidString(addvalue.Description)){
|
||||
if (ValidString(addvalue.TAG)){
|
||||
if (ValidString(addvalue.Category)){
|
||||
if (ValidString(addvalue.Language)){
|
||||
if (ValidString(addvalue.Path)){
|
||||
// check apakah TAG sudah ada untuk language dan category yang sama
|
||||
val exists = db.SoundbankList.any { sb ->
|
||||
sb.TAG == addvalue.TAG && sb.Language == addvalue.Language && sb.Category == addvalue.Category
|
||||
}
|
||||
if (!exists){
|
||||
if (ValidFile(addvalue.Path)){
|
||||
if (db.Add_Soundbank(addvalue)){
|
||||
it.result("OK")
|
||||
} else it.status(500).result("Failed to add soundbank to database")
|
||||
} else it.status(400).result("Invalid Path, file does not exist")
|
||||
} else it.status(400).result("TAG=${addvalue.TAG} already exists for the same Language=${addvalue.Language} and Category=${addvalue.Category}")
|
||||
} else it.status(400).result("Invalid Path")
|
||||
} else it.status(400).result("Invalid Language")
|
||||
} else it.status(400).result("Invalid Category")
|
||||
} else it.status(400).result("Invalid TAG")
|
||||
} else it.status(400).result("Invalid Description")
|
||||
} catch (_: Exception){
|
||||
it.status(400).result("Invalid request body")
|
||||
}
|
||||
}
|
||||
delete("List"){
|
||||
// truncate soundbank table
|
||||
if (db.Clear_Soundbank()){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to delete schedule with index $index")
|
||||
it.status(500).result("Failed to truncate soundbank table")
|
||||
}
|
||||
}
|
||||
delete("DeleteByIndex/{index}"){
|
||||
// delete by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
it.status(400).result("Invalid index")
|
||||
} else{
|
||||
if (db.Delete_Soundbank_by_index(index)){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to delete soundbank with index $index")
|
||||
}
|
||||
}
|
||||
}
|
||||
patch("UpdateByIndex/{index}"){
|
||||
// update by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
// tidak ada path param index
|
||||
it.status(400).result("Invalid index")
|
||||
} else {
|
||||
val sb = db.SoundbankList.find{ xx -> xx.index == index }
|
||||
if (sb == null){
|
||||
// soundbank dengan index tersebut tidak ditemukan
|
||||
it.status(404).result("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("UpdateByIndex with index=$index has empty body")
|
||||
} else {
|
||||
val _description = json.get("Description").asText()
|
||||
val _tag = json.get("TAG").asText()
|
||||
val _category = json.get("Category").asText()
|
||||
val _language = json.get("Language").asText()
|
||||
val _path = json.get("Path").asText()
|
||||
var changed = false
|
||||
if (ValidString(_description) && _description!=sb.Description){
|
||||
sb.Description = _description
|
||||
changed = true
|
||||
}
|
||||
if (ValidString(_tag) && _tag!=sb.TAG){
|
||||
sb.TAG = _tag
|
||||
changed = true
|
||||
}
|
||||
if (ValidString(_category) && _category!=sb.Category){
|
||||
if (Category.entries.any {
|
||||
cat -> cat.name == _category
|
||||
}) {
|
||||
sb.Category = _category
|
||||
changed = true
|
||||
} else {
|
||||
it.status(400).result("Invalid Category")
|
||||
return@patch
|
||||
}
|
||||
}
|
||||
if (ValidString(_language) && _language!=sb.Language){
|
||||
sb.Language = _language
|
||||
changed = true
|
||||
}
|
||||
if (ValidString(_path) && _path!=sb.Path){
|
||||
if (ValidFile(_path)){
|
||||
sb.Path = _path
|
||||
changed = true
|
||||
} else {
|
||||
it.status(400).result("Invalid Path, file does not exist")
|
||||
return@patch
|
||||
}
|
||||
}
|
||||
if (changed){
|
||||
if (db.Update_Soundbank_by_index(index, sb)){
|
||||
it.result("OK")
|
||||
} else it.status(500).result("Failed to update soundbank with index $index")
|
||||
} else it.status(400).result("Nothing has changed for soundbank with index $index")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
get("ExportXLSX"){
|
||||
|
||||
}
|
||||
post("ImportXLSX"){
|
||||
val uploaded = it.uploadedFile("file")
|
||||
if (uploaded==null){
|
||||
it.status(400).result("No file uploaded")
|
||||
return@post
|
||||
}
|
||||
}
|
||||
}
|
||||
path("MessageBank"){
|
||||
get("List"){
|
||||
// get messagebank list
|
||||
it.result(MariaDB.ArrayListtoString(db.MessagebankList))
|
||||
}
|
||||
delete("List"){
|
||||
// truncate messagebank table
|
||||
if (db.Clear_Messagebank()){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to truncate messagebank table")
|
||||
}
|
||||
}
|
||||
delete("DeleteByIndex/{index}"){
|
||||
// delete by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
it.status(400).result("Invalid index")
|
||||
} else{
|
||||
if (db.Delete_Messagebank_by_index(index)){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to delete messagebank with index $index")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
path("LanguageLink"){
|
||||
get("List"){
|
||||
// get language link list
|
||||
it.result(MariaDB.ArrayListtoString(db.LanguageLinkList))
|
||||
}
|
||||
delete("List"){
|
||||
// truncate language link table
|
||||
if (db.Clear_LanguageLink()){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to truncate language link table")
|
||||
}
|
||||
}
|
||||
delete("DeleteByIndex/{index}"){
|
||||
// delete by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
it.status(400).result("Invalid index")
|
||||
} else{
|
||||
if (db.Delete_LanguageLink_by_index(index)){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to delete language link with index $index")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
path("ScheduleBank"){
|
||||
get("List"){
|
||||
// get timer list
|
||||
it.result(MariaDB.ArrayListtoString(db.SchedulebankList))
|
||||
}
|
||||
delete("List"){
|
||||
// truncate timer table
|
||||
if (db.Clear_Schedulebank()){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to truncate schedulebank table")
|
||||
}
|
||||
}
|
||||
delete("DeleteByIndex/{index}"){
|
||||
// delete by index
|
||||
val index = it.pathParam("index").toUIntOrNull()
|
||||
if (index == null){
|
||||
it.status(400).result("Invalid index")
|
||||
} else{
|
||||
if (db.Delete_Schedulebank_by_index(index)){
|
||||
it.result("OK")
|
||||
} else {
|
||||
it.status(500).result("Failed to delete schedule with index $index")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
path("Log"){
|
||||
get("List/<logdate>/<logfilter>"){ get1 ->
|
||||
val logdate = get1.pathParam("logdate")
|
||||
val logfilter = get1.pathParam("logfilter")
|
||||
if (ValidDate(logdate)){
|
||||
if (ValidString(logfilter)){
|
||||
// ada log filter
|
||||
db.GetLog(logdate, logfilter){
|
||||
get1.result(MariaDB.ArrayListtoString(it))
|
||||
}
|
||||
} else {
|
||||
db.GetLog(logdate){
|
||||
get1.result(MariaDB.ArrayListtoString(it))
|
||||
}
|
||||
}
|
||||
} else get1.status(400).result("Invalid logdate")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user