Refact: ContactManager 40/58340/1
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Fri, 29 Jan 2016 10:33:42 +0000 (12:33 +0200)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Fri, 29 Jan 2016 10:33:42 +0000 (12:33 +0200)
Change-Id: I983c175c31939770e3792d5e23a652d007c8eff2
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
15 files changed:
src/Common/ContactManager/inc/ContactList.h
src/Common/ContactManager/inc/ContactManager.h
src/Common/ContactManager/inc/ContactPersonAddress.h [new file with mode: 0644]
src/Common/ContactManager/inc/ContactPersonEmail.h
src/Common/ContactManager/inc/ContactPersonNumber.h
src/Common/ContactManager/inc/ContactPersonPhoneLog.h
src/Common/ContactManager/inc/ContactRecord.h
src/Common/ContactManager/src/ContactManager.cpp
src/Common/ContactManager/src/ContactRecord.cpp
src/Conversation/ContactList/Controller/inc/ContactListItem.h
src/Conversation/ContactList/Controller/src/ContactListItem.cpp
src/Conversation/ContactList/Controller/src/ConvContactList.cpp
src/Conversation/Main/Controller/src/Conversation.cpp
src/Conversation/Recipients/Controller/src/RecipientsPanel.cpp
src/MsgThread/Controller/src/BaseThreadListItem.cpp

index b1fd6ab..12a7766 100644 (file)
@@ -29,6 +29,17 @@ namespace Msg
             friend class ContactManager;
 
         public:
+            ContactList(contacts_list_h list)
+                : m_List(list)
+                , m_Record(false)
+            {
+            }
+
+            ~ContactList()
+            {
+                if(m_List)
+                    contacts_list_destroy(m_List, true);
+            }
 
             bool next()
             {
@@ -40,11 +51,12 @@ namespace Msg
                 return contacts_list_prev(m_List) == 0;
             }
 
-            T get()
+            T &get()
             {
                 contacts_record_h rec = nullptr;
                 contacts_list_get_current_record_p(m_List, &rec);
-                return T(rec);
+                m_Record.set(rec);
+                return m_Record;
             }
 
             int getCount() const
@@ -54,33 +66,9 @@ namespace Msg
                 return count;
             }
 
-            void release(bool releaseChildren = true)
-            {
-                if(m_List)
-                {
-                    contacts_list_destroy(m_List, releaseChildren);
-                    m_List = nullptr;
-                }
-            }
-
-            bool isValid()
-            {
-                return m_List != nullptr;
-            }
-
-        private:
-            ContactList()
-                : m_List()
-            {
-            }
-
-            ContactList(contacts_list_h list)
-                : m_List(list)
-            {
-            }
-
         private:
             contacts_list_h m_List;
+            T m_Record;
     };
 }
 
index 1d89d11..e06a1ac 100644 (file)
@@ -21,6 +21,7 @@
 #include <list>
 #include <vector>
 #include <contacts.h>
+#include <memory>
 
 #include "ContactList.h"
 #include "ContactPersonPhoneLog.h"
@@ -56,20 +57,20 @@ namespace Msg
              * @param       keyword - search keyword
              */
             template<typename T>
-            ContactList<T> search(const std::string &keyword);
+            std::shared_ptr<ContactList<T>> search(const std::string &keyword);
             /**
              *@brief        search for contacts-id, name, phone-number and thumbnail path based on phone-number
              *@param[in]    number - contact person number
              *@return       ContactPersonNumber
              */
-            ContactPersonNumber getContactPersonNumber(const std::string &number) const;
+            ContactPersonNumberRef getContactPersonNumber(const std::string &number) const;
 
             /**
              *@brief        Search for contacts-id, name, phone-number and thumbnail path based on phone-number id
              *@param[in]    phoneId - identifier of phone-number in contacts-database
              *@return       ContactPersonNumber
              */
-            ContactPersonNumber getContactPersonNumber(int phoneId) const;
+            ContactPersonNumberRef getContactPersonNumber(int phoneId) const;
 
             /**
              *@brief        Add listener on contacts database
@@ -95,7 +96,7 @@ namespace Msg
              * @brief Generic search for basic contact attributes based on custom filter passed from above
              * @param[in] filter to be used for db-request. DO NOT destroy filter manually, it will be destroyed insithe this method.
              */
