/// <summary> /// Save current day-chunk arrangement if there are changes /// </summary> public void SaveChunks(bool force = false) { if (!force && !VM.Chunks.Any(c => c.IsDirty)) { return; } var gday = Globals.DayChunks.Days.FirstOrDefault(d => d.Date == Date); if (gday == null) { gday = new MultiDayChunkSet.DayChunkSet { Date = Date }; Globals.DayChunks.Days.Add(gday); } bool isFirst = true; gday.Chunks.Clear(); foreach (var c in VM.Chunks) { c.IsDirty = false; long[] boxIds = null; if (!isFirst) { boxIds = c.Items.Select(i => i.Persistent.Box.RowId).ToArray(); } gday.Chunks.Add(new MultiDayChunkSet.Chunk { Title = c.Title, BoxIds = boxIds }); isFirst = false; } Globals.UI.SaveDayChunks(); }
/// <summary> /// loose hashing algorithm to detect changes in a set of displayable data /// </summary> static int HashContent(List <AgendaEntry> agendaItems, MultiDayChunkSet.DayChunkSet chunkList) { if (chunkList == null || agendaItems == null) { return(0); } unchecked { int hash = 0; foreach (var a in agendaItems) { hash += (int)a.Box.RowId + a.Box.Title.GetHashCode() + a.Box.BoxTime.GetHashCode(); } foreach (var c in chunkList.Chunks) { int titleHash = c.Title.GetHashCode(); hash += titleHash; if (c.BoxIds != null && c.BoxIds.Length > 0) { hash += (int)c.BoxIds.Sum(id => id + titleHash); } } hash += chunkList.Date.GetHashCode(); return(hash); } }