commit 27/10/2025
This commit is contained in:
@@ -46,6 +46,10 @@
|
||||
margin-top: 0!important;
|
||||
}
|
||||
|
||||
.mt-3 {
|
||||
margin-top: 1rem!important;
|
||||
}
|
||||
|
||||
.me-2 {
|
||||
margin-right: .5rem!important;
|
||||
}
|
||||
|
||||
@@ -128,6 +128,66 @@ body {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.class30 {
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
.class35 {
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
.class40 {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.class45 {
|
||||
width: 45%;
|
||||
}
|
||||
|
||||
.class50 {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.class55 {
|
||||
width: 55%;
|
||||
}
|
||||
|
||||
.class60 {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.class65 {
|
||||
width: 65%;
|
||||
}
|
||||
|
||||
.class70 {
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
.class75 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.class80 {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.class85 {
|
||||
width: 85%;
|
||||
}
|
||||
|
||||
.class90 {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.class95 {
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.class100 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.card-login {
|
||||
background-color: white;
|
||||
box-shadow: rgba(0, 0, 0, 0.15) 0px 15px 25px, rgba(0, 0, 0, 0.05) 0px 5px 10px;
|
||||
@@ -302,8 +362,8 @@ table {
|
||||
border: 2px dashed #ccc;
|
||||
border-radius: 20px;
|
||||
width: 400px;
|
||||
height: 200px;
|
||||
display: flex;
|
||||
height: 310px;
|
||||
/*display: flex;*/
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-family: sans-serif;
|
||||
@@ -318,3 +378,58 @@ table {
|
||||
color: #0d6efd;
|
||||
}
|
||||
|
||||
#table_user_management {
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#table_user_management th, #table_user_management td {
|
||||
text-overflow: ellipsis;
|
||||
white-space: normal !important;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.pad-result {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.pad-icon-menu {
|
||||
margin-top: -0.3rem;
|
||||
}
|
||||
|
||||
.div-file-list {
|
||||
height: 20vh;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
padding: 10px;
|
||||
/*border: dashed;*/
|
||||
}
|
||||
|
||||
.pad-select {
|
||||
margin-top: 0.3rem;
|
||||
}
|
||||
|
||||
.div-label-drop {
|
||||
display: flex;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
padding-top: 2rem;
|
||||
/*padding-bottom: 1.5rem;*/
|
||||
}
|
||||
|
||||
.pad-drop {
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.div-search {
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.hr-dashed {
|
||||
border: none;
|
||||
border-bottom: 1px dashed #000000;
|
||||
}
|
||||
|
||||
|
||||
293
html/webpage/assets/js/filemanagement.js
Normal file
293
html/webpage/assets/js/filemanagement.js
Normal file
@@ -0,0 +1,293 @@
|
||||
|
||||
/**
|
||||
* Load setting language dropdown
|
||||
*/
|
||||
function load_setting_language() {
|
||||
$("#setting_language").empty().off('change');
|
||||
|
||||
getLanguages(() => {
|
||||
window.languages.forEach((lang) => {
|
||||
let $option = $("<option></option>").attr("value", lang).text(lang);
|
||||
$("#setting_language").append($option);
|
||||
});
|
||||
$("#setting_language").on('change', function () {
|
||||
change_droparea_enable();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load setting category dropdown
|
||||
*/
|
||||
function load_setting_category() {
|
||||
$("#setting_category").empty().off('change');
|
||||
getCategories(() => {
|
||||
window.categories.forEach((cat) => {
|
||||
let $option = $("<option></option>").attr("value", cat).text(cat);
|
||||
$("#setting_category").append($option);
|
||||
});
|
||||
$("#setting_category").on('change', function () {
|
||||
change_droparea_enable();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load setting voice dropdown
|
||||
*/
|
||||
function load_setting_voice() {
|
||||
$("#setting_voice").empty().off('change');
|
||||
getVoiceTypes(() => {
|
||||
window.voiceTypes.forEach((voice) => {
|
||||
let $option = $("<option></option>").attr("value", voice).text(voice);
|
||||
$("#setting_voice").append($option);
|
||||
});
|
||||
$("#setting_voice").on('change', function () {
|
||||
change_droparea_enable();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get soundbank files from server based on category, language, and voice
|
||||
* @param {String} category
|
||||
* @param {String} language
|
||||
* @param {String} voice
|
||||
*/
|
||||
function getSoundBankFiles(category, language, voice) {
|
||||
let URL = `FileManager/ListSoundbank/${language}/${voice}/${category}`;
|
||||
fetchAPI(URL, "GET", {}, null, (okdata) => {
|
||||
$("#file-list").empty();
|
||||
if (Array.isArray(okdata) && okdata.length > 0) {
|
||||
okdata.forEach((file) => {
|
||||
// get only the file name from the full path
|
||||
let fileName = file.split(/[/\\]/).pop();
|
||||
let $li = $("<li></li>").text(fileName);
|
||||
$("#file-list").append($li);
|
||||
});
|
||||
}
|
||||
}, (errdata) => {
|
||||
alert("Error getting soundbank files : " + errdata.message);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable drop area based on selections
|
||||
*/
|
||||
function change_droparea_enable() {
|
||||
let selected_category = $("#setting_category").val();
|
||||
let selected_language = $("#setting_language").val();
|
||||
let selected_voice = $("#setting_voice").val();
|
||||
$("#file-list").empty();
|
||||
$("#searchfilelist").val("");
|
||||
$("#searchfilelist").off('input').on('input', function () {
|
||||
let searchTerm = $(this).val().toLowerCase();
|
||||
$("#file-list li").each(function () {
|
||||
let fileName = $(this).text().toLowerCase();
|
||||
if (fileName.includes(searchTerm)) {
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
console.log(`Selected Category: ${selected_category}, Language: ${selected_language}, Voice: ${selected_voice}`);
|
||||
if (selected_category && selected_language && selected_voice) {
|
||||
$("#drop-area").removeClass("disabled");
|
||||
getSoundBankFiles(selected_category, selected_language, selected_voice);
|
||||
} else {
|
||||
$("#drop-area").addClass("disabled");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Soundbank path from server
|
||||
*/
|
||||
function get_soundbank_path() {
|
||||
$("#setting_path").val("");
|
||||
fetchAPI("Settings/SoundbankDirectory", "GET", {}, null, (okdata) => {
|
||||
if (okdata.message && okdata.message.trim().length > 0) {
|
||||
let path = okdata.message.trim();
|
||||
//console.log("Soundbank path retrieved: " + path);
|
||||
$("#setting_path").val(path);
|
||||
}
|
||||
}, (errdata) => {
|
||||
alert("Error getting soundbank path : " + errdata.message);
|
||||
});
|
||||
}
|
||||
|
||||
function download(path, filename) {
|
||||
let downloadurl = `/api/FileManager/${path}`;
|
||||
let reqdata = { filename: filename };
|
||||
fetch(downloadurl, {
|
||||
method: 'POST',
|
||||
headers: {},
|
||||
body: JSON.stringify(reqdata)
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error("Network response was not ok");
|
||||
}
|
||||
return response.blob();
|
||||
})
|
||||
.then(blob => {
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
window.URL.revokeObjectURL(url);
|
||||
})
|
||||
.catch(errdata => {
|
||||
alert("Error downloading paging result file: " + errdata.message);
|
||||
});
|
||||
}
|
||||
|
||||
function get_pagingresult_files() {
|
||||
const url = `FileManager/PagingResultList`;
|
||||
$("#tbody_resultpaging").empty();
|
||||
fetchAPI(url, "GET", {}, null, (okdata) => {
|
||||
if (Array.isArray(okdata) && okdata.length > 0) {
|
||||
console.log("Paging result files: ", JSON.stringify(okdata));
|
||||
okdata.forEach((file) => {
|
||||
let filename = file.split(/[/\\]/).pop();
|
||||
let $tr = $("<tr></tr>");
|
||||
let $tdtitle = $("<td></td>").text(filename);
|
||||
// add button inside td to download the file
|
||||
let $btndownload = $("<button></button>").text("Download").addClass("btn btn-primary");
|
||||
$btndownload.on('click', function () {
|
||||
download("DownloadPagingResultFile", filename);
|
||||
});
|
||||
|
||||
let $tdbutton = $("<td></td>").append($btndownload).addClass("text-center");
|
||||
$tr.append($tdtitle);
|
||||
$tr.append($tdbutton);
|
||||
$("#tbody_resultpaging").append($tr);
|
||||
});
|
||||
}
|
||||
}, (errdata) => {
|
||||
alert("Error getting paging result files : " + errdata.message);
|
||||
});
|
||||
}
|
||||
|
||||
function get_soundbankresult_files() {
|
||||
const url = `FileManager/SoundbankResultList`;
|
||||
$("#tbody_resultsoundbank").empty();
|
||||
fetchAPI(url, "GET", {}, null, (okdata) => {
|
||||
if (Array.isArray(okdata) && okdata.length > 0) {
|
||||
console.log("Soundbank result files: ", JSON.stringify(okdata));
|
||||
okdata.forEach((file) => {
|
||||
let filename = file.split(/[/\\]/).pop();
|
||||
let $tr = $("<tr></tr>");
|
||||
let $tdtitle = $("<td></td>").text(filename);
|
||||
// add button inside td to download the file
|
||||
let $btndownload = $("<button></button>").text("Download").addClass("btn btn-primary");
|
||||
let $tdbutton = $("<td></td>").append($btndownload).addClass("text-center");
|
||||
$btndownload.on('click', function () {
|
||||
download("DownloadSoundbankResultFile", filename);
|
||||
});
|
||||
$tr.append($tdtitle);
|
||||
$tr.append($tdbutton);
|
||||
$("#tbody_resultsoundbank").append($tr);
|
||||
});
|
||||
}
|
||||
}, (errdata) => {
|
||||
alert("Error getting soundbank result files : " + errdata.message);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
$(document).ready(function () {
|
||||
console.log("filemanagement.js xx loaded");
|
||||
load_setting_category();
|
||||
load_setting_language();
|
||||
load_setting_voice();
|
||||
get_soundbank_path();
|
||||
setTimeout(() => {
|
||||
change_droparea_enable();
|
||||
}, 1000);
|
||||
get_pagingresult_files();
|
||||
get_soundbankresult_files();
|
||||
$("#save_directory").off('click').on('click', function () {
|
||||
let new_path = $("#setting_path").val();
|
||||
if (new_path && new_path.trim().length > 0) {
|
||||
fetchAPI("Settings/SoundbankDirectory", "POST", {}, { directory: new_path }, (okdata) => {
|
||||
alert("Soundbank directory path saved successfully.");
|
||||
}, (errdata) => {
|
||||
alert("Error saving soundbank directory path : " + errdata.message);
|
||||
});
|
||||
} else {
|
||||
alert("Please enter a valid soundbank directory path.");
|
||||
}
|
||||
});
|
||||
$("#drop-area").on('dragover', function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
$(this).addClass('dragover');
|
||||
}).on('dragleave', function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
$(this).removeClass('dragover');
|
||||
}).on('drop', function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
$(this).removeClass('dragover');
|
||||
if ($(this).hasClass('disabled')) {
|
||||
alert("Please select Category, Language, and Voice Type before uploading files.");
|
||||
return;
|
||||
}
|
||||
let lang = $("#setting_language").val().trim();
|
||||
let category = $("#setting_category").val().trim();
|
||||
let voice = $("#setting_voice").val().trim();
|
||||
let files = e.originalEvent.dataTransfer.files;
|
||||
if (lang && lang.length > 0) {
|
||||
if (category && category.length > 0) {
|
||||
if (voice && voice.length > 0) {
|
||||
if (files.length > 0) {
|
||||
// check if each file have type audio/wav , size more than 0, and name ends with .wav
|
||||
let allValid = true;
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
let file = files[i];
|
||||
if (file.type !== 'audio/wav' && !file.name.toLowerCase().endsWith('.wav')) {
|
||||
allValid = false;
|
||||
}
|
||||
if (file.size <= 0) {
|
||||
allValid = false;
|
||||
}
|
||||
}
|
||||
if (allValid) {
|
||||
if (confirm(`Are you sure want to upload ${files.length} file(s) to the soundbank directory for Category: ${$("#setting_category").val()}, Language: ${$("#setting_language").val()}, Voice Type: ${$("#setting_voice").val()}?`)) {
|
||||
let url = `api/Settings/UploadSoundbank/${lang}/${voice}/${category}`;
|
||||
const formdata = new FormData();
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
formdata.append('files', files[i]);
|
||||
}
|
||||
try {
|
||||
fetch(url, {
|
||||
method: 'POST',
|
||||
body: formdata
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(okdata => {
|
||||
console.log("Upload result: ", JSON.stringify(okdata));
|
||||
})
|
||||
.catch(errdata => {
|
||||
alert("Error uploading files to soundbank directory : " + errdata.message);
|
||||
});
|
||||
} catch (err) {
|
||||
alert("Error preparing file upload: " + err.message);
|
||||
}
|
||||
}
|
||||
} else alert("Please upload only valid WAV audio files. Type must be audio/wav and size must be more than 0 bytes.");
|
||||
} else alert("No files detected for upload.");
|
||||
} else alert("Please select Voice Type before uploading files.");
|
||||
} else alert("Please select Category before uploading files.");
|
||||
} else alert("Please select Language before uploading files.");
|
||||
|
||||
});
|
||||
});
|
||||
@@ -444,8 +444,15 @@ $(document).ready(function () {
|
||||
let json = JSON.parse(data);
|
||||
if (Array.isArray(json) && json.length > 0) {
|
||||
json.forEach((net) => {
|
||||
if (result.length > 0) result += "\n"
|
||||
if (net){
|
||||
if (net.displayName && net.displayName.length>0){
|
||||
if (net.ipV4addr && Array.isArray(net.ipV4addr) && net.ipV4addr.length>0){
|
||||
if (result.length > 0) result += "\n"
|
||||
result += `${net.displayName} (${net.ipV4addr.join(";")}) TX:${(net.txSpeed / 1024).toFixed(1)} KB/s RX:${(net.rxSpeed / 1024).toFixed(1)} KB/s`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
} else result = "N/A";
|
||||
$('#networkstatus').text(result)
|
||||
@@ -585,6 +592,15 @@ $(document).ready(function () {
|
||||
}
|
||||
});
|
||||
})
|
||||
$('#filemanagement').click(() => {
|
||||
sidemenu.hide();
|
||||
$('#content').load('filemanagement.html', function (response, status, xhr) {
|
||||
if (status === "success") {
|
||||
console.log("File Management content loaded successfully");
|
||||
// pindah ke filemanagement.js
|
||||
}
|
||||
});
|
||||
});
|
||||
$('#logoutlink').click(() => {
|
||||
//window.location.href = "login.html"
|
||||
fetch("/logout", {method: 'GET'})
|
||||
|
||||
@@ -1,82 +1,7 @@
|
||||
|
||||
/**
|
||||
* Load setting language dropdown
|
||||
*/
|
||||
function load_setting_language() {
|
||||
$("#setting_language").empty().off('change');
|
||||
|
||||
getLanguages(() => {
|
||||
window.languages.forEach((lang) => {
|
||||
let $option = $("<option></option>").attr("value", lang).text(lang);
|
||||
$("#setting_language").append($option);
|
||||
});
|
||||
$("#setting_language").on('change', function () {
|
||||
change_droparea_enable();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load setting category dropdown
|
||||
*/
|
||||
function load_setting_category() {
|
||||
$("#setting_category").empty().off('change');
|
||||
getCategories(() => {
|
||||
window.categories.forEach((cat) => {
|
||||
let $option = $("<option></option>").attr("value", cat).text(cat);
|
||||
$("#setting_category").append($option);
|
||||
});
|
||||
$("#setting_category").on('change', function () {
|
||||
change_droparea_enable();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load setting voice dropdown
|
||||
*/
|
||||
function load_setting_voice() {
|
||||
$("#setting_voice").empty().off('change');
|
||||
getVoiceTypes(() => {
|
||||
window.voiceTypes.forEach((voice) => {
|
||||
let $option = $("<option></option>").attr("value", voice).text(voice);
|
||||
$("#setting_voice").append($option);
|
||||
});
|
||||
$("#setting_voice").on('change', function () {
|
||||
change_droparea_enable();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Soundbank path from server
|
||||
*/
|
||||
function get_soundbank_path() {
|
||||
$("#setting_path").val("");
|
||||
fetchAPI("Settings/SoundbankDirectory", "GET", {}, null, (okdata) => {
|
||||
if (okdata.message && okdata.message.trim().length > 0) {
|
||||
let path = okdata.message.trim();
|
||||
//console.log("Soundbank path retrieved: " + path);
|
||||
$("#setting_path").val(path);
|
||||
}
|
||||
}, (errdata) => {
|
||||
alert("Error getting soundbank path : " + errdata.message);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable drop area based on selections
|
||||
*/
|
||||
function change_droparea_enable() {
|
||||
let selected_category = $("#setting_category").val();
|
||||
let selected_language = $("#setting_language").val();
|
||||
let selected_voice = $("#setting_voice").val();
|
||||
if (selected_category && selected_language && selected_voice) {
|
||||
$("#drop-area").removeClass("disabled");
|
||||
} else {
|
||||
$("#drop-area").addClass("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load message bank data into selection dropdowns
|
||||
@@ -90,9 +15,7 @@ function load_messagebank(cbOK = null) {
|
||||
|
||||
// get messagebank data from server, which contains [FLIGHT_NUMBER]
|
||||
let messageData = [...new Set(window.messagebankdata.filter(mb => mb.message_Detail.includes('[FLIGHT_NUMBER]')).map(mb => `${mb.description} [${mb.aNN_ID}]`))];
|
||||
//console.log("Message bank data with [FLIGHT_NUMBER]: ", messageData);
|
||||
messageData.forEach((item) => {
|
||||
//console.log("Adding option: " + item);
|
||||
$("#input_GOP").append($("<option></option>").attr("value", item).text(item));
|
||||
$("#input_GBD").append($("<option></option>").attr("value", item).text(item));
|
||||
$("#input_GFC").append($("<option></option>").attr("value", item).text(item));
|
||||
@@ -105,51 +28,41 @@ function load_messagebank(cbOK = null) {
|
||||
|
||||
function load_remark_selection() {
|
||||
fetchAPI("Settings/FISCode", "GET", {}, null, (okdata) => {
|
||||
//console.log("FIS codes retrieved: ", JSON.stringify(okdata));
|
||||
|
||||
$("#input_GOP").val(okdata.gop)
|
||||
$("#input_GBD").val(okdata.gbd);
|
||||
$("#input_GFC").val(okdata.gfc);
|
||||
$("#input_FLD").val(okdata.fld);
|
||||
$("#input_defaultvoice").val(okdata.defaultvoice);
|
||||
}, (errdata) => {
|
||||
alert("Error getting FIS codes : " + errdata.message);
|
||||
});
|
||||
}
|
||||
|
||||
function load_default_voice(){
|
||||
$("#input_defaultvoice").empty();
|
||||
window.voiceTypes.forEach((voice) => {
|
||||
$("#input_defaultvoice").append($("<option></option>").attr("value", voice).text(voice));
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
console.log("setting.js loaded");
|
||||
|
||||
|
||||
$("#save_directory").off('click').on('click', function () {
|
||||
let new_path = $("#setting_path").val();
|
||||
if (new_path && new_path.trim().length > 0) {
|
||||
fetchAPI("Settings/SoundbankDirectory", "POST", {}, { directory: new_path }, (okdata) => {
|
||||
alert("Soundbank directory path saved successfully.");
|
||||
}, (errdata) => {
|
||||
alert("Error saving soundbank directory path : " + errdata.message);
|
||||
});
|
||||
} else {
|
||||
alert("Please enter a valid soundbank directory path.");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
get_soundbank_path();
|
||||
load_setting_category();
|
||||
load_setting_language();
|
||||
load_setting_voice();
|
||||
load_default_voice();
|
||||
load_messagebank(() => load_remark_selection());
|
||||
$("#fiscodesave").off('click').on('click', function () {
|
||||
let gop = $("#input_GOP").val();
|
||||
let gbd = $("#input_GBD").val();
|
||||
let gfc = $("#input_GFC").val();
|
||||
let fld = $("#input_FLD").val();
|
||||
if (gop && gbd && gfc && fld) {
|
||||
let voice = $("#input_defaultvoice").val();
|
||||
if (gop && gbd && gfc && fld && voice) {
|
||||
let data = {
|
||||
GOP: gop,
|
||||
GBD: gbd,
|
||||
GFC: gfc,
|
||||
FLD: fld
|
||||
FLD: fld,
|
||||
defaultvoice: voice
|
||||
};
|
||||
fetchAPI("Settings/FISCode", "POST", {}, data, (okdata) => {
|
||||
alert("FIS codes saved successfully.");
|
||||
@@ -157,75 +70,11 @@ $(document).ready(function () {
|
||||
alert("Error saving FIS codes : " + errdata.message);
|
||||
});
|
||||
} else {
|
||||
alert("Please select all FIS codes (GOP, GBD, GFC, FLD) before saving.");
|
||||
alert("Please select all FIS codes (GOP, GBD, GFC, FLD) and Default Voice before saving.");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$("#drop-area").on('dragover', function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
$(this).addClass('dragover');
|
||||
}).on('dragleave', function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
$(this).removeClass('dragover');
|
||||
}).on('drop', function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
$(this).removeClass('dragover');
|
||||
if ($(this).hasClass('disabled')) {
|
||||
alert("Please select Category, Language, and Voice Type before uploading files.");
|
||||
return;
|
||||
}
|
||||
let lang = $("#setting_language").val().trim();
|
||||
let category = $("#setting_category").val().trim();
|
||||
let voice = $("#setting_voice").val().trim();
|
||||
let files = e.originalEvent.dataTransfer.files;
|
||||
if (lang && lang.length > 0) {
|
||||
if (category && category.length > 0) {
|
||||
if (voice && voice.length > 0) {
|
||||
if (files.length > 0) {
|
||||
// check if each file have type audio/wav , size more than 0, and name ends with .wav
|
||||
let allValid = true;
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
let file = files[i];
|
||||
if (file.type !== 'audio/wav' && !file.name.toLowerCase().endsWith('.wav')) {
|
||||
allValid = false;
|
||||
}
|
||||
if (file.size <= 0) {
|
||||
allValid = false;
|
||||
}
|
||||
}
|
||||
if (allValid) {
|
||||
if (confirm(`Are you sure want to upload ${files.length} file(s) to the soundbank directory for Category: ${$("#setting_category").val()}, Language: ${$("#setting_language").val()}, Voice Type: ${$("#setting_voice").val()}?`)) {
|
||||
let url = `api/Settings/UploadSoundbank/${lang}/${voice}/${category}`;
|
||||
const formdata = new FormData();
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
formdata.append('files', files[i]);
|
||||
}
|
||||
try{
|
||||
fetch(url, {
|
||||
method: 'POST',
|
||||
body: formdata
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(okdata => {
|
||||
console.log("Upload result: ", JSON.stringify(okdata));
|
||||
})
|
||||
.catch(errdata => {
|
||||
alert("Error uploading files to soundbank directory : " + errdata.message);
|
||||
});
|
||||
} catch(err){
|
||||
alert("Error preparing file upload: " + err.message);
|
||||
}
|
||||
}
|
||||
} else alert("Please upload only valid WAV audio files. Type must be audio/wav and size must be more than 0 bytes.");
|
||||
} else alert("No files detected for upload.");
|
||||
} else alert("Please select Voice Type before uploading files.");
|
||||
} else alert("Please select Category before uploading files.");
|
||||
} else alert("Please select Language before uploading files.");
|
||||
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user