-            ContactPersonNumber getContactPersonNumber(contacts_filter_h filter) const;
+            ContactPersonNumberRef getContactPersonNumber(contacts_filter_h filter) const;
 
         private:
             std::list<IContactDbChangeListener *> m_Listeners;
diff --git a/src/Common/ContactManager/inc/ContactPersonAddress.h b/src/Common/ContactManager/inc/ContactPersonAddress.h
new file mode 100644 (file)
index 0000000..6e43d70
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __ContactPersonAddress_h__
+#define __ContactPersonAddress_h__
+
+#include "ContactRecord.h"
+
+namespace Msg
+{
+    class ContactPersonAddress;
+    typedef std::shared_ptr<ContactPersonAddress> ContactPersonAddressRef;
+
+    class ContactPersonAddress
+        : public ContactRecord
+    {
+        public:
+            enum AddressType
+            {
+                EmailType,
+                NumberType,
+            };
+
+        public:
+            ContactPersonAddress(bool release, contacts_record_h record = nullptr);
+
+            virtual AddressType getAddressType() const = 0;
+            virtual int getPersonId() const = 0;
+            virtual std::string getDispName() const = 0;
+            virtual std::string getAddress() const = 0;
+            virtual std::string getThumbnailPath() const = 0;
+    };
+
+    inline ContactPersonAddress::ContactPersonAddress(bool release, contacts_record_h record)
+        : ContactRecord(release, record)
+    {
+    }
+}
+
+#endif /* __ContactPersonAddress_h__ */
index 2d055c7..f005a5e 100644 (file)
 #ifndef __ContactPersonEmail_h__
 #define __ContactPersonEmail_h__
 
-#include <ContactRecord.h>
+#include "ContactPersonAddress.h"
 
 namespace Msg
 {
+    class ContactPersonEmail;
+    typedef std::shared_ptr<ContactPersonEmail> ContactPersonEmailRef;
+
     class ContactPersonEmail
-        : public ContactRecord
+        : public ContactPersonAddress
     {
         public:
-            ContactPersonEmail(contacts_record_h record);
+            ContactPersonEmail(bool release, contacts_record_h record = nullptr);
             static const char *getUri();
-            int getId() const;
-            int getPersonId() const;
-            std::string getDispName() const;
-            std::string getEmail() const;
-            std::string getThumbnailPath() const;
+            virtual int getId() const;
+            virtual AddressType getAddressType() const;
+            virtual int getPersonId() const;
+            virtual std::string getDispName() const;
+            virtual std::string getAddress() const;
+            virtual std::string getThumbnailPath() const;
     };
 
-    inline ContactPersonEmail::ContactPersonEmail(contacts_record_h record)
-        : ContactRecord(record)
+    inline ContactPersonEmail::ContactPersonEmail(bool release, contacts_record_h record)
+        : ContactPersonAddress(release, record)
     {
     }
 
@@ -54,7 +58,7 @@ namespace Msg
         return getStr(_contacts_person_email.display_name);
     }
 
-    inline std::string ContactPersonEmail::getEmail() const
+    inline std::string ContactPersonEmail::getAddress() const
     {
         return getStr(_contacts_person_email.email);
     }
@@ -68,6 +72,11 @@ namespace Msg
     {
         return _contacts_person_email._uri;
     }
+
+    inline ContactPersonEmail::AddressType ContactPersonEmail::getAddressType() const
+    {
+        return EmailType;
+    }
 }
 
 
index 2b749eb..a878424 100644 (file)
 #ifndef __ContactPersonNumber_h__
 #define __ContactPersonNumber_h__
 
