Fixed Bugs

This commit is contained in:
Dultus 2024-12-08 20:16:29 +01:00
parent 12b7fc6553
commit a3836ef31e
63 changed files with 1073 additions and 146 deletions

View file

@ -36,7 +36,7 @@ function updateHorseButton() {
const activeTabId = tabs[0].id;
// Schritt 1: Basisdaten des Pferdes holen
return sendMessageAsync(activeTabId, { action: "getHorseBasicData" })
sendMessageAsync(activeTabId, { action: "getHorseBasicData" })
.then((basicDataResponse) => {
if (!basicDataResponse || !basicDataResponse.success) {
console.error("Failed to get horse basic data:", basicDataResponse ? basicDataResponse.message : "No response");
@ -46,15 +46,8 @@ function updateHorseButton() {
const horseData = basicDataResponse.data;
// Pferd beim Backend prüfen
return getHorseLoadStateAPIAsync(horseData.id)
.then((existingHorse) => {
if (!existingHorse || existingHorse.message === "Horse not found") {
console.warn("Horse not found in the API.");
return; // Beende die Kette
}
// Basisdaten an die API senden
return setBaseDataHorseAPI(horseData.id, horseData)
getHorseLoadStateAPIAsync(horseData.id);
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)

View file

@ -18,13 +18,13 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
const id = BigInt(idString).toString();
const horseData = {
id: id,
id: parseFloat(id),
age: parseInt(ageEl.innerText, 10) || 0,
name: (document.title.replace(/ - Horse Reality.*$/, '') || "Unknown").trim(),
gender: genderEl.alt || "Unknown",
breed: breedEl.innerText || "Unknown",
link: window.location.href || "",
lastDrawnDate: Date.now()
lastDrawnDate: new Date(Date.now()).toISOString()
};
updateSingleLoadStateUI("Basic", true, false);
console.log("Horse data gathered:", horseData);
@ -236,13 +236,13 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
try {
const achievementTab =
{
ShowResults: showResults,
ShowResults: cleanShowResults(showResults),
Conformation: conformation,
ShortConformation: shortConformation,
MaxShowResult: showResults[showResults.length - 1],
MinShowResult: showResults[0],
MaxCompetitionResult: competitionResults[competitionResults.length - 1],
MinCompetitionResult: competitionResults[0]
MaxShowResult: cleanResult(showResults[showResults.length - 1]),
MinShowResult: cleanResult(showResults[0]),
MaxCompetitionResult: cleanResult(competitionResults[competitionResults.length - 1]),
MinCompetitionResult: cleanResult(competitionResults[0])
};
sendResponse({ success: true, data: "Processing..." });
const response = await setHorseAchievementsAPIAsync(request.data.id, achievementTab);
@ -306,3 +306,19 @@ chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
function getTabselText() {
return document.querySelector('div.tabsel')?.textContent?.trim() || "Unknown";
}
function cleanResult(value) {
if (value === "This horse doesn't have any achievements") {
return -1;
}
return value;
}
function cleanShowResults(results) {
// Überprüfen, ob das Array gültig ist
if (!Array.isArray(results)) {
console.error("Invalid ShowResults data: not an array.");
return [];
}
// Bereinigen der Ergebnisse
return [];
}

View file

@ -166,12 +166,12 @@ async function updateLoadStateUI(horseId) {
// 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 ? '🔄' : '✅') : '❌',
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
@ -186,7 +186,7 @@ async function updateLoadStateUI(horseId) {
function updateSingleLoadStateUI(loadStateKey, isLoaded, needsRefresh) {
// Mappe das LoadState-Schlüssel auf das Emoji
const loadStateMapping = {
true: needsRefresh ? '✅' : '☑️', // Geladen, aber möglicherweise veraltet
true: needsRefresh ? '☑️' : '✅', // Geladen, aber möglicherweise veraltet
false: '❌' // Nicht geladen
};

View file

@ -2,6 +2,14 @@
"Version": 1,
"WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{280C08D1-5874-4E96-882B-7926464D1FA8}|HorseViewer\\HorseViewer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\horseviewer\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{280C08D1-5874-4E96-882B-7926464D1FA8}|HorseViewer\\HorseViewer.csproj|solutionrelative:horseviewer\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{280C08D1-5874-4E96-882B-7926464D1FA8}|HorseViewer\\HorseViewer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\horseviewer\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{280C08D1-5874-4E96-882B-7926464D1FA8}|HorseViewer\\HorseViewer.csproj|solutionrelative:horseviewer\\form1.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}"
@ -9,14 +17,6 @@
{
"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}"
},
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
}
],
"DocumentGroupContainers": [
@ -36,52 +36,52 @@
"$type": "Document",
"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": "AgIAALUAAAAAAAAAAAAwwL4AAAAAAAAAAAAAAA==",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\Models\\Horse.cs",
"RelativeDocumentMoniker": "HorseViewer\\Models\\Horse.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\Models\\Horse.cs",
"RelativeToolTip": "HorseViewer\\Models\\Horse.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAAJAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T17:50:21.836Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "launchSettings.json",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Properties\\launchSettings.json",
"RelativeDocumentMoniker": "HRServer\\Properties\\launchSettings.json",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Properties\\launchSettings.json",
"RelativeToolTip": "HRServer\\Properties\\launchSettings.json",
"ViewState": "AgIAAAUAAAAAAAAAAAAkwA0AAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-12-07T15:18:38.498Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Program.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Program.cs",
"RelativeDocumentMoniker": "HRServer\\Program.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Program.cs",
"RelativeToolTip": "HRServer\\Program.cs",
"ViewState": "AgIAAA0AAAAAAAAAAAAgwBcAAAAqAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:31.847Z",
"WhenOpened": "2024-12-08T19:13:28.722Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Form1.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\Form1.cs",
"RelativeDocumentMoniker": "HorseViewer\\Form1.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\Form1.cs",
"RelativeToolTip": "HorseViewer\\Form1.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-08T18:52:40.109Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"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": "AgIAAAEBAAAAAAAAAAAcwB8BAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-08T18:45:20.797Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"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": "AgIAABcAAAAAAAAAAAAgwCgAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:14.341Z",
"WhenOpened": "2024-12-08T18:45:00.922Z",
"EditorCaption": ""
}
]

View file

@ -3,20 +3,20 @@
"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:{280C08D1-5874-4E96-882B-7926464D1FA8}|HorseViewer\\HorseViewer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\horseviewer\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{280C08D1-5874-4E96-882B-7926464D1FA8}|HorseViewer\\HorseViewer.csproj|solutionrelative:horseviewer\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{280C08D1-5874-4E96-882B-7926464D1FA8}|HorseViewer\\HorseViewer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\horseviewer\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{280C08D1-5874-4E96-882B-7926464D1FA8}|HorseViewer\\HorseViewer.csproj|solutionrelative:horseviewer\\form1.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}"
},
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
"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}"
}
],
"DocumentGroupContainers": [
@ -26,7 +26,7 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 4,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Bookmark",
@ -34,54 +34,54 @@
},
{
"$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": "AgIAALoAAAAAAAAAAAAcwMcAAAAjAAAAAAAAAA==",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\Models\\Horse.cs",
"RelativeDocumentMoniker": "HorseViewer\\Models\\Horse.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\Models\\Horse.cs",
"RelativeToolTip": "HorseViewer\\Models\\Horse.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAOAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T17:50:21.836Z",
"WhenOpened": "2024-12-08T19:13:28.722Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "launchSettings.json",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Properties\\launchSettings.json",
"RelativeDocumentMoniker": "HRServer\\Properties\\launchSettings.json",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Properties\\launchSettings.json",
"RelativeToolTip": "HRServer\\Properties\\launchSettings.json",
"ViewState": "AgIAAAUAAAAAAAAAAAAkwA0AAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-12-07T15:18:38.498Z",
"DocumentIndex": 1,
"Title": "Form1.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\Form1.cs",
"RelativeDocumentMoniker": "HorseViewer\\Form1.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\Form1.cs",
"RelativeToolTip": "HorseViewer\\Form1.cs",
"ViewState": "AgIAAA8AAAAAAAAAAAAIwCAAAAAcAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-08T18:52:40.109Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Program.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Program.cs",
"RelativeDocumentMoniker": "HRServer\\Program.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Program.cs",
"RelativeToolTip": "HRServer\\Program.cs",
"ViewState": "AgIAAA0AAAAAAAAAAAAgwBcAAAAqAAAAAAAAAA==",
"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": "AgIAAAEBAAAAAAAAAAAcwB8BAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:31.847Z",
"WhenOpened": "2024-12-08T18:45:20.797Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"DocumentIndex": 3,
"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": "AgIAABUAAAAAAAAAAAAowC4AAAAJAAAAAAAAAA==",
"ViewState": "AgIAABcAAAAAAAAAAAAgwCgAAAARAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:14.341Z",
"WhenOpened": "2024-12-08T18:45:00.922Z",
"EditorCaption": ""
}
]

View file

@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35312.102
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HRServer", "HRServer\HRServer.csproj", "{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HRServer", "HRServer\HRServer.csproj", "{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HorseViewer", "HorseViewer\HorseViewer.csproj", "{280C08D1-5874-4E96-882B-7926464D1FA8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -15,6 +17,10 @@ Global
{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}.Release|Any CPU.Build.0 = Release|Any CPU
{280C08D1-5874-4E96-882B-7926464D1FA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{280C08D1-5874-4E96-882B-7926464D1FA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{280C08D1-5874-4E96-882B-7926464D1FA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{280C08D1-5874-4E96-882B-7926464D1FA8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -24,10 +24,8 @@ namespace HRServer.Controllers
var horse = HorseFactory.GetHorse((ulong)id);
if (horse == null)
{
horse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(horse);
horse = new Horse();
}
HorseFactory.SaveHorsesToFile();
return Ok(horse);
}
[HttpGet("/api/getHorse/{id}/LoadState")]
@ -39,15 +37,23 @@ namespace HRServer.Controllers
// Überprüfe, ob das Pferd existiert
if (horse == null)
{
horse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(horse);
return Ok(new DataLoadState
{
AchievementsLoaded = false,
AchievementsNeedsRefresh = false,
SummaryLoaded = false,
BasicInfoLoaded = false,
GeneticsLoaded = false,
HealthLoaded = false,
TrainingLoaded = false
});
}
if (horse.LastDrawnDate.AddDays(1) < DateTime.Now)
{
horse.LoadState.AchievementsNeedsRefresh = true;
}
// Gib den Ladezustand des Pferdes zurück
HorseFactory.SaveHorsesToFile();
// Gib den Ladezustand des Pferdes zurück
return Ok(horse.LoadState);
}
[HttpPost("/api/updateHorse/{id}/BasicData")]
@ -59,11 +65,11 @@ namespace HRServer.Controllers
localHorse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(localHorse);
}
localHorse.Age = localHorse.Age;
localHorse.Breed = localHorse.Breed;
localHorse.HorseName = localHorse.HorseName;
localHorse.Gender = localHorse.Gender;
localHorse.Link = localHorse.Link;
localHorse.Age = websiteHorse.Age;
localHorse.Breed = websiteHorse.Breed;
localHorse.HorseName = websiteHorse.HorseName;
localHorse.Gender = websiteHorse.Gender;
localHorse.Link = websiteHorse.Link;
HorseFactory.SaveHorsesToFile();
return Ok(localHorse);
}
@ -128,6 +134,8 @@ namespace HRServer.Controllers
localHorse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(localHorse);
}
if (websiteHorseAchievements.ShowResults.Count >= 1)
{
if (websiteHorseAchievements.MaxShowResult < localHorse.Achievements.MaxShowResult)
{
websiteHorseAchievements.MaxShowResult = localHorse.Achievements.MaxShowResult;
@ -144,6 +152,7 @@ namespace HRServer.Controllers
{
websiteHorseAchievements.MinCompetitionResult = localHorse.Achievements.MinCompetitionResult;
}
}
localHorse.Achievements = websiteHorseAchievements;
HorseFactory.SaveHorsesToFile();
return Ok(localHorse);

View file

@ -41,21 +41,15 @@ namespace HRServer.Models
public class Horse
{
// Basic Information
[JsonPropertyName("id")]
private ulong? _id;
[JsonPropertyName("age")]
private int? _age;
[JsonPropertyName("name")]
private string _horseName = string.Empty;
[JsonPropertyName("gender")]
private string _gender = string.Empty;
[JsonPropertyName("breed")]
private string _breed = string.Empty;
[JsonPropertyName("link")]
private string _link = string.Empty;
[JsonPropertyName("lastDrawnDate")]
private DateTime _lastDrawnDate = DateTime.Now;
[JsonPropertyName("id")]
public ulong? Id
{
get => _id;
@ -65,7 +59,7 @@ namespace HRServer.Models
LoadState.BasicInfoLoaded = true;
}
}
[JsonPropertyName("age")]
public int? Age
{
get => _age;
@ -74,7 +68,7 @@ namespace HRServer.Models
_age = value;
}
}
[JsonPropertyName("name")]
public string HorseName
{
get => _horseName;
@ -83,7 +77,7 @@ namespace HRServer.Models
_horseName = value;
}
}
[JsonPropertyName("gender")]
public string Gender
{
get => _gender;
@ -92,7 +86,7 @@ namespace HRServer.Models
_gender = value;
}
}
[JsonPropertyName("breed")]
public string Breed
{
get => _breed;
@ -101,7 +95,7 @@ namespace HRServer.Models
_breed = value;
}
}
[JsonPropertyName("link")]
public string Link
{
get => _link;
@ -110,6 +104,7 @@ namespace HRServer.Models
_link = value;
}
}
[JsonPropertyName("lastDrawnDate")]
public DateTime LastDrawnDate
{
get => _lastDrawnDate;

View file

@ -1,3 +1,5 @@
using HRServer.Models;
namespace HRServer
{
public class Program
@ -40,6 +42,7 @@ namespace HRServer
// Controller-Routen festlegen
app.MapControllers();
HorseFactory.LoadHorsesFromFile();
app.Run();
}

View file

@ -0,0 +1 @@
{"19055499":{"id":19055499,"age":6,"name":"Foal Doe 19055499","gender":"Mare","breed":"Akhal-Teke","link":"https://www.horsereality.com/horses/19055499/foal-doe-19055499","lastDrawnDate":"2024-12-08T20:07:41.1057801+01:00","Summary":{"RelatedIds":["https://www.horsereality.com/horses/1922256/gozgan","https://www.horsereality.com/horses/1922245/guljady"]},"Training":{"Training":""},"Genetics":{"GP":679,"GeneticPotential":{"Acceleration":73,"Agility":65,"Balance":68,"Bascule":64,"Pulling power":33,"Speed":74,"Sprint":69,"Stamina":90,"Strength":59,"Surefootedness":84},"Disciplines":{"Dressage":192,"Driving":321,"Endurance":307,"Eventing":349,"Flat Racing":306,"Show Jumping":330,"Western Reining":290},"Colors":{"Extension":"? / ?","Agouti":"? / ?","Grey":"? / ?","Creampearl":"? / ?","Dun":"? / ?","Champagne":"? / ?","Silver":"? / ?","Mushroom":"? / ?","Frame":"? / ?","Appaloosa":"? / ?","PATN1":"? / ?","MITF":"? / ?","SW2":"? / ?","KIT":"? / ?"}},"Achievements":{"ShowResults":[],"Conformation":{"Walk":"Average","Trot":"Average","Canter":"Good","Gallop":"Below average","Posture":"Good","Head":"Average","Neck":"Good","Back":"Average","Shoulders":"Average","Frontlegs":"Good","Hindquarters":"Below average","Socks":"Average"},"ShortConformation":"6A 4G 2BA","MaxShowResult":-1,"MinShowResult":-1,"MaxCompetitionResult":-1,"MinCompetitionResult":-1},"Health":{"Health":{}},"LoadState":{"BasicInfoLoaded":true,"BasicInfoNeedsRefresh":false,"SummaryLoaded":true,"SummaryNeedsRefresh":false,"TrainingLoaded":false,"TrainingNeedsRefresh":false,"GeneticsLoaded":true,"GeneticsNeedsRefresh":false,"AchievementsLoaded":true,"AchievementsNeedsRefresh":false,"HealthLoaded":false,"HealthNeedsRefresh":false}},"17848165":{"id":17848165,"age":5,"name":"Foal Doe 17848165","gender":"Stallion","breed":"Cleveland Bay","link":"https://www.horsereality.com/horses/17848165/foal-doe-17848165","lastDrawnDate":"2024-12-08T20:08:00.3404896+01:00","Summary":{"RelatedIds":[]},"Training":{"Training":""},"Genetics":{"GP":671,"GeneticPotential":{"Acceleration":66,"Agility":57,"Balance":72,"Bascule":75,"Pulling power":78,"Speed":67,"Sprint":53,"Stamina":72,"Strength":75,"Surefootedness":56},"Disciplines":{"Dressage":204,"Driving":349,"Endurance":270,"Eventing":345,"Flat Racing":258,"Show Jumping":326,"Western Reining":251},"Colors":{"Extension":"? / ?","Agouti":"? / ?","Grey":"? / ?","Creampearl":"? / ?","Dun":"? / ?","Champagne":"? / ?","Silver":"? / ?","Mushroom":"? / ?","Frame":"? / ?","Appaloosa":"? / ?","PATN1":"? / ?","MITF":"? / ?","SW2":"? / ?","KIT":"? / ?"}},"Achievements":{"ShowResults":[],"Conformation":{},"ShortConformation":"","MaxShowResult":0,"MinShowResult":0,"MaxCompetitionResult":0,"MinCompetitionResult":0},"Health":{"Health":{}},"LoadState":{"BasicInfoLoaded":true,"BasicInfoNeedsRefresh":false,"SummaryLoaded":false,"SummaryNeedsRefresh":false,"TrainingLoaded":false,"TrainingNeedsRefresh":false,"GeneticsLoaded":true,"GeneticsNeedsRefresh":false,"AchievementsLoaded":false,"AchievementsNeedsRefresh":false,"HealthLoaded":false,"HealthNeedsRefresh":false}}}

View file

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

View file

@ -1 +1 @@
2b9e6b04546558b8be5da9680e2e9462db49f3d3bd846c47b3601708d788771a
460cd62de3c1086440c4a0d159fce26552e588833218be100511410cd92708f4

View file

@ -1 +1 @@
{"documents":{"Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\*":"https://raw.githubusercontent.com/SvenKribitz/HR-Collector/f8946138c755861a4827dbd051bc0effcd5fa403/*"}}
{"documents":{"Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\*":"https://raw.githubusercontent.com/SvenKribitz/HR-Collector/12b7fc655326aa1426924b3c90b144f694605d52/*"}}

View file

@ -0,0 +1,73 @@
namespace HorseViewer
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridView1 = new DataGridView();
button1 = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit();
SuspendLayout();
//
// dataGridView1
//
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.Location = new Point(254, 171);
dataGridView1.Name = "dataGridView1";
dataGridView1.Size = new Size(797, 477);
dataGridView1.TabIndex = 0;
dataGridView1.CellContentClick += dataGridView1_CellContentClick;
//
// button1
//
button1.Location = new Point(12, 12);
button1.Name = "button1";
button1.Size = new Size(75, 23);
button1.TabIndex = 1;
button1.Text = "button1";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1229, 717);
Controls.Add(button1);
Controls.Add(dataGridView1);
Name = "Form1";
Text = "Form1";
((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView dataGridView1;
private Button button1;
}
}

View file

@ -0,0 +1,54 @@
using HorseViewer.Models;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace HorseViewer
{
public class HorseGridViewItem
{
public ulong Id { get; set; }
public string Name { get; set; }
public string Breed { get; set; }
public string Gender { get; set; }
public int Age { get; set; }
public DateTime LastDrawnDate { get; set; }
public bool IsAllDataLoaded { get; set; }
}
public partial class Form1 : Form
{
string horsePath = "";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FileDialog fileDialog = new OpenFileDialog();
if (fileDialog.ShowDialog() == DialogResult.OK)
{
horsePath = fileDialog.FileName;
}
var json = File.ReadAllText(horsePath);
HorseFactory.Horses = JsonSerializer.Deserialize<Dictionary<ulong, HorseViewer.Models.Horse>>(json);
var result = HorseFactory.GetAllHorses().Values.Select(horse => new HorseGridViewItem
{
Id = horse.Id ?? 0,
Name = horse.HorseName,
Breed = horse.Breed,
Gender = horse.Gender,
Age = horse.Age ?? 0,
LastDrawnDate = horse.LastDrawnDate,
IsAllDataLoaded = horse.IsAllDataLoaded()
}).ToList();
dataGridView1.DataSource = result;
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
}

View file

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View file

@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

View file

@ -0,0 +1,287 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace HorseViewer.Models
{
public static class HorseFactory
{
public static string HorseDataPath = "horses.json";
// Thread-safe Dictionary
public static Dictionary<ulong, Horse> Horses = new();
public static Horse? GetHorse(ulong id)
{
return Horses.TryGetValue(id, out var horse) ? horse : null;
}
public static void AddOrUpdateHorse(Horse horse)
{
if (horse == null || horse.Id == null)
throw new ArgumentNullException(nameof(horse), "Horse or its ID cannot be null.");
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
{
// Basic Information
private ulong? _id;
private int? _age;
private string _horseName = string.Empty;
private string _gender = string.Empty;
private string _breed = string.Empty;
private string _link = string.Empty;
private DateTime _lastDrawnDate = DateTime.Now;
[JsonPropertyName("id")]
public ulong? Id
{
get => _id;
set
{
_id = value;
LoadState.BasicInfoLoaded = true;
}
}
[JsonPropertyName("age")]
public int? Age
{
get => _age;
set
{
_age = value;
}
}
[JsonPropertyName("name")]
public string HorseName
{
get => _horseName;
set
{
_horseName = value;
}
}
[JsonPropertyName("gender")]
public string Gender
{
get => _gender;
set
{
_gender = value;
}
}
[JsonPropertyName("breed")]
public string Breed
{
get => _breed;
set
{
_breed = value;
}
}
[JsonPropertyName("link")]
public string Link
{
get => _link;
set
{
_link = value;
}
}
[JsonPropertyName("lastDrawnDate")]
public DateTime LastDrawnDate
{
get => _lastDrawnDate;
set
{
_lastDrawnDate = value;
}
}
private HorseSummary _summary = new();
public HorseSummary Summary
{
get => _summary;
set
{
_summary = value;
LoadState.SummaryLoaded = true;
}
}
private HorseTraining _training = new();
public HorseTraining Training
{
get => _training;
set
{
_training = value;
LoadState.TrainingLoaded = true;
}
}
private HorseGenetics _genetics = new();
public HorseGenetics Genetics
{
get => _genetics;
set
{
_genetics = value;
LoadState.GeneticsLoaded = true;
}
}
private HorseAchievements _achievements = new();
public HorseAchievements Achievements
{
get => _achievements;
set
{
_achievements = value;
LoadState.AchievementsLoaded = true;
}
}
private HorseHealth _health = new();
public HorseHealth Health
{
get => _health;
set
{
_health = value;
LoadState.HealthLoaded = true;
}
}
public DataLoadState LoadState { get; set; } = new();
public bool IsAllDataLoaded()
{
return LoadState.IsAllDataLoaded();
}
public void PrintLoadState()
{
Console.WriteLine("Load State of Horse Data:");
Console.WriteLine($"- Basic Info Loaded: {LoadState.BasicInfoLoaded}");
Console.WriteLine($"- Summary Loaded: {LoadState.SummaryLoaded}");
Console.WriteLine($"- Training Loaded: {LoadState.TrainingLoaded}");
Console.WriteLine($"- Genetics Loaded: {LoadState.GeneticsLoaded}");
Console.WriteLine($"- Achievements Loaded: {LoadState.AchievementsLoaded}");
Console.WriteLine($"- Health Loaded: {LoadState.HealthLoaded}");
}
}
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()
{
return BasicInfoLoaded && SummaryLoaded && TrainingLoaded && GeneticsLoaded && AchievementsLoaded && HealthLoaded;
}
}
public class HorseSummary
{
[JsonPropertyName("RelatedIds")]
public List<string> RelatedIds { get; set; } = new();
}
public class HorseTraining
{
[JsonPropertyName("Training")]
public string Training { get; set; } = string.Empty;
}
public class HorseGenetics
{
[JsonPropertyName("GP")]
public int GP { get; set; }
[JsonPropertyName("GeneticPotential")]
public Dictionary<string, float> GeneticPotential { get; set; } = new();
[JsonPropertyName("Disciplines")]
public Dictionary<string, float> Disciplines { get; set; } = new() {
{ "Dressage", 0 },
{ "Driving", 0 },
{ "Endurance", 0 },
{ "Eventing", 0 },
{ "Flat Racing", 0 },
{ "Show Jumping", 0 },
{"Western Reining", 0 }
};
[JsonPropertyName("Colors")]
public Dictionary<string, string> Colors { get; set; } = new() {
{ "Extension", string.Empty },
{ "Agouti", string.Empty },
{ "Grey", string.Empty},
{ "Creampearl", string.Empty },
{ "Dun", string.Empty },
{ "Champagne", string.Empty },
{ "Silver", string.Empty },
{ "Mushroom", string.Empty },
{ "Frame", string.Empty},
{ "Appaloosa", string.Empty },
{ "PATN1", string.Empty },
{ "MITF", string.Empty },
{ "SW2", string.Empty },
{ "KIT", string.Empty },
{ "RAB", string.Empty},
{ "Seal", string.Empty },
{ "Flaxen", string.Empty }
};
}
public class HorseAchievements
{
[JsonPropertyName("ShowResults")]
public List<double> ShowResults { get; set; } = new();
[JsonPropertyName("Conformation")]
public Dictionary<string, string> Conformation { get; set; } = new();
[JsonPropertyName("ShortConformation")]
public string ShortConformation { get; set; } = string.Empty;
[JsonPropertyName("MaxShowResult")]
public double MaxShowResult { get; set; } = 0;
[JsonPropertyName("MinShowResult")]
public double MinShowResult { get; set; } = 0;
[JsonPropertyName("MaxCompetitionResult")]
public double MaxCompetitionResult { get; set; } = 0;
[JsonPropertyName("MinCompetitionResult")]
public double MinCompetitionResult { get; set; } = 0;
}
public class HorseHealth
{
[JsonPropertyName("Health")]
public Dictionary<string, string> Health { get; set; } = new();
}
}

View file

@ -0,0 +1,17 @@
namespace HorseViewer
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

View file

@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"HorseViewer/1.0.0": {
"runtime": {
"HorseViewer.dll": {}
}
}
}
},
"libraries": {
"HorseViewer/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View file

@ -0,0 +1,18 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "8.0.0"
}
],
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true
}
}
}

