/// <summary>
        /// Get the alerts changed after last sync
        /// </summary>
        /// <param name="since"></param>
        /// <returns></returns>
        internal Dictionary <int, Alert> GetAlertsChangesSince(DateTime since)
        {
            Dictionary <int, Alert> modifiedAlerts = new Dictionary <int, Alert>();

            try
            {
                if (since < alertList.Created || since < DateTime.UtcNow.AddDays(-60))
                {
                    //By default, the change log retains data for 60 days. You can configure the retention period by setting the ChangeLogRetentionPeriod property.
                    since = alertList.Created;

                    //since = DateTime.UtcNow.AddDays(-30);
                }

                //SPChangeToken startToken = new SPChangeToken(SPChangeCollection.CollectionScope.List, list.ID, DateTime.UtcNow);

                //SPChangeToken endToken = new SPChangeToken(SPChangeCollection.CollectionScope.List,list.ID, new DateTime(2008, 10, 18));



                SPChangeToken token = new SPChangeToken(SPChangeCollection.CollectionScope.List, this.alertList.ID, since.ToUniversalTime());
                //Dictionary<int,Alert> modifiedAlerts = new Dictionary<int,Alert>();
                foreach (SPChange change in alertList.GetChanges(token))
                {
                    if (!(change is SPChangeItem))
                    {
                        continue;
                    }
                    SPChangeItem item = change as SPChangeItem;
                    if (!modifiedAlerts.ContainsKey(item.Id))
                    {
                        Alert alert = null;
                        //if(item.ChangeType  != 3)
                        try
                        {
                            alert = new Alert(alertList.GetItemById(item.Id), new MailTemplateManager(alertList.ParentWeb));
                        }
                        catch
                        {
                            //item has been deleted
                        }

                        //if (alert != null && !alert.ImmidiateAlways)
                        //{
                        //    alert = null;
                        //}

                        modifiedAlerts.Add(item.Id, alert);
                    }
                    //Check if the alert is not immediate and all the stuff which are not eligible for timer based alerts
                }
            }
            catch { }
            return(modifiedAlerts);
        }
 protected virtual bool ShouldNotify(SPChangeItem change)
 {
     return(true);
 }
 protected override bool ShouldNotify(SPChangeItem change)
 {
     return(monitoredLists.Contains(change.ListId));
 }
 protected override bool ShouldNotify(SPChangeItem change)
 {
     return(change.ListId == listId);
 }