//private void ProcessNewItem(List<CacheChangeData> updates, ICoreItem newItem) //{ // // additions, updates and deletions // _CacheState.Locked((state) => // { // string key = newItem.Name.ToLower(); // ICoreItem oldItem = null; // if (state.ItemDict.TryGetValue(key, out oldItem)) // { // // already exists in set // if (newItem.IsCurrent()) // { // // update // state.ItemDict[key] = newItem; // // check if really updated // if (newItem.Id != oldItem.Id) // { // // item updated // state.UpdateCount++; // updates.Add(new CacheChangeData(_CacheId, CacheChange.ItemUpdated, oldItem, newItem)); // } // } // else // { // // delete // state.ItemDict.Remove(key); // state.DeleteCount++; // updates.Add(new CacheChangeData(_CacheId, CacheChange.ItemDeleted, oldItem, null)); // } // } // else // { // // not found in set // if (newItem.IsCurrent()) // { // state.CreateCount++; // state.ItemDict[key] = newItem; // updates.Add(new CacheChangeData(_CacheId, CacheChange.ItemCreated, null, newItem)); // } // else // { // // ignore - deletion // } // } // }); //} private void SubscriptionCallback(ISubscription subscription, ICoreItem newItem) { CacheSubscription subs = _Subscriptions.Get(subscription.Id); if (subs != null) { Cache.Put(newItem.Name, newItem, LoadSaveType.Avoid, subs.CacheParams, TimeSpan.MaxValue); NotifyUserDataChange(Cache.GetUpdates()); // call user's subscription callback if provided if (subs.UserCallback != null) { try { subs.UserCallback(subscription, newItem); } catch (Exception e) { _Logger.LogError("Subscription '{0}' UserCallback() failed: {1}", subscription.Id, e); } } } }