/// <summary> /// Sync with cloud data /// </summary> /// <returns></returns> public async Task <NoteList> Sync() { await Task.Delay(700); var cloud = await Download(); if (cloud == null || cloud.Notes == null || cloud.Notes.Count == 0) { return(dat); } foreach (var lnote in dat.Notes) { if (cloud.Contains(lnote)) { var cnote = cloud.Get(lnote); foreach (var ckey in cnote.UniversalData.Keys) { var clist = cnote.UniversalData[ckey]; var llist = lnote.UniversalData.GetValueOrDefault(ckey, true, k => new List <NoteHistRecord>()); foreach (var ch in clist) { var lh = llist.Find(a => Math.Abs((a.DT - ch.DT).TotalSeconds) < 1); if (lh == null) { llist.Add(ch); // Add cloud only data to local storage } else { if (lh.Value.Equals(ch.Value) == false) { llist.Add(ch); // Fail safe 同じ時間なのに値が違うレコードはローカルに追加 } } } llist.Sort((a, b) => a.DT.CompareTo(b.DT)); } } } // save cloud only data foreach (var cnote in cloud.Notes) { if (dat.Contains(cnote) == false) { dat.Add(cnote); } } Save(); await Upload(); return(dat); }