Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,6 @@ static async Task Main()
}
} while (!api.LoginSuccessful);



// Check if the work has already started - runs in the background 6 times every 1 minute
var result = await RcpAutomationService.CheckIfWorkAlreadyStartedWithRetryAsync(api);
if (result == null)
Expand Down Expand Up @@ -104,9 +102,9 @@ static async Task Main()
catch (Exception ex)
{
// TODO: tutaj może mail jeszcze do mnie z informacją że coś poszło komuś nie tak - komu i co poszło nie tak
File.AppendAllText("output.txt", $"[{DateTime.Now}] {ex}\n\n");
File.AppendAllText("output.txt", $"[{DateTime.Now}] {ex}\nMetoda: Program.cs -> Main()\n\n");
MessageBox.Show(
"Wystąpił nieoczekiwany błąd. Szczegóły zapisano w pliku output.txt",
"Wystąpił nieoczekiwany błąd. Szczegóły zapisano w pliku output.txt, proszę skonsultować się z administratorem.",
"EasyRCP - Błąd",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
Expand Down
68 changes: 45 additions & 23 deletions Services/RcpApiClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -138,31 +138,51 @@ public static async Task<RcpApiClient> CreateApiClientAsync(string email, string
/// <returns>true if work has already started; otherwise false.</returns>
public async Task<bool> CheckIfWorkAlreadyStarted()
{
var myStatusResponse = await _client.PostAsync("/dashboard/getMyStatus/1", null);
string json = await ReadResponseAsDecompressedString(myStatusResponse);
var parsed = JsonDocument.Parse(json);
var rawHtml = parsed.RootElement.GetProperty("body").GetString();
var readableHtml = WebUtility.HtmlDecode(rawHtml);

if (readableHtml != null && (readableHtml.Contains("Na stanowisku")
|| readableHtml.Contains("Praca zdalna")
|| readableHtml.Contains("W terenie")))
try
{
// User is already at work
return true;
var myStatusResponse = await _client.PostAsync("/dashboard/getMyStatus/1", null);
string json = await ReadResponseAsDecompressedString(myStatusResponse);
var parsed = JsonDocument.Parse(json);
var rawHtml = parsed.RootElement.GetProperty("body").GetString();
var readableHtml = WebUtility.HtmlDecode(rawHtml);

if (readableHtml == null)
{
throw new InvalidOperationException("Nie udało się odczytać HTMLa z getMyStatus");
}

var match = Regex.Match(readableHtml, @"Twój status obecności.*?<span class=""fw-bolder fs-2"">\s*(.*?)\s*</span>", RegexOptions.Singleline);
if (!match.Success)
{
throw new InvalidOperationException("Nie udało się znaleźć statusu obecności w HTMLu z getMyStatus");
}

var workStatus = match.Groups[1].Value.Trim();
if (workStatus != null && (workStatus == "Na stanowisku"
|| workStatus == "Praca zdalna"
|| workStatus == "W terenie"))
{
// User is already at work
return true;
}
else if (workStatus != null && workStatus == "Nie ma")
{
// User is not at work
return false;
}
else
{
throw new InvalidOperationException("Nie udało się rozpoznać statusu pracy w HTMLu z getMyStatus");
}
}
else if (readableHtml != null && readableHtml.Contains("Nie ma"))
{
// User is not at work
return false;
}
else
catch (Exception ex)
{
// Sth not right but cannot throw error to Program.cs as this is in Polly retry policy. Needs to be handled here
File.AppendAllText("output.txt", $"[{DateTime.Now}] Coś poszło nie tak, nie udało się sprawdzić, czy użytkownik jest już w pracy. " +
File.AppendAllText("output.txt", $"[{DateTime.Now}] Coś poszło nie tak, nie udało się sprawdzić," +
$"czy użytkownik jest już w pracy.\nMetoda: RcpApiClient -> CheckIfWorkAlreadyStarted()\n ex.Message: {ex.Message}\n" +
$"Możliwe, że zmieniło się coś w zwracanym z /dashboard/getMyStatus/ HTMLu.\n\n");
MessageBox.Show(
"Wystąpił nieoczekiwany błąd. Szczegóły zapisano w pliku output.txt",
"Wystąpił nieoczekiwany błąd. Szczegóły zapisano w pliku output.txt, proszę skonsultować się z administratorem.",
"EasyRCP - Błąd",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
Expand Down Expand Up @@ -283,9 +303,10 @@ private async Task<bool> SendPostAndHandleResponseAsync(string requestUri, FormU
if (!resp.IsSuccessStatusCode)
{
// TODO: tu może wystarczy zrobić throw do Program.cs
File.AppendAllText("output.txt", $"[{DateTime.Now}] HTTP {(int)resp.StatusCode}: {resp.ReasonPhrase}\n{json}\n\n");
File.AppendAllText("output.txt", $"[{DateTime.Now}] HTTP {(int)resp.StatusCode}: {resp.ReasonPhrase}\n{json}\n" +
$"Metoda: RcpApiClient -> SendPostAndHandleResponseAsync()\n\n");
MessageBox.Show(
$"Błąd, szczegóły zostały zapisane w pliku output.txt",
$"Błąd, szczegóły zostały zapisane w pliku output.txt, proszę skonsultować się z administratorem.",
"EasyRCP - Błąd",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
Expand All @@ -297,9 +318,10 @@ private async Task<bool> SendPostAndHandleResponseAsync(string requestUri, FormU
if (!success)
{
// TODO: tu może wystarczy zrobić throw do Program.cs
File.AppendAllText("output.txt", $"[{DateTime.Now}] API zwróciło success = false\n{json}\n\n");
File.AppendAllText("output.txt", $"[{DateTime.Now}] API zwróciło success = false\n{json}\n" +
$"Metoda: RcpApiClient -> SendPostAndHandleResponseAsync()\n\n");
MessageBox.Show(
$"Błąd, szczegóły zostały zapisane w pliku output.txt",
$"Błąd, szczegóły zostały zapisane w pliku output.txt, proszę skonsultować się z administratorem.",
"EasyRCP - Błąd",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
Expand Down
16 changes: 10 additions & 6 deletions Services/RcpAutomationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ public static class RcpAutomationService
sleepDurationProvider: retryAttempt => TimeSpan.FromMinutes(1),
onRetry: (exception, timeSpan, retryCount, _) =>
{
File.AppendAllText("output.txt", $"[{DateTime.Now}] [Retry {retryCount}] Błąd: {exception.Message}. Próba ponownie za {timeSpan.TotalSeconds} sek.\n\n");
File.AppendAllText("output.txt", $"[{DateTime.Now}] [Retry {retryCount}] Błąd: {exception.Message}. Próba ponownie za {timeSpan.TotalSeconds} sek.\n" +
$"Metoda: RcpAutomationService -> CheckIfWorkAlreadyStartedAsync()\n\n");
});

/// <summary>
Expand All @@ -35,7 +36,8 @@ public static class RcpAutomationService
}
catch (Exception ex)
{
File.AppendAllText("output.txt", $"[{DateTime.Now}] {ex}\n\n");
File.AppendAllText("output.txt", $"[{DateTime.Now}] {ex}\n" +
$"Metoda: RcpAutomationService -> CheckIfWorkAlreadyStartedWithRetryAsync()\n\n");
Console.WriteLine($"Wszystkie retry zakończone niepowodzeniem (pewnie brak internetu). Szczegóły błędu zapisano w pliku output.txt");
return null;
}
Expand Down Expand Up @@ -92,9 +94,10 @@ public static async Task StartWorkAsync(RcpApiClient api)
// Program.cs właśnie w każdym przypadku (zarówno z metody wywoływanej w Program.cs, jak i z opcji w tray menu)

// TODO: tutaj może mail jeszcze do mnie z informacją że coś poszło komuś nie tak - komu i co poszło nie tak
File.AppendAllText("output.txt", $"[{DateTime.Now}] {ex}\n\n");
File.AppendAllText("output.txt", $"[{DateTime.Now}] {ex}\n" +
$"Metoda: RcpAutomationService -> StartWorkAsync()\n\n");
MessageBox.Show(
"Wystąpił nieoczekiwany błąd, nie udało się zarejestrować początku pracy. Szczegóły błędu zapisano w pliku output.txt",
"Wystąpił nieoczekiwany błąd, nie udało się zarejestrować początku pracy. Szczegóły błędu zapisano w pliku output.txt, proszę skonsultować się z administratorem.",
"EasyRCP - Błąd",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
Expand Down Expand Up @@ -143,9 +146,10 @@ public static async Task EndWork(RcpApiClient api)
// Program.cs właśnie w każdym przypadku (zarówno z metody wywoływanej w Program.cs, jak i z opcji w tray menu)

// TODO: tutaj może mail jeszcze do mnie z informacją że coś poszło komuś nie tak - komu i co poszło nie tak
File.AppendAllText("output.txt", $"[{DateTime.Now}] {ex}\n\n");
File.AppendAllText("output.txt", $"[{DateTime.Now}] {ex}\n" +
$"Metoda: RcpAutomationService -> EndWork()\n\n");
MessageBox.Show(
"Wystąpił nieoczekiwany błąd, nie udało się zarejestrować końca pracy. Szczegóły błędu zapisano w pliku output.txt",
"Wystąpił nieoczekiwany błąd, nie udało się zarejestrować końca pracy. Szczegóły błędu zapisano w pliku output.txt, proszę skonsultować się z administratorem.",
"EasyRCP - Błąd",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
Expand Down