示例#1
0
        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);
        }
示例#2
0
 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);
     }
 }