From 337a5666175be044f53ac1ef312fcfe7749e65c3 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Tue, 8 Aug 2023 07:51:07 -0400 Subject: [PATCH] improve sync service to always rely on server dates --- .../Services/Interfaces/ISyncService.cs | 2 +- Oqtane.Client/Services/SyncService.cs | 2 +- Oqtane.Client/UI/SiteRouter.razor | 18 ++++++------------ Oqtane.Server/Controllers/SyncController.cs | 10 ++++++++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Oqtane.Client/Services/Interfaces/ISyncService.cs b/Oqtane.Client/Services/Interfaces/ISyncService.cs index 65b5c226..12af4f2e 100644 --- a/Oqtane.Client/Services/Interfaces/ISyncService.cs +++ b/Oqtane.Client/Services/Interfaces/ISyncService.cs @@ -14,6 +14,6 @@ namespace Oqtane.Services /// /// /// - Task GetSyncAsync(DateTime lastSyncDate); + Task GetSyncEventsAsync(DateTime lastSyncDate); } } diff --git a/Oqtane.Client/Services/SyncService.cs b/Oqtane.Client/Services/SyncService.cs index 6f60d176..3885706c 100644 --- a/Oqtane.Client/Services/SyncService.cs +++ b/Oqtane.Client/Services/SyncService.cs @@ -16,7 +16,7 @@ namespace Oqtane.Services private string ApiUrl => CreateApiUrl("Sync"); /// - public async Task GetSyncAsync(DateTime lastSyncDate) + public async Task GetSyncEventsAsync(DateTime lastSyncDate) { return await GetJsonAsync($"{ApiUrl}/{lastSyncDate.ToString("yyyyMMddHHmmssfff")}"); } diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor index c2a61f64..8e3f4ecc 100644 --- a/Oqtane.Client/UI/SiteRouter.razor +++ b/Oqtane.Client/UI/SiteRouter.razor @@ -98,7 +98,7 @@ User user = null; var editmode = false; var refresh = false; - var lastsyncdate = DateTime.UtcNow.AddHours(-1); // events in the past hour + var lastsyncdate = DateTime.MinValue; var runtime = (Shared.Runtime)Enum.Parse(typeof(Shared.Runtime), Runtime); _error = ""; @@ -177,27 +177,21 @@ } // process any sync events - var sync = await SyncService.GetSyncAsync(lastsyncdate); + var sync = await SyncService.GetSyncEventsAsync(lastsyncdate); lastsyncdate = sync.SyncDate; if (sync.SyncEvents.Any()) { // reload client application if server was restarted or site runtime/rendermode was modified if (PageState != null && site != null && sync.SyncEvents.Exists(item => item.Action == SyncEventActions.Reload && ((item.EntityName == EntityNames.Host && site.Runtime != "Server") || (item.EntityName == EntityNames.Site && item.EntityId == site.SiteId)))) { - if (!querystring.ContainsKey("reloaded")) - { - NavigationManager.NavigateTo(_absoluteUri + (!_absoluteUri.Contains("?") ? "?" : "&") + "reloaded", true); - return; - } + NavigationManager.NavigateTo(_absoluteUri, true); + return; } // reload client application if current user auth information has changed if (PageState != null && user != null && sync.SyncEvents.Exists(item => item.Action == SyncEventActions.Reload && item.EntityName == EntityNames.User && item.EntityId == user.UserId)) { - if (!querystring.ContainsKey("reloaded")) - { - NavigationManager.NavigateTo(_absoluteUri + (!_absoluteUri.Contains("?") ? "?" : "&") + "reloaded", true); - return; - } + NavigationManager.NavigateTo(_absoluteUri, true); + return; } // when site information has changed the PageState needs to be refreshed if (sync.SyncEvents.Exists(item => item.EntityName == EntityNames.Site && item.EntityId == SiteState.Alias.SiteId)) diff --git a/Oqtane.Server/Controllers/SyncController.cs b/Oqtane.Server/Controllers/SyncController.cs index 6c4a136d..2d54d4ff 100644 --- a/Oqtane.Server/Controllers/SyncController.cs +++ b/Oqtane.Server/Controllers/SyncController.cs @@ -23,10 +23,16 @@ namespace Oqtane.Controllers [HttpGet("{lastSyncDate}")] public Sync Get(string lastSyncDate) { + DateTime currentdate = DateTime.UtcNow; + DateTime lastdate = DateTime.ParseExact(lastSyncDate, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture); + if (lastdate == DateTime.MinValue) + { + lastdate = currentdate; + } Sync sync = new Sync { - SyncDate = DateTime.UtcNow, - SyncEvents = _syncManager.GetSyncEvents(_alias.TenantId, DateTime.ParseExact(lastSyncDate, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture)) + SyncDate = currentdate, + SyncEvents = _syncManager.GetSyncEvents(_alias.TenantId, lastdate) }; return sync; }