diff --git a/Website/apiConnector.js b/Website/apiConnector.js index 0a94b9e..52d2dbd 100644 --- a/Website/apiConnector.js +++ b/Website/apiConnector.js @@ -52,8 +52,8 @@ async function GetRunningTasks(){ return json; } -async function GetTasks(){ - var uri = apiUri + "/Tasks/GetList"; +async function GetDownloadTasks(){ + var uri = apiUri + "/Tasks/Get?taskType=DownloadNewChapters"; let json = await GetData(uri); return json; } @@ -64,6 +64,12 @@ async function GetSettings(){ return json; } +async function GetKomgaTask(){ + var uri = apiUri + "/Tasks/Get?taskType=UpdateKomgaLibrary"; + let json = await GetData(uri); + return json; +} + function CreateTask(taskType, reoccurrence, connectorName, publicationId, language){ var uri = apiUri + `/Tasks/Create?taskType=${taskType}&connectorName=${connectorName}&publicationId=${publicationId}&reoccurrenceTime=${reoccurrence}&language=${language}`; PostData(uri); @@ -80,7 +86,7 @@ function EnqueueTask(taskType, connectorName, publicationId){ } function UpdateSettings(downloadLocation, komgaUrl, komgaAuth){ - var uri = apiUri + `/Settings/Update?downloadLocation=${downloadLocation}&komgaUrl=${komgaAuth}&komgaAuth=${komgaAuth}`; + var uri = apiUri + `/Settings/Update?downloadLocation=${downloadLocation}&komgaUrl=${komgaUrl}&komgaAuth=${komgaAuth}`; PostData(uri); } diff --git a/Website/index.html b/Website/index.html index 44b8c62..2a65505 100644 --- a/Website/index.html +++ b/Website/index.html @@ -53,6 +53,7 @@ +
@@ -79,7 +80,17 @@ - + Download Location: + + + Komga +
Configured: ✅❌
+ + + +
+ +
diff --git a/Website/interaction.js b/Website/interaction.js index 3d93d40..45dc5b5 100644 --- a/Website/interaction.js +++ b/Website/interaction.js @@ -22,7 +22,6 @@ let publications = []; let tasks = []; let toEditId; -const taskTypesSelect = document.querySelector("#taskTypes") const searchPublicationQuery = document.querySelector("#searchPublicationQuery"); const selectPublication = document.querySelector("#taskSelectOutput"); const connectorSelect = document.querySelector("#connectors"); @@ -40,30 +39,24 @@ const pubviewcover = document.querySelector("#pubviewcover"); const publicationDelete = document.querySelector("publication-delete"); const publicationAdd = document.querySelector("publication-add"); const closetaskpopup = document.querySelector("#closePopupImg"); +const settingDownloadLocation = document.querySelector("#downloadLocation"); +const settingKomgaUrl = document.querySelector("#komgaUrl"); +const settingKomgaUser = document.querySelector("#komgaUsername"); +const settingKomgaPass = document.querySelector("#komgaPassword"); +const settingKomgaTime = document.querySelector("#komgaUpdateTime"); +const settingKomgaConfigured = document.querySelector("#komgaConfigured"); -settingsCog.addEventListener("click", () => slide()); + +settingsCog.addEventListener("click", () => OpenSettings()); closetaskpopup.addEventListener("click", () => HideAddTaskPopup()); document.querySelector("#blurBackgroundTaskPopup").addEventListener("click", () => HideAddTaskPopup()); document.querySelector("#blurBackgroundPublicationPopup").addEventListener("click", () => HidePublicationPopup()); publicationDelete.addEventListener("click", () => DeleteTaskClick()); publicationAdd.addEventListener("click", () => AddTaskClick()); -/* -let availableTaskTypes; -GetTaskTypes() - .then(json => availableTaskTypes = json) - .then(json => - json.forEach(taskType => { - var option = document.createElement('option'); - option.value = taskType; - option.innerText = taskType; - taskTypesSelect.appendChild(option); - }));*/ - let availableConnectors; GetAvailableControllers() .then(json => availableConnectors = json) - //.then(json => console.log(json)) .then(json => json.forEach(connector => { var option = document.createElement('option'); @@ -75,30 +68,37 @@ GetAvailableControllers() searchPublicationQuery.addEventListener("keypress", (event) => { if(event.key === "Enter"){ - selectRecurrence.disabled = true; - connectorSelect.disabled = true; - searchPublicationQuery.disabled = true; - - selectPublication.replaceChildren(); - GetPublication(connectorSelect.value, searchPublicationQuery.value) - //.then(json => console.log(json)); - .then(json => - json.forEach(publication => { - var option = CreatePublication(publication, connectorSelect.value); - option.addEventListener("click", (mouseEvent) => { - ShowPublicationViewerWindow(publication.internalId, mouseEvent, true); - }); - selectPublication.appendChild(option); - } - )) - .then(() => { - selectRecurrence.disabled = false; - connectorSelect.disabled = false; - searchPublicationQuery.disabled = false; - }); + NewSearch(); } }); +function NewSearch(){ + //Disable inputs + selectRecurrence.disabled = true; + connectorSelect.disabled = true; + searchPublicationQuery.disabled = true; + + //Empty previous results + selectPublication.replaceChildren(); + GetPublication(connectorSelect.value, searchPublicationQuery.value) + .then(json => + json.forEach(publication => { + var option = CreatePublication(publication, connectorSelect.value); + option.addEventListener("click", (mouseEvent) => { + ShowPublicationViewerWindow(publication.internalId, mouseEvent, true); + }); + selectPublication.appendChild(option); + } + )) + .then(() => { + //Re-enable inputs + selectRecurrence.disabled = false; + connectorSelect.disabled = false; + searchPublicationQuery.disabled = false; + }); +} + +//Returns a new "Publication" Item to display in the tasks section function CreatePublication(publication, connector){ var publicationElement = document.createElement('publication'); publicationElement.setAttribute("id", publication.internalId); @@ -131,7 +131,7 @@ function AddTaskClick(){ HidePublicationPopup(); } -var slideIn = true; +let slideIn = true; function slide() { if (slideIn) settingsTab.animate(slideInRight, slideInRightTiming); @@ -141,7 +141,10 @@ function slide() { } function ResetContent(){ + //Delete everything tasksContent.replaceChildren(); + + //Add "Add new Task" Button var add = document.createElement("div"); add.setAttribute("id", "addPublication") var plus = document.createElement("p"); @@ -151,16 +154,19 @@ function ResetContent(){ tasksContent.appendChild(add); } function ShowPublicationViewerWindow(publicationId, event, add){ + //Set position to mouse-position publicationViewerWindow.style.top = `${event.clientY - 60}px`; publicationViewerWindow.style.left = `${event.clientX}px`; - var publication = publications.filter(pub => pub.internalId === publicationId)[0]; + //Edit information inside the window + var publication = publications.filter(pub => pub.internalId === publicationId)[0]; publicationViewerName.innerText = publication.sortName; publicationViewerDescription.innerText = publication.description; publicationViewerAuthor.innerText = publication.author; pubviewcover.src = publication.posterUrl; toEditId = publicationId; + //Check what action should be listed if(add){ publicationAdd.style.display = "block"; publicationDelete.style.display = "none"; @@ -170,10 +176,14 @@ function ShowPublicationViewerWindow(publicationId, event, add){ publicationDelete.style.display = "block"; } - toEditId = publicationId; + //Show popup publicationViewerPopup.style.display = "block"; } +function HidePublicationPopup(){ + publicationViewerPopup.style.display = "none"; +} + function ShowNewTaskWindow(){ selectPublication.replaceChildren(); addTaskPopup.style.display = "block"; @@ -182,9 +192,6 @@ function HideAddTaskPopup(){ addTaskPopup.style.display = "none"; } -function HidePublicationPopup(){ - publicationViewerPopup.style.display = "none"; -} const fadeIn = [ { opacity: "0" }, @@ -197,9 +204,46 @@ const fadeInTiming = { fill: "forwards" } +function OpenSettings(){ + GetSettingsClick(); + slide(); +} + +function GetSettingsClick(){ + settingKomgaUrl.value = ""; + settingKomgaUser.value = ""; + settingKomgaPass.value = ""; + + GetSettings().then(json => { + settingDownloadLocation.innerText = json.downloadLocation; + if(json.komga != null) + settingKomgaUrl.placeholder = json.komga.baseUrl; + }); + + GetKomgaTask().then(json => { + if(json.length > 0) + settingKomgaConfigured.innerText = "✅"; + else + settingKomgaConfigured.innerText = "❌"; + }); +} + +function UpdateSettingsClick(){ + var auth = utf8_to_b64(`${settingKomgaUser.value}:${settingKomgaPass.value}`); + console.log(auth); + UpdateSettings("", settingKomgaUrl.value, auth); + CreateTask("UpdateKomgaLibrary", settingKomgaTime.value, "","",""); + setTimeout(() => GetSettingsClick(), 500); +} + +function utf8_to_b64( str ) { + return window.btoa(unescape(encodeURIComponent( str ))); +} + +//Resets the tasks shown ResetContent(); -GetTasks() - //.then(json => console.log(json)) +//Get Tasks and show them +GetDownloadTasks() .then(json => json.forEach(task => { var publication = CreatePublication(task.publication, task.connectorName); publication.addEventListener("click", (event) => ShowPublicationViewerWindow(task.publication.internalId, event, false)); @@ -208,13 +252,16 @@ GetTasks() })); setInterval(() => { + //Tasks from API var cTasks = []; - GetTasks() - //.then(json => console.log(json)) + GetDownloadTasks() .then(json => json.forEach(task => cTasks.push(task))) .then(() => { + //Only update view if tasks-amount has changed if(tasks.length != cTasks.length) { + //Resets the tasks shown ResetContent(); + //Add all currenttasks to view cTasks.forEach(task => { var publication = CreatePublication(task.publication, task.connectorName); publication.addEventListener("click", (event) => ShowPublicationViewerWindow(task.publication.internalId, event, false)); diff --git a/Website/style.css b/Website/style.css index e9220bf..70a2604 100644 --- a/Website/style.css +++ b/Website/style.css @@ -123,6 +123,36 @@ settingstab{ height: calc(100% - var(--topbar-height) - 40px); margin-bottom: 10px; border-radius: 5px 0 0 5px; + display: flex; + flex-direction: column; + flex-wrap: nowrap; +} + +settingstab > * { + margin: 0 20px; +} + +settingstab .title { + font-size: 14pt; + font-weight: bolder; + margin-top: 20px; +} + +komga-settings { + margin-top: 20px; + display: flex; + flex-direction: column; + flex-wrap: nowrap; +} + +komga-settings > * { + margin: 2px 0; +} + +komga-settings input { + padding: 3px; + border-radius: 3px; + border: 0; } #addPublication {