Skip to content

Commit

Permalink
fix(view): 🐛 fix mutation of cached report data with currently runnin…
Browse files Browse the repository at this point in the history
…g timer
  • Loading branch information
JamesNZL committed May 17, 2023
1 parent 32a5e68 commit 5653f6d
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/TogglTrack.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Text.RegularExpressions;
using System.Text.Json;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
Expand Down Expand Up @@ -123,6 +124,7 @@ internal TogglTrack(PluginInitContext context, Settings settings)
}
}

// TODO: need way to invalidate all caches
private async ValueTask<SummaryTimeEntry?> _GetSummaryTimeEntries(long workspaceId, long userId, Settings.ViewGroupingKeys reportGrouping, DateTimeOffset start, DateTimeOffset? end, bool force = false)
{
string cacheKey = $"SummaryTimeEntries{workspaceId}{userId}{(int)reportGrouping}{start.ToString("yyyy-MM-dd")}{end?.ToString("yyyy-MM-dd")}";
Expand Down Expand Up @@ -1527,6 +1529,14 @@ internal async ValueTask<List<Result>> RequestViewReports(CancellationToken toke
{
if (runningTimeEntry is not null)
{
// Perform deep copy of summary so the cache is not mutated
var serialisedSummary = JsonSerializer.Serialize<SummaryTimeEntry>(summary);
summary = JsonSerializer.Deserialize<SummaryTimeEntry>(serialisedSummary);
if ((summary is null) || (summary.groups is null))
{
return results;
}

var projectGroup = summary.groups.Find(group => group.id == runningTimeEntry.project_id);
var entrySubGroup = projectGroup?.sub_groups?.Find(subGroup => subGroup.title == runningTimeEntry.description);

Expand Down Expand Up @@ -1596,6 +1606,14 @@ internal async ValueTask<List<Result>> RequestViewReports(CancellationToken toke
{
if (runningTimeEntry is not null)
{
// Perform deep copy of summary so the cache is not mutated
var serialisedSummary = JsonSerializer.Serialize<SummaryTimeEntry>(summary);
summary = JsonSerializer.Deserialize<SummaryTimeEntry>(serialisedSummary);
if ((summary is null) || (summary.groups is null))
{
return results;
}

Project? runningProject = me.projects?.Find(project => project.id == runningTimeEntry.project_id);

if (runningProject?.client_id is not null)
Expand Down Expand Up @@ -1672,6 +1690,14 @@ internal async ValueTask<List<Result>> RequestViewReports(CancellationToken toke
{
if (runningTimeEntry is not null)
{
// Perform deep copy of summary so the cache is not mutated
var serialisedSummary = JsonSerializer.Serialize<SummaryTimeEntry>(summary);
summary = JsonSerializer.Deserialize<SummaryTimeEntry>(serialisedSummary);
if ((summary is null) || (summary.groups is null))
{
return results;
}

var projectGroup = summary.groups.Find(group => group.id == runningTimeEntry.project_id);
var entrySubGroup = projectGroup?.sub_groups?.Find(subGroup => subGroup.title == runningTimeEntry.description);

Expand Down

0 comments on commit 5653f6d

Please sign in to comment.