Finished Extension and Server

This commit is contained in:
Dultus 2024-12-08 18:16:01 +01:00
parent 873462ec5e
commit 12b7fc6553
13 changed files with 151 additions and 55 deletions

View file

@ -42,7 +42,6 @@ function updateHorseButton() {
console.error("Failed to get horse basic data:", basicDataResponse ? basicDataResponse.message : "No response"); console.error("Failed to get horse basic data:", basicDataResponse ? basicDataResponse.message : "No response");
return; // Beende die Kette return; // Beende die Kette
} }
console.log("Horse data received:", basicDataResponse.data); console.log("Horse data received:", basicDataResponse.data);
const horseData = basicDataResponse.data; const horseData = basicDataResponse.data;
@ -58,7 +57,6 @@ function updateHorseButton() {
return setBaseDataHorseAPI(horseData.id, horseData) return setBaseDataHorseAPI(horseData.id, horseData)
.then(() => { .then(() => {
console.log("Base data updated in API for horse ID:", horseData.id); console.log("Base data updated in API for horse ID:", horseData.id);
// Schritt 2: Aktuelle Horse-Daten holen (abhängig vom aktiven Tab) // Schritt 2: Aktuelle Horse-Daten holen (abhängig vom aktiven Tab)
return sendMessageAsync(activeTabId, { action: "getHorseCurrentData", data: { id: horseData.id } }) return sendMessageAsync(activeTabId, { action: "getHorseCurrentData", data: { id: horseData.id } })
.then((currentDataResponse) => { .then((currentDataResponse) => {

View file

@ -23,9 +23,10 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
name: (document.title.replace(/ - Horse Reality.*$/, '') || "Unknown").trim(), name: (document.title.replace(/ - Horse Reality.*$/, '') || "Unknown").trim(),
gender: genderEl.alt || "Unknown", gender: genderEl.alt || "Unknown",
breed: breedEl.innerText || "Unknown", breed: breedEl.innerText || "Unknown",
link: window.location.href || "" link: window.location.href || "",
lastDrawnDate: Date.now()
}; };
updateSingleLoadStateUI("Basic", true, false);
console.log("Horse data gathered:", horseData); console.log("Horse data gathered:", horseData);
sendResponse({ success: true, data: horseData }); sendResponse({ success: true, data: horseData });
@ -60,7 +61,7 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
console.error("Error in Summary tab:", error); console.error("Error in Summary tab:", error);
sendResponse({ success: false, message: error.message }); sendResponse({ success: false, message: error.message });
} }
updateSingleLoadStateUI("Summary", true, false);
} else if (selectedTab === "Training") { } else if (selectedTab === "Training") {
const trainingEl8 = document.querySelector('.top:nth-child(8)'); const trainingEl8 = document.querySelector('.top:nth-child(8)');
const trainingEl6 = document.querySelector('.top:nth-child(6)'); const trainingEl6 = document.querySelector('.top:nth-child(6)');
@ -83,7 +84,7 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
console.error("Error in Training tab:", error); console.error("Error in Training tab:", error);
sendResponse({ success: false, message: error.message }); sendResponse({ success: false, message: error.message });
} }
updateSingleLoadStateUI("Training", true);
} else if (selectedTab === "Genetics") { } else if (selectedTab === "Genetics") {
try { try {
const gpDiv = Array.from(document.querySelectorAll('.top div')).find(el => el.innerText.includes('GP')); const gpDiv = Array.from(document.querySelectorAll('.top div')).find(el => el.innerText.includes('GP'));
@ -162,7 +163,7 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
console.error("Error while processing Genetics tab:", error); console.error("Error while processing Genetics tab:", error);
sendResponse({ success: false, message: error.message }); sendResponse({ success: false, message: error.message });
} }
updateSingleLoadStateUI("Genetics", true, false);
} else if (selectedTab === "Achievements") { } else if (selectedTab === "Achievements") {
const geneticStatsEls = document.querySelectorAll('.genetic_stats'); const geneticStatsEls = document.querySelectorAll('.genetic_stats');
if (!geneticStatsEls || geneticStatsEls.length === 0) { if (!geneticStatsEls || geneticStatsEls.length === 0) {
@ -257,7 +258,7 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
console.error("Error in Achievements tab:", error); console.error("Error in Achievements tab:", error);
sendResponse({ success: false, message: error.message }); sendResponse({ success: false, message: error.message });
} }
updateSingleLoadStateUI("Achievements", true, true);
} else if (selectedTab === "Health") { } else if (selectedTab === "Health") {
const healthEl = document.querySelector("#tab_health2 p"); const healthEl = document.querySelector("#tab_health2 p");
if (!healthEl) { if (!healthEl) {
@ -285,7 +286,7 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
console.error("Error in Health tab:", error); console.error("Error in Health tab:", error);
sendResponse({ success: false, message: error.message }); sendResponse({ success: false, message: error.message });
} }
updateSingleLoadStateUI("Health", true, false);
} else { } else {
console.error("Unknown or no tab selected."); console.error("Unknown or no tab selected.");
sendResponse({ success: false, message: "Unknown or no tab selected." }); sendResponse({ success: false, message: "Unknown or no tab selected." });

View file

@ -1,3 +1,11 @@
const rows = [
{ label: 'Basic', emojiId: 'emojiBasic', emoji: '❌' },
{ label: 'Summary', emojiId: 'emojiSummary', emoji: '❌' },
{ label: 'Training', emojiId: 'emojiTraining', emoji: '❌' },
{ label: 'Genetics', emojiId: 'emojiGenetics', emoji: '❌' },
{ label: 'Achievements', emojiId: 'emojiAchievements', emoji: '❌' },
{ label: 'Health', emojiId: 'emojiHealth', emoji: '❌' },
];
// Warten, bis das DOM vollständig geladen ist // Warten, bis das DOM vollständig geladen ist
document.addEventListener("DOMContentLoaded", function () { document.addEventListener("DOMContentLoaded", function () {
// Suche nach dem Element mit der Klasse 'horse_banner' // Suche nach dem Element mit der Klasse 'horse_banner'
@ -54,17 +62,6 @@ document.addEventListener("DOMContentLoaded", function () {
width: '100%', width: '100%',
gap: '12px' // Abstand zwischen den Zeilen gap: '12px' // Abstand zwischen den Zeilen
}); });
// Beschriftungen und Emoji-Elemente
const rows = [
{ label: 'Basic', emojiId: 'emojiBasic', emoji: '❌' },
{ label: 'Summary', emojiId: 'emojiSummary', emoji: '❌' },
{ label: 'Training', emojiId: 'emojiTraining', emoji: '❌' },
{ label: 'Genetics', emojiId: 'emojiGenetics', emoji: '❌' },
{ label: 'Achievements', emojiId: 'emojiAchievements', emoji: '❌' },
{ label: 'Health', emojiId: 'emojiHealth', emoji: '❌' },
];
// Erstelle Zeilen für jede Beschriftung // Erstelle Zeilen für jede Beschriftung
rows.forEach(row => { rows.forEach(row => {
const rowDiv = document.createElement('div'); const rowDiv = document.createElement('div');
@ -155,5 +152,56 @@ document.addEventListener("DOMContentLoaded", function () {
div.appendChild(legendTitle); div.appendChild(legendTitle);
div.appendChild(legend); div.appendChild(legend);
banner.appendChild(div); banner.appendChild(div);
const horseId = document.querySelector('.right:nth-child(2)').innerText.replace('#', '');
updateLoadStateUI(horseId);
} }
}); });
async function updateLoadStateUI(horseId) {
const loadState = await getHorseLoadStateAPIAsync(horseId);
if (!loadState) {
console.error("Failed to retrieve load state.");
return;
}
// Mappe die LoadState-Werte auf die UI-Emojis
const loadStateMapping = {
Basic: loadState.BasicInfoLoaded ? (loadState.BasicInfoNeedsRefresh ? '🔄' : '✅') : '❌',
Summary: loadState.SummaryLoaded ? (loadState.SummaryNeedsRefresh ? '🔄' : '✅') : '❌',
Training: loadState.TrainingLoaded ? (loadState.TrainingNeedsRefresh ? '🔄' : '✅') : '❌',
Genetics: loadState.GeneticsLoaded ? (loadState.GeneticsNeedsRefresh ? '🔄' : '✅') : '❌',
Achievements: loadState.AchievementsLoaded ? (loadState.AchievementsNeedsRefresh ? '🔄' : '☑️') : '❌',
Health: loadState.HealthLoaded ? (loadState.HealthNeedsRefresh ? '🔄' : '✅') : '❌',
};
// Aktualisiere die Rows in der UI
rows.forEach(row => {
const emojiElement = document.getElementById(row.emojiId);
if (emojiElement && loadStateMapping[row.label]) {
emojiElement.textContent = loadStateMapping[row.label]; // Setze das Emoji basierend auf dem Ladezustand
}
});
}
function updateSingleLoadStateUI(loadStateKey, isLoaded, needsRefresh) {
// Mappe das LoadState-Schlüssel auf das Emoji
const loadStateMapping = {
true: needsRefresh ? '✅' : '☑️', // Geladen, aber möglicherweise veraltet
false: '❌' // Nicht geladen
};
// Suche die passende Row basierend auf dem Schlüssel
const row = rows.find(row => row.label === loadStateKey);
if (!row) {
console.error(`Row for ${loadStateKey} not found.`);
return;
}
// Aktualisiere das Emoji in der UI
const emojiElement = document.getElementById(row.emojiId);
if (emojiElement) {
emojiElement.textContent = loadStateMapping[isLoaded]; // Setze das Emoji entsprechend des Status
} else {
console.error(`Emoji element for ${loadStateKey} not found.`);
}
}

View file

@ -2,14 +2,14 @@
"Version": 1, "Version": 1,
"WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\", "WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\",
"Documents": [ "Documents": [
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{ {
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" "RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}, },
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{ {
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" "RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@ -26,7 +26,7 @@
"DocumentGroups": [ "DocumentGroups": [
{ {
"DockedWidth": 200, "DockedWidth": 200,
"SelectedChildIndex": 4, "SelectedChildIndex": 1,
"Children": [ "Children": [
{ {
"$type": "Bookmark", "$type": "Bookmark",
@ -34,13 +34,13 @@
}, },
{ {
"$type": "Document", "$type": "Document",
"DocumentIndex": 1, "DocumentIndex": 0,
"Title": "Horse.cs", "Title": "Horse.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs", "DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"RelativeDocumentMoniker": "HRServer\\Models\\Horse.cs", "RelativeDocumentMoniker": "HRServer\\Models\\Horse.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs", "ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"RelativeToolTip": "HRServer\\Models\\Horse.cs", "RelativeToolTip": "HRServer\\Models\\Horse.cs",
"ViewState": "AgIAALkAAAAAAAAAAAAmwMgAAAA0AAAAAAAAAA==", "ViewState": "AgIAALUAAAAAAAAAAAAwwL4AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T17:50:21.836Z", "WhenOpened": "2024-12-07T17:50:21.836Z",
"EditorCaption": "" "EditorCaption": ""
@ -73,7 +73,7 @@
}, },
{ {
"$type": "Document", "$type": "Document",
"DocumentIndex": 0, "DocumentIndex": 1,
"Title": "HorseController.cs", "Title": "HorseController.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs", "DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"RelativeDocumentMoniker": "HRServer\\Controllers\\HorseController.cs", "RelativeDocumentMoniker": "HRServer\\Controllers\\HorseController.cs",

View file

@ -2,14 +2,14 @@
"Version": 1, "Version": 1,
"WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\", "WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\",
"Documents": [ "Documents": [
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{ {
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" "RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}, },
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{ {
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" "RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@ -26,7 +26,7 @@
"DocumentGroups": [ "DocumentGroups": [
{ {
"DockedWidth": 200, "DockedWidth": 200,
"SelectedChildIndex": 1, "SelectedChildIndex": 4,
"Children": [ "Children": [
{ {
"$type": "Bookmark", "$type": "Bookmark",
@ -34,13 +34,13 @@
}, },
{ {
"$type": "Document", "$type": "Document",
"DocumentIndex": 0, "DocumentIndex": 1,
"Title": "Horse.cs", "Title": "Horse.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs", "DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"RelativeDocumentMoniker": "HRServer\\Models\\Horse.cs", "RelativeDocumentMoniker": "HRServer\\Models\\Horse.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs", "ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"RelativeToolTip": "HRServer\\Models\\Horse.cs", "RelativeToolTip": "HRServer\\Models\\Horse.cs",
"ViewState": "AgIAALUAAAAAAAAAAAAwwL4AAAAAAAAAAAAAAA==", "ViewState": "AgIAALoAAAAAAAAAAAAcwMcAAAAjAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T17:50:21.836Z", "WhenOpened": "2024-12-07T17:50:21.836Z",
"EditorCaption": "" "EditorCaption": ""
@ -73,13 +73,13 @@
}, },
{ {
"$type": "Document", "$type": "Document",
"DocumentIndex": 1, "DocumentIndex": 0,
"Title": "HorseController.cs", "Title": "HorseController.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs", "DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"RelativeDocumentMoniker": "HRServer\\Controllers\\HorseController.cs", "RelativeDocumentMoniker": "HRServer\\Controllers\\HorseController.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs", "ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"RelativeToolTip": "HRServer\\Controllers\\HorseController.cs", "RelativeToolTip": "HRServer\\Controllers\\HorseController.cs",
"ViewState": "AgIAADgAAAAAAAAAAAAcwEAAAABOAAAAAAAAAA==", "ViewState": "AgIAABUAAAAAAAAAAAAowC4AAAAJAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:14.341Z", "WhenOpened": "2024-12-07T13:05:14.341Z",
"EditorCaption": "" "EditorCaption": ""

View file

@ -27,6 +27,7 @@ namespace HRServer.Controllers
horse = new Horse { Id = (ulong)id }; horse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(horse); HorseFactory.AddOrUpdateHorse(horse);
} }
HorseFactory.SaveHorsesToFile();
return Ok(horse); return Ok(horse);
} }
[HttpGet("/api/getHorse/{id}/LoadState")] [HttpGet("/api/getHorse/{id}/LoadState")]
@ -41,8 +42,12 @@ namespace HRServer.Controllers
horse = new Horse { Id = (ulong)id }; horse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(horse); HorseFactory.AddOrUpdateHorse(horse);
} }
if (horse.LastDrawnDate.AddDays(1) < DateTime.Now)
{
horse.LoadState.AchievementsNeedsRefresh = true;
}
// Gib den Ladezustand des Pferdes zurück // Gib den Ladezustand des Pferdes zurück
HorseFactory.SaveHorsesToFile();
return Ok(horse.LoadState); return Ok(horse.LoadState);
} }
[HttpPost("/api/updateHorse/{id}/BasicData")] [HttpPost("/api/updateHorse/{id}/BasicData")]
@ -59,6 +64,7 @@ namespace HRServer.Controllers
localHorse.HorseName = localHorse.HorseName; localHorse.HorseName = localHorse.HorseName;
localHorse.Gender = localHorse.Gender; localHorse.Gender = localHorse.Gender;
localHorse.Link = localHorse.Link; localHorse.Link = localHorse.Link;
HorseFactory.SaveHorsesToFile();
return Ok(localHorse); return Ok(localHorse);
} }
[HttpPost("/api/updateHorse/{id}/Pedigree")] [HttpPost("/api/updateHorse/{id}/Pedigree")]
@ -71,6 +77,7 @@ namespace HRServer.Controllers
HorseFactory.AddOrUpdateHorse(localHorse); HorseFactory.AddOrUpdateHorse(localHorse);
} }
localHorse.Summary = websiteHorseSummary; localHorse.Summary = websiteHorseSummary;
HorseFactory.SaveHorsesToFile();
return Ok(localHorse); return Ok(localHorse);
} }
[HttpPost("/api/updateHorse/{id}/Training")] [HttpPost("/api/updateHorse/{id}/Training")]
@ -83,6 +90,7 @@ namespace HRServer.Controllers
HorseFactory.AddOrUpdateHorse(localHorse); HorseFactory.AddOrUpdateHorse(localHorse);
} }
localHorse.Training = websiteHorseTraining; localHorse.Training = websiteHorseTraining;
HorseFactory.SaveHorsesToFile();
return Ok(localHorse); return Ok(localHorse);
} }
[HttpPost("/api/updateHorse/{id}/Health")] [HttpPost("/api/updateHorse/{id}/Health")]
@ -95,6 +103,7 @@ namespace HRServer.Controllers
HorseFactory.AddOrUpdateHorse(localHorse); HorseFactory.AddOrUpdateHorse(localHorse);
} }
localHorse.Health = websiteHorseHealth; localHorse.Health = websiteHorseHealth;
HorseFactory.SaveHorsesToFile();
return Ok(localHorse); return Ok(localHorse);
} }
[HttpPost("/api/updateHorse/{id}/Genetics")] [HttpPost("/api/updateHorse/{id}/Genetics")]
@ -107,6 +116,7 @@ namespace HRServer.Controllers
HorseFactory.AddOrUpdateHorse(localHorse); HorseFactory.AddOrUpdateHorse(localHorse);
} }
localHorse.Genetics = websiteHorseGenetics; localHorse.Genetics = websiteHorseGenetics;
HorseFactory.SaveHorsesToFile();
return Ok(localHorse); return Ok(localHorse);
} }
[HttpPost("/api/updateHorse/{id}/Achievements")] [HttpPost("/api/updateHorse/{id}/Achievements")]
@ -118,7 +128,24 @@ namespace HRServer.Controllers
localHorse = new Horse { Id = (ulong)id }; localHorse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(localHorse); HorseFactory.AddOrUpdateHorse(localHorse);
} }
if (websiteHorseAchievements.MaxShowResult < localHorse.Achievements.MaxShowResult)
{
websiteHorseAchievements.MaxShowResult = localHorse.Achievements.MaxShowResult;
}
if (websiteHorseAchievements.MinShowResult > localHorse.Achievements.MinShowResult)
{
websiteHorseAchievements.MinShowResult = localHorse.Achievements.MinShowResult;
}
if (websiteHorseAchievements.MaxCompetitionResult < localHorse.Achievements.MaxCompetitionResult)
{
websiteHorseAchievements.MaxCompetitionResult = localHorse.Achievements.MaxCompetitionResult;
}
if (websiteHorseAchievements.MinCompetitionResult > localHorse.Achievements.MinCompetitionResult)
{
websiteHorseAchievements.MinCompetitionResult = localHorse.Achievements.MinCompetitionResult;
}
localHorse.Achievements = websiteHorseAchievements; localHorse.Achievements = websiteHorseAchievements;
HorseFactory.SaveHorsesToFile();
return Ok(localHorse); return Ok(localHorse);
} }
} }

