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
3 changes: 2 additions & 1 deletion Calendula.Console/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@

var source = new SecondaryAccToPrimaryAccProfile(secondaryUsername, secondaryAccountSubjectPrefix);
var dest = new PrimaryAccToSecondaryAccProfile(primaryUsername, primaryAccountSubjectPrefix);
var service = new CalendulaService(dest, source, logger, clientId, orgConnectionString);
var calendulaLogger = host.Services.GetRequiredService<ILogger<CalendulaService>>();
var service = new CalendulaService(dest, source, calendulaLogger, clientId, orgConnectionString);
var startTime = DateTime.UtcNow;
var endTime = startTime.AddDays(daysToSync);
await service.SyncRangeBidirectionalAsync(startTime.ToString("O"), endTime.ToString("O"));
Expand Down
18 changes: 16 additions & 2 deletions Calendula/CalendarSyncService.cs → Calendula/CalendulaService.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Microsoft.Extensions.Logging;
using Microsoft.Graph;
using Microsoft.Graph.Extensions;

namespace Calendula
{
Expand Down Expand Up @@ -48,7 +49,13 @@ public async Task SyncRangeBidirectionalAsync(string start, string end)

public async Task SyncRangeAsync(string start, string end)
{
Log.LogInformation($"Syncing from {start} to {end}.");
Log.LogInformation($@"Syncing calendar
from: {SourceProfile.Username}
to: {DestinationProfile.Username}
start: {DateTime.Parse(start):g}
end: {DateTime.Parse(end):g}
");

await InitGraphClientsAsync();

// sync changes from source to dest
Expand All @@ -69,6 +76,7 @@ public async Task SyncRangeAsync(string start, string end)
var eventsToDelete = events.Where(e => e.Subject.StartsWith(SourceProfile.SubjectPrefix) && !destinationIds.Contains(e.Id));
foreach (var e in eventsToDelete)
{
Log.LogInformation($"Deleting event on {e.Start.ToDateTimeOffset().ToLocalTime():g}");
await Dataverse.DeleteEventAsync(e.Id);
await DestinationGraph.DeleteEventAsync(e.Id);
}
Expand All @@ -78,7 +86,7 @@ public async Task<string> SyncEventAsync(Event e)
{
if (e.Subject.StartsWith(DestinationProfile.SubjectPrefix))
{
Log.LogInformation("Skipping event that originated in destination calendar.");
Log.LogDebug("Skipping event that originated in destination calendar.");
return null;
}

Expand All @@ -89,8 +97,12 @@ public async Task<string> SyncEventAsync(Event e)
var mappedEvent = SourceProfile.MapEvent(e);
var destEvent = record.DestinationKey != null ? await DestinationGraph.GetEventByIdAsync(record.DestinationKey) : null;



if (destEvent == null)
{
Log.LogInformation($"Creating new event on {e.Start.ToDateTimeOffset().ToLocalTime():g}");

// create in dest
var destKey = await DestinationGraph.CreateEventAsync(mappedEvent);

Expand All @@ -103,6 +115,8 @@ public async Task<string> SyncEventAsync(Event e)
}
else
{
Log.LogInformation($"Updating event on {e.Start.ToDateTimeOffset().ToLocalTime():g}");

// get event from dest
var graphEvent = await DestinationGraph.GetEventByIdAsync(record.DestinationKey);
mappedEvent.Id = graphEvent.Id;
Expand Down
12 changes: 6 additions & 6 deletions Calendula/DataverseService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public DataverseService(ILogger logger, string orgConnectionString)

public async Task<DataverseEventResponse> GetOrCreateEventAsync(Event e, string sourceName)
{
Log.LogInformation($"Querying Dataverse for calendar event {e.Id}");
Log.LogDebug($"Querying Dataverse for calendar event {e.Id}");

var query = new QueryByAttribute("pl_calendarevent");
query.AddAttributeValue("pl_sourcekey", e.Id);
Expand All @@ -29,7 +29,7 @@ public async Task<DataverseEventResponse> GetOrCreateEventAsync(Event e, string
var response = await Client.RetrieveMultipleAsync(query);
if (response.Entities.Any())
{
Log.LogInformation("Found a matching calendar event in Dataverse.");
Log.LogDebug("Found a matching calendar event in Dataverse.");
return new DataverseEventResponse(response.Entities.First());
}
else
Expand All @@ -42,7 +42,7 @@ public async Task<DataverseEventResponse> GetOrCreateEventAsync(Event e, string
["pl_end"] = e.End.ToDateTime(),
};
create.Id = await Client.CreateAsync(create);
Log.LogInformation("Created a new calendar event in Dataverse.");
Log.LogDebug("Created a new calendar event in Dataverse.");
return new DataverseEventResponse(create);
}
}
Expand All @@ -53,7 +53,7 @@ await Client.UpdateAsync(new Entity("pl_calendarevent", id)
{
["pl_destinationkey"] = destinationKey,
});
Log.LogInformation("Updated destination key in Dataverse.");
Log.LogDebug("Updated destination key in Dataverse.");
}

public async Task UpdateEventTimeAsync(Guid id, Event e, string sourceName)
Expand All @@ -64,7 +64,7 @@ await Client.UpdateAsync(new Entity("pl_calendarevent", id)
["pl_start"] = e.Start.ToDateTime(),
["pl_end"] = e.End.ToDateTime()
});
Log.LogInformation("Updated event time in Dataverse.");
Log.LogDebug("Updated event time in Dataverse.");
}

public async Task DeleteEventAsync(string destinationId)
Expand All @@ -82,7 +82,7 @@ public async Task DeleteEventAsync(string destinationId)
var e = response.Entities.First();
await Client.DeleteAsync(e.LogicalName, e.Id);

Log.LogInformation("Deleted calendar event in Dataverse.");
Log.LogDebug("Deleted calendar event in Dataverse.");
}
}

Expand Down
4 changes: 3 additions & 1 deletion Calendula/GraphService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ public async Task<IEnumerable<Event>> GetEventsInRangeAsync(string start, string
var queryOptions = new[]
{
new QueryOption("startDateTime", start),
new QueryOption("endDateTime", end)
new QueryOption("endDateTime", end),
new QueryOption("$select", "id,subject,start,end,bodypreview,isallday,showas,importance,sensitivity"),
new QueryOption("$orderby", $"start/datetime")
};
var allEvents = new List<Event>();
var calendarEvents = await Client.Me.CalendarView.Request(queryOptions).GetAsync();
Expand Down