View file

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View file

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("HorseViewer")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+12b7fc655326aa1426924b3c90b144f694605d52")]
[assembly: System.Reflection.AssemblyProductAttribute("HorseViewer")]
[assembly: System.Reflection.AssemblyTitleAttribute("HorseViewer")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Von der MSBuild WriteCodeFragment-Klasse generiert.

View file

@ -0,0 +1 @@
a26672736430a6c7dd4ca5fe5c30667328c3cfc098b26eae55cabd78618ec298

View file

@ -0,0 +1,19 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net8.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = HorseViewer
build_property.ProjectDir = Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View file

@ -0,0 +1,10 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View file

@ -0,0 +1 @@
6372ab1836e9181ee9317b8078b5b25abd9e84a9fd4aaece0f25b5c49b6b5281

View file

@ -0,0 +1,17 @@
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\bin\Debug\net8.0-windows\HorseViewer.exe
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\bin\Debug\net8.0-windows\HorseViewer.deps.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\bin\Debug\net8.0-windows\HorseViewer.runtimeconfig.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\bin\Debug\net8.0-windows\HorseViewer.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\bin\Debug\net8.0-windows\HorseViewer.pdb
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.csproj.GenerateResource.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.GeneratedMSBuildEditorConfig.editorconfig
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.AssemblyInfoInputs.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.AssemblyInfo.cs
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.csproj.CoreCompileInputs.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.sourcelink.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\refint\HorseViewer.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.pdb
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.genruntimeconfig.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\ref\HorseViewer.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HorseViewer\obj\Debug\net8.0-windows\HorseViewer.HorseGridViewItem.resources

View file

@ -0,0 +1,11 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {}
},
"libraries": {}
}