-#include <ContactRecord.h>
+#include "ContactPersonAddress.h"
 
 namespace Msg
 {
-    class ContactManager;
+    class ContactPersonNumber;
+    typedef std::shared_ptr<ContactPersonNumber> ContactPersonNumberRef;
 
     class ContactPersonNumber
-        : public ContactRecord
+        : public ContactPersonAddress
     {
         public:
-            ContactPersonNumber(contacts_record_h record);
+            ContactPersonNumber(bool release, contacts_record_h record = nullptr);
             static const char *getUri();
-            int getId() const;
-            int getPersonId() const;
-            std::string getDispName() const;
-            std::string getNumber() const;
-            std::string getThumbnailPath() const;
+            virtual int getId() const;
+            virtual AddressType getAddressType() const;
+            virtual int getPersonId() const;
+            virtual std::string getDispName() const;
+            virtual std::string getAddress() const;
+            virtual std::string getThumbnailPath() const;
     };
 
-    inline ContactPersonNumber::ContactPersonNumber(contacts_record_h record)
-        : ContactRecord(record)
+    inline ContactPersonNumber::ContactPersonNumber(bool release, contacts_record_h record)
+        : ContactPersonAddress(release, record)
     {
     }
 
@@ -56,7 +58,7 @@ namespace Msg
         return getStr(_contacts_person_number.display_name);
     }
 
-    inline std::string ContactPersonNumber::getNumber() const
+    inline std::string ContactPersonNumber::getAddress() const
     {
         return getStr(_contacts_person_number.number);
     }
@@ -70,6 +72,11 @@ namespace Msg
     {
         return _contacts_person_number._uri;
     }
+
+    inline ContactPersonNumber::AddressType ContactPersonNumber::getAddressType() const
+    {
+        return NumberType;
+    }
 }
 
 
index 16381c8..ba1f454 100644 (file)
 #ifndef __ContactPersonPhoneLog_h__
 #define __ContactPersonPhoneLog_h__
 
-#include <ContactRecord.h>
+#include "ContactRecord.h"
 
 namespace Msg
 {
-    class ContactManager;
+    class ContactPersonPhoneLog;
+    typedef std::shared_ptr<ContactPersonPhoneLog> ContactPersonPhoneLogRef;
 
     class ContactPersonPhoneLog
         : public ContactRecord
     {
         public:
-            ContactPersonPhoneLog(contacts_record_h record);
+            ContactPersonPhoneLog(bool release, contacts_record_h record = nullptr);
             static const char *getUri();
-            int getId() const;
+            virtual int getId() const;
             int getPersonId() const;
-            std::string getDispName() const;
             std::string getAddress() const;
+            std::string getDispName() const;
     };
 
-    inline ContactPersonPhoneLog::ContactPersonPhoneLog(contacts_record_h record)
-        : ContactRecord(record)
+    inline ContactPersonPhoneLog::ContactPersonPhoneLog(bool release, contacts_record_h record)
+        : ContactRecord(release, record)
     {
     }
 
index 1daa818..565d63c 100644 (file)
 #define __ContactRecord_h__
 
 #include <contacts.h>
-#include <vector>
 #include <string>
+#include <memory>
 
 namespace Msg
 {
+    class ContactRecord;
+    typedef std::shared_ptr<ContactRecord> ContactRecordRef;
+
     class ContactRecord
     {
         public:
-            inline void release(bool releaseChildren = true);
-            inline bool isValid() const;
+            ContactRecord(bool release, contacts_record_h record = nullptr);
+            virtual ~ContactRecord();
+            ContactRecord(ContactRecord&) = delete;
+            ContactRecord& operator=(ContactRecord&) = delete;
+
+            virtual int getId() const = 0;
+            void set(contacts_record_h record);
 
         protected:
-            ContactRecord(contacts_record_h record);
-            virtual ~ContactRecord();
             std::string getStr(unsigned propertyId) const;
             int getInt(unsigned propertyId) const;
 
-        protected:
+        private:
             contacts_record_h m_Record;
+            bool m_Release;
     };
 
-    inline bool ContactRecord::isValid() const
+    inline void ContactRecord::set(contacts_record_h record)
     {
-        return m_Record != nullptr;
-    }
-
-    inline void ContactRecord::release(bool releaseChildren)
-    {
-        if(m_Record)
-        {
-            contacts_record_destroy(m_Record, releaseChildren);
-            m_Record = nullptr;
-        }
+        m_Record = record;
     }
 
     inline std::string ContactRecord::getStr(unsigned propertyId) const
@@ -66,6 +64,7 @@ namespace Msg
         contacts_record_get_int(m_Record, propertyId, &val);
         return val;
     }
+
 }
 
 #endif /* __ContactRecord_h__ */
