Пример #1
0
        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();
                }
        }
Пример #2
0
        public ContactInfoViewModel(IContactsManager contactsManager, IContactInfoLocal contactInfo)
        {
            _contactsManager = contactsManager;
            ContactInfo      = contactInfo;

            RefreshInfo();
        }
Пример #3
0
        public void UnlinkContactInfo(IContactInfoLocal contactInfo)
        {
            var target = ContactInfos.FirstOrDefault(x => x.Id == contactInfo.Id);

            if (target != null)
            {
                ContactInfos.Remove(target);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
 public NewerVersionException(IContactInfoLocal localValue, IContactInfo remoteValue)
 {
     _localValue  = localValue;
     _remoteValue = remoteValue;
 }
Пример #6
0
        public void UpdateFrom(IContactInfoLocal source, bool suppressChanged)
        {
            UpdateFrom((IContactInfo)source, suppressChanged);

            Contact = source.Contact;
        }
Пример #7
0
 public ContactInfoLocal(IContactInfoLocal contactInfo, AddressBookLocal addressBook, ContactsManager contactsManager)
     : this(contactInfo.Id, addressBook, contactsManager)
 {
     UpdateFrom(contactInfo, true);
 }
Пример #8
0
        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);
            }
        }