View file

@ -0,0 +1,24 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "8.0.0"
}
],
"additionalProbingPaths": [
"C:\\Users\\SvenK\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\SvenK\\.nuget\\packages",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
"Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
}
}
}

View file

@ -0,0 +1 @@
ffedaeea08d4ef0a266e70099a78f7d889ef93fb9980a252d75ec09eae888a13

View file

@ -0,0 +1 @@
{"documents":{"Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\*":"https://raw.githubusercontent.com/SvenKribitz/HR-Collector/12b7fc655326aa1426924b3c90b144f694605d52/*"}}

View file

@ -0,0 +1,76 @@
{
"format": 1,
"restore": {
"Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\HorseViewer.csproj": {}
},
"projects": {
"Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\HorseViewer.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\HorseViewer.csproj",
"projectName": "HorseViewer",
"projectPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\HorseViewer.csproj",
"packagesPath": "C:\\Users\\SvenK\\.nuget\\packages\\",
"outputPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\SvenK\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net8.0-windows"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0-windows7.0": {
"targetAlias": "net8.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
}
},
"frameworks": {
"net8.0-windows7.0": {
"targetAlias": "net8.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App.WindowsForms": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.400/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\SvenK\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.11.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\SvenK\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

View file

@ -0,0 +1,82 @@
{
"version": 3,
"targets": {
"net8.0-windows7.0": {}
},
"libraries": {},
"projectFileDependencyGroups": {
"net8.0-windows7.0": []
},
"packageFolders": {
"C:\\Users\\SvenK\\.nuget\\packages\\": {},
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\HorseViewer.csproj",
"projectName": "HorseViewer",
"projectPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\HorseViewer.csproj",
"packagesPath": "C:\\Users\\SvenK\\.nuget\\packages\\",
"outputPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\SvenK\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net8.0-windows"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0-windows7.0": {
"targetAlias": "net8.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
}
},
"frameworks": {
"net8.0-windows7.0": {
"targetAlias": "net8.0-windows",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App.WindowsForms": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.400/PortableRuntimeIdentifierGraph.json"
}
}
}
}

View file

@ -0,0 +1,8 @@
{
"version": 2,
"dgSpecHash": "J5TU+ZSOMN8=",
"success": true,
"projectFilePath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HorseViewer\\HorseViewer.csproj",
"expectedPackageFiles": [],
"logs": []
}