Finished Extension and Server
This commit is contained in:
parent
873462ec5e
commit
12b7fc6553
13 changed files with 151 additions and 55 deletions
|
|
@ -42,7 +42,6 @@ function updateHorseButton() {
|
|||
console.error("Failed to get horse basic data:", basicDataResponse ? basicDataResponse.message : "No response");
|
||||
return; // Beende die Kette
|
||||
}
|
||||
|
||||
console.log("Horse data received:", basicDataResponse.data);
|
||||
const horseData = basicDataResponse.data;
|
||||
|
||||
|
|
@ -58,7 +57,6 @@ function updateHorseButton() {
|
|||
return setBaseDataHorseAPI(horseData.id, horseData)
|
||||
.then(() => {
|
||||
console.log("Base data updated in API for horse ID:", horseData.id);
|
||||
|
||||
// Schritt 2: Aktuelle Horse-Daten holen (abhängig vom aktiven Tab)
|
||||
return sendMessageAsync(activeTabId, { action: "getHorseCurrentData", data: { id: horseData.id } })
|
||||
.then((currentDataResponse) => {
|
||||
|
|
|
|||
|
|
@ -23,9 +23,10 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
|
|||
name: (document.title.replace(/ - Horse Reality.*$/, '') || "Unknown").trim(),
|
||||
gender: genderEl.alt || "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);
|
||||
sendResponse({ success: true, data: horseData });
|
||||
|
||||
|
|
@ -60,7 +61,7 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
|
|||
console.error("Error in Summary tab:", error);
|
||||
sendResponse({ success: false, message: error.message });
|
||||
}
|
||||
|
||||
updateSingleLoadStateUI("Summary", true, false);
|
||||
} else if (selectedTab === "Training") {
|
||||
const trainingEl8 = document.querySelector('.top:nth-child(8)');
|
||||
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);
|
||||
sendResponse({ success: false, message: error.message });
|
||||
}
|
||||
|
||||
updateSingleLoadStateUI("Training", true);
|
||||
} else if (selectedTab === "Genetics") {
|
||||
try {
|
||||
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);
|
||||
sendResponse({ success: false, message: error.message });
|
||||
}
|
||||
|
||||
updateSingleLoadStateUI("Genetics", true, false);
|
||||
} else if (selectedTab === "Achievements") {
|
||||
const geneticStatsEls = document.querySelectorAll('.genetic_stats');
|
||||
if (!geneticStatsEls || geneticStatsEls.length === 0) {
|
||||
|
|
@ -257,7 +258,7 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
|
|||
console.error("Error in Achievements tab:", error);
|
||||
sendResponse({ success: false, message: error.message });
|
||||
}
|
||||
|
||||
updateSingleLoadStateUI("Achievements", true, true);
|
||||
} else if (selectedTab === "Health") {
|
||||
const healthEl = document.querySelector("#tab_health2 p");
|
||||
if (!healthEl) {
|
||||
|
|
@ -285,7 +286,7 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
|
|||
console.error("Error in Health tab:", error);
|
||||
sendResponse({ success: false, message: error.message });
|
||||
}
|
||||
|
||||
updateSingleLoadStateUI("Health", true, false);
|
||||
} else {
|
||||
console.error("Unknown or no tab selected.");
|
||||
sendResponse({ success: false, message: "Unknown or no tab selected." });
|
||||
|
|
|
|||
|
|
@ -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
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
// Suche nach dem Element mit der Klasse 'horse_banner'
|
||||
|
|
@ -54,17 +62,6 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
width: '100%',
|
||||
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
|
||||
rows.forEach(row => {
|
||||
const rowDiv = document.createElement('div');
|
||||
|
|
@ -155,5 +152,56 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
div.appendChild(legendTitle);
|
||||
div.appendChild(legend);
|
||||
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.`);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -2,14 +2,14 @@
|
|||
"Version": 1,
|
||||
"WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\",
|
||||
"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}",
|
||||
"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}",
|
||||
"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": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 4,
|
||||
"SelectedChildIndex": 1,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
|
|
@ -34,13 +34,13 @@
|
|||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"DocumentIndex": 0,
|
||||
"Title": "Horse.cs",
|
||||
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
|
||||
"RelativeDocumentMoniker": "HRServer\\Models\\Horse.cs",
|
||||
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
|
||||
"RelativeToolTip": "HRServer\\Models\\Horse.cs",
|
||||
"ViewState": "AgIAALkAAAAAAAAAAAAmwMgAAAA0AAAAAAAAAA==",
|
||||
"ViewState": "AgIAALUAAAAAAAAAAAAwwL4AAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-07T17:50:21.836Z",
|
||||
"EditorCaption": ""
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"DocumentIndex": 1,
|
||||
"Title": "HorseController.cs",
|
||||
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
|
||||
"RelativeDocumentMoniker": "HRServer\\Controllers\\HorseController.cs",
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@
|
|||
"Version": 1,
|
||||
"WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\",
|
||||
"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}",
|
||||
"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}",
|
||||
"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": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 1,
|
||||
"SelectedChildIndex": 4,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
|
|
@ -34,13 +34,13 @@
|
|||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"DocumentIndex": 1,
|
||||
"Title": "Horse.cs",
|
||||
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
|
||||
"RelativeDocumentMoniker": "HRServer\\Models\\Horse.cs",
|
||||
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
|
||||
"RelativeToolTip": "HRServer\\Models\\Horse.cs",
|
||||
"ViewState": "AgIAALUAAAAAAAAAAAAwwL4AAAAAAAAAAAAAAA==",
|
||||
"ViewState": "AgIAALoAAAAAAAAAAAAcwMcAAAAjAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-07T17:50:21.836Z",
|
||||
"EditorCaption": ""
|
||||
|
|
@ -73,13 +73,13 @@
|
|||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"DocumentIndex": 0,
|
||||
"Title": "HorseController.cs",
|
||||
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
|
||||
"RelativeDocumentMoniker": "HRServer\\Controllers\\HorseController.cs",
|
||||
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
|
||||
"RelativeToolTip": "HRServer\\Controllers\\HorseController.cs",
|
||||
"ViewState": "AgIAADgAAAAAAAAAAAAcwEAAAABOAAAAAAAAAA==",
|
||||
"ViewState": "AgIAABUAAAAAAAAAAAAowC4AAAAJAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-07T13:05:14.341Z",
|
||||
"EditorCaption": ""
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ namespace HRServer.Controllers
|
|||
horse = new Horse { Id = (ulong)id };
|
||||
HorseFactory.AddOrUpdateHorse(horse);
|
||||
}
|
||||
HorseFactory.SaveHorsesToFile();
|
||||
return Ok(horse);
|
||||
}
|
||||
[HttpGet("/api/getHorse/{id}/LoadState")]
|
||||
|
|
@ -41,8 +42,12 @@ namespace HRServer.Controllers
|
|||
horse = new Horse { Id = (ulong)id };
|
||||
HorseFactory.AddOrUpdateHorse(horse);
|
||||
}
|
||||
|
||||
if (horse.LastDrawnDate.AddDays(1) < DateTime.Now)
|
||||
{
|
||||
horse.LoadState.AchievementsNeedsRefresh = true;
|
||||
}
|
||||
// Gib den Ladezustand des Pferdes zurück
|
||||
HorseFactory.SaveHorsesToFile();
|
||||
return Ok(horse.LoadState);
|
||||
}
|
||||
[HttpPost("/api/updateHorse/{id}/BasicData")]
|
||||
|
|
@ -59,6 +64,7 @@ namespace HRServer.Controllers
|
|||
localHorse.HorseName = localHorse.HorseName;
|
||||
localHorse.Gender = localHorse.Gender;
|
||||
localHorse.Link = localHorse.Link;
|
||||
HorseFactory.SaveHorsesToFile();
|
||||
return Ok(localHorse);
|
||||
}
|
||||
[HttpPost("/api/updateHorse/{id}/Pedigree")]
|
||||
|
|
@ -71,6 +77,7 @@ namespace HRServer.Controllers
|
|||
HorseFactory.AddOrUpdateHorse(localHorse);
|
||||
}
|
||||
localHorse.Summary = websiteHorseSummary;
|
||||
HorseFactory.SaveHorsesToFile();
|
||||
return Ok(localHorse);
|
||||
}
|
||||
[HttpPost("/api/updateHorse/{id}/Training")]
|
||||
|
|
@ -83,6 +90,7 @@ namespace HRServer.Controllers
|
|||
HorseFactory.AddOrUpdateHorse(localHorse);
|
||||
}
|
||||
localHorse.Training = websiteHorseTraining;
|
||||
HorseFactory.SaveHorsesToFile();
|
||||
return Ok(localHorse);
|
||||
}
|
||||
[HttpPost("/api/updateHorse/{id}/Health")]
|
||||
|
|
@ -95,6 +103,7 @@ namespace HRServer.Controllers
|
|||
HorseFactory.AddOrUpdateHorse(localHorse);
|
||||
}
|
||||
localHorse.Health = websiteHorseHealth;
|
||||
HorseFactory.SaveHorsesToFile();
|
||||
return Ok(localHorse);
|
||||
}
|
||||
[HttpPost("/api/updateHorse/{id}/Genetics")]
|
||||
|
|
@ -107,6 +116,7 @@ namespace HRServer.Controllers
|
|||
HorseFactory.AddOrUpdateHorse(localHorse);
|
||||
}
|
||||
localHorse.Genetics = websiteHorseGenetics;
|
||||
HorseFactory.SaveHorsesToFile();
|
||||
return Ok(localHorse);
|
||||
}
|
||||
[HttpPost("/api/updateHorse/{id}/Achievements")]
|
||||
|
|
@ -118,7 +128,24 @@ namespace HRServer.Controllers
|
|||
localHorse = new Horse { Id = (ulong)id };
|
||||
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;
|
||||
HorseFactory.SaveHorsesToFile();
|
||||
return Ok(localHorse);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
using System.Text.Json.Serialization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace HRServer.Models
|
||||
{
|
||||
public static class HorseFactory
|
||||
{
|
||||
public static string HorseDataPath = "horses.json";
|
||||
// Thread-safe Dictionary
|
||||
private static readonly Dictionary<ulong, Horse> Horses = new();
|
||||
private static Dictionary<ulong, Horse> Horses = new();
|
||||
public static Horse? GetHorse(ulong id)
|
||||
{
|
||||
return Horses.TryGetValue(id, out var horse) ? horse : null;
|
||||
|
|
@ -17,11 +19,23 @@ namespace HRServer.Models
|
|||
|
||||
Horses[horse.Id.Value] = horse;
|
||||
}
|
||||
|
||||
public static IReadOnlyDictionary<ulong, Horse> GetAllHorses()
|
||||
{
|
||||
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
|
||||
|
|
@ -39,6 +53,8 @@ namespace HRServer.Models
|
|||
private string _breed = string.Empty;
|
||||
[JsonPropertyName("link")]
|
||||
private string _link = string.Empty;
|
||||
[JsonPropertyName("lastDrawnDate")]
|
||||
private DateTime _lastDrawnDate = DateTime.Now;
|
||||
|
||||
public ulong? Id
|
||||
{
|
||||
|
|
@ -56,7 +72,6 @@ namespace HRServer.Models
|
|||
set
|
||||
{
|
||||
_age = value;
|
||||
LoadState.BasicInfoLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -66,7 +81,6 @@ namespace HRServer.Models
|
|||
set
|
||||
{
|
||||
_horseName = value;
|
||||
LoadState.BasicInfoLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +90,6 @@ namespace HRServer.Models
|
|||
set
|
||||
{
|
||||
_gender = value;
|
||||
LoadState.BasicInfoLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -86,7 +99,6 @@ namespace HRServer.Models
|
|||
set
|
||||
{
|
||||
_breed = value;
|
||||
LoadState.BasicInfoLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -96,10 +108,16 @@ namespace HRServer.Models
|
|||
set
|
||||
{
|
||||
_link = value;
|
||||
LoadState.BasicInfoLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
public DateTime LastDrawnDate
|
||||
{
|
||||
get => _lastDrawnDate;
|
||||
set
|
||||
{
|
||||
_lastDrawnDate = value;
|
||||
}
|
||||
}
|
||||
private HorseSummary _summary = new();
|
||||
public HorseSummary Summary
|
||||
{
|
||||
|
|
@ -177,11 +195,17 @@ namespace HRServer.Models
|
|||
public class DataLoadState
|
||||
{
|
||||
public bool BasicInfoLoaded { get; set; } = false;
|
||||
public bool BasicInfoNeedsRefresh { get; set; } = false;
|
||||
public bool SummaryLoaded { get; set; } = false;
|
||||
public bool SummaryNeedsRefresh { get; set; } = false;
|
||||
public bool TrainingLoaded { get; set; } = false;
|
||||
public bool TrainingNeedsRefresh { get; set; } = false;
|
||||
public bool GeneticsLoaded { get; set; } = false;
|
||||
public bool GeneticsNeedsRefresh { get; set; } = false;
|
||||
public bool AchievementsLoaded { get; set; } = false;
|
||||
public bool AchievementsNeedsRefresh { get; set; } = false;
|
||||
public bool HealthLoaded { get; set; } = false;
|
||||
public bool HealthNeedsRefresh { get; set; } = false;
|
||||
|
||||
public bool IsAllDataLoaded()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ namespace HRServer
|
|||
.AllowAnyHeader();
|
||||
});
|
||||
});
|
||||
|
||||
// Swagger / OpenAPI hinzufügen
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Dieser Code wurde von einem Tool generiert.
|
||||
// Laufzeitversion:4.0.30319.42000
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||
// der Code erneut generiert wird.
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -14,10 +13,10 @@ using System.Reflection;
|
|||
[assembly: System.Reflection.AssemblyCompanyAttribute("HRServer")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[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.AssemblyTitleAttribute("HRServer")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Von der MSBuild WriteCodeFragment-Klasse generiert.
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
a2b444c9f69ba9a33722561291338238415e557705df53ec577027e812238c0f
|
||||
2b9e6b04546558b8be5da9680e2e9462db49f3d3bd846c47b3601708d788771a
|
||||
|
|
|
|||
Loading…
Reference in a new issue