Skip to content
Snippets Groups Projects
Select Git revision
  • f26e5e937520a93069a26edabd95386e38e0023f
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/releaseTest
  • release/releaseWindowsTest
  • release/windowsReleaseTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 1.0.0
  • 0.3.0
  • 0.2.1
  • 0.2.0
  • 0.1.0
26 results

contact.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    contact.cpp 6.37 KiB
    /****************************************************************************
     *   Copyright (C) 2009-2013 by Savoir-Faire Linux                          *
     *   Author : Jérémy Quentin <jeremy.quentin@savoirfairelinux.com>          *
     *            Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com> *
     *                                                                          *
     *   This library is free software; you can redistribute it and/or          *
     *   modify it under the terms of the GNU Lesser General Public             *
     *   License as published by the Free Software Foundation; either           *
     *   version 2.1 of the License, or (at your option) any later version.     *
     *                                                                          *
     *   This library is distributed in the hope that it will be useful,        *
     *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *
     *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU      *
     *   Lesser General Public License for more details.                        *
     *                                                                          *
     *   You should have received a copy of the GNU General Public License      *
     *   along with this program.  If not, see <http://www.gnu.org/licenses/>.  *
     ***************************************************************************/
    
    //Parent
    #include "contact.h"
    
    //Qt
    #include <QtGui/QPixmap>
    
    //SFLPhone library
    #include "sflphone_const.h"
    #include "phonenumber.h"
    
    
    
    Contact::PhoneNumbers::PhoneNumbers(Contact* parent) : QVector<PhoneNumber*>(),CategorizedCompositeNode(CategorizedCompositeNode::Type::NUMBER),
        m_pParent2(parent)
    {
    }
    
    Contact::PhoneNumbers::PhoneNumbers(Contact* parent, const QVector<PhoneNumber*>& list)
    : QVector<PhoneNumber*>(list),CategorizedCompositeNode(CategorizedCompositeNode::Type::NUMBER),m_pParent2(parent)
    {
    }
    
    Contact* Contact::PhoneNumbers::contact() const
    {
       return m_pParent2;
    }
    
    ///Constructor
    Contact::Contact(QObject* parent):QObject(parent),m_pPhoto(nullptr),
       m_Numbers(this),m_DisplayPhoto(nullptr),m_Active(true)
    {
    }
    
    ///Destructor
    Contact::~Contact()
    {
       delete m_pPhoto;
    }
    
    ///Get the phone number list
    const Contact::PhoneNumbers& Contact::phoneNumbers() const
    {
       return m_Numbers;
    }
    
    ///Get the nickname
    const QString& Contact::nickName() const
    {
       return m_NickName;
    }
    
    ///Get the firstname
    const QString& Contact::firstName() const
    {
       return m_FirstName;
    }
    
    ///Get the second/family name
    const QString& Contact::secondName() const
    {
       return m_SecondName;
    }
    
    ///Get the photo
    const QPixmap* Contact::photo() const
    {
       return m_pPhoto;
    }
    
    ///Get the formatted name
    const QString& Contact::formattedName() const
    {
       return m_FormattedName;
    }
    
    ///Get the organisation
    const QString& Contact::organization()  const
    {
       return m_Organization;
    }
    
    ///Get the preferred email
    const QString& Contact::preferredEmail()  const
    {
       return m_PreferredEmail;
    }
    
    ///Get the unique identifier (used for drag and drop) 
    const QString& Contact::uid() const
    {
       return m_Uid;
    }
    
    ///Get the group
    const QString& Contact::group() const
    {
       return m_Group;
    }
    
    const QString& Contact::department() const
    {
       return m_Department;
    }
    
    ///Set the phone number (type and number)
    void Contact::setPhoneNumbers(PhoneNumbers numbers)
    {
       const int oldCount(m_Numbers.size()),newCount(numbers.size());
       foreach(PhoneNumber* n, m_Numbers)
          disconnect(n,SIGNAL(presentChanged(bool)),this,SLOT(slotPresenceChanged()));
       m_Numbers = numbers;
       if (newCount < oldCount) //Rows need to be removed from models first
          emit phoneNumberCountAboutToChange(newCount,oldCount);
       foreach(PhoneNumber* n, m_Numbers)
          connect(n,SIGNAL(presentChanged(bool)),this,SLOT(slotPresenceChanged()));
       if (newCount > oldCount) //Need to be updated after the data to prevent invalid memory access
          emit phoneNumberCountChanged(newCount,oldCount);
       emit changed();
    }
    
    ///Set the nickname
    void Contact::setNickName(const QString& name)
    {
       m_NickName = name;
       emit changed();
    }
    
    ///Set the first name
    void Contact::setFirstName(const QString& name)
    {
       m_FirstName = name;
       setObjectName(formattedName());
       emit changed();
    }
    
    ///Set the family name
    void Contact::setFamilyName(const QString& name)
    {
       m_SecondName = name;
       setObjectName(formattedName());
       emit changed();
    }
    
    ///Set the Photo/Avatar
    void Contact::setPhoto(QPixmap* photo)
    {
       m_pPhoto = photo;
       emit changed();
    }
    
    ///Set the formatted name (display name)
    void Contact::setFormattedName(const QString& name)
    {
       m_FormattedName = name;
       emit changed();
    }
    
    ///Set the organisation / business
    void Contact::setOrganization(const QString& name)
    {
       m_Organization = name;
       emit changed();
    }
    
    ///Set the default email
    void Contact::setPreferredEmail(const QString& name)
    {
       m_PreferredEmail = name;
       emit changed();
    }
    
    ///Set UID
    void Contact::setUid(const QString& id)
    {
       m_Uid = id;
       emit changed();
    }
    
    ///Set Group
    void Contact::setGroup(const QString& name)
    {
       m_Group = name;
       emit changed();
    }
    
    ///Set department
    void Contact::setDepartment(const QString& name)
    {
       m_Department = name;
       emit changed();
    }
    
    ///If the contact have been deleted or not yet fully created
    void Contact::setActive( bool active)
    {
       m_Active = active;
       emit statusChanged(m_Active);
       emit changed();
    }
    
    ///Return if one of the PhoneNumber is present
    bool Contact::isPresent() const
    {
       foreach(const PhoneNumber* n,m_Numbers) {
          if (n->isPresent())
             return true;
       }
       return false;
    }
    
    ///Return if one of the PhoneNumber is tracked
    bool Contact::isTracked() const
    {
       foreach(const PhoneNumber* n,m_Numbers) {
          if (n->isTracked())
             return true;
       }
       return false;
    }
    
    ///Have this contact been deleted or doesn't exist yet
    bool Contact::isActive() const
    {
       return m_Active;
    }
    
    ///Return if one of the PhoneNumber support presence
    bool Contact::supportPresence() const
    {
       foreach(const PhoneNumber* n,m_Numbers) {
          if (n->supportPresence())
             return true;
       }
       return false;
    }
    
    
    QObject* Contact::PhoneNumbers::getSelf() const {
       return m_pParent2;
    }
    
    time_t Contact::PhoneNumbers::lastUsedTimeStamp() const
    {
       time_t t = 0;
       for (int i=0;i<size();i++) {
          if (at(i)->lastUsed() > t)
             t = at(i)->lastUsed();
       }
       return t;
    }
    
    ///Callback when one of the phone number presence change
    void Contact::slotPresenceChanged()
    {
       emit changed();
    }