public bool SaveMailBox(MailBox mailbox) { if (mailbox == null) throw new ArgumentNullException("mailbox"); var idMailbox = MailBoxExists(GetAddress(mailbox.EMail), mailbox.UserId, mailbox.TenantId); using (var db = GetDb()) { int result; var loginDelayTime = GetLoginDelayTime(mailbox); if (idMailbox == 0) { var utcNow = DateTime.UtcNow; result = db.ExecuteScalar<int>( new SqlInsert(MailboxTable.name) .InColumnValue(MailboxTable.Columns.id, 0) .InColumnValue(MailboxTable.Columns.id_tenant, mailbox.TenantId) .InColumnValue(MailboxTable.Columns.id_user, mailbox.UserId) .InColumnValue(MailboxTable.Columns.address, GetAddress(mailbox.EMail)) .InColumnValue(MailboxTable.Columns.name, mailbox.Name) .InColumnValue(MailboxTable.Columns.password, EncryptPassword(mailbox.Password)) .InColumnValue(MailboxTable.Columns.msg_count_last, mailbox.MessagesCount) .InColumnValue(MailboxTable.Columns.smtp_password, string.IsNullOrEmpty(mailbox.SmtpPassword) ? EncryptPassword(mailbox.Password) : EncryptPassword(mailbox.SmtpPassword)) .InColumnValue(MailboxTable.Columns.size_last, mailbox.Size) .InColumnValue(MailboxTable.Columns.login_delay, loginDelayTime) .InColumnValue(MailboxTable.Columns.enabled, true) .InColumnValue(MailboxTable.Columns.imap, mailbox.Imap) .InColumnValue(MailboxTable.Columns.begin_date, mailbox.BeginDate) .InColumnValue(MailboxTable.Columns.service_type, mailbox.ServiceType) .InColumnValue(MailboxTable.Columns.refresh_token, mailbox.RefreshToken) .InColumnValue(MailboxTable.Columns.id_smtp_server, mailbox.SmtpServerId) .InColumnValue(MailboxTable.Columns.id_in_server, mailbox.InServerId) .InColumnValue(MailboxTable.Columns.date_created, utcNow) .Identity(0, 0, true)); mailbox.MailBoxId = result; mailbox.Enabled = true; } else { mailbox.MailBoxId = idMailbox; var queryUpdate = new SqlUpdate(MailboxTable.name) .Where(MailboxTable.Columns.id, idMailbox) .Set(MailboxTable.Columns.id_tenant, mailbox.TenantId) .Set(MailboxTable.Columns.id_user, mailbox.UserId) .Set(MailboxTable.Columns.address, GetAddress(mailbox.EMail)) .Set(MailboxTable.Columns.name, mailbox.Name) .Set(MailboxTable.Columns.password, EncryptPassword(mailbox.Password)) .Set(MailboxTable.Columns.msg_count_last, mailbox.MessagesCount) .Set(MailboxTable.Columns.smtp_password, string.IsNullOrEmpty(mailbox.SmtpPassword) ? EncryptPassword(mailbox.Password) : EncryptPassword(mailbox.SmtpPassword)) .Set(MailboxTable.Columns.size_last, mailbox.Size) .Set(MailboxTable.Columns.login_delay, loginDelayTime) .Set(MailboxTable.Columns.is_removed, false) .Set(MailboxTable.Columns.imap, mailbox.Imap) .Set(MailboxTable.Columns.begin_date, mailbox.BeginDate) .Set(MailboxTable.Columns.service_type, mailbox.ServiceType) .Set(MailboxTable.Columns.refresh_token, mailbox.RefreshToken) .Set(MailboxTable.Columns.id_smtp_server, mailbox.SmtpServerId) .Set(MailboxTable.Columns.id_in_server, mailbox.InServerId); if (mailbox.BeginDate == MinBeginDate) { var currentMailbox = GetMailBox(idMailbox); if (currentMailbox == null) throw new ItemNotFoundException("Mailbox was removed"); if (mailbox.BeginDate != currentMailbox.BeginDate) { foreach (var folderName in currentMailbox.ImapIntervals.Keys) { var imapIntervals = new ImapIntervals(currentMailbox.ImapIntervals[folderName].UnhandledUidIntervals); if (currentMailbox.ImapIntervals[folderName].BeginDateUid != 1) imapIntervals.AddUnhandledInterval(new UidInterval(1, currentMailbox.ImapIntervals[ folderName].BeginDateUid)); currentMailbox.ImapIntervals[folderName].UnhandledUidIntervals = new List<int>(imapIntervals.ToIndexes()); currentMailbox.ImapIntervals[folderName].BeginDateUid = 1; } queryUpdate.Set(MailboxTable.Columns.imap_intervals, currentMailbox.ImapIntervalsJson); } } result = db.ExecuteNonQuery(queryUpdate); } return result > 0; } }
public void AddUnhandledIntervalBaseTest(int[] indexes, UidInterval newInterval, int[] indexesMody, UidInterval[] intervals) { var imapIntervals = new ImapIntervals(new List<int>(indexes)); imapIntervals.AddUnhandledInterval(newInterval); var uidIntervals = imapIntervals.GetUnhandledIntervalsCopy(); Assert.IsTrue(uidIntervals.Count == intervals.Count()); foreach (var interval in intervals) { Assert.IsTrue(uidIntervals.Contains(interval)); } var indexesListMody = new List<int>(indexesMody); Assert.IsTrue(indexesListMody.SequenceEqual(imapIntervals.ToIndexes())); }