Exemple #1
0
        /// <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();
            }
        }
Exemple #2
0
        /// <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();
            }
        }
Exemple #3
0
        /// <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);
            }
        }