diff --git a/electron/main/custom_document.html b/electron/main/custom_document.html
index 4cf348b..e6e79a8 100644
--- a/electron/main/custom_document.html
+++ b/electron/main/custom_document.html
@@ -11,115 +11,6 @@
-
diff --git a/electron/main/index.html b/electron/main/index.html
index b5b13b7..9ff8b88 100644
--- a/electron/main/index.html
+++ b/electron/main/index.html
@@ -176,7 +176,8 @@
-
+
+
Manage document types
diff --git a/electron/main/renderer.js b/electron/main/renderer.js
index 58856de..fce5bfb 100644
--- a/electron/main/renderer.js
+++ b/electron/main/renderer.js
@@ -5,12 +5,12 @@ Listeners for the program setup and changes
*/
//Listener for when the gui has been loaded so it can fill the dop down menus in step 2 and the language options
-window.addEventListener('load', async (e) => {
+window.addEventListener('load', async (e) => {
try {
- loadLanguageOptions();
- const value = await window.onStartup.getModuleNames();
- loadAiOptions(value.ai_modules);
- loadTranscriptionOptions(value.transcription_modules);
+ loadLanguageOptions();
+ const value = await window.onStartup.getModuleNames();
+ loadAiOptions(value.ai_modules);
+ loadTranscriptionOptions(value.transcription_modules);
} catch (error) {
console.log("Error in the window listener load in the renderer.js \n");
@@ -19,15 +19,15 @@ window.addEventListener('load', async (e) => {
});
//Listener if the language of the displayed text's in the gui should be changed
-language_option.addEventListener('change', (e)=>{
- try {
- const select = document.getElementById('language_option');
- changeLanguage(select.value);
- } catch (error) {
- console.log("Error in the language_option change listener in the renderer.js");
- console.log(error);
- }
-
+language_option.addEventListener('change', (e) => {
+ try {
+ const select = document.getElementById('language_option');
+ changeLanguage(select.value);
+ } catch (error) {
+ console.log("Error in the language_option change listener in the renderer.js");
+ console.log(error);
+ }
+
});
stepButtons.forEach(btn => {
@@ -36,7 +36,7 @@ stepButtons.forEach(btn => {
const step = parseInt(btn.dataset.step);
showStep(step);
} catch (error) {
-
+
}
});
});
@@ -46,16 +46,16 @@ prevBtn.addEventListener("click", () => {
try {
if (currentStep > 1) showStep(currentStep - 1);
} catch (error) {
-
+
}
});
//Listener if the button to change the current step to the next one is pressed
nextBtn.addEventListener("click", () => {
try {
- if(currentStep < totalSteps) showStep(currentStep + 1);
+ if (currentStep < totalSteps) showStep(currentStep + 1);
} catch (error) {
-
+
}
});
@@ -66,36 +66,36 @@ Listeners for Step 1
*/
//Listener if a file has been draged over the drop down field
-uploadContainer.addEventListener("dragover", (e) =>{
- try {
- e.stopPropagation();
- e.preventDefault();
- } catch (error) {
- console.log("Error in renderer.js dragover listener function")
- }
-
+uploadContainer.addEventListener("dragover", (e) => {
+ try {
+ e.stopPropagation();
+ e.preventDefault();
+ } catch (error) {
+ console.log("Error in renderer.js dragover listener function")
+ }
+
});
//listener for when a file get dropped on the drag&drop field
uploadContainer.addEventListener("drop", (e) => {
- try {
- e.stopPropagation()
- e.preventDefault()
- const files = e.dataTransfer.files
- const filePath = window.explorer.onFileDrop(files[0])
- const testEndings = [".mp4", ".mov", ".avi", ".mkv"];
- var pathToLower = filePath.toLowerCase();
- if(testEndings.some(e => pathToLower.endsWith(e))){
- const files1 = e.dataTransfer.files;
- handleFiles(files1);
- }else{
- alert('The given file is not compatible. These are the available types: [".mp4", ".mov", ".avi", ".mkv"].');
- }
-
- } catch (error) {
- console.log("Error in renderer.js with the listerner for the drop function");
- console.log(error);
- }
+ try {
+ e.stopPropagation()
+ e.preventDefault()
+ const files = e.dataTransfer.files
+ const filePath = window.explorer.onFileDrop(files[0])
+ const testEndings = [".mp4", ".mov", ".avi", ".mkv"];
+ var pathToLower = filePath.toLowerCase();
+ if (testEndings.some(e => pathToLower.endsWith(e))) {
+ const files1 = e.dataTransfer.files;
+ handleFiles(files1);
+ } else {
+ alert('The given file is not compatible. These are the available types: [".mp4", ".mov", ".avi", ".mkv"].');
+ }
+
+ } catch (error) {
+ console.log("Error in renderer.js with the listerner for the drop function");
+ console.log(error);
+ }
})
//listener for the file explorer search when something got selected
@@ -118,7 +118,7 @@ manualUploadBtn.addEventListener('click', () => {
console.log("Error in manualBtn EventListener click");
console.log(error);
}
-
+
});
/*
@@ -133,65 +133,82 @@ Listeners for Step 3
*/
+window.api.getTxtFiles().then(files => {
+ var menu = document.getElementById('customDocumentTypes');
+ var l = document.getElementById('customDocumentTypes').options.length - 1;
+ for (i = l; i >= 0; i--) {
+ menu.remove(i);
+ }
+ files.forEach(file => {
+ const option = document.createElement('option');
+ option.value = file;
+ option.textContent = file
+ .replace('.txt', '') // Endung entfernen
+ .replace(/_/g, ' ') // Leerzeichen ersetzen
+ .replace(/\b\w/g, c => c.toUpperCase()) // ersten Buchstaben groß
+ menu.appendChild(option);
+ });
+});
+
//Checkboxlistener so that only one can be selected at a time
-docFormat.addEventListener("change", (e) =>{
+docFormat.addEventListener("change", (e) => {
try {
- if(docFormat.checked){
+ if (docFormat.checked) {
docFormatSummary1.checked = false;
docFormatSummary2.checked = false;
docFormatSummary3.checked = false;
docFormatCustom.checked = false;
}
} catch (error) {
-
+
}
});
-docFormatSummary1.addEventListener("change", (e) =>{
+docFormatSummary1.addEventListener("change", (e) => {
try {
- if(docFormatSummary1.checked){
+ if (docFormatSummary1.checked) {
docFormat.checked = false;
docFormatSummary2.checked = false;
docFormatSummary3.checked = false;
docFormatCustom.checked = false;
}
} catch (error) {
-
+
}
});
-docFormatSummary2.addEventListener("change", (e) =>{
+docFormatSummary2.addEventListener("change", (e) => {
try {
- if(docFormatSummary2.checked){
+ if (docFormatSummary2.checked) {
docFormatSummary1.checked = false;
docFormat.checked = false;
docFormatSummary3.checked = false;
docFormatCustom.checked = false;
}
} catch (error) {
-
+
}
});
-docFormatSummary3.addEventListener("change", (e) =>{
+docFormatSummary3.addEventListener("change", (e) => {
try {
- if(docFormatSummary3.checked){
+ if (docFormatSummary3.checked) {
docFormatSummary1.checked = false;
docFormatSummary2.checked = false;
docFormat.checked = false;
docFormatCustom.checked = false;
}
} catch (error) {
-
+
}
});
-docFormatCustom.addEventListener("change", (e) =>{
+docFormatCustom.addEventListener("change", (e) => {
try {
- if(docFormatCustom.checked){
+ if (docFormatCustom.checked) {
docFormatSummary1.checked = false;
docFormatSummary2.checked = false;
docFormatSummary3.checked = false;
docFormat.checked = false;
}
} catch (error) {
-
+
}
});
@@ -202,62 +219,62 @@ Listeners for Step 4
*/
//Functions the the displayed progress in the progressbar can be changed out of the main process
window.electron.progress((event, arg) => {
- if(arg.curstep == 1){
- setCircleOne();
- }else if(arg.curstep == 2){
- setCircleZwo();
- } else if(arg.curstep == 3){
- setCircleThree();
- }else if(arg.curstep == 4){
- setCircleFour();
- }
+ if (arg.curstep == 1) {
+ setCircleOne();
+ } else if (arg.curstep == 2) {
+ setCircleZwo();
+ } else if (arg.curstep == 3) {
+ setCircleThree();
+ } else if (arg.curstep == 4) {
+ setCircleFour();
+ }
});
-function setCircleOne(){
+function setCircleOne() {
try {
- if(document.getElementById("box1").style.backgroundColor == "green"){
+ if (document.getElementById("box1").style.backgroundColor == "green") {
document.getElementById("box1").style.backgroundColor = "red";
- }else{
+ } else {
document.getElementById("box1").style.backgroundColor = "green";
}
} catch (error) {
}
};
-function setCircleZwo(){
+function setCircleZwo() {
try {
- if(document.getElementById("box2").style.backgroundColor == "green"){
+ if (document.getElementById("box2").style.backgroundColor == "green") {
document.getElementById("box2").style.backgroundColor = "red";
- }else{
+ } else {
document.getElementById("box2").style.backgroundColor = "green";
}
} catch (error) {
-
+
}
-
+
};
-function setCircleThree(){
+function setCircleThree() {
try {
- if(document.getElementById("box3").style.backgroundColor == "green"){
+ if (document.getElementById("box3").style.backgroundColor == "green") {
document.getElementById("box3").style.backgroundColor = "red";
- }else{
+ } else {
document.getElementById("box3").style.backgroundColor = "green";
}
} catch (error) {
-
+
}
-
+
};
-function setCircleFour(){
+function setCircleFour() {
try {
- if(document.getElementById("box4").style.backgroundColor == "green"){
+ if (document.getElementById("box4").style.backgroundColor == "green") {
document.getElementById("box4").style.backgroundColor = "red";
- }else{
+ } else {
document.getElementById("box4").style.backgroundColor = "green";
}
} catch (error) {
-
- }
+
+ }
};
/*
@@ -267,11 +284,11 @@ Listeners for Step 5
*/
//Speaker change listener
-cur_speaker.addEventListener("change", (e) =>{
+cur_speaker.addEventListener("change", (e) => {
try {
document.getElementById("speakerAudioViewer").src = speakerAudios[document.getElementById("cur_speaker").value].src;
} catch (error) {
-
+
}
});
//Function so the main process can give the gui a json with the speakers and their audio
@@ -282,5 +299,88 @@ window.audios.speakerAudios((event, arg) => {
+/*
+
+Listeners for the costum documents section
+
+*/
+
+// dokumente speichern
+generateBtn.addEventListener("click", () => {
+ const name = docName.value.trim();
+ const content = prompt.value.trim();
+ if (!name || !content) {
+ result.textContent = "Bitte Dokumentname und Prompt ausfüllen.";
+ setTimeout(() => {
+ result.textContent = "";
+ }, 3000);
+ return;
+ }
+ window.api.saveTxtFile(name, content).then();
+ result.textContent = "Dokument erfolgreich gespeichert!";
+ setTimeout(() => {
+ result.textContent = "";
+ }, 3000);
+ reloadDocuments();
+
+});
+
+// dokumente löschen
+deleteBtn.addEventListener("click", () => {
+ const name = docName.value.trim();
+
+ if (!name) {
+ result.textContent = "Bitte Dokumentname angeben.";
+ setTimeout(() => {
+ result.textContent = "";
+ }, 3000);
+ return;
+ }
+
+ const confirmDelete = confirm(
+ `Möchtest du das Dokument "${name}" wirklich löschen?`
+ );
+
+ if (!confirmDelete) return;
+
+ window.api.deleteTxtFile(name).then((success) => {
+ if (success) {
+ result.textContent = "Dokument erfolgreich gelöscht!";
+ reloadDocuments();
+ existingDocs.value = "newDoc";
+ existingDocs.dispatchEvent(new Event("change"));
+ } else {
+ result.textContent = "Dokument konnte nicht gelöscht werden.";
+ }
+
+ setTimeout(() => {
+ result.textContent = "";
+ }, 3000);
+ });
+});
+//function to load existingDoc options to the drop down list
+
+window.api.getTxtFiles().then(files => {
+ reloadDocuments();
+});
+
+//content anzeigen
+existingDocs.addEventListener("change", async () => {
+ const existingDocsed = existingDocs.value;
+ const exampleText = "";
+
+ if (existingDocsed === "newDoc") {
+ docNameWrapper.classList.remove("hidden");
+ docName.value = "";
+ prompt.value = exampleText;
+ return;
+ }
+ docNameWrapper.classList.add("hidden");
+
+ const content = await window.api.readTxtFile(existingDocsed);
+ prompt.value = content;
+ docName.value = existingDocsed.replace(".txt", "");
+});
+
diff --git a/electron/main/script.js b/electron/main/script.js
index 4b56dd5..2523e3f 100644
--- a/electron/main/script.js
+++ b/electron/main/script.js
@@ -38,12 +38,12 @@ function changeLanguage(language) {
document.getElementById('box2_p2').textContent = languageOptions[language].box2_p2;
document.getElementById('box3_p3').textContent = languageOptions[language].box3_p3;
document.getElementById('labelType').textContent = languageOptions[language].labelType;
-
+
} catch (error) {
console.log("Error in script.js changeLanguage function");
console.log(error);
}
-
+
}
/*
@@ -59,7 +59,7 @@ let currentStep = 1;
const totalSteps = steps.length;
function showStep(stepNumber) {
- if (stepNumber < 1 || stepNumber > totalSteps){
+ if (stepNumber < 1 || stepNumber > totalSteps) {
console.error("StepNumber out of Bounds", stepNumber);
return;
}
@@ -70,7 +70,7 @@ function showStep(stepNumber) {
document.querySelector(`.step-item[data-step="${stepNumber}"]`).classList.add("active");
const activeBtn = document.querySelector(`.step-item[data-step="${stepNumber}"]`);
- if(activeBtn) activeBtn.classList.add("active");
+ if (activeBtn) activeBtn.classList.add("active");
prevBtn.disabled = stepNumber == 1;
nextBtn.disabled = stepNumber === totalSteps;
@@ -105,7 +105,7 @@ function handleFiles(files) {
}
//Video thumbnail generation. Shows a scene from the selected video file as a preview
-function generateThumbnail(path){
+function generateThumbnail(path) {
try {
const videoElement = document.getElementById("previewThumbnail");
while (videoElement.firstChild) videoElement.removeChild(videoElement.firstChild);
@@ -119,7 +119,7 @@ function generateThumbnail(path){
console.log("Error in the generateThumbnail function in the script.js file \n");
console.log(error);
}
-
+
}
@@ -131,13 +131,13 @@ Functions used in Step 2
*/
//function to load ai options to the drop down list
-function loadAiOptions(options){
+function loadAiOptions(options) {
try {
var menu = document.getElementById('ai_type');
var object_holdy;
- var choice ;
+ var choice;
object_holdy = options
- for(i = 0; i < options.length; i++){
+ for (i = 0; i < options.length; i++) {
choice = document.createElement('option');
choice.textContent = object_holdy[i].displayname;
choice.value = object_holdy[i].name;
@@ -150,13 +150,13 @@ function loadAiOptions(options){
}
//function to load transcription options to the drop down list
-function loadTranscriptionOptions(options){
+function loadTranscriptionOptions(options) {
try {
var menu = document.getElementById('transkript_type');
var object_holdy;
- var choice ;
+ var choice;
object_holdy = options
- for(i = 0; i < options.length; i++){
+ for (i = 0; i < options.length; i++) {
choice = document.createElement('option');
choice.textContent = object_holdy[i].displayname;
choice.value = object_holdy[i].name;
@@ -169,13 +169,13 @@ function loadTranscriptionOptions(options){
}
//function to load data type options to the drop down list
-function loadDataTypeOptions(options){
+function loadDataTypeOptions(options) {
try {
var menu = document.getElementById('output_type');
var object_holdy;
- var choice ;
+ var choice;
object_holdy = options
- for(i = 0; i < options.length; i++){
+ for (i = 0; i < options.length; i++) {
choice = document.createElement('option');
choice.textContent = object_holdy[i].displayname;
choice.value = object_holdy[i].name;
@@ -188,14 +188,14 @@ function loadDataTypeOptions(options){
}
//function to load language options to the drop down list
-function loadLanguageOptions(){
+function loadLanguageOptions() {
try {
-
+
var menu = document.getElementById('language_option');
var object_holdy;
- var choice ;
+ var choice;
object_holdy = Object.keys(languageOptions);
- for(i = 0; i < object_holdy.length; i++){
+ for (i = 0; i < object_holdy.length; i++) {
choice = document.createElement('option');
choice.textContent = object_holdy[i];
choice.value = object_holdy[i];
@@ -231,8 +231,8 @@ function checkBoxes() {
const checkboxes = document.querySelectorAll('input[name="docFormat"]');
let isChecked = false;
var checkedCounter = 0;
- checkboxes.forEach(function(checkbox){
- if(checkbox.checked){
+ checkboxes.forEach(function (checkbox) {
+ if (checkbox.checked) {
isChecked = true;
checkedCounter++;
}
@@ -241,24 +241,24 @@ function checkBoxes() {
if (isChecked) {
//Code to submit the video
var selectedCheckboxes = {};
- checkboxes.forEach(function(checkbox){
- if(checkbox.checked){
+ checkboxes.forEach(function (checkbox) {
+ if (checkbox.checked) {
selectedCheckboxes[checkbox.nextElementSibling.textContent] = "";
- }
+ }
});
const testEndings = [".mp4", ".mov", ".avi", ".mkv"];
var pathTest = window.electronAPI.getFilePath(videoUpload.files[0]);
var pathToLower = pathTest.toLowerCase();
- if(testEndings.some(e => pathToLower.endsWith(e))){
+ if (testEndings.some(e => pathToLower.endsWith(e))) {
//assembly of the json for the main
var typeCheckbox;
- if(document.getElementById("docFormat").checked) typeCheckbox = document.getElementById("docFormat").value;
- if(document.getElementById("docFormatSummary1").checked) typeCheckbox = document.getElementById("docFormatSummary1").value;
- if(document.getElementById("docFormatSummary2").checked) typeCheckbox = document.getElementById("docFormatSummary2").value;
- if(document.getElementById("docFormatSummary3").checked) typeCheckbox = document.getElementById("docFormatSummary3").value;
- if(document.getElementById("docFormatCustom").checked) typeCheckbox = document.getElementById("docFormatCustom").value;
+ if (document.getElementById("docFormat").checked) typeCheckbox = document.getElementById("docFormat").value;
+ if (document.getElementById("docFormatSummary1").checked) typeCheckbox = document.getElementById("docFormatSummary1").value;
+ if (document.getElementById("docFormatSummary2").checked) typeCheckbox = document.getElementById("docFormatSummary2").value;
+ if (document.getElementById("docFormatSummary3").checked) typeCheckbox = document.getElementById("docFormatSummary3").value;
+ if (document.getElementById("docFormatCustom").checked) typeCheckbox = document.getElementById("docFormatCustom").value;
document.getElementById("testy").style.visibility = "visible"
document.getElementById("box1").style.backgroundColor = "red";
@@ -271,20 +271,20 @@ function checkBoxes() {
const aiType = document.getElementById("ai_type");
const sendingPackage = {
"video": {
- "module":"extraction-video-to-audio",
+ "module": "extraction-video-to-audio",
"inputVideoPath": pathTest
},
"transcription": {
"module": transcriptionType.value
},
"document": {
- "module":aiType.value,
+ "module": aiType.value,
"type": typeCheckbox,
"outputType": outputType.value
}
};
window.submit.submit(sendingPackage)
- }else{
+ } else {
alert('The given file is not compatible. These are the available types: [".mp4", ".mov", ".avi", ".mkv"].');
}
@@ -297,11 +297,11 @@ function checkBoxes() {
console.log("Error in script.js checkBoxes function");
console.log(error);
}
-
+
}
//function the the submit button on step 4 can be pressed
-function activateSubmitBtn(hasFile){
+function activateSubmitBtn(hasFile) {
try {
document.getElementById("submitButton").disabled = !hasFile;
} catch (error) {
@@ -319,11 +319,11 @@ function updateProgressBar(bar, value) {
console.log("Error in scripts.js updateProgressBar function");
console.log(error);
}
-
+
}
//function to hide the progressbar
-function deaktivateProgressbar(){
+function deaktivateProgressbar() {
try {
document.getElementById("progressbar").style.visibility = "hidden";
} catch (error) {
@@ -339,17 +339,17 @@ Functions used in Step 5
//function to load speaker options to the drop down list
-function loadSpeakerOptions(options){
+function loadSpeakerOptions(options) {
try {
var menu = document.getElementById('cur_speaker');
- var l = document.getElementById('cur_speaker').options.length -1;
- for(i = l; i >= 0; i--){
+ var l = document.getElementById('cur_speaker').options.length - 1;
+ for (i = l; i >= 0; i--) {
menu.remove(i);
}
var object_holdy;
var choice;
object_holdy = Object.keys(options);
- for(i = 0; i < object_holdy.length; i++){
+ for (i = 0; i < object_holdy.length; i++) {
choice = document.createElement('option');
choice.textContent = options[object_holdy[i]].name;
choice.value = object_holdy[i];
@@ -363,7 +363,7 @@ function loadSpeakerOptions(options){
}
//function to load speaker audio file options to the drop down list
-function loadSpeakerAudio(option){
+function loadSpeakerAudio(option) {
try {
var menu = document.getElementById('speakerAudioViewer');
var aud = document.createElement("source");
@@ -378,17 +378,17 @@ function loadSpeakerAudio(option){
//Audio value setter
var speakerAudios = {};
var speakerEndValues = {};
-function setSpeakerAudiosValue(valy){
+function setSpeakerAudiosValue(valy) {
try {
speakerAudios = valy;
speakerRewriten = valy;
document.getElementById("speakerAudioViewer").src = valy.speakerA.src;
} catch (error) {
-
+
}
}
//Function to rewrite the speaker name in the json
-function rewriteSpeakerName(){
+function rewriteSpeakerName() {
try {
var tempy = document.getElementById("cur_speaker").value;
speakerAudios[tempy].name = document.getElementById("newSpeaker").value;
@@ -398,7 +398,7 @@ function rewriteSpeakerName(){
}
}
//Function to send the json with the given names back to the program to rewrite the document file
-function sendSpeakerPackages(){
+function sendSpeakerPackages() {
try {
window.submitSpeaker.speaker_submit(speakerAudios);
} catch (error) {
@@ -421,14 +421,29 @@ function fileDownload() {
}
-window.api.getTxtFiles().then(files => {
- files.forEach(file => {
- const option = document.createElement('option');
- option.value = file;
- option.textContent = file
- .replace('.txt', '') // Endung entfernen
- .replace(/_/g, ' ') // Leerzeichen ersetzen
- .replace(/\b\w/g, c => c.toUpperCase()) // ersten Buchstaben groß
- costumDocumentType.appendChild(option);
- });
- });
\ No newline at end of file
+
+
+
+/*
+
+Functions for the custom document section
+
+*/
+
+//reload drop down
+function reloadDocuments() {
+ [...existingDocs.querySelectorAll('option:not([value="newDoc"])')]
+ .forEach(o => o.remove());
+
+ window.api.getTxtFiles().then(files => {
+ files.forEach(file => {
+ const option = document.createElement('option');
+ option.value = file;
+ option.textContent = file
+ .replace('.txt', '') // Endung entfernen
+ .replace(/_/g, ' ') // Leerzeichen ersetzen
+ .replace(/\b\w/g, c => c.toUpperCase()) // ersten Buchstaben groß
+ existingDocs.appendChild(option);
+ });
+ });
+}
\ No newline at end of file