View file

@ -1,11 +1,13 @@
using System.Text.Json.Serialization; using System.Text.Json;
using System.Text.Json.Serialization;
namespace HRServer.Models namespace HRServer.Models
{ {
public static class HorseFactory public static class HorseFactory
{ {
public static string HorseDataPath = "horses.json";
// Thread-safe Dictionary // Thread-safe Dictionary
private static readonly Dictionary<ulong, Horse> Horses = new(); private static Dictionary<ulong, Horse> Horses = new();
public static Horse? GetHorse(ulong id) public static Horse? GetHorse(ulong id)
{ {
return Horses.TryGetValue(id, out var horse) ? horse : null; return Horses.TryGetValue(id, out var horse) ? horse : null;
@ -17,11 +19,23 @@ namespace HRServer.Models
Horses[horse.Id.Value] = horse; Horses[horse.Id.Value] = horse;
} }
public static IReadOnlyDictionary<ulong, Horse> GetAllHorses() public static IReadOnlyDictionary<ulong, Horse> GetAllHorses()
{ {
return Horses; return Horses;
} }
public static void SaveHorsesToFile()
{
var json = JsonSerializer.Serialize(Horses);
File.WriteAllText(HorseDataPath, json);
}
public static void LoadHorsesFromFile()
{
if (!File.Exists(HorseDataPath))
return;
var json = File.ReadAllText(HorseDataPath);
Horses = JsonSerializer.Deserialize<Dictionary<ulong, Horse>>(json);
}
} }
public class Horse public class Horse
@ -39,6 +53,8 @@ namespace HRServer.Models
private string _breed = string.Empty; private string _breed = string.Empty;
[JsonPropertyName("link")] [JsonPropertyName("link")]
private string _link = string.Empty; private string _link = string.Empty;
[JsonPropertyName("lastDrawnDate")]
private DateTime _lastDrawnDate = DateTime.Now;
public ulong? Id public ulong? Id
{ {
@ -56,7 +72,6 @@ namespace HRServer.Models
set set
{ {
_age = value; _age = value;
LoadState.BasicInfoLoaded = true;
} }
} }
@ -66,7 +81,6 @@ namespace HRServer.Models
set set
{ {
_horseName = value; _horseName = value;
LoadState.BasicInfoLoaded = true;
} }
} }
@ -76,7 +90,6 @@ namespace HRServer.Models
set set
{ {
_gender = value; _gender = value;
LoadState.BasicInfoLoaded = true;
} }
} }
@ -86,7 +99,6 @@ namespace HRServer.Models
set set
{ {
_breed = value; _breed = value;
LoadState.BasicInfoLoaded = true;
} }
} }
@ -96,10 +108,16 @@ namespace HRServer.Models
set set
{ {
_link = value; _link = value;
LoadState.BasicInfoLoaded = true;
} }
} }
public DateTime LastDrawnDate
{
get => _lastDrawnDate;
set
{
_lastDrawnDate = value;
}
}
private HorseSummary _summary = new(); private HorseSummary _summary = new();
public HorseSummary Summary public HorseSummary Summary
{ {
@ -177,11 +195,17 @@ namespace HRServer.Models
public class DataLoadState public class DataLoadState
{ {
public bool BasicInfoLoaded { get; set; } = false; public bool BasicInfoLoaded { get; set; } = false;
public bool BasicInfoNeedsRefresh { get; set; } = false;
public bool SummaryLoaded { get; set; } = false; public bool SummaryLoaded { get; set; } = false;
public bool SummaryNeedsRefresh { get; set; } = false;
public bool TrainingLoaded { get; set; } = false; public bool TrainingLoaded { get; set; } = false;
public bool TrainingNeedsRefresh { get; set; } = false;
public bool GeneticsLoaded { get; set; } = false; public bool GeneticsLoaded { get; set; } = false;
public bool GeneticsNeedsRefresh { get; set; } = false;
public bool AchievementsLoaded { get; set; } = false; public bool AchievementsLoaded { get; set; } = false;
public bool AchievementsNeedsRefresh { get; set; } = false;
public bool HealthLoaded { get; set; } = false; public bool HealthLoaded { get; set; } = false;
public bool HealthNeedsRefresh { get; set; } = false;
public bool IsAllDataLoaded() public bool IsAllDataLoaded()
{ {

View file

@ -20,7 +20,6 @@ namespace HRServer
.AllowAnyHeader(); .AllowAnyHeader();
}); });
}); });
// Swagger / OpenAPI hinzufügen // Swagger / OpenAPI hinzufügen
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();

View file

@ -1,10 +1,9 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// Dieser Code wurde von einem Tool generiert. // This code was generated by a tool.
// Laufzeitversion:4.0.30319.42000
// //
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn // Changes to this file may cause incorrect behavior and will be lost if
// der Code erneut generiert wird. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -14,10 +13,10 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("HRServer")] [assembly: System.Reflection.AssemblyCompanyAttribute("HRServer")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f8946138c755861a4827dbd051bc0effcd5fa403")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+873462ec5e25b2e7c3913d7df0174ce76ef00881")]
[assembly: System.Reflection.AssemblyProductAttribute("HRServer")] [assembly: System.Reflection.AssemblyProductAttribute("HRServer")]
[assembly: System.Reflection.AssemblyTitleAttribute("HRServer")] [assembly: System.Reflection.AssemblyTitleAttribute("HRServer")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Von der MSBuild WriteCodeFragment-Klasse generiert. // Generated by the MSBuild WriteCodeFragment class.

View file

@ -1 +1 @@
a2b444c9f69ba9a33722561291338238415e557705df53ec577027e812238c0f 2b9e6b04546558b8be5da9680e2e9462db49f3d3bd846c47b3601708d788771a