index d10a95b..6acbe51 100644 (file)
@@ -89,7 +89,7 @@
 
 
     template <>
-    ContactList<ContactPersonPhoneLog> ContactManager::search<ContactPersonPhoneLog>(const std::string &keyword)
+    std::shared_ptr<ContactList<ContactPersonPhoneLog>> ContactManager::search<ContactPersonPhoneLog>(const std::string &keyword)
     {
         contacts_query_h query = nullptr;
         contacts_filter_h filter = nullptr;
         {
             _contacts_person_phone_log.person_id,
             _contacts_person_phone_log.address,
+            _contacts_person_phone_log.display_name
         };
 
         contacts_query_set_projection(query, numberProjection, sizeof(numberProjection)/sizeof(unsigned int));
         contacts_filter_destroy(filter);
         contacts_query_destroy(query);
 
-        return ContactList<ContactPersonPhoneLog>(list);
+        return list ? std::make_shared<ContactList<ContactPersonPhoneLog>>(list) : nullptr;
     }
 
     template<>
-    ContactList<ContactPersonNumber> ContactManager::search<ContactPersonNumber>(const std::string &keyword)
+    std::shared_ptr<ContactList<ContactPersonNumber>> ContactManager::search<ContactPersonNumber>(const std::string &keyword)
     {
         contacts_list_h list = nullptr;
         contacts_db_search_records_with_range(ContactPersonNumber::getUri(), keyword.c_str(),
                                               0, 0, CONTACTS_SEARCH_RANGE_NAME | CONTACTS_SEARCH_RANGE_NUMBER, &list);
-        ContactList<ContactPersonNumber> resultList(list);
-        return resultList;
+        return list ? std::make_shared<ContactList<ContactPersonNumber>>(list) : nullptr;
     }
 
     template<>
-    ContactList<ContactPersonEmail> ContactManager::search<ContactPersonEmail>(const std::string &keyword)
+    std::shared_ptr<ContactList<ContactPersonEmail>> ContactManager::search<ContactPersonEmail>(const std::string &keyword)
     {
         contacts_list_h list = nullptr;
         contacts_db_search_records_with_range(ContactPersonEmail::getUri(), keyword.c_str(),
                                               0, 0, CONTACTS_SEARCH_RANGE_NAME | CONTACTS_SEARCH_RANGE_EMAIL, &list);
-        ContactList<ContactPersonEmail> resultList(list);
-        return resultList;
+        return list ? std::make_shared<ContactList<ContactPersonEmail>>(list) : nullptr;
     }
 
-    ContactPersonNumber ContactManager::getContactPersonNumber(int phoneNumId) const
+    ContactPersonNumberRef ContactManager::getContactPersonNumber(int phoneNumId) const
     {
         contacts_filter_h filter = nullptr;
         contacts_filter_create(_contacts_contact_number._uri, &filter);
         contacts_filter_add_int(filter, _contacts_person_number.number_id, CONTACTS_MATCH_EQUAL, phoneNumId);
-        return getContactPersonNumber(filter);
+        return filter ? getContactPersonNumber(filter) : nullptr;
     }
 
-    ContactPersonNumber ContactManager::getContactPersonNumber(const std::string &number) const
+    ContactPersonNumberRef ContactManager::getContactPersonNumber(const std::string &number) const
     {
         contacts_filter_h filter = nullptr;
         contacts_filter_create(_contacts_contact_number._uri, &filter);
         contacts_filter_add_str(filter, _contacts_person_number.number_filter, CONTACTS_MATCH_EXACTLY, number.c_str());
-        return getContactPersonNumber(filter);
+        return filter ? getContactPersonNumber(filter) : nullptr;
     }
 
     void ContactManager::contactChangedCb(const char *view_uri, void *user_data)
         }
     }
 
-    ContactPersonNumber ContactManager::getContactPersonNumber(contacts_filter_h filter) const
+    ContactPersonNumberRef ContactManager::getContactPersonNumber(contacts_filter_h filter) const
     {
         contacts_query_h query = nullptr;
         contacts_list_h list = nullptr;
         }
 
         contacts_list_destroy(list, false);
