commit 03/09/2025

This commit is contained in:
2025-09-03 11:05:30 +07:00
parent ea1defa78e
commit ea04f8d316
14 changed files with 1272 additions and 210 deletions

View File

@@ -6,6 +6,7 @@
<inspection_tool class="DuplicatedCode" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> <inspection_tool class="DuplicatedCode" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="EnumEntryName" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> <inspection_tool class="EnumEntryName" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="FunctionName" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> <inspection_tool class="FunctionName" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="LocalVariableName" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="MethodNameSameAsClassName" enabled="false" level="WARNING" enabled_by_default="false" /> <inspection_tool class="MethodNameSameAsClassName" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="PropertyName" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> <inspection_tool class="PropertyName" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="RedundantCast" enabled="false" level="WARNING" enabled_by_default="false" /> <inspection_tool class="RedundantCast" enabled="false" level="WARNING" enabled_by_default="false" />

View File

@@ -22,5 +22,23 @@
<orderEntry type="library" name="fasterxml.jackson.module.kotlin" level="project" /> <orderEntry type="library" name="fasterxml.jackson.module.kotlin" level="project" />
<orderEntry type="library" name="fasterxml.jackson.core.databind" level="project" /> <orderEntry type="library" name="fasterxml.jackson.core.databind" level="project" />
<orderEntry type="library" name="github.oshi.core" level="project" /> <orderEntry type="library" name="github.oshi.core" level="project" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://C:/SLC/Apache POI/poi-5.4.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://C:/SLC/Apache POI/poi-ooxml-5.4.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component> </component>
</module> </module>

View File

@@ -1,4 +1,4 @@
package database package database
@Suppress("unused") @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)

View File

@@ -1,4 +1,4 @@
package database package database
@Suppress("unused") @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)

View File

@@ -1,4 +1,4 @@
package database package database
@Suppress("unused") @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

View File

@@ -1,11 +1,11 @@
package database package database
data class Messagebank( data class Messagebank(
val index : UInt, var index : UInt,
val Description: String, var Description: String,
val Language: String, var Language: String,
val ANN_ID : UInt, var ANN_ID : UInt,
val Voice_Type: String, var Voice_Type: String,
val Message_Detail: String, var Message_Detail: String,
val Message_TAGS: String var Message_TAGS: String
) )

View File

@@ -1,4 +1,4 @@
package database package database
@Suppress("unused") @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)

View File

@@ -1,4 +1,4 @@
package database package database
@Suppress("unused") @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)

View File

@@ -1,4 +1,4 @@
package database package database
@Suppress("unused") @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)

View File

@@ -1,4 +1,4 @@
package database package database
@Suppress("unused") @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)

View File

@@ -1,11 +1,11 @@
package database package database
data class Soundbank( data class Soundbank(
val index: UInt, var index: UInt,
val Description: String, var Description: String,
val TAG : String, var TAG : String,
val Category: String, var Category: String,
val Language: String, var Language: String,
val VoiceType: String, var VoiceType: String,
val Path: String, var Path: String,
) )

View File

@@ -1,4 +1,4 @@
package database package database
@Suppress("unused") @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)

View File

@@ -2,17 +2,23 @@ package web
import codes.Somecodes import codes.Somecodes
import codes.Somecodes.Companion.ValidDate import codes.Somecodes.Companion.ValidDate
import codes.Somecodes.Companion.ValidFile
import codes.Somecodes.Companion.ValidString import codes.Somecodes.Companion.ValidString
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import content.Category
import database.MariaDB import database.MariaDB
import database.Soundbank
import io.javalin.Javalin import io.javalin.Javalin
import io.javalin.apibuilder.ApiBuilder.before import io.javalin.apibuilder.ApiBuilder.before
import io.javalin.apibuilder.ApiBuilder.delete import io.javalin.apibuilder.ApiBuilder.delete
import io.javalin.apibuilder.ApiBuilder.get import io.javalin.apibuilder.ApiBuilder.get
import io.javalin.apibuilder.ApiBuilder.patch
import io.javalin.apibuilder.ApiBuilder.path import io.javalin.apibuilder.ApiBuilder.path
import io.javalin.apibuilder.ApiBuilder.post import io.javalin.apibuilder.ApiBuilder.post
import io.javalin.apibuilder.ApiBuilder.ws import io.javalin.apibuilder.ApiBuilder.ws
import io.javalin.http.Context import io.javalin.http.Context
import io.javalin.json.JavalinJackson
import io.javalin.websocket.WsMessageContext import io.javalin.websocket.WsMessageContext
import java.time.LocalDateTime import java.time.LocalDateTime
@@ -36,6 +42,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
config -> config ->
config.useVirtualThreads = true config.useVirtualThreads = true
config.staticFiles.add("/webpage") config.staticFiles.add("/webpage")
config.jsonMapper(JavalinJackson(jacksonObjectMapper()))
config.router.apiBuilder { config.router.apiBuilder {
path("/"){ path("/"){
get { ctx -> get { ctx ->
@@ -133,10 +140,56 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
} }
path("soundbank.html") { path("soundbank.html") {
before {CheckUsers(it)} before {CheckUsers(it)}
}
path("messagebank.html") {
before { CheckUsers(it) }
}
path("language.html") {
before { CheckUsers(it) }
}
path("log.html") {
before { CheckUsers(it) }
}
path("setting.html") {
before { CheckUsers(it) }
}
path("timer.html") {
before { CheckUsers(it) }
}
path("api"){
path("SoundBank"){
get("List"){ get("List"){
// get soundbank list // get soundbank list
it.result(MariaDB.ArrayListtoString(db.SoundbankList)) it.result(MariaDB.ArrayListtoString(db.SoundbankList))
} }
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"){ delete("List"){
// truncate soundbank table // truncate soundbank table
if (db.Clear_Soundbank()){ if (db.Clear_Soundbank()){
@@ -157,14 +210,83 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
it.status(500).result("Failed to delete soundbank with index $index") 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.html") { }
before { CheckUsers(it) } }
path("MessageBank"){
get("List"){ get("List"){
// get messagebank list // get messagebank list
it.result(MariaDB.ArrayListtoString(db.MessagebankList)) it.result(MariaDB.ArrayListtoString(db.MessagebankList))
@@ -191,8 +313,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
} }
} }
} }
path("language.html") { path("LanguageLink"){
before { CheckUsers(it) }
get("List"){ get("List"){
// get language link list // get language link list
it.result(MariaDB.ArrayListtoString(db.LanguageLinkList)) it.result(MariaDB.ArrayListtoString(db.LanguageLinkList))
@@ -218,34 +339,8 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
} }
} }
} }
} }
path("log.html") { path("ScheduleBank"){
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("List"){
// get timer list // get timer list
it.result(MariaDB.ArrayListtoString(db.SchedulebankList)) it.result(MariaDB.ArrayListtoString(db.SchedulebankList))
@@ -272,6 +367,25 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
} }
} }
} }
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")
}
}
}
} }
}.start(listenPort) }.start(listenPort)