protected override void UpdateMetadataStoreWithLocalChanges() { SyncVersion newVersion = new SyncVersion(0, _metaData.GetNextTickCount()); _metaData.DeleteDetector.MarkAllItemsUnreported(); foreach (SyncTransferData data in _localItems) { //Look up an item's metadata by its ID... ItemMetadata item = _metaData.FindItemMetadataByUniqueIndexedField(URI_COLUMNNAME, data.Uri); if (item == null) { //New item, must have been created since that last time the metadata was updated. //Create the item metadata required for sync (giving it a SyncID and a version, defined to be a DWORD and a ULONGLONG //For creates, simply provide the relative replica ID (0) and the tick count for the provider (ever increasing) SyncGlobalId globalId = new SyncGlobalId(0, Guid.NewGuid()); item = _metaData.CreateItemMetadata(new SyncId(globalId), newVersion); item.ChangeVersion = newVersion; item.SetCustomField(URI_COLUMNNAME, data.Uri); SaveItemMetadata(item); //Increment sync item counter need for reporting progress info base.RemainingSessionWorkEstimate++; } else { if (data.LastModified > item.GetUInt64Field(TIMESTAMP_COLUMNNAME)) // the item has changed since the last sync operation. { //Changed Item, this item has changed since the last time the metadata was updated. //Assign a new version by simply stating "who" modified this item (0 = local/me) and "when" (tick count for the store) item.ChangeVersion = newVersion; SaveItemMetadata(item); //Increment sync item counter need for reporting progress info base.RemainingSessionWorkEstimate++; } else { //Unchanged item, nothing has changes so just mark it as live so that the metadata knows it has not been deleted. _metaData.DeleteDetector.ReportLiveItemById(item.GlobalId); } } } //Now go back through the items that are no longer in the store and mark them as deleted in the metadata. //This sets the item as a tombstone. foreach (ItemMetadata item in _metaData.DeleteDetector.FindUnreportedItems()) { item.MarkAsDeleted(newVersion); SaveItemMetadata(item); } }
public static ItemMetadataAdaptor CreateInstance(ItemMetadata itemMetadata) { ItemMetadataAdaptor retVal = itemMetadata as ItemMetadataAdaptor; //Создаем новый объект и копируем туда свойства if (retVal == null) { retVal = new ItemMetadataAdaptor(new SynchronizationMetadataRow()); SyncGlobalId syncGlobalId = itemMetadata.GlobalId.GetSyncGlobalId(); retVal._metadataRow.UniqueId = syncGlobalId.UniqueId; retVal._metadataRow.Prefix = Convert.ToInt64(syncGlobalId.Prefix); retVal._metadataRow.IsDeleted = itemMetadata.IsDeleted; retVal.ChangeVersion = itemMetadata.ChangeVersion; retVal.CreationVersion = itemMetadata.CreationVersion; } return(retVal); }
private ItemMetadata CreateMetadataItem(PrimaryKeyId?eventPk) { if (eventPk == null) { throw new ArgumentNullException("eventPk"); } SyncVersion newVersion = GetNewSyncVersion(); //New item, must have been created since that last time the metadata was updated. //Create the item metadata required for sync (giving it a SyncID and a version, defined to be a DWORD and a ULONGLONG //For creates, simply provide the relative replica ID (0) and the tick count for the provider (ever increasing) SyncGlobalId globalId = new SyncGlobalId(0, Guid.NewGuid()); ItemMetadata retVal = Provider.ReplicaMetadata.CreateItemMetadata(new SyncId(globalId), newVersion); retVal.ChangeVersion = newVersion; //Set Uri as pk event retVal.SetCustomField(SyncReplicaMetadata.URI_COLUMNNAME, (Guid)eventPk.Value); Provider.ReplicaMetadata.SaveItemMetadata(retVal); return(retVal); }
private ItemMetadata CreateMetadataItem(PrimaryKeyId? eventPk) { if (eventPk == null) { throw new ArgumentNullException("eventPk"); } SyncVersion newVersion = GetNewSyncVersion(); //New item, must have been created since that last time the metadata was updated. //Create the item metadata required for sync (giving it a SyncID and a version, defined to be a DWORD and a ULONGLONG //For creates, simply provide the relative replica ID (0) and the tick count for the provider (ever increasing) SyncGlobalId globalId = new SyncGlobalId(0, Guid.NewGuid()); ItemMetadata retVal = Provider.ReplicaMetadata.CreateItemMetadata(new SyncId(globalId), newVersion); retVal.ChangeVersion = newVersion; //Set Uri as pk event retVal.SetCustomField(SyncReplicaMetadata.URI_COLUMNNAME, (Guid)eventPk.Value); Provider.ReplicaMetadata.SaveItemMetadata(retVal); return retVal; }