-make google api user friendly
This commit is contained in:
@@ -7,7 +7,7 @@ namespace LeanderShiftPlannerV2.FileIO;
|
||||
|
||||
public static class GoogleApiLoader
|
||||
{
|
||||
public static bool CheckFileSystem()
|
||||
public static bool CheckFileSystem_ReadFile()
|
||||
{
|
||||
if (!Directory.Exists(Constants.DataPath))
|
||||
Directory.CreateDirectory(Constants.DataPath);
|
||||
@@ -21,9 +21,21 @@ public static class GoogleApiLoader
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool CheckFileSystem_ReadToken()
|
||||
{
|
||||
if (!Directory.Exists(Constants.DataPath))
|
||||
Directory.CreateDirectory(Constants.DataPath);
|
||||
if (!File.Exists(Constants.DataPath + Constants.GoogleApiTokenPath))
|
||||
{
|
||||
File.Create(Constants.DataPath + Constants.GoogleApiTokenPath);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Dictionary<string, string> ReadFile()
|
||||
{
|
||||
if (!CheckFileSystem()) return new Dictionary<string, string>();
|
||||
if (!CheckFileSystem_ReadFile()) return new Dictionary<string, string>();
|
||||
Dictionary<string, string> apiSecrets = new Dictionary<string, string>();
|
||||
|
||||
try
|
||||
@@ -51,4 +63,30 @@ public static class GoogleApiLoader
|
||||
|
||||
return apiSecrets;
|
||||
}
|
||||
|
||||
public static void WriteToken(string token)
|
||||
{
|
||||
if (File.Exists(Constants.DataPath + Constants.GoogleApiTokenPath))
|
||||
File.Delete(Constants.DataPath + Constants.GoogleApiTokenPath);
|
||||
File.Create(Constants.DataPath + Constants.GoogleApiTokenPath).Close();
|
||||
File.WriteAllText(Constants.DataPath + Constants.GoogleApiTokenPath, token);
|
||||
}
|
||||
|
||||
public static string? ReadToken()
|
||||
{
|
||||
if (!CheckFileSystem_ReadToken()) return null;
|
||||
string tokenString = null;
|
||||
|
||||
try
|
||||
{
|
||||
tokenString = File.ReadAllText(Constants.DataPath + Constants.GoogleApiTokenPath);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//TODO
|
||||
Console.WriteLine($"Fehler beim Lesen der Datei: {ex.Message}");
|
||||
}
|
||||
|
||||
return (tokenString.Equals(String.Empty) ? null : tokenString);
|
||||
}
|
||||
}
|
||||
@@ -8,10 +8,10 @@
|
||||
<ApplicationIcon>Resources/icon/ShiftPlannerIcon.ico</ApplicationIcon>
|
||||
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||
<PackageIcon>Resources\icon\ShiftPlannerIcon.png</PackageIcon>
|
||||
<AssemblyVersion>1.0.5</AssemblyVersion>
|
||||
<FileVersion>1.0.5</FileVersion>
|
||||
<AssemblyVersion>2.0.2</AssemblyVersion>
|
||||
<FileVersion>2.0.2</FileVersion>
|
||||
<NeutralLanguage>en</NeutralLanguage>
|
||||
<Version>1.0.5</Version>
|
||||
<Version>2.0.2</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -10,6 +10,8 @@ using System.Threading.Tasks;
|
||||
using LeanderShiftPlannerV2.Model;
|
||||
using LeanderShiftPlannerV2.Util;
|
||||
using Google.Apis.Auth.OAuth2;
|
||||
using Google.Apis.Auth.OAuth2.Flows;
|
||||
using Google.Apis.Auth.OAuth2.Responses;
|
||||
using Google.Apis.Calendar.v3;
|
||||
using Google.Apis.Services;
|
||||
using LeanderShiftPlannerV2.FileIO;
|
||||
@@ -30,25 +32,54 @@ public class TimesheetService
|
||||
|
||||
public async Task GenerateGoogleTimeSheets(List<Person> persons, bool randomize)
|
||||
{
|
||||
string[] scopes = { CalendarService.Scope.CalendarReadonly };
|
||||
const string applicationName = "LeanderShiftPlanner";
|
||||
|
||||
Dictionary<string, string> secrets = GoogleApiLoader.ReadFile();
|
||||
|
||||
if (!secrets.ContainsKey(Constants.GoogleClientId) || !secrets.ContainsKey(Constants.GoogleClientSecret))
|
||||
return;
|
||||
if (secrets[Constants.GoogleClientId].Equals(string.Empty) || secrets[Constants.GoogleClientSecret].Equals(string.Empty))
|
||||
if (secrets[Constants.GoogleClientId].Equals(string.Empty) ||
|
||||
secrets[Constants.GoogleClientSecret].Equals(string.Empty))
|
||||
return;
|
||||
|
||||
UserCredential credential;
|
||||
string[] scopes = { CalendarService.Scope.CalendarReadonly };
|
||||
ClientSecrets clientSecrets = new ClientSecrets();
|
||||
clientSecrets.ClientId = secrets[Constants.GoogleClientId];
|
||||
clientSecrets.ClientSecret = secrets[Constants.GoogleClientSecret];
|
||||
//clientSecrets.ClientId = "823920428427-ub5n9a9dkfpuvjlut4eneg2058so49o3.apps.googleusercontent.com";
|
||||
//clientSecrets.ClientSecret = "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";
|
||||
UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(clientSecrets, scopes, "user", CancellationToken.None);
|
||||
string? tokenString = GoogleApiLoader.ReadToken();
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
TokenResponse token = new TokenResponse { RefreshToken = tokenString };
|
||||
|
||||
credential = new UserCredential(
|
||||
new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
|
||||
{
|
||||
ClientSecrets = clientSecrets
|
||||
}),
|
||||
"user",
|
||||
token
|
||||
);
|
||||
|
||||
if (!await credential.RefreshTokenAsync(CancellationToken.None))
|
||||
{
|
||||
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(clientSecrets, scopes, "user",
|
||||
CancellationToken.None);
|
||||
GoogleApiLoader.WriteToken(credential.Token.RefreshToken);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(clientSecrets, scopes, "user",
|
||||
CancellationToken.None);
|
||||
GoogleApiLoader.WriteToken(credential.Token.RefreshToken);
|
||||
}
|
||||
|
||||
|
||||
// Erstelle den CalendarService
|
||||
var service = new CalendarService(new BaseClientService.Initializer()
|
||||
CalendarService service = new CalendarService(new BaseClientService.Initializer()
|
||||
{
|
||||
HttpClientInitializer = credential,
|
||||
ApplicationName = applicationName,
|
||||
@@ -66,7 +97,8 @@ public class TimesheetService
|
||||
// Erster Tag des aktuellen Monats (00:00:00 Uhr)
|
||||
DateTime firstDayOfMonth = new DateTime(now.Year, Constants.Months.IndexOf(month), 1, 0, 0, 0);
|
||||
// Letzter Tag des aktuellen Monats (23:59:59 Uhr)
|
||||
DateTime lastDayOfMonth = new DateTime(now.Year, Constants.Months.IndexOf(month), DateTime.DaysInMonth(now.Year, Constants.Months.IndexOf(month)),
|
||||
DateTime lastDayOfMonth = new DateTime(now.Year, Constants.Months.IndexOf(month),
|
||||
DateTime.DaysInMonth(now.Year, Constants.Months.IndexOf(month)),
|
||||
23, 59, 59);
|
||||
|
||||
// Beispiel: Liste die nächsten 10 Ereignisse im ITM Kalender auf
|
||||
@@ -134,7 +166,8 @@ public class TimesheetService
|
||||
int currentPersonHours = 0;
|
||||
int currentPatternIndex = 0;
|
||||
int dayOfMonth = 1;
|
||||
int lastDayOfMonth = new DateTime(DateTime.Now.Year, Constants.Months.IndexOf(month), dayOfMonth).AddMonths(1).AddDays(-1).Day;
|
||||
int lastDayOfMonth = new DateTime(DateTime.Now.Year, Constants.Months.IndexOf(month), dayOfMonth)
|
||||
.AddMonths(1).AddDays(-1).Day;
|
||||
while (currentPersonHours != monthHours)
|
||||
{
|
||||
DateTime currentDay = new DateTime(DateTime.Now.Year, Constants.Months.IndexOf(month), dayOfMonth);
|
||||
@@ -148,7 +181,8 @@ public class TimesheetService
|
||||
{
|
||||
case 6:
|
||||
{
|
||||
DateTime dayStart = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 9, 0, 0);
|
||||
DateTime dayStart = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 9, 0,
|
||||
0);
|
||||
DateTime dayEnd = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 16, 0, 0);
|
||||
timesheetValue.Add((dayStart, dayEnd, true));
|
||||
currentPersonHours += 6;
|
||||
@@ -156,7 +190,8 @@ public class TimesheetService
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
DateTime dayStart = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 9, 0, 0);
|
||||
DateTime dayStart = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 9, 0,
|
||||
0);
|
||||
DateTime dayEnd = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 13, 0, 0);
|
||||
timesheetValue.Add((dayStart, dayEnd, false));
|
||||
currentPersonHours += 4;
|
||||
@@ -164,7 +199,8 @@ public class TimesheetService
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
DateTime dayStart = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 14, 0, 0);
|
||||
DateTime dayStart = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 14, 0,
|
||||
0);
|
||||
DateTime dayEnd = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 16, 0, 0);
|
||||
timesheetValue.Add((dayStart, dayEnd, false));
|
||||
currentPersonHours += 2;
|
||||
@@ -172,7 +208,8 @@ public class TimesheetService
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
DateTime dayStart = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 9, 0, 0);
|
||||
DateTime dayStart = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 9, 0,
|
||||
0);
|
||||
DateTime dayEnd = new DateTime(currentDay.Year, currentDay.Month, currentDay.Day, 10, 0, 0);
|
||||
timesheetValue.Add((dayStart, dayEnd, false));
|
||||
currentPersonHours += 1;
|
||||
@@ -202,7 +239,8 @@ public class TimesheetService
|
||||
for (int i = 0; i <= daysInYear; i++)
|
||||
{
|
||||
DateTime currentDay = firstDayOfYear.AddDays(i);
|
||||
if (currentDay.DayOfWeek == DayOfWeek.Saturday || currentDay.DayOfWeek == DayOfWeek.Sunday) weekends.Add(currentDay);
|
||||
if (currentDay.DayOfWeek == DayOfWeek.Saturday || currentDay.DayOfWeek == DayOfWeek.Sunday)
|
||||
weekends.Add(currentDay);
|
||||
}
|
||||
|
||||
return weekends;
|
||||
@@ -328,11 +366,13 @@ public class TimesheetService
|
||||
|
||||
int currentPatternIndex = 0;
|
||||
int dayOfMonth = 1;
|
||||
int lastDayOfMonth = new DateTime(DateTime.Now.Year, Constants.Months.IndexOf(month), dayOfMonth).AddMonths(1).AddDays(-1).Day;
|
||||
int lastDayOfMonth = new DateTime(DateTime.Now.Year, Constants.Months.IndexOf(month), dayOfMonth)
|
||||
.AddMonths(1).AddDays(-1).Day;
|
||||
while (currentPersonHours != monthHours)
|
||||
{
|
||||
DateTime currentDay = new DateTime(DateTime.Now.Year, Constants.Months.IndexOf(month), dayOfMonth);
|
||||
if (holidays.Contains(currentDay) || weekends.Contains(currentDay) || CheckForDayIsNotEmpty(currentDay, timesheetValue))
|
||||
if (holidays.Contains(currentDay) || weekends.Contains(currentDay) ||
|
||||
CheckForDayIsNotEmpty(currentDay, timesheetValue))
|
||||
{
|
||||
dayOfMonth++;
|
||||
continue;
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace LeanderShiftPlannerV2.Util
|
||||
public const string GoogleClientId = "GoogleClientId";
|
||||
public const string GoogleClientSecret = "GoogleClientSecret";
|
||||
public const string GoogleApiFileResource = @"Resources/templates/googleapi.txt";
|
||||
public const string GoogleApiTokenPath = @"/googleapitoken.txt";
|
||||
|
||||
// TimeSheets
|
||||
public static readonly string TimeSheetSourceRandom = "Random";
|
||||
|
||||
+2
-1
@@ -47,7 +47,8 @@ public partial class LeanderShiftPlannerMainWindow : Window
|
||||
|
||||
private void CreateApiFile()
|
||||
{
|
||||
GoogleApiLoader.CheckFileSystem();
|
||||
GoogleApiLoader.CheckFileSystem_ReadFile();
|
||||
GoogleApiLoader.CheckFileSystem_ReadToken();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------UI-Interactions------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user