-        return ContactPersonNumber(cResValue);
+        return cResValue ? std::make_shared<ContactPersonNumber>(true, cResValue) : nullptr;
     }
 }
 
index 985afda..1efaee6 100644 (file)
 
 using namespace Msg;
 
-ContactRecord::ContactRecord(contacts_record_h record)
+ContactRecord::ContactRecord(bool release, contacts_record_h record)
     : m_Record(record)
+    , m_Release(release)
 {
 }
 
 ContactRecord::~ContactRecord()
 {
-
+    if(m_Record && m_Release)
+    {
+        contacts_record_destroy(m_Record, true);
+        m_Record = nullptr;
+    }
 }
-
index 6739043..d814e75 100644 (file)
@@ -20,8 +20,7 @@
 
 #include "ContactListViewItem.h"
 #include "ContactPersonPhoneLog.h"
-#include "ContactPersonNumber.h"
-#include "ContactPersonEmail.h"
+#include "ContactPersonAddress.h"
 
 namespace Msg
 {
@@ -30,8 +29,7 @@ namespace Msg
     {
         public:
             ContactListItem(const ContactPersonPhoneLog &rec, const std::string &searchWord);
-            ContactListItem(const ContactPersonNumber &rec, const std::string &searchWord);
-            ContactListItem(const ContactPersonEmail &rec, const std::string &searchWord);
+            ContactListItem(const ContactPersonAddress &rec, const std::string &searchWord);
             virtual ~ContactListItem();
 
             const std::string &getRecipient() const;
index d75658c..94fd4c4 100644 (file)
@@ -36,23 +36,13 @@ ContactListItem::ContactListItem(const ContactPersonPhoneLog &rec, const std::st
     m_MainText = TextDecorator::highlightKeyword(rec.getAddress(), searchWord);
 }
 
-ContactListItem::ContactListItem(const ContactPersonNumber &rec, const std::string &searchWord)
+ContactListItem::ContactListItem(const ContactPersonAddress &rec, const std::string &searchWord)
 {
     setStyle(ContactListViewItem::nameOrEmailStyle);
 
     m_MainText = TextDecorator::highlightKeyword(rec.getDispName(), searchWord);
-    m_SubText = TextDecorator::highlightKeyword(rec.getNumber(), searchWord);
-    m_Recipient = rec.getNumber();
-    m_ImagePath = rec.getThumbnailPath();
-}
-
-ContactListItem::ContactListItem(const ContactPersonEmail &rec, const std::string &searchWord)
-{
-    setStyle(ContactListViewItem::nameOrEmailStyle);
-
-    m_MainText = TextDecorator::highlightKeyword(rec.getDispName(), searchWord);
-    m_SubText = TextDecorator::highlightKeyword(rec.getEmail(), searchWord);
-    m_Recipient = rec.getEmail();
+    m_SubText = TextDecorator::highlightKeyword(rec.getAddress(), searchWord);
+    m_Recipient = rec.getAddress();
     m_ImagePath = rec.getThumbnailPath();
 }
 
index 3741e93..cbcf026 100644 (file)
@@ -25,14 +25,9 @@ using namespace Msg;
 
 namespace
 {
-    inline bool isValid(const ContactPersonNumber &rec)
+    inline bool isValid(const ContactPersonAddress &rec)
     {
-        return !rec.getNumber().empty();
-    }
-
-    inline bool isValid(const ContactPersonEmail &rec)
-    {
-        return !rec.getEmail().empty();
+        return !rec.getAddress().empty();
     }
 
     inline bool isValid(const ContactPersonPhoneLog &rec)
@@ -93,11 +88,11 @@ template<typename ContactRecord>
 void ConvContactList::search()
 {
     auto list = m_ContactManager.search<ContactRecord>(m_SearchWord);
-    if(list.isValid())
+    if(list)
     {
         do
         {
-            auto rec = list.get();
+            auto &rec = list->get();
             if(isValid(rec))
             {
                 ContactListItem *item = new ContactListItem(rec, m_SearchWord);
@@ -107,8 +102,7 @@ void ConvContactList::search()
             {
                 MSG_LOG("Skip invalid contact");
             }
-        } while(list.next());
-         list.release();
+        } while(list->next());
      }
 }
 
index 87d9791..5a453f7 100644 (file)
@@ -133,9 +133,9 @@ void Conversation::recipientClickHandler(const std::string &address)
     MSG_LOG("");
     // TODO: impl for email
     m_SelectedAddress = address;
-    ContactPersonNumber contactPersonNumber = getApp().getContactManager().getContactPersonNumber(address);
-    if(contactPersonNumber.isValid())
-        ContactViewer::launch(contactPersonNumber.getPersonId());
+    ContactPersonNumberRef contactPersonNumber = getApp().getContactManager().getContactPersonNumber(address);
+    if(contactPersonNumber)
+        ContactViewer::launch(contactPersonNumber->getPersonId());
     else
         showRecipPopup(address);
 }
@@ -587,12 +587,9 @@ void Conversation::updateNavibar()
             {
                 std::string conversationName;
                 std::string firstNumber = addressList->at(0).getAddress();
-                ContactPersonNumber contactPersonNumber = getApp().getContactManager().getContactPersonNumber(firstNumber);
-                if(contactPersonNumber.isValid())
-                {
-                    conversationName = contactPersonNumber.getDispName();
-                    contactPersonNumber.release();
-                }
+                ContactPersonNumberRef contactPersonNumber = getApp().getContactManager().getContactPersonNumber(firstNumber);
+                if(contactPersonNumber)
+                    conversationName = contactPersonNumber->getDispName();
 
                 if(conversationName.empty())
                     conversationName = firstNumber;
index e95eb77..6e4b137 100644 (file)
@@ -112,13 +112,10 @@ void RecipientsPanel::update(const ThreadId &threadId)
 
 RecipientsPanel::AppendItemStatus RecipientsPanel::appendItem(const std::string &address, MsgAddress::AddressType addressType)
 {
-    ContactPersonNumber num = m_App.getContactManager().getContactPersonNumber(address);
-
     std::string dispName;
-    if(num.isValid())
-        dispName = num.getDispName();
-
-    num.release();
+    ContactPersonNumberRef num = m_App.getContactManager().getContactPersonNumber(address);
+    if(num)
+        dispName = num->getDispName();
     if(dispName.empty())
         dispName = address;
 
@@ -252,12 +249,9 @@ void RecipientsPanel::onContactsPicked(const std::list<int> &numberIdList)
     bool duplicateFound = false;
     for(auto phoneNumId : numberIdList)
     {
-        ContactPersonNumber num = m_App.getContactManager().getContactPersonNumber(phoneNumId);
-        if(num.isValid())
-        {
-            duplicateFound |= appendItem(num.getNumber(), num.getDispName(), MsgAddress::Phone) == DuplicatedStatus;
-            num.release();
-        }
+        ContactPersonNumberRef num = m_App.getContactManager().getContactPersonNumber(phoneNumId);
+        if(num)
+            duplicateFound |= appendItem(num->getAddress(), num->getDispName(), MsgAddress::Phone) == DuplicatedStatus;
     }
 
     if(duplicateFound)
index 79ceb18..3908c2a 100644 (file)
@@ -57,14 +57,14 @@ void BaseThreadListItem::updateThumbnail(const MsgAddressList &addressList)
 
 void BaseThreadListItem::updateThumbnail(const MsgAddress &addr)
 {
-    ContactPersonNumber contactNumber = m_App.getContactManager().getContactPersonNumber(addr.getAddress());
-    m_ThumbPath = contactNumber.getThumbnailPath();
+    ContactPersonNumberRef contactNumber = m_App.getContactManager().getContactPersonNumber(addr.getAddress());
+
+    if(contactNumber)
+        m_ThumbPath = contactNumber->getThumbnailPath();
     if(m_ThumbPath.empty())
         m_ThumbPath = PathUtils::getResourcePath(THUMB_CONTACT_IMG_PATH);
     else
         m_ThumbType = ThumbnailMaker::UserType;
-
-    contactNumber.release();
 }
 
 void BaseThreadListItem::updateTime(time_t time)