using Oqtane.Models; using Oqtane.Shared; using System; using System.Collections.Generic; using System.Linq; namespace Oqtane.Infrastructure { public class SyncManager : ISyncManager { private List SyncEvents { get; set; } public event EventHandler EntityChanged; public SyncManager() { SyncEvents = new List(); } public List GetSyncEvents(int tenantId, DateTime lastSyncDate) { return SyncEvents.Where(item => (item.TenantId == tenantId || item.TenantId == -1) && item.ModifiedOn >= lastSyncDate).ToList(); } public void AddSyncEvent(Alias alias, string entityName, int entityId, string action) { AddSyncEvent(alias.TenantId, alias.SiteId, entityName, entityId, action); } public void AddSyncEvent(int tenantId, int siteId, string entityName, int entityId, string action) { var syncevent = new SyncEvent { TenantId = tenantId, SiteId = siteId, EntityName = entityName, EntityId = entityId, Action = action, ModifiedOn = DateTime.UtcNow }; // client actions for PageState management if (action == SyncEventActions.Refresh || action == SyncEventActions.Reload) { // trim sync events SyncEvents.RemoveAll(item => item.ModifiedOn < DateTime.UtcNow.AddHours(-1)); // add sync event SyncEvents.Add(syncevent); } // raise event EntityChanged?.Invoke(this, syncevent); } // deprecated public void AddSyncEvent(int tenantId, string entityName, int entityId, string action) { AddSyncEvent(tenantId, -1, entityName, entityId, action); } } }