public void AddLink(IContact contact, IContactInfoLocal contactInfoLocal) { if (contactInfoLocal.Id < 0 || contact.Id < 0) { return; } using (new EnsuredResourceCriticalOperation(_sqlConnection)) using (var command = _sqlConnection.CreateCommand()) { command.CommandText = "select count(*) from contacts_links where contact_id = @contact_id and contact_info_id = @contact_info_id"; command.Parameters.Add(new SQLiteParameter("@contact_id", contact.Id)); command.Parameters.Add(new SQLiteParameter("@contact_info_id", contactInfoLocal.Id)); if ((long)command.ExecuteScalar() > 0) { return; } command.CommandText = "insert into contacts_links(contact_id, contact_info_id) values (@contact_id, @contact_info_id)"; command.ExecuteNonQuery(); } }
public ContactInfoViewModel(IContactsManager contactsManager, IContactInfoLocal contactInfo) { _contactsManager = contactsManager; ContactInfo = contactInfo; RefreshInfo(); }
public void UnlinkContactInfo(IContactInfoLocal contactInfo) { var target = ContactInfos.FirstOrDefault(x => x.Id == contactInfo.Id); if (target != null) { ContactInfos.Remove(target); } }
public void LinkContactInfo(IContactInfoLocal contact) { if (ContactInfos.Any(x => x.AddressBook.Id == contact.AddressBook.Id)) { throw new InvalidOperationException("Contact info already linked."); } var addressBook = ContactsManager.AddressBooks.FirstOrDefault(x => x.Id == contact.AddressBook.Id); if (addressBook == null) { throw new InvalidOperationException("Address book is not registered."); } var contactInfoLocal = contact as ContactInfoLocal ?? new ContactInfoLocal(contact, addressBook, ContactsManager); ContactInfos.Add(contactInfoLocal); }
public NewerVersionException(IContactInfoLocal localValue, IContactInfo remoteValue) { _localValue = localValue; _remoteValue = remoteValue; }
public void UpdateFrom(IContactInfoLocal source, bool suppressChanged) { UpdateFrom((IContactInfo)source, suppressChanged); Contact = source.Contact; }
public ContactInfoLocal(IContactInfoLocal contactInfo, AddressBookLocal addressBook, ContactsManager contactsManager) : this(contactInfo.Id, addressBook, contactsManager) { UpdateFrom(contactInfo, true); }
public void UnWrap(IContactInfoLocal contactInfo) { contactInfo.FirstName = FirstName; contactInfo.LastName = LastName; contactInfo.MiddleName = MiddleName; contactInfo.Company = Company; contactInfo.JobTitle = JobTitle; contactInfo.Note = Note; // Update phone numbers foreach (var item in PhoneNumbers) { if (string.IsNullOrWhiteSpace(item.Number)) { continue; } var target = contactInfo.PhoneNumbers.FirstOrDefault(t => t.Id == item.Id); if (target == null || item.Id < 0) { target = contactInfo.AddressBook.CreatePhoneNumber(); contactInfo.PhoneNumbers.Add(target); } item.UnWrap(target); } foreach (var item in contactInfo.PhoneNumbers.Where(x => PhoneNumbers.All(y => x.Id != y.Id) || string.IsNullOrWhiteSpace(x.Number)).ToArray()) { contactInfo.PhoneNumbers.Remove(item); } // Update emails foreach (var item in Emails) { if (string.IsNullOrWhiteSpace(item.Email)) { continue; } var target = contactInfo.Emails.FirstOrDefault(t => t.Id == item.Id); if (target == null || item.Id < 0) { target = contactInfo.AddressBook.CreateEmail(); contactInfo.Emails.Add(target); } item.UnWrap(target); } foreach (var item in contactInfo.Emails.Where(x => Emails.All(y => x.Id != y.Id) || string.IsNullOrWhiteSpace(x.Email)).ToArray()) { contactInfo.Emails.Remove(item); } // Update tags foreach (var item in Tags) { var target = contactInfo.Tags.FirstOrDefault(t => t.Id == item.Id); if (target != null) { continue; } target = _contactsManager.Tags.FirstOrDefault(x => x.Id == item.Id); if (target != null) { contactInfo.Tags.Add(target); } } foreach (var item in contactInfo.Tags.Where(x => Tags.All(y => x.Id != y.Id)).ToArray()) { contactInfo.Tags.Remove(item); } }