/// <summary> /// 批量插入云端数据,并更新云端 /// </summary> /// <param name="clouds"></param> public async void InsertCloudRecords(List <CloudDataInfo> clouds) { var removeCount = clouds.Count - MaxCount; if (removeCount > 0) { for (var i = 0; i < removeCount; i++) { _postFactory.AddDeleteInfo(clouds[i]); } clouds = clouds.Skip(removeCount).ToList(); } _updateImageCount = await Task.Run(() => { return(clouds.Count(v => DataInfos.IndexOf(v) == -1)); }); var allCount = clouds.Count; for (var i = allCount - 1; i >= 0; i--) { InsertCloudRecord(clouds[i]); } PostChange(); SubmitChange(); if (LocalChangeAction != null) { LocalChangeAction(); } }
/// <summary> /// 插入一条本地数据,如果存在则更新 /// </summary> /// <param name="record"></param> /// <returns></returns> public void InsertLocalRecord(CloudDataInfo record) { record.Device = Device; record.ModifyTime = DateTime.Now.Subtract(DateTime.Parse("1601,1,1")).Ticks + CloudFactoryBase.TimeInterval; var index = DataInfos.IndexOf(record); if (index != -1) { var local = DataInfos[index]; record.UUID = local.UUID; UpdateDeviceHistory(local); record.DeviceHistory = local.DeviceHistory; local = record; local.DataType = CloudInfoEnum.Update; DataInfos.RemoveAt(index); DataInfos.Insert(0, local); } else { record.UUID = Guid.NewGuid().ToString(); if (DataInfos.Count >= MaxCount) { var removeIndex = DataInfos.Count - 1; var removeInfo = DataInfos[removeIndex]; removeInfo.DataType = CloudInfoEnum.Delete; _postFactory.AddDeleteInfo(removeInfo); DataInfos.RemoveAt(removeIndex); } record.DataType = CloudInfoEnum.Add; UpdateDeviceHistory(record); DataInfos.Insert(0, record); } PostChange(); SubmitChange(); if (LocalChangeAction != null) { LocalChangeAction(); } }
/// <summary> /// 插入一条云端数据,如果存在则更新 /// </summary> /// <param name="record"></param> /// <returns></returns> private void InsertCloudRecord(CloudDataInfo record) { var index = DataInfos.IndexOf(record); if (record.Id <= 0) { if (index == -1) { _updateImageCount--; } record.DataType = CloudInfoEnum.Delete; return; } if (index != -1) { var local = DataInfos[index]; if (local.ModifyTime > record.ModifyTime) { local.DataType = CloudInfoEnum.Update; UpdateDeviceHistory(record); local.UUID = record.UUID; } else { UpdateProgramIndex(record); record.ImageUri = local.ImageUri; local = record; local.DataType = CloudInfoEnum.Normal; DataInfos[index] = local; } } else { record.DataType = CloudInfoEnum.Normal; UpdateProgramIndex(record); UpdateImageUri(record); } }