Exemplo n.º 1
0
        private Dictionary <string, LinkedList <Contact> > LoadContactInfosMappings(AddressBookLocal addressBook)
        {
            var result = new Dictionary <string, LinkedList <Contact> >();

            using (new EnsuredResourceCriticalOperation(_sqlConnection))
                using (var command = _sqlConnection.CreateCommand())
                {
                    command.CommandText = "select ci.`key`, cl.contact_id  from contact_infos ci inner join contacts_links cl on ci.id=cl.contact_info_id where addressbook_id = @addressbook_id";
                    command.Parameters.Add(new SQLiteParameter("@addressbook_id", addressBook.Id));

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var key       = reader.GetString(0);
                            var contactId = reader.GetInt32(1);

                            if (!_contactsManager.ContactsDictionary.ContainsKey(contactId))
                            {
                                continue;
                            }
                            var contact = _contactsManager.ContactsDictionary[contactId];

                            if (!result.ContainsKey(key))
                            {
                                result.Add(key, new LinkedList <Contact>());
                            }

                            result[key].AddFirst(contact);
                        }
                    }
                }

            return(result);
        }
Exemplo n.º 2
0
 internal void QueueCheck(AddressBookLocal addressBook)
 {
     if (CheckCriteria(addressBook))
     {
         TryUpdateAddressBook(addressBook);
     }
 }
Exemplo n.º 3
0
 internal void RaiseAddressBookReloaded(AddressBookLocal addressBook)
 {
     if (AddressBookReloaded != null)
     {
         AddressBookReloaded(addressBook);
     }
 }
Exemplo n.º 4
0
        public void RegisterAddressBook(IAddressBook addressBook)
        {
            var targetWrapper = _addressBooks.FirstOrDefault(x => x.Key == addressBook.Key);

            if (targetWrapper == null)
            {
                lock (_addressBooks)
                {
                    using (new EnsuredResourceCriticalOperation(_sqlConnection))
                        using (var command = _sqlConnection.CreateCommand())
                        {
                            command.CommandText = @"insert into addressbooks(key, name) values (@key, @name)";

                            command.Parameters.Add(new SQLiteParameter("key", addressBook.Key.ToString("D")));
                            command.Parameters.Add(new SQLiteParameter("name", addressBook.Name));

                            command.ExecuteNonQuery();
                        }

                    targetWrapper = new AddressBookLocal(this, GetLastInsertRowId(), addressBook);
                    _addressBooks.Add(targetWrapper);
                }
            }
            else
            {
                targetWrapper.UpdateInstance(addressBook);

                _updateWatcher.QueueCheck(targetWrapper);
            }
        }
Exemplo n.º 5
0
        public UpdateTask(ContactsManager contactsManager, SQLiteConnection sqlConnection, AddressBookLocal addressBook, int index)
        {
            StartTime          = DateTime.Now;
            CurrentStateString = "Initializing...";

            _contactsManager = contactsManager;
            _sqlConnection   = sqlConnection;
            _addressBook     = addressBook;
            _index           = index;
        }
Exemplo n.º 6
0
        private bool CheckCriteria(AddressBookLocal addressBook)
        {
            return
                (addressBook.IsOnline &&
#if DEBUG
                 addressBook.LastUpdate < DateTime.Now - TimeSpan.FromSeconds(10) &&
#else
                 addressBook.LastUpdate < DateTime.Now - TimeSpan.FromMinutes(10) &&
#endif
                 !_tasks.Any(x => x != null && x.AddressBook == addressBook));
        }
Exemplo n.º 7
0
        private void TryUpdateAddressBook(AddressBookLocal addressBook)
        {
            UpdateTask updateTask = null;

            using (new ResourceCriticalOperation(addressBook))
                updateTask = CreateTask(addressBook);

            if (updateTask != null)
            {
                var worker = new Task(StartUpdateTask, updateTask, TaskCreationOptions.PreferFairness);
                worker.Start();
            }
        }
Exemplo n.º 8
0
        internal void UpdateAddressBook(AddressBookLocal addressBook)
        {
            using (new EnsuredResourceCriticalOperation(_sqlConnection))
                using (var command = _sqlConnection.CreateCommand())
                {
                    command.CommandText = @"update addressbooks set name = @name, lastupdate = CURRENT_TIMESTAMP where id = @id";

                    command.Parameters.Add(new SQLiteParameter("name", addressBook.Name));
                    command.Parameters.Add(new SQLiteParameter("@id", addressBook.Id));

                    command.ExecuteNonQuery();
                }
        }
Exemplo n.º 9
0
        private UpdateTask CreateTask(AddressBookLocal addressBook)
        {
            Logger.LogNotice(string.Format("Trying to update address book '{0}'.Last update: {1}.", addressBook.Name, addressBook.LastUpdate));
            using (new ResourceCriticalOperation((object)_tasks))
            {
                for (int i = 0; i < MAX_PARALLEL_TASKS_COUNT; i++)
                {
                    if (_tasks[i] == null)
                    {
                        var task = new UpdateTask(_contactsManager, _contactsManager.SqlConnection, addressBook, i);
                        _tasks[i] = task;

                        Logger.LogNotice(string.Format("Found empty slot to perform update for '{0}'.", addressBook.Name));

                        return(task);
                    }
                }
            }

            return(null);
        }