commit 20/10/2025
This commit is contained in:
10
.gitignore
vendored
10
.gitignore
vendored
@@ -36,3 +36,13 @@ PagingResult/
|
|||||||
SoundBank/
|
SoundBank/
|
||||||
SoundbankResult/
|
SoundbankResult/
|
||||||
logs/
|
logs/
|
||||||
|
ARABIC/
|
||||||
|
CHINESE/
|
||||||
|
ENGLISH/
|
||||||
|
INDONESIA/
|
||||||
|
JAPANESE/
|
||||||
|
LOCAL/
|
||||||
|
chimedown.wav
|
||||||
|
chimeup.wav
|
||||||
|
silence1s.wav
|
||||||
|
silencehalf.wav
|
||||||
12
config.properties
Normal file
12
config.properties
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#Configuration file
|
||||||
|
#Tue Oct 21 17:17:50 WIB 2025
|
||||||
|
database.host=localhost
|
||||||
|
database.name=aas
|
||||||
|
database.password=admin
|
||||||
|
database.port=3306
|
||||||
|
database.user=admin
|
||||||
|
remark.FLD=
|
||||||
|
remark.GBD=
|
||||||
|
remark.GFC=
|
||||||
|
remark.GOP=
|
||||||
|
soundbank.directory=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\AAS_NewGen\\soundbank
|
||||||
@@ -61,6 +61,42 @@ function fill_schedulebanktablebody(vv) {
|
|||||||
$('#tablesize').text("Table Size: " + vv.length);
|
$('#tablesize').text("Table Size: " + vv.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert input date string yyyy-mm-dd to dd/mm/yyyy
|
||||||
|
* @param {String} value from input date, which is in format yyyy-mm-dd
|
||||||
|
* @returns {String} converted date in format dd/mm/yyyy
|
||||||
|
*/
|
||||||
|
function Convert_input_date_to_string(value){
|
||||||
|
if (value && value.length>0 && value.includes('-')){
|
||||||
|
let parts = value.split('-');
|
||||||
|
if (parts.length === 3) {
|
||||||
|
let year = parts[0];
|
||||||
|
let month = parts[1];
|
||||||
|
let day = parts[2];
|
||||||
|
return `${day}/${month}/${year}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert string date dd/mm/yyyy to input date yyyy-mm-dd
|
||||||
|
* @param {String} value string date in format dd/mm/yyyy
|
||||||
|
* @returns {String} converted date in format yyyy-mm-dd
|
||||||
|
*/
|
||||||
|
function Convert_string_to_input_date(value){
|
||||||
|
if (value && value.length>0 && value.includes('/')){
|
||||||
|
let parts = value.split('/');
|
||||||
|
if (parts.length === 3) {
|
||||||
|
let day = parts[0];
|
||||||
|
let month = parts[1];
|
||||||
|
let year = parts[2];
|
||||||
|
return `${year}-${month}-${day}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reload timer bank from server
|
* Reload timer bank from server
|
||||||
* @param {string} APIURL API URL endpoint, default "ScheduleBank/"
|
* @param {string} APIURL API URL endpoint, default "ScheduleBank/"
|
||||||
@@ -249,7 +285,7 @@ $(document).ready(function () {
|
|||||||
if ($scheduleeveryday.is(':checked')) {
|
if ($scheduleeveryday.is(':checked')) {
|
||||||
_Day = "Everyday";
|
_Day = "Everyday";
|
||||||
} else if ($schedulespecialdate.is(':checked')) {
|
} else if ($schedulespecialdate.is(':checked')) {
|
||||||
_Day = $scheduledate.val();
|
_Day = Convert_input_date_to_string($scheduledate.val());
|
||||||
} else if ($scheduleweekly.is(':checked')) {
|
} else if ($scheduleweekly.is(':checked')) {
|
||||||
_Day = $weeklyselect.val();
|
_Day = $weeklyselect.val();
|
||||||
}
|
}
|
||||||
@@ -322,59 +358,46 @@ $(document).ready(function () {
|
|||||||
/** @type {ScheduleBank} */
|
/** @type {ScheduleBank} */
|
||||||
let sr = {
|
let sr = {
|
||||||
index: Number(cells.eq(0).text()),
|
index: Number(cells.eq(0).text()),
|
||||||
description: cells.eq(1).text(),
|
Description: cells.eq(1).text(),
|
||||||
day: cells.eq(2).text(),
|
Day: cells.eq(2).text(),
|
||||||
time: cells.eq(3).text(),
|
Time: cells.eq(3).text(),
|
||||||
soundpath: cells.eq(4).text(),
|
Soundpath: cells.eq(4).text(),
|
||||||
repeat: cells.eq(5).text(),
|
Repeat: cells.eq(5).text(),
|
||||||
enable: cells.eq(6).text(),
|
Enable: cells.eq(6).text(),
|
||||||
broadcastZones: cells.eq(7).text(),
|
BroadcastZones: cells.eq(7).text(),
|
||||||
language: cells.eq(8).text()
|
Language: cells.eq(8).text()
|
||||||
}
|
}
|
||||||
if (confirm(`Are you sure to edit schedule [${sr.index}] Description=${sr.description}?`)) {
|
console.log('Editing schedule:', sr);
|
||||||
|
if (confirm(`Are you sure to edit schedule [${sr.index}] Description=${sr.Description}?`)) {
|
||||||
$schedulemodal.modal('show');
|
$schedulemodal.modal('show');
|
||||||
clearScheduleModal();
|
clearScheduleModal();
|
||||||
|
|
||||||
// fill the form with existing data
|
// fill the form with existing data
|
||||||
$scheduleid.val(sr.index);
|
$scheduleid.val(sr.index);
|
||||||
$scheduledescription.val(sr.description);
|
$scheduledescription.val(sr.Description);
|
||||||
let [hour, minute] = sr.time.split(':').map(num => parseInt(num, 10));
|
let [hour, minute] = sr.Time.split(':').map(num => parseInt(num, 10));
|
||||||
$schedulehour.val(hour.toString());
|
$schedulehour.val(hour.toString());
|
||||||
$scheduleminute.val(minute.toString());
|
$scheduleminute.val(minute.toString());
|
||||||
$schedulemessage.val(sr.soundpath);
|
$schedulemessage.val(sr.Soundpath).trigger('change');
|
||||||
$schedulerepeat.val(sr.repeat.toString());
|
$schedulerepeat.val(sr.Repeat);
|
||||||
$scheduleenable.prop('checked', sr.enable.toLowerCase() === 'true');
|
$scheduleenable.prop('checked', sr.Enable.toLowerCase() === 'true');
|
||||||
switch (sr.day) {
|
$languageselect.val(sr.Language.split(';')).trigger('change');
|
||||||
|
$schedulezones.val(sr.BroadcastZones.split(';')).trigger('change');
|
||||||
|
switch (sr.Day) {
|
||||||
case 'Everyday':
|
case 'Everyday':
|
||||||
$scheduleeveryday.click();
|
$scheduleeveryday.click();
|
||||||
break;
|
break;
|
||||||
case 'Sunday':
|
case 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday':
|
||||||
$schedulesunday.click();
|
console.log(`Setting weekly schedule for day: ${sr.Day}`);
|
||||||
break;
|
$scheduleweekly.click();
|
||||||
case 'Monday':
|
$weeklyselect.val(sr.Day).trigger('change');
|
||||||
$schedulemonday.click();
|
|
||||||
break;
|
|
||||||
case 'Tuesday':
|
|
||||||
$scheduletuesday.click();
|
|
||||||
break;
|
|
||||||
case 'Wednesday':
|
|
||||||
$schedulewednesday.click();
|
|
||||||
break;
|
|
||||||
case 'Thursday':
|
|
||||||
$schedulethursday.click();
|
|
||||||
break;
|
|
||||||
case 'Friday':
|
|
||||||
$schedulefriday.click();
|
|
||||||
break;
|
|
||||||
case 'Saturday':
|
|
||||||
$schedulesaturday.click();
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// check if the day is in format dd/mm/yyyy
|
// check if the day is in format dd/mm/yyyy
|
||||||
// and set the special date radio button and date input
|
// and set the special date radio button and date input
|
||||||
if (/^\d{2}\/\d{2}\/\d{4}$/.test(sr.day)) {
|
if (/^\d{2}\/\d{2}\/\d{4}$/.test(sr.Day)) {
|
||||||
$schedulespecialdate.click();
|
$schedulespecialdate.click();
|
||||||
$scheduledate.val(sr.day);
|
$scheduledate.val(Convert_string_to_input_date(sr.Day));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -578,7 +578,18 @@ $(document).ready(function () {
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
$('#logoutlink').click(() => {
|
$('#logoutlink').click(() => {
|
||||||
window.location.href = "login.html"
|
//window.location.href = "login.html"
|
||||||
})
|
fetch("/logout", {method: 'GET'})
|
||||||
|
.then(response => {
|
||||||
|
if (response.ok) {
|
||||||
|
window.location.href = "login.html";
|
||||||
|
} else {
|
||||||
|
alert("Logout failed: " + response.statusText);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
alert("Logout error: " + error.message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
13
src/Main.kt
13
src/Main.kt
@@ -5,6 +5,8 @@ import audio.UDPReceiver
|
|||||||
import barix.BarixConnection
|
import barix.BarixConnection
|
||||||
import barix.TCP_Barix_Command_Server
|
import barix.TCP_Barix_Command_Server
|
||||||
import codes.Somecodes
|
import codes.Somecodes
|
||||||
|
import codes.configFile
|
||||||
|
import codes.configKeys
|
||||||
import com.sun.jna.Platform
|
import com.sun.jna.Platform
|
||||||
import commandServer.TCP_Android_Command_Server
|
import commandServer.TCP_Android_Command_Server
|
||||||
import content.Category
|
import content.Category
|
||||||
@@ -31,7 +33,7 @@ lateinit var audioPlayer: AudioPlayer
|
|||||||
val StreamerOutputs: MutableMap<String, BarixConnection> = HashMap()
|
val StreamerOutputs: MutableMap<String, BarixConnection> = HashMap()
|
||||||
lateinit var udpreceiver: UDPReceiver
|
lateinit var udpreceiver: UDPReceiver
|
||||||
lateinit var tcpreceiver: TCPReceiver
|
lateinit var tcpreceiver: TCPReceiver
|
||||||
const val version = "0.0.9 (20/10/2025)"
|
const val version = "0.0.10 (20/10/2025)"
|
||||||
// AAS 64 channels
|
// AAS 64 channels
|
||||||
const val max_channel = 64
|
const val max_channel = 64
|
||||||
|
|
||||||
@@ -55,7 +57,8 @@ val contentCache = ContentCache()
|
|||||||
*/
|
*/
|
||||||
fun folder_preparation(){
|
fun folder_preparation(){
|
||||||
// sementara diset begini, nanti pake config file
|
// sementara diset begini, nanti pake config file
|
||||||
Somecodes.Soundbank_directory = Paths.get("c:\\soundbank")
|
//Somecodes.Soundbank_directory = Paths.get("c:\\soundbank")
|
||||||
|
Somecodes.Soundbank_directory = Paths.get(config.Get(configKeys.SOUNDBANK_DIRECTORY.key))
|
||||||
Files.createDirectories(Somecodes.SoundbankResult_directory)
|
Files.createDirectories(Somecodes.SoundbankResult_directory)
|
||||||
Files.createDirectories(Somecodes.PagingResult_directory)
|
Files.createDirectories(Somecodes.PagingResult_directory)
|
||||||
Files.createDirectories(Somecodes.Soundbank_directory)
|
Files.createDirectories(Somecodes.Soundbank_directory)
|
||||||
@@ -94,6 +97,8 @@ fun files_preparation(){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lateinit var config : configFile;
|
||||||
|
|
||||||
// Application start here
|
// Application start here
|
||||||
fun main() {
|
fun main() {
|
||||||
if (Platform.isWindows()) {
|
if (Platform.isWindows()) {
|
||||||
@@ -102,6 +107,7 @@ fun main() {
|
|||||||
}
|
}
|
||||||
Logger.info { "Starting AAS New Generation version $version" }
|
Logger.info { "Starting AAS New Generation version $version" }
|
||||||
|
|
||||||
|
config = configFile()
|
||||||
folder_preparation()
|
folder_preparation()
|
||||||
|
|
||||||
audioPlayer = AudioPlayer(44100) // 44100 Hz sampling rate
|
audioPlayer = AudioPlayer(44100) // 44100 Hz sampling rate
|
||||||
@@ -109,8 +115,10 @@ fun main() {
|
|||||||
|
|
||||||
files_preparation()
|
files_preparation()
|
||||||
|
|
||||||
|
|
||||||
db = MariaDB()
|
db = MariaDB()
|
||||||
|
|
||||||
|
|
||||||
val subcode01 = MainExtension01()
|
val subcode01 = MainExtension01()
|
||||||
|
|
||||||
// Coroutine untuk cek Paging Queue dan AAS Queue setiap detik
|
// Coroutine untuk cek Paging Queue dan AAS Queue setiap detik
|
||||||
@@ -171,6 +179,7 @@ fun main() {
|
|||||||
val _streamer = StreamerOutputs[cmd.ipaddress]
|
val _streamer = StreamerOutputs[cmd.ipaddress]
|
||||||
val _sc = db.soundchannelDB.List.find { it.ip == cmd.ipaddress }
|
val _sc = db.soundchannelDB.List.find { it.ip == cmd.ipaddress }
|
||||||
if (_streamer == null) {
|
if (_streamer == null) {
|
||||||
|
|
||||||
// belum create BarixConnection untuk ipaddress ini
|
// belum create BarixConnection untuk ipaddress ini
|
||||||
//Logger.info { "New Streamer Output connection from ${cmd.ipaddress}" }
|
//Logger.info { "New Streamer Output connection from ${cmd.ipaddress}" }
|
||||||
if (_sc != null) {
|
if (_sc != null) {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import java.util.function.Consumer
|
|||||||
* @param outputFilePath The path to the file where the received data will be written.
|
* @param outputFilePath The path to the file where the received data will be written.
|
||||||
* @param senderIP The IP address of the sender from which to accept packets.
|
* @param senderIP The IP address of the sender from which to accept packets.
|
||||||
*/
|
*/
|
||||||
class UDPReceiverToFile(listeningAddress: String, listeningPort: Int, val samplingrate: Int=44100, val channel: Int=1, val outputFilePath: String, val senderIP: String) {
|
class UDPReceiverToFile(listeningAddress: String, listeningPort: Int, val samplingrate: Int=44100, val channel: Int=1, val outputFilePath: String, val senderIP: String) {
|
||||||
|
|
||||||
private var socket: DatagramSocket? = null
|
private var socket: DatagramSocket? = null
|
||||||
private val bass : Bass = Bass.Instance
|
private val bass : Bass = Bass.Instance
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ class UDPSenderFromFile(val fileName: String, val bytesPerPackage: Int=1024, tar
|
|||||||
if (handle!=0){
|
if (handle!=0){
|
||||||
// test buka file berhasil, tutup lagi
|
// test buka file berhasil, tutup lagi
|
||||||
bass.BASS_StreamFree(handle)
|
bass.BASS_StreamFree(handle)
|
||||||
if (targetPort>0 && targetPort<65535){
|
//if (targetPort>0 && targetPort<65535){
|
||||||
|
if (targetPort in 0..65535){
|
||||||
if (targetIP.isNotEmpty()){
|
if (targetIP.isNotEmpty()){
|
||||||
var validIPs = true
|
var validIPs = true
|
||||||
for(ip in targetIP){
|
for(ip in targetIP){
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ class TCP_Barix_Command_Server {
|
|||||||
|
|
||||||
}
|
}
|
||||||
} catch (ex:Exception){
|
} catch (ex:Exception){
|
||||||
Logger.error { "Error in communication with Streamer Output with IP $key, Message : ${ex.message}" }
|
if (ex.message!=null) Logger.error { "Error in communication with Streamer Output with IP $key, Message : ${ex.message}" }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.info { "Finished communicating with Streamer Output with IP $key" }
|
Logger.info { "Finished communicating with Streamer Output with IP $key" }
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ class Somecodes {
|
|||||||
val datetimeformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")
|
val datetimeformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")
|
||||||
val dateformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy")
|
val dateformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy")
|
||||||
val dateformat2: DateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
|
val dateformat2: DateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
|
||||||
val timeformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm:ss")
|
val timeformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss")
|
||||||
val timeformat2: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm")
|
val timeformat2: DateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm")
|
||||||
val filenameformat: DateTimeFormatter = DateTimeFormatter.ofPattern("ddMMyyyy_HHmmss")
|
val filenameformat: DateTimeFormatter = DateTimeFormatter.ofPattern("ddMMyyyy_HHmmss")
|
||||||
const val KB_threshold = 1024.0
|
const val KB_threshold = 1024.0
|
||||||
const val MB_threshold = KB_threshold * 1024.0
|
const val MB_threshold = KB_threshold * 1024.0
|
||||||
|
|||||||
66
src/codes/configFile.kt
Normal file
66
src/codes/configFile.kt
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
package codes
|
||||||
|
|
||||||
|
import org.tinylog.Logger
|
||||||
|
import java.nio.file.Files
|
||||||
|
import java.nio.file.Paths
|
||||||
|
import java.util.Properties
|
||||||
|
|
||||||
|
class configFile {
|
||||||
|
private val config : Properties = Properties()
|
||||||
|
private val configFilePath = Paths.get(Somecodes.current_directory, "config.properties")
|
||||||
|
init{
|
||||||
|
|
||||||
|
if (Files.exists(configFilePath)) {
|
||||||
|
try{
|
||||||
|
config.load(Files.newInputStream(configFilePath))
|
||||||
|
if (HaveAllKeys()){
|
||||||
|
Logger.info { "Configuration file loaded successfully." }
|
||||||
|
} else {
|
||||||
|
Logger.warn { "Configuration file is missing required keys. Creating default configuration." }
|
||||||
|
CreateDefaultConfig()
|
||||||
|
}
|
||||||
|
} catch (e: Exception){
|
||||||
|
Logger.error { "Failed to load config file: ${e.message}" }
|
||||||
|
CreateDefaultConfig()
|
||||||
|
}
|
||||||
|
} else CreateDefaultConfig()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Get(key: String) : String{
|
||||||
|
return config[key]?.toString() ?: ""
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Set(key: String, value: String){
|
||||||
|
config[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Save(){
|
||||||
|
try{
|
||||||
|
config.store(Files.newOutputStream(configFilePath), "Configuration file")
|
||||||
|
Logger.info { "Configuration file saved successfully." }
|
||||||
|
} catch (e: Exception){
|
||||||
|
Logger.error { "Failed to save config file: ${e.message}" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun HaveAllKeys() : Boolean{
|
||||||
|
return configKeys.values().all { config.containsKey(it.key) }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun CreateDefaultConfig(){
|
||||||
|
config.clear()
|
||||||
|
// create default config file
|
||||||
|
config[configKeys.DATABASE_HOST.key] = "localhost"
|
||||||
|
config[configKeys.DATABASE_PORT.key] = "3306"
|
||||||
|
config[configKeys.DATABASE_USER.key] = "admin"
|
||||||
|
config[configKeys.DATABASE_PASSWORD.key] = "admin"
|
||||||
|
config[configKeys.DATABASE_NAME.key] = "aas"
|
||||||
|
config[configKeys.SOUNDBANK_DIRECTORY.key] = Paths.get(Somecodes.current_directory, "soundbank").toString()
|
||||||
|
config[configKeys.REMARK_GOP.key] = ""
|
||||||
|
config[configKeys.REMARK_GBD.key] = ""
|
||||||
|
config[configKeys.REMARK_GFC.key] = ""
|
||||||
|
config[configKeys.REMARK_FLD.key] = ""
|
||||||
|
Save()
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/codes/configKeys.kt
Normal file
14
src/codes/configKeys.kt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package codes
|
||||||
|
|
||||||
|
enum class configKeys(val key: String) {
|
||||||
|
DATABASE_HOST("database.host"),
|
||||||
|
DATABASE_PORT("database.port"),
|
||||||
|
DATABASE_USER("database.user"),
|
||||||
|
DATABASE_PASSWORD("database.password"),
|
||||||
|
DATABASE_NAME("database.name"),
|
||||||
|
SOUNDBANK_DIRECTORY("soundbank.directory"),
|
||||||
|
REMARK_GOP("remark.GOP"),
|
||||||
|
REMARK_GBD("remark.GBD"),
|
||||||
|
REMARK_GFC("remark.GFC"),
|
||||||
|
REMARK_FLD("remark.FLD")
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package database
|
|||||||
import codes.Somecodes.Companion.ValiDateForLogHtml
|
import codes.Somecodes.Companion.ValiDateForLogHtml
|
||||||
import codes.Somecodes.Companion.ValidScheduleDay
|
import codes.Somecodes.Companion.ValidScheduleDay
|
||||||
import codes.Somecodes.Companion.toJsonString
|
import codes.Somecodes.Companion.toJsonString
|
||||||
|
import config
|
||||||
import content.Category
|
import content.Category
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
@@ -13,6 +14,7 @@ import org.tinylog.Logger
|
|||||||
import java.sql.Connection
|
import java.sql.Connection
|
||||||
import java.sql.DriverManager
|
import java.sql.DriverManager
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
import codes.configKeys
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class to manage a connection to a MariaDB database.
|
* A class to manage a connection to a MariaDB database.
|
||||||
@@ -25,11 +27,11 @@ import java.util.function.Consumer
|
|||||||
*/
|
*/
|
||||||
@Suppress("unused", "SqlSourceToSinkFlow")
|
@Suppress("unused", "SqlSourceToSinkFlow")
|
||||||
class MariaDB(
|
class MariaDB(
|
||||||
address: String = "localhost",
|
address: String = config.Get(configKeys.DATABASE_HOST.key),
|
||||||
port: Int = 3306,
|
port: Int = config.Get(configKeys.DATABASE_PORT.key).toInt(),
|
||||||
dbName: String = "aas",
|
dbName: String = config.Get(configKeys.DATABASE_NAME.key),
|
||||||
username: String = "admin",
|
username: String = config.Get(configKeys.DATABASE_USER.key),
|
||||||
password: String = "admin"
|
password: String = config.Get(configKeys.DATABASE_PASSWORD.key)
|
||||||
) {
|
) {
|
||||||
var connected: Boolean = false
|
var connected: Boolean = false
|
||||||
|
|
||||||
@@ -54,8 +56,8 @@ class MariaDB(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun ValidTime(time: String): Boolean {
|
fun ValidTime(time: String): Boolean {
|
||||||
// Check if the time is in the format HH:MM:SS
|
// Check if the time is in the format HH:MM
|
||||||
val regex = Regex("""^\d{2}:\d{2}:\d{2}$""")
|
val regex = Regex("""^\d{2}:\d{2}$""")
|
||||||
return regex.matches(time)
|
return regex.matches(time)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,9 +162,11 @@ class MariaDB(
|
|||||||
Logger.info("Soundbank added: ${data.Description}" as Any)
|
Logger.info("Soundbank added: ${data.Description}" as Any)
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS", "No soundbank entry added for: ${data.Description}")
|
||||||
Logger.warn("No soundbank entry added for: ${data.Description}" as Any)
|
Logger.warn("No soundbank entry added for: ${data.Description}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS", "Failed to add Soundbank: ${data.Description}. Error: ${e.message}")
|
||||||
Logger.error("Error adding soundbank entry: ${e.message}" as Any)
|
Logger.error("Error adding soundbank entry: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -187,9 +191,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk soundbank insert successful: ${data.size} entries" as Any)
|
Logger.info("Bulk soundbank insert successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Sound Bank Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Sound Bank. Error: ${e.message}")
|
||||||
Logger.error("Error adding soundbank entries: ${e.message}" as Any)
|
Logger.error("Error adding soundbank entries: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -212,9 +218,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "Soundbank updated at index $index: ${data.Description}; TAG: ${data.TAG}; Category: ${data.Category}; Language: ${data.Language}; VoiceType: ${data.VoiceType}; Path: ${data.Path}")
|
Add_Log("AAS", "Soundbank updated at index $index: ${data.Description}; TAG: ${data.TAG}; Category: ${data.Category}; Language: ${data.Language}; VoiceType: ${data.VoiceType}; Path: ${data.Path}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS", "Failed updating Sound Bank at index $index for: ${data.Description}")
|
||||||
Logger.warn("No soundbank entry updated at index $index for: ${data.Description}" as Any)
|
Logger.warn("No soundbank entry updated at index $index for: ${data.Description}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS", "Failed updating Sound Bank at index $index. Error: ${e.message}")
|
||||||
Logger.error("Error updating soundbank entry at index $index: ${e.message}" as Any)
|
Logger.error("Error updating soundbank entry at index $index: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -365,9 +373,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "Messagebank added: ${data.Description}; Language: ${data.Language}; ANN_ID: ${data.ANN_ID}; Voice_Type: ${data.Voice_Type}")
|
Add_Log("AAS", "Messagebank added: ${data.Description}; Language: ${data.Language}; ANN_ID: ${data.ANN_ID}; Voice_Type: ${data.Voice_Type}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS","Failed adding Message Bank for: ${data.Description}")
|
||||||
Logger.warn("No messagebank entry added for: ${data.Description}" as Any)
|
Logger.warn("No messagebank entry added for: ${data.Description}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed adding Message Bank for: ${data.Description}. Error: ${e.message}")
|
||||||
Logger.error("Error adding messagebank entry: ${e.message}" as Any)
|
Logger.error("Error adding messagebank entry: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -391,9 +401,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk messagebank insert successful: ${data.size} entries" as Any)
|
Logger.info("Bulk messagebank insert successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Message Bank Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Message Bank. Error: ${e.message}")
|
||||||
Logger.error("Error adding messagebank entries: ${e.message}" as Any)
|
Logger.error("Error adding messagebank entries: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -572,9 +584,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "Language link added: ${data.TAG} -> ${data.Language}")
|
Add_Log("AAS", "Language link added: ${data.TAG} -> ${data.Language}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS","Failed adding Language Link for: ${data.TAG} -> ${data.Language}.")
|
||||||
Logger.warn("No language link entry added for: ${data.TAG} -> ${data.Language}" as Any)
|
Logger.warn("No language link entry added for: ${data.TAG} -> ${data.Language}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed adding Language Link for: ${data.TAG} -> ${data.Language}. Error: ${e.message}")
|
||||||
Logger.error("Error adding language link entry: ${e.message}" as Any)
|
Logger.error("Error adding language link entry: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -585,7 +599,9 @@ class MariaDB(
|
|||||||
connection.autoCommit = false
|
connection.autoCommit = false
|
||||||
val sql = "INSERT INTO ${super.dbName} (TAG, Language) VALUES (?, ?)"
|
val sql = "INSERT INTO ${super.dbName} (TAG, Language) VALUES (?, ?)"
|
||||||
val statement = connection.prepareStatement(sql)
|
val statement = connection.prepareStatement(sql)
|
||||||
for (ll in List) {
|
|
||||||
|
//for (ll in List) {
|
||||||
|
for (ll in data) {
|
||||||
statement.setString(1, ll.TAG)
|
statement.setString(1, ll.TAG)
|
||||||
statement.setString(2, ll.Language)
|
statement.setString(2, ll.Language)
|
||||||
statement.addBatch()
|
statement.addBatch()
|
||||||
@@ -593,9 +609,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk languagelinking insert successful: ${List.size} entries" as Any)
|
Logger.info("Bulk languagelinking insert successful: ${List.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Language Link Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Language Link. Error: ${e.message}")
|
||||||
Logger.error("Error adding languagelinking entries: ${e.message}" as Any)
|
Logger.error("Error adding languagelinking entries: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -614,9 +632,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "Language link updated at index $index: ${data.TAG} -> ${data.Language}")
|
Add_Log("AAS", "Language link updated at index $index: ${data.TAG} -> ${data.Language}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS", "Failed updating Language Link at index $index for: ${data.TAG} -> ${data.Language}")
|
||||||
Logger.warn("No language link entry updated at index $index for: ${data.TAG} -> ${data.Language}" as Any)
|
Logger.warn("No language link entry updated at index $index for: ${data.TAG} -> ${data.Language}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS", "Failed updating Language Link at index $index. Error: ${e.message}")
|
||||||
Logger.error("Error updating language link entry at index $index: ${e.message}" as Any)
|
Logger.error("Error updating language link entry at index $index: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -753,7 +773,7 @@ class MariaDB(
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
val statement =
|
val statement =
|
||||||
connection.prepareStatement("INSERT INTO ${super.dbName} (Description, Day, Time, Soundpath, Repeat, Enable, BroadcastZones, Language) VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
|
connection.prepareStatement("INSERT INTO ${super.dbName} (Description, Day, Time, Soundpath, `Repeat`, Enable, BroadcastZones, Language) VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
|
||||||
statement?.setString(1, data.Description)
|
statement?.setString(1, data.Description)
|
||||||
statement?.setString(2, data.Day)
|
statement?.setString(2, data.Day)
|
||||||
statement?.setString(3, data.Time)
|
statement?.setString(3, data.Time)
|
||||||
@@ -768,9 +788,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "Schedulebank added: ${data.Description}; Day: ${data.Day}; Time: ${data.Time}; Soundpath: ${data.Soundpath}; Repeat: ${data.Repeat}; Enable: ${data.Enable}; BroadcastZones: ${data.BroadcastZones}; Language: ${data.Language}")
|
Add_Log("AAS", "Schedulebank added: ${data.Description}; Day: ${data.Day}; Time: ${data.Time}; Soundpath: ${data.Soundpath}; Repeat: ${data.Repeat}; Enable: ${data.Enable}; BroadcastZones: ${data.BroadcastZones}; Language: ${data.Language}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS","Failed adding Schedule Bank for: ${data.Description}.")
|
||||||
Logger.warn("No schedulebank entry added for: ${data.Description}" as Any)
|
Logger.warn("No schedulebank entry added for: ${data.Description}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed adding Schedule Bank for: ${data.Description}. Error: ${e.message}")
|
||||||
Logger.error("Error adding schedulebank entry: ${e.message}" as Any)
|
Logger.error("Error adding schedulebank entry: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -780,7 +802,7 @@ class MariaDB(
|
|||||||
try {
|
try {
|
||||||
connection.autoCommit = false
|
connection.autoCommit = false
|
||||||
val sql =
|
val sql =
|
||||||
"INSERT INTO ${super.dbName} (Description, Day, Time, Soundpath, Repeat, Enable, BroadcastZones, Language) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
|
"INSERT INTO ${super.dbName} (Description, Day, Time, Soundpath, `Repeat`, Enable, BroadcastZones, Language) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
|
||||||
val statement = connection.prepareStatement(sql)
|
val statement = connection.prepareStatement(sql)
|
||||||
for (sb in data) {
|
for (sb in data) {
|
||||||
if (!ValidDate(sb.Day) || !ValidTime(sb.Time)) {
|
if (!ValidDate(sb.Day) || !ValidTime(sb.Time)) {
|
||||||
@@ -800,9 +822,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk schedulebank insert successful: ${data.size} entries" as Any)
|
Logger.info("Bulk schedulebank insert successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Schedule Bank Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Schedule Bank. Error: ${e.message}")
|
||||||
Logger.error("Error adding schedulebank entries: ${e.message}" as Any)
|
Logger.error("Error adding schedulebank entries: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -820,7 +844,7 @@ class MariaDB(
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
val statement =
|
val statement =
|
||||||
connection.prepareStatement("UPDATE ${super.dbName} SET Description = ?, Day = ?, Time = ?, Soundpath = ?, Repeat = ?, Enable = ?, BroadcastZones = ?, Language = ? WHERE `index` = ?")
|
connection.prepareStatement("UPDATE ${super.dbName} SET Description = ?, Day = ?, Time = ?, Soundpath = ?, `Repeat` = ?, Enable = ?, BroadcastZones = ?, Language = ? WHERE `index` = ?")
|
||||||
statement?.setString(1, data.Description)
|
statement?.setString(1, data.Description)
|
||||||
statement?.setString(2, data.Day)
|
statement?.setString(2, data.Day)
|
||||||
statement?.setString(3, data.Time)
|
statement?.setString(3, data.Time)
|
||||||
@@ -836,9 +860,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "Schedulebank updated at index $index: ${data.Description}; Day: ${data.Day}; Time: ${data.Time}; Soundpath: ${data.Soundpath}; Repeat: ${data.Repeat}; Enable: ${data.Enable}; BroadcastZones: ${data.BroadcastZones}; Language: ${data.Language}")
|
Add_Log("AAS", "Schedulebank updated at index $index: ${data.Description}; Day: ${data.Day}; Time: ${data.Time}; Soundpath: ${data.Soundpath}; Repeat: ${data.Repeat}; Enable: ${data.Enable}; BroadcastZones: ${data.BroadcastZones}; Language: ${data.Language}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS", "Failed updating Schedule Bank at index $index for: ${data.Description}.")
|
||||||
Logger.warn("No schedulebank entry updated at index $index for: ${data.Description}" as Any)
|
Logger.warn("No schedulebank entry updated at index $index for: ${data.Description}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS", "Failed updating Schedule Bank at index $index. Error: ${e.message}")
|
||||||
Logger.error("Error updating schedulebank entry at index $index: ${e.message}" as Any)
|
Logger.error("Error updating schedulebank entry at index $index: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -851,9 +877,9 @@ class MariaDB(
|
|||||||
// use a temporary table to reorder the index
|
// use a temporary table to reorder the index
|
||||||
statement?.executeUpdate("CREATE TABLE IF NOT EXISTS $tempdb_name LIKE ${super.dbName}")
|
statement?.executeUpdate("CREATE TABLE IF NOT EXISTS $tempdb_name LIKE ${super.dbName}")
|
||||||
statement?.executeUpdate("TRUNCATE TABLE $tempdb_name")
|
statement?.executeUpdate("TRUNCATE TABLE $tempdb_name")
|
||||||
statement?.executeUpdate("INSERT INTO $tempdb_name (Description, Day, Time, Soundpath, Repeat, Enable, BroadcastZones, Language) SELECT Description, Day, Time, Soundpath, Repeat, Enable, BroadcastZones, Language FROM ${super.dbName} ORDER BY Day , Time ")
|
statement?.executeUpdate("INSERT INTO $tempdb_name (Description, Day, Time, Soundpath, `Repeat`, Enable, BroadcastZones, Language) SELECT Description, Day, Time, Soundpath, `Repeat`, Enable, BroadcastZones, Language FROM ${super.dbName} ORDER BY Day , Time ")
|
||||||
statement?.executeUpdate("TRUNCATE TABLE ${super.dbName}")
|
statement?.executeUpdate("TRUNCATE TABLE ${super.dbName}")
|
||||||
statement?.executeUpdate("INSERT INTO ${super.dbName} (Description, Day, Time, Soundpath, Repeat, Enable, BroadcastZones, Language) SELECT Description, Day, Time, Soundpath, Repeat, Enable, BroadcastZones, Language FROM $tempdb_name")
|
statement?.executeUpdate("INSERT INTO ${super.dbName} (Description, Day, Time, Soundpath, `Repeat`, Enable, BroadcastZones, Language) SELECT Description, Day, Time, Soundpath, `Repeat`, Enable, BroadcastZones, Language FROM $tempdb_name")
|
||||||
statement?.executeUpdate("DROP TABLE $tempdb_name")
|
statement?.executeUpdate("DROP TABLE $tempdb_name")
|
||||||
Logger.info("${super.dbName} table resorted by Day and Time" as Any)
|
Logger.info("${super.dbName} table resorted by Day and Time" as Any)
|
||||||
// reload the local list
|
// reload the local list
|
||||||
@@ -1014,9 +1040,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "Broadcast zone added: ${data.description}; SoundChannel: ${data.SoundChannel}; id: ${data.id}; bp: ${data.bp}")
|
Add_Log("AAS", "Broadcast zone added: ${data.description}; SoundChannel: ${data.SoundChannel}; id: ${data.id}; bp: ${data.bp}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS","Failed adding Broadcast Zone for: ${data.description}.")
|
||||||
Logger.warn("No broadcast zone entry added for: ${data.description}" as Any)
|
Logger.warn("No broadcast zone entry added for: ${data.description}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed adding Broadcast Zone for: ${data.description}. Error: ${e.message}")
|
||||||
Logger.error("Error adding broadcast zone entry: ${e.message}" as Any)
|
Logger.error("Error adding broadcast zone entry: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -1038,9 +1066,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk ${super.dbName} insert successful: ${data.size} entries" as Any)
|
Logger.info("Bulk ${super.dbName} insert successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Broadcast Zones Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Broadcast Zones. Error: ${e.message}")
|
||||||
Logger.error("Error adding ${super.dbName} entries: ${e.message}" as Any)
|
Logger.error("Error adding ${super.dbName} entries: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -1061,9 +1091,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "Broadcast zone updated at index $index: ${data.description}; SoundChannel: ${data.SoundChannel}; id: ${data.id}; bp: ${data.bp}")
|
Add_Log("AAS", "Broadcast zone updated at index $index: ${data.description}; SoundChannel: ${data.SoundChannel}; id: ${data.id}; bp: ${data.bp}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS", "Failed updating Broadcast Zone at index $index for: ${data.description}.")
|
||||||
Logger.warn("No broadcast zone entry updated at index $index for: ${data.description}" as Any)
|
Logger.warn("No broadcast zone entry updated at index $index for: ${data.description}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS", "Failed updating Broadcast Zone at index $index. Error: ${e.message}")
|
||||||
Logger.error("Error updating broadcast zone entry at index $index: ${e.message}" as Any)
|
Logger.error("Error updating broadcast zone entry at index $index: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -1241,9 +1273,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk QueueTable insert successful: ${data.size} entries" as Any)
|
Logger.info("Bulk QueueTable insert successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Queue Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Queue Table. Error: ${e.message}")
|
||||||
Logger.error("Error adding QueueTable entries: ${e.message}" as Any)
|
Logger.error("Error adding QueueTable entries: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -1402,9 +1436,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk QueuePaging insert successful: ${data.size} entries" as Any)
|
Logger.info("Bulk QueuePaging insert successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Queue Paging Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
true
|
true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Queue Paging Table. Error: ${e.message}")
|
||||||
Logger.error("Error adding QueuePaging entries: ${e.message}" as Any)
|
Logger.error("Error adding QueuePaging entries: ${e.message}" as Any)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
@@ -1526,12 +1562,14 @@ class MariaDB(
|
|||||||
val rowsAffected = statement?.executeUpdate()
|
val rowsAffected = statement?.executeUpdate()
|
||||||
if (rowsAffected != null && rowsAffected > 0) {
|
if (rowsAffected != null && rowsAffected > 0) {
|
||||||
Logger.info("SoundChannel updated: ${data.channel} -> ${data.ip}" as Any)
|
Logger.info("SoundChannel updated: ${data.channel} -> ${data.ip}" as Any)
|
||||||
Add_Log("AAS", "SoundChannel updated: ${data.channel} -> ${data.ip}")
|
Add_Log("AAS", "Sound Channel updated: ${data.channel} -> ${data.ip}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS", "Failed updating Sound Channel for: ${data.channel} -> ${data.ip}.")
|
||||||
Logger.warn("No SoundChannel entry updated for: ${data.channel} -> ${data.ip}" as Any)
|
Logger.warn("No SoundChannel entry updated for: ${data.channel} -> ${data.ip}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS", "Failed updating Sound Channel for: ${data.channel} -> ${data.ip}. Error: ${e.message}")
|
||||||
Logger.error("Error updating SoundChannel entry: ${e.message}" as Any)
|
Logger.error("Error updating SoundChannel entry: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -1550,9 +1588,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk SoundChannel update successful: ${data.size} entries" as Any)
|
Logger.info("Bulk SoundChannel update successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Sound Channels Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
true
|
true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Sound Channels. Error: ${e.message}")
|
||||||
Logger.error("Error updating SoundChannel entries: ${e.message}" as Any)
|
Logger.error("Error updating SoundChannel entries: ${e.message}" as Any)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
@@ -1568,12 +1608,14 @@ class MariaDB(
|
|||||||
val rowsAffected = statement?.executeUpdate()
|
val rowsAffected = statement?.executeUpdate()
|
||||||
if (rowsAffected != null && rowsAffected > 0) {
|
if (rowsAffected != null && rowsAffected > 0) {
|
||||||
Logger.info("SoundChannel updated at index $index: ${data.channel} -> ${data.ip}" as Any)
|
Logger.info("SoundChannel updated at index $index: ${data.channel} -> ${data.ip}" as Any)
|
||||||
Add_Log("AAS", "SoundChannel updated at index $index: ${data.channel} -> ${data.ip}")
|
Add_Log("AAS", "Sound Channel updated at index $index: ${data.channel} -> ${data.ip}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
Logger.warn("No SoundChannel entry updated at index $index for: ${data.channel} -> ${data.ip}" as Any)
|
Add_Log("AAS", "Failed updating Sound Channel at index $index for: ${data.channel} -> ${data.ip}.")
|
||||||
|
Logger.warn("No Sound Channel entry updated at index $index for: ${data.channel} -> ${data.ip}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS", "Failed updating Sound Channel at index $index. Error: ${e.message}")
|
||||||
Logger.error("Error updating SoundChannel entry at index $index: ${e.message}" as Any)
|
Logger.error("Error updating SoundChannel entry at index $index: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -1702,9 +1744,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "${super.dbName} IP cleared for index $index")
|
Add_Log("AAS", "${super.dbName} IP cleared for index $index")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS","Failed clearing ${super.dbName} IP for index $index.")
|
||||||
Logger.warn("No ${super.dbName} entry cleared for index $index" as Any)
|
Logger.warn("No ${super.dbName} entry cleared for index $index" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed clearing ${super.dbName} IP for index $index. Error: ${e.message}")
|
||||||
Logger.error("Error clearing ${super.dbName} entry for index $index: ${e.message}" as Any)
|
Logger.error("Error clearing ${super.dbName} entry for index $index: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -1783,9 +1827,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk log insert successful: ${data.size} entries" as Any)
|
Logger.info("Bulk log insert successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import Log Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
true
|
true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import Log Table. Error: ${e.message}")
|
||||||
Logger.error("Error adding log entries: ${e.message}" as Any)
|
Logger.error("Error adding log entries: ${e.message}" as Any)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
@@ -1917,9 +1963,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "User added: ${data.username}")
|
Add_Log("AAS", "User added: ${data.username}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS","Failed adding User entry for: ${data.username}.")
|
||||||
Logger.warn("No user entry added for: ${data.username}" as Any)
|
Logger.warn("No user entry added for: ${data.username}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed adding User entry for: ${data.username}. Error: ${e.message}")
|
||||||
Logger.error("Error adding user entry: ${e.message}" as Any)
|
Logger.error("Error adding user entry: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -1943,9 +1991,11 @@ class MariaDB(
|
|||||||
statement.executeBatch()
|
statement.executeBatch()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
Logger.info("Bulk user insert successful: ${data.size} entries" as Any)
|
Logger.info("Bulk user insert successful: ${data.size} entries" as Any)
|
||||||
|
Add_Log("AAS","Successfully Import User Table: ${data.size} entries.")
|
||||||
connection.autoCommit = true
|
connection.autoCommit = true
|
||||||
true
|
true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS","Failed to Import User Table. Error: ${e.message}")
|
||||||
Logger.error("Error adding user entries: ${e.message}" as Any)
|
Logger.error("Error adding user entries: ${e.message}" as Any)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
@@ -1968,9 +2018,11 @@ class MariaDB(
|
|||||||
Add_Log("AAS", "User updated at index $index: ${data.username}")
|
Add_Log("AAS", "User updated at index $index: ${data.username}")
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
Add_Log("AAS", "Failed updating User at index $index for: ${data.username}.")
|
||||||
Logger.warn("No user entry updated at index $index for: ${data.username}" as Any)
|
Logger.warn("No user entry updated at index $index for: ${data.username}" as Any)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Add_Log("AAS", "Failed updating User at index $index. Error: ${e.message}")
|
||||||
Logger.error("Error updating user entry at index $index: ${e.message}" as Any)
|
Logger.error("Error updating user entry at index $index: ${e.message}" as Any)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -67,11 +67,20 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
|
|||||||
path("/") {
|
path("/") {
|
||||||
get { ctx ->
|
get { ctx ->
|
||||||
// Serve the main page
|
// Serve the main page
|
||||||
ctx.sessionAttribute("user", null) // Clear user session
|
ctx.cookie("aas-user","")
|
||||||
|
//ctx.sessionAttribute("user", null) // Clear user session
|
||||||
ctx.redirect("login.html")
|
ctx.redirect("login.html")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
path("logout"){
|
||||||
|
get { ctx ->
|
||||||
|
println("Logout requested by user")
|
||||||
|
ctx.cookie("aas-user","")
|
||||||
|
//ctx.sessionAttribute<String>("user", null) // Clear user session
|
||||||
|
ctx.redirect("login.html")
|
||||||
|
}
|
||||||
|
}
|
||||||
path("login.html") {
|
path("login.html") {
|
||||||
post { it ->
|
post { it ->
|
||||||
// get username and password from form
|
// get username and password from form
|
||||||
@@ -88,7 +97,8 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
|
|||||||
return@post
|
return@post
|
||||||
}
|
}
|
||||||
// Set user session
|
// Set user session
|
||||||
it.sessionAttribute("user", user.first)
|
//it.sessionAttribute("user", user.first)
|
||||||
|
it.cookie("aas-user", user.first)
|
||||||
//println("User ${user.first} logged in")
|
//println("User ${user.first} logged in")
|
||||||
// Redirect to home page
|
// Redirect to home page
|
||||||
it.redirect("home.html")
|
it.redirect("home.html")
|
||||||
@@ -1468,7 +1478,16 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
path("Settings"){
|
||||||
|
|
||||||
|
get("Messages"){
|
||||||
|
val messages = db.messageDB.List
|
||||||
|
it.result(objectmapper.writeValueAsString(messages))
|
||||||
|
}
|
||||||
|
post ("FISCode") {
|
||||||
|
//TODO set FIS code
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.start(listenPort)
|
}.start(listenPort)
|
||||||
@@ -1477,12 +1496,16 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>) {
|
|||||||
|
|
||||||
|
|
||||||
fun CheckUsers(ctx: Context) {
|
fun CheckUsers(ctx: Context) {
|
||||||
val user = ctx.sessionAttribute<String?>("user")
|
//val user = ctx.sessionAttribute<String?>("user")
|
||||||
|
val user = ctx.cookie("aas-user")
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
|
println("Cookie user not found, redirecting to login.html")
|
||||||
ctx.redirect("login.html")
|
ctx.redirect("login.html")
|
||||||
}
|
}
|
||||||
val foundUser = userlist.find { it.first == user }
|
val foundUser = userlist.find { it.first == user }
|
||||||
|
println("Checking user=$user, foundUser=$foundUser")
|
||||||
if (foundUser == null) {
|
if (foundUser == null) {
|
||||||
|
println("User not found in userlist, redirecting to login.html")
|
||||||
ctx.redirect("login.html")
|
ctx.redirect("login.html")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user