diff --git a/Extension/background.js b/Extension/background.js index 200a117..047cebb 100644 --- a/Extension/background.js +++ b/Extension/background.js @@ -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) => { diff --git a/Extension/content.js b/Extension/content.js index 5f6a2e2..a49b566 100644 --- a/Extension/content.js +++ b/Extension/content.js @@ -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." }); diff --git a/Extension/ui.js b/Extension/ui.js index a49ec05..274f55e 100644 --- a/Extension/ui.js +++ b/Extension/ui.js @@ -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.`); + } +} diff --git a/HRServer-Exporter/.vs/HRServer-Exporter/CopilotIndices/0.2.1653.9816/SemanticSymbols.db b/HRServer-Exporter/.vs/HRServer-Exporter/CopilotIndices/0.2.1653.9816/SemanticSymbols.db index aea2807..54a0b6e 100644 Binary files a/HRServer-Exporter/.vs/HRServer-Exporter/CopilotIndices/0.2.1653.9816/SemanticSymbols.db and b/HRServer-Exporter/.vs/HRServer-Exporter/CopilotIndices/0.2.1653.9816/SemanticSymbols.db differ diff --git a/HRServer-Exporter/.vs/HRServer-Exporter/CopilotIndices/0.2.1653.9816/SemanticSymbols.db-wal b/HRServer-Exporter/.vs/HRServer-Exporter/CopilotIndices/0.2.1653.9816/SemanticSymbols.db-wal index 218e08c..20f120d 100644 Binary files a/HRServer-Exporter/.vs/HRServer-Exporter/CopilotIndices/0.2.1653.9816/SemanticSymbols.db-wal and b/HRServer-Exporter/.vs/HRServer-Exporter/CopilotIndices/0.2.1653.9816/SemanticSymbols.db-wal differ diff --git a/HRServer-Exporter/.vs/HRServer-Exporter/v17/.suo b/HRServer-Exporter/.vs/HRServer-Exporter/v17/.suo index bdca267..650fb5b 100644 Binary files a/HRServer-Exporter/.vs/HRServer-Exporter/v17/.suo and b/HRServer-Exporter/.vs/HRServer-Exporter/v17/.suo differ diff --git a/HRServer-Exporter/.vs/HRServer-Exporter/v17/DocumentLayout.backup.json b/HRServer-Exporter/.vs/HRServer-Exporter/v17/DocumentLayout.backup.json index fdef56e..3e16a92 100644 --- a/HRServer-Exporter/.vs/HRServer-Exporter/v17/DocumentLayout.backup.json +++ b/HRServer-Exporter/.vs/HRServer-Exporter/v17/DocumentLayout.backup.json @@ -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", diff --git a/HRServer-Exporter/.vs/HRServer-Exporter/v17/DocumentLayout.json b/HRServer-Exporter/.vs/HRServer-Exporter/v17/DocumentLayout.json index 3e16a92..6f60949 100644 --- a/HRServer-Exporter/.vs/HRServer-Exporter/v17/DocumentLayout.json +++ b/HRServer-Exporter/.vs/HRServer-Exporter/v17/DocumentLayout.json @@ -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": "" diff --git a/HRServer-Exporter/HRServer/Controllers/HorseController.cs b/HRServer-Exporter/HRServer/Controllers/HorseController.cs index c4b6a40..77ac7fe 100644 --- a/HRServer-Exporter/HRServer/Controllers/HorseController.cs +++ b/HRServer-Exporter/HRServer/Controllers/HorseController.cs @@ -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 zurck + 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); } } diff --git a/HRServer-Exporter/HRServer/Models/Horse.cs b/HRServer-Exporter/HRServer/Models/Horse.cs index fb37a17..8bceb97 100644 --- a/HRServer-Exporter/HRServer/Models/Horse.cs +++ b/HRServer-Exporter/HRServer/Models/Horse.cs @@ -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 Horses = new(); + private static Dictionary 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 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>(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() { diff --git a/HRServer-Exporter/HRServer/Program.cs b/HRServer-Exporter/HRServer/Program.cs index 33ca2a2..3e908bb 100644 --- a/HRServer-Exporter/HRServer/Program.cs +++ b/HRServer-Exporter/HRServer/Program.cs @@ -20,7 +20,6 @@ namespace HRServer .AllowAnyHeader(); }); }); - // Swagger / OpenAPI hinzufgen builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); diff --git a/HRServer-Exporter/HRServer/obj/Debug/net8.0/HRServer.AssemblyInfo.cs b/HRServer-Exporter/HRServer/obj/Debug/net8.0/HRServer.AssemblyInfo.cs index ef41c7d..3f85ce9 100644 --- a/HRServer-Exporter/HRServer/obj/Debug/net8.0/HRServer.AssemblyInfo.cs +++ b/HRServer-Exporter/HRServer/obj/Debug/net8.0/HRServer.AssemblyInfo.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // -// 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. // //------------------------------------------------------------------------------ @@ -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. diff --git a/HRServer-Exporter/HRServer/obj/Debug/net8.0/HRServer.AssemblyInfoInputs.cache b/HRServer-Exporter/HRServer/obj/Debug/net8.0/HRServer.AssemblyInfoInputs.cache index cd867c3..e9d5da5 100644 --- a/HRServer-Exporter/HRServer/obj/Debug/net8.0/HRServer.AssemblyInfoInputs.cache +++ b/HRServer-Exporter/HRServer/obj/Debug/net8.0/HRServer.AssemblyInfoInputs.cache @@ -1 +1 @@ -a2b444c9f69ba9a33722561291338238415e557705df53ec577027e812238c0f +2b9e6b04546558b8be5da9680e2e9462db49f3d3bd846c47b3601708d788771a