private MessageRec SetSyncState(StoreSession storeSession, byte[] key, string syncStateStr, CoreFolder folder) { byte[] syncStateSearchKey = this.GetSyncStateSearchKey(key); MessageRec result; using (QueryResult queryResult = folder.QueryExecutor.ItemQuery(ItemQueryType.None, new ComparisonFilter(ComparisonOperator.Equal, ItemSchema.ReplyTemplateId, syncStateSearchKey), null, new PropertyDefinition[] { ItemSchema.Id })) { object[][] rows = queryResult.GetRows(1); CoreItem coreItem; if (rows.Length == 1) { coreItem = CoreItem.Bind(storeSession, (VersionedId)rows[0][0]); } else { coreItem = CoreItem.Create(storeSession, folder.Id, CreateMessageType.Normal); } using (coreItem) { coreItem.PropertyBag[StoreObjectSchema.ItemClass] = "IPM.MS-Exchange.MailboxSyncState"; coreItem.PropertyBag[ItemSchema.Subject] = this.GetSyncStateSubject(key); if (string.IsNullOrWhiteSpace(syncStateStr)) { coreItem.PropertyBag.Delete(MailboxProviderBase.SyncStateStorePropertyDefinition); } else { using (Stream stream = coreItem.PropertyBag.OpenPropertyStream(MailboxProviderBase.SyncStateStorePropertyDefinition, PropertyOpenMode.Create)) { using (StreamWriter streamWriter = new StreamWriter(stream)) { streamWriter.Write(syncStateStr); CommonUtils.AppendNewLinesAndFlush(streamWriter); } } } coreItem.PropertyBag[ItemSchema.ReplyTemplateId] = syncStateSearchKey; coreItem.Save(SaveMode.FailOnAnyConflict); coreItem.PropertyBag.Load(new PropertyDefinition[] { ItemSchema.Id }); result = new MessageRec((byte[])coreItem.Id.ObjectId.ProviderLevelItemId.Clone(), (byte[])folder.Id.ObjectId.ProviderLevelItemId.Clone(), DateTime.MinValue, 0, MsgRecFlags.None, null); } } return(result); }
private static void SerializeToStream(T obj, Stream stream) { if (obj == null) { return; } if (typeof(T) == typeof(string)) { using (StreamWriter streamWriter = new StreamWriter(stream)) { streamWriter.Write((string)((object)obj)); CommonUtils.AppendNewLinesAndFlush(streamWriter); return; } } XMLSerializableBase.SerializeToStream(obj, stream, false); using (StreamWriter streamWriter2 = new StreamWriter(stream)) { CommonUtils.AppendNewLinesAndFlush(streamWriter2); } }