Skip to content
Snippets Groups Projects
Commit 69c2eaaf authored by Emmanuel Lepage Vallee's avatar Emmanuel Lepage Vallee
Browse files

account: Gather usage statistics

This will be used to extend autocompletion

Refs #71526
parent 8059f6fd
Branches
Tags
No related merge requests found
...@@ -73,7 +73,8 @@ m_CurrentState(Account::EditState::READY), ...@@ -73,7 +73,8 @@ m_CurrentState(Account::EditState::READY),
m_pAccountNumber(nullptr),m_pKeyExchangeModel(nullptr),m_pSecurityEvaluationModel(nullptr),m_pTlsMethodModel(nullptr), m_pAccountNumber(nullptr),m_pKeyExchangeModel(nullptr),m_pSecurityEvaluationModel(nullptr),m_pTlsMethodModel(nullptr),
m_pCaCert(nullptr),m_pTlsCert(nullptr),m_pPrivateKey(nullptr),m_isLoaded(true),m_pCipherModel(nullptr), m_pCaCert(nullptr),m_pTlsCert(nullptr),m_pPrivateKey(nullptr),m_isLoaded(true),m_pCipherModel(nullptr),
m_pStatusModel(nullptr),m_LastTransportCode(0),m_RegistrationState(Account::RegistrationState::UNREGISTERED), m_pStatusModel(nullptr),m_LastTransportCode(0),m_RegistrationState(Account::RegistrationState::UNREGISTERED),
m_UseDefaultPort(false),m_pProtocolModel(nullptr),m_pBootstrapModel(nullptr),m_RemoteEnabledState(false) m_UseDefaultPort(false),m_pProtocolModel(nullptr),m_pBootstrapModel(nullptr),m_RemoteEnabledState(false),
m_HaveCalled(false),m_TotalCount(0),m_LastWeekCount(0),m_LastTrimCount(0),m_LastUsed(0)
{ {
Q_Q(Account); Q_Q(Account);
} }
...@@ -431,6 +432,39 @@ BootstrapModel* Account::bootstrapModel() const ...@@ -431,6 +432,39 @@ BootstrapModel* Account::bootstrapModel() const
return d_ptr->m_pBootstrapModel; return d_ptr->m_pBootstrapModel;
} }
bool Account::haveCalled() const
{
return d_ptr->m_HaveCalled;
}
uint Account::totalCount() const
{
return d_ptr->m_TotalCount;
}
uint Account::lastWeekCount() const
{
return d_ptr->m_LastWeekCount;
}
uint Account::lastTrimCount() const
{
return d_ptr->m_LastTrimCount;
}
time_t Account::lastUsed() const
{
return d_ptr->m_LastUsed;
}
/*******************************************************************************
* *
* Setters *
* *
******************************************************************************/
void Account::setAlias(const QString& detail) void Account::setAlias(const QString& detail)
{ {
const bool accChanged = detail != alias(); const bool accChanged = detail != alias();
...@@ -927,6 +961,16 @@ QVariant Account::roleData(int role) const ...@@ -927,6 +961,16 @@ QVariant Account::roleData(int role) const
return PresenceStatusModel::instance()->currentMessage(); return PresenceStatusModel::instance()->currentMessage();
case CAST(Account::Role::RegistrationState): case CAST(Account::Role::RegistrationState):
return QVariant::fromValue(registrationState()); return QVariant::fromValue(registrationState());
case CAST(Account::Role::HaveCalled ):
return haveCalled ();
case CAST(Account::Role::TotalCount ):
return totalCount ();
case CAST(Account::Role::LastWeekCount):
return lastWeekCount ();
case CAST(Account::Role::LastTrimCount):
return lastTrimCount ();
case CAST(Account::Role::LastUsed ):
return (int)lastUsed ();
default: default:
return QVariant(); return QVariant();
} }
......
...@@ -81,6 +81,7 @@ class LIB_EXPORT Account : public QObject { ...@@ -81,6 +81,7 @@ class LIB_EXPORT Account : public QObject {
friend class TlsMethodModelPrivate; friend class TlsMethodModelPrivate;
friend class TlsMethodModel; friend class TlsMethodModel;
friend class BootstrapModelPrivate; friend class BootstrapModelPrivate;
friend class ContactMethod;
//Properties //Properties
Q_PROPERTY(QByteArray id READ id ) Q_PROPERTY(QByteArray id READ id )
...@@ -140,6 +141,11 @@ class LIB_EXPORT Account : public QObject { ...@@ -140,6 +141,11 @@ class LIB_EXPORT Account : public QObject {
Q_PROPERTY(QString userAgent READ userAgent WRITE setUserAgent ) Q_PROPERTY(QString userAgent READ userAgent WRITE setUserAgent )
Q_PROPERTY(bool useDefaultPort READ useDefaultPort WRITE setUseDefaultPort ) Q_PROPERTY(bool useDefaultPort READ useDefaultPort WRITE setUseDefaultPort )
Q_PROPERTY(RegistrationState registrationState READ registrationState ) Q_PROPERTY(RegistrationState registrationState READ registrationState )
Q_PROPERTY(bool haveCalled READ haveCalled )
Q_PROPERTY(uint totalCount READ totalCount )
Q_PROPERTY(uint lastWeekCount READ lastWeekCount )
Q_PROPERTY(uint lastTrimCount READ lastTrimCount )
Q_PROPERTY(time_t lastUsed READ lastUsed )
public: public:
///@enum EditState: Manage how and when an account can be reloaded or change state ///@enum EditState: Manage how and when an account can be reloaded or change state
...@@ -219,6 +225,11 @@ class LIB_EXPORT Account : public QObject { ...@@ -219,6 +225,11 @@ class LIB_EXPORT Account : public QObject {
PresenceMessage = 143, PresenceMessage = 143,
RegistrationState = 144, RegistrationState = 144,
UseDefaultPort = 145, UseDefaultPort = 145,
HaveCalled = 146,
TotalCount = 147,
LastWeekCount = 148,
LastTrimCount = 149,
LastUsed = 150,
}; };
enum class Protocol { enum class Protocol {
...@@ -316,6 +327,12 @@ class LIB_EXPORT Account : public QObject { ...@@ -316,6 +327,12 @@ class LIB_EXPORT Account : public QObject {
Protocol protocol () const; Protocol protocol () const;
KeyExchangeModel::Type keyExchange () const; KeyExchangeModel::Type keyExchange () const;
bool haveCalled () const;
uint totalCount () const;
uint lastWeekCount () const;
uint lastTrimCount () const;
time_t lastUsed () const;
Q_INVOKABLE QVariant roleData ( int role ) const; Q_INVOKABLE QVariant roleData ( int role ) const;
Q_INVOKABLE bool supportScheme( URI::SchemeType type ) ; Q_INVOKABLE bool supportScheme( URI::SchemeType type ) ;
...@@ -412,6 +429,7 @@ Q_DECLARE_METATYPE(Account*) ...@@ -412,6 +429,7 @@ Q_DECLARE_METATYPE(Account*)
Q_DECLARE_METATYPE(Account::RegistrationState) Q_DECLARE_METATYPE(Account::RegistrationState)
Q_DECLARE_METATYPE(Account::EditAction) Q_DECLARE_METATYPE(Account::EditAction)
Q_DECLARE_METATYPE(Account::Protocol) Q_DECLARE_METATYPE(Account::Protocol)
Q_DECLARE_METATYPE(DtmfType)
Account* operator<<(Account* a, Account::EditAction action); Account* operator<<(Account* a, Account::EditAction action);
......
...@@ -142,6 +142,11 @@ QHash<int,QByteArray> AccountModel::roleNames() const ...@@ -142,6 +142,11 @@ QHash<int,QByteArray> AccountModel::roleNames() const
roles.insert(CAST(Account::Role::TypeName ) ,QByteArray("typeName" )); roles.insert(CAST(Account::Role::TypeName ) ,QByteArray("typeName" ));
roles.insert(CAST(Account::Role::PresenceStatus ) ,QByteArray("presenceStatus" )); roles.insert(CAST(Account::Role::PresenceStatus ) ,QByteArray("presenceStatus" ));
roles.insert(CAST(Account::Role::PresenceMessage ) ,QByteArray("presenceMessage" )); roles.insert(CAST(Account::Role::PresenceMessage ) ,QByteArray("presenceMessage" ));
roles.insert(CAST(Account::Role::HaveCalled ) ,QByteArray("haveCalled" ));
roles.insert(CAST(Account::Role::TotalCount ) ,QByteArray("totalCount" ));
roles.insert(CAST(Account::Role::LastWeekCount ) ,QByteArray("lastWeekCount" ));
roles.insert(CAST(Account::Role::LastTrimCount ) ,QByteArray("lastTrimCount" ));
roles.insert(CAST(Account::Role::LastUsed ) ,QByteArray("lastUsed" ));
} }
return roles; return roles;
} }
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "phonedirectorymodel.h" #include "phonedirectorymodel.h"
#include "person.h" #include "person.h"
#include "account.h" #include "account.h"
#include "private/account_p.h"
#include "call.h" #include "call.h"
#include "dbus/presencemanager.h" #include "dbus/presencemanager.h"
#include "numbercategorymodel.h" #include "numbercategorymodel.h"
...@@ -212,6 +213,18 @@ time_t ContactMethod::lastUsed() const ...@@ -212,6 +213,18 @@ time_t ContactMethod::lastUsed() const
///Set this number default account ///Set this number default account
void ContactMethod::setAccount(Account* account) void ContactMethod::setAccount(Account* account)
{ {
//Add the statistics
if (account && !d_ptr->m_pAccount) {
account->d_ptr->m_HaveCalled += d_ptr->m_HaveCalled ;
account->d_ptr->m_TotalCount += callCount() ;
account->d_ptr->m_LastWeekCount += d_ptr->m_LastWeekCount ;
account->d_ptr->m_LastTrimCount += d_ptr->m_LastTrimCount ;
if (d_ptr->m_LastUsed > account->d_ptr->m_LastUsed)
account->d_ptr->m_LastUsed = d_ptr->m_LastUsed;
}
d_ptr->m_pAccount = account; d_ptr->m_pAccount = account;
if (d_ptr->m_pAccount) if (d_ptr->m_pAccount)
connect (d_ptr->m_pAccount,SIGNAL(destroyed(QObject*)),this,SLOT(accountDestroyed(QObject*))); connect (d_ptr->m_pAccount,SIGNAL(destroyed(QObject*)),this,SLOT(accountDestroyed(QObject*)));
...@@ -456,23 +469,44 @@ QVariant ContactMethod::roleData(int role) const ...@@ -456,23 +469,44 @@ QVariant ContactMethod::roleData(int role) const
void ContactMethod::addCall(Call* call) void ContactMethod::addCall(Call* call)
{ {
if (!call) return; if (!call) return;
//Update the contact method statistics
d_ptr->m_Type = ContactMethod::Type::USED; d_ptr->m_Type = ContactMethod::Type::USED;
d_ptr->m_lCalls << call; d_ptr->m_lCalls << call;
d_ptr->m_TotalSeconds += call->stopTimeStamp() - call->startTimeStamp(); d_ptr->m_TotalSeconds += call->stopTimeStamp() - call->startTimeStamp();
time_t now; time_t now;
::time ( &now ); ::time ( &now );
if (now - 3600*24*7 < call->stopTimeStamp())
if (now - 3600*24*7 < call->stopTimeStamp()) {
d_ptr->m_LastWeekCount++; d_ptr->m_LastWeekCount++;
if (now - 3600*24*7*15 < call->stopTimeStamp()) if (d_ptr->m_pAccount)
d_ptr->m_pAccount->d_ptr->m_LastWeekCount++;
}
if (now - 3600*24*7*15 < call->stopTimeStamp()) {
d_ptr->m_LastTrimCount++; d_ptr->m_LastTrimCount++;
if (d_ptr->m_pAccount)
d_ptr->m_pAccount->d_ptr->m_LastTrimCount++;
}
if (call->direction() == Call::Direction::OUTGOING) if (call->direction() == Call::Direction::OUTGOING) {
d_ptr->m_HaveCalled = true; d_ptr->m_HaveCalled = true;
if (d_ptr->m_pAccount)
d_ptr->m_pAccount->d_ptr->m_HaveCalled = true;
}
d_ptr->callAdded(call); d_ptr->callAdded(call);
if (call->startTimeStamp() > d_ptr->m_LastUsed)
if (call->startTimeStamp() > d_ptr->m_LastUsed) {
d_ptr->m_LastUsed = call->startTimeStamp(); d_ptr->m_LastUsed = call->startTimeStamp();
if (d_ptr->m_pAccount && d_ptr->m_pAccount->d_ptr->m_LastUsed < d_ptr->m_LastUsed)
d_ptr->m_pAccount->d_ptr->m_LastUsed = d_ptr->m_LastUsed;
}
d_ptr->changed(); d_ptr->changed();
if (d_ptr->m_pAccount)
d_ptr->m_pAccount->d_ptr->m_TotalCount++;
} }
///Generate an unique representation of this number ///Generate an unique representation of this number
...@@ -481,8 +515,6 @@ QString ContactMethod::toHash() const ...@@ -481,8 +515,6 @@ QString ContactMethod::toHash() const
return QString("%1///%2///%3").arg(uri()).arg(account()?account()->id():QString()).arg(contact()?contact()->uid():QString()); return QString("%1///%2///%3").arg(uri()).arg(account()?account()->id():QString()).arg(contact()?contact()->uid():QString());
} }
///Increment name counter and update indexes ///Increment name counter and update indexes
void ContactMethod::incrementAlternativeName(const QString& name) void ContactMethod::incrementAlternativeName(const QString& name)
{ {
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
class NumberCompletionModelPrivate : public QObject class NumberCompletionModelPrivate : public QObject
{ {
Q_OBJECT
public: public:
enum class Columns { enum class Columns {
...@@ -71,6 +72,11 @@ public: ...@@ -71,6 +72,11 @@ public:
bool m_Enabled ; bool m_Enabled ;
bool m_UseUnregisteredAccount; bool m_UseUnregisteredAccount;
QHash<Account*,TemporaryContactMethod*> m_hSipIaxTemporaryNumbers;
public Q_SLOTS:
void setPrefix(const QString& str);
private: private:
NumberCompletionModel* q_ptr; NumberCompletionModel* q_ptr;
}; };
...@@ -88,19 +94,21 @@ NumberCompletionModel::NumberCompletionModel() : QAbstractTableModel(QCoreApplic ...@@ -88,19 +94,21 @@ NumberCompletionModel::NumberCompletionModel() : QAbstractTableModel(QCoreApplic
NumberCompletionModel::~NumberCompletionModel() NumberCompletionModel::~NumberCompletionModel()
{ {
delete d_ptr;
} }
QHash<int,QByteArray> NumberCompletionModel::roleNames() const QHash<int,QByteArray> NumberCompletionModel::roleNames() const
{ {
static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames(); static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
static bool initRoles = false; static bool initRoles = false;
if (!initRoles) { if (!initRoles) {
initRoles = true; initRoles = true;
roles[Role::ALTERNATE_ACCOUNT]= "AlternateAccount"; roles[Role::ALTERNATE_ACCOUNT]= "AlternateAccount";
roles[Role::FORCE_ACCOUNT ]= "ForceAccount" ; roles[Role::FORCE_ACCOUNT ]= "ForceAccount" ;
roles[Role::ACCOUNT ]= "Account" ; roles[Role::ACCOUNT ]= "Account" ;
} }
return roles; return roles;
} }
...@@ -164,6 +172,7 @@ QVariant NumberCompletionModel::data(const QModelIndex& index, int role ) const ...@@ -164,6 +172,7 @@ QVariant NumberCompletionModel::data(const QModelIndex& index, int role ) const
}; };
break; break;
}; };
return QVariant(); return QVariant();
} }
...@@ -171,6 +180,7 @@ int NumberCompletionModel::rowCount(const QModelIndex& parent ) const ...@@ -171,6 +180,7 @@ int NumberCompletionModel::rowCount(const QModelIndex& parent ) const
{ {
if (parent.isValid()) if (parent.isValid())
return 0; return 0;
return d_ptr->m_hNumbers.size(); return d_ptr->m_hNumbers.size();
} }
...@@ -178,21 +188,26 @@ int NumberCompletionModel::columnCount(const QModelIndex& parent ) const ...@@ -178,21 +188,26 @@ int NumberCompletionModel::columnCount(const QModelIndex& parent ) const
{ {
if (parent.isValid()) if (parent.isValid())
return 0; return 0;
return 4; return 4;
} }
Qt::ItemFlags NumberCompletionModel::flags(const QModelIndex& index ) const Qt::ItemFlags NumberCompletionModel::flags(const QModelIndex& index ) const
{ {
if (!index.isValid()) return Qt::NoItemFlags; if (!index.isValid())
return Qt::NoItemFlags;
return Qt::ItemIsEnabled|Qt::ItemIsSelectable; return Qt::ItemIsEnabled|Qt::ItemIsSelectable;
} }
QVariant NumberCompletionModel::headerData (int section, Qt::Orientation orientation, int role) const QVariant NumberCompletionModel::headerData (int section, Qt::Orientation orientation, int role) const
{ {
Q_UNUSED(section)
Q_UNUSED(orientation) Q_UNUSED(orientation)
static const QString headers[] = {tr("URI"), tr("Name"), tr("Account"), tr("Weight")}; static const QString headers[] = {tr("URI"), tr("Name"), tr("Account"), tr("Weight")};
if (role == Qt::DisplayRole) return headers[section];
if (role == Qt::DisplayRole)
return headers[section];
return QVariant(); return QVariant();
} }
...@@ -208,27 +223,32 @@ bool NumberCompletionModel::setData(const QModelIndex& index, const QVariant &va ...@@ -208,27 +223,32 @@ bool NumberCompletionModel::setData(const QModelIndex& index, const QVariant &va
void NumberCompletionModel::setCall(Call* call) void NumberCompletionModel::setCall(Call* call)
{ {
if (d_ptr->m_pCall) if (d_ptr->m_pCall)
disconnect(d_ptr->m_pCall,SIGNAL(dialNumberChanged(QString)),this,SLOT(setPrefix(QString))); disconnect(d_ptr->m_pCall,SIGNAL(dialNumberChanged(QString)),d_ptr,SLOT(setPrefix(QString)));
d_ptr->m_pCall = call; d_ptr->m_pCall = call;
if (d_ptr->m_pCall) if (d_ptr->m_pCall)
connect(d_ptr->m_pCall,SIGNAL(dialNumberChanged(QString)),this,SLOT(setPrefix(QString))); connect(d_ptr->m_pCall,SIGNAL(dialNumberChanged(QString)),d_ptr,SLOT(setPrefix(QString)));
setPrefix(call?call->dialNumber():QString());
d_ptr->setPrefix(call?call->dialNumber():QString());
} }
void NumberCompletionModel::setPrefix(const QString& str) void NumberCompletionModelPrivate::setPrefix(const QString& str)
{ {
d_ptr->m_Prefix = str; m_Prefix = str;
const bool e = ((d_ptr->m_pCall && d_ptr->m_pCall->lifeCycleState() == Call::LifeCycleState::CREATION) || (!d_ptr->m_pCall)) && (!str.isEmpty()); const bool e = ((m_pCall && m_pCall->lifeCycleState() == Call::LifeCycleState::CREATION) || (!m_pCall)) && (!str.isEmpty());
if (d_ptr->m_Enabled != e) {
d_ptr->m_Enabled = e; if (m_Enabled != e) {
emit enabled(e); m_Enabled = e;
} emit q_ptr->enabled(e);
if (d_ptr->m_Enabled) }
d_ptr->updateModel();
if (m_Enabled)
updateModel();
else { else {
beginRemoveRows(QModelIndex(), 0, d_ptr->m_hNumbers.size()-1); q_ptr->beginRemoveRows(QModelIndex(), 0, m_hNumbers.size()-1);
d_ptr->m_hNumbers.clear(); m_hNumbers.clear();
endRemoveRows(); q_ptr->endRemoveRows();
} }
} }
...@@ -242,6 +262,7 @@ ContactMethod* NumberCompletionModel::number(const QModelIndex& idx) const ...@@ -242,6 +262,7 @@ ContactMethod* NumberCompletionModel::number(const QModelIndex& idx) const
if (idx.isValid()) { if (idx.isValid()) {
return (d_ptr->m_hNumbers.end()-1-idx.row()).value(); return (d_ptr->m_hNumbers.end()-1-idx.row()).value();
} }
return nullptr; return nullptr;
} }
...@@ -251,6 +272,7 @@ void NumberCompletionModelPrivate::updateModel() ...@@ -251,6 +272,7 @@ void NumberCompletionModelPrivate::updateModel()
q_ptr->beginRemoveRows(QModelIndex(), 0, m_hNumbers.size()-1); q_ptr->beginRemoveRows(QModelIndex(), 0, m_hNumbers.size()-1);
m_hNumbers.clear(); m_hNumbers.clear();
q_ptr->endRemoveRows(); q_ptr->endRemoveRows();
if (!m_Prefix.isEmpty()) { if (!m_Prefix.isEmpty()) {
locateNameRange ( m_Prefix, numbers ); locateNameRange ( m_Prefix, numbers );
locateNumberRange( m_Prefix, numbers ); locateNumberRange( m_Prefix, numbers );
...@@ -270,6 +292,7 @@ void NumberCompletionModelPrivate::getRange(QMap<QString,NumberWrapper*> map, co ...@@ -270,6 +292,7 @@ void NumberCompletionModelPrivate::getRange(QMap<QString,NumberWrapper*> map, co
{ {
if (prefix.isEmpty() || map.isEmpty()) if (prefix.isEmpty() || map.isEmpty())
return; return;
QMap<QString,NumberWrapper*>::iterator iBeg = map.begin(); QMap<QString,NumberWrapper*>::iterator iBeg = map.begin();
QMap<QString,NumberWrapper*>::iterator iEnd = map.end ()-1; QMap<QString,NumberWrapper*>::iterator iEnd = map.end ()-1;
...@@ -278,24 +301,31 @@ void NumberCompletionModelPrivate::getRange(QMap<QString,NumberWrapper*> map, co ...@@ -278,24 +301,31 @@ void NumberCompletionModelPrivate::getRange(QMap<QString,NumberWrapper*> map, co
const int prefixLen = pref.size(); const int prefixLen = pref.size();
int size = map.size()/2; int size = map.size()/2;
bool startOk(false),endOk(false); bool startOk(false),endOk(false);
while (size > 1 && !(startOk&&endOk)) { while (size > 1 && !(startOk&&endOk)) {
QMap<QString,NumberWrapper*>::iterator mid; QMap<QString,NumberWrapper*>::iterator mid;
if (size > 7) if (size > 7)
mid = (iBeg+size); mid = (iBeg+size);
else { else {
//We have to be careful with "::ceil" it may cause an overflow in some rare case //We have to be careful with "::ceil" it may cause an overflow in some rare case
int toAdd = size-1; int toAdd = size-1;
mid = iBeg; mid = iBeg;
while (toAdd && mid != map.end()) { while (toAdd && mid != map.end()) {
++mid; ++mid;
--toAdd; --toAdd;
} }
} }
if (mid != map.end() && mid.key().left(prefixLen) == pref && iBeg.key().left(prefixLen) < pref) { if (mid != map.end() && mid.key().left(prefixLen) == pref && iBeg.key().left(prefixLen) < pref) {
//Too far, need to go back //Too far, need to go back
iBeg = mid; iBeg = mid;
while ((iBeg-1).key().left(prefixLen) == pref && iBeg != map.begin()) while ((iBeg-1).key().left(prefixLen) == pref && iBeg != map.begin())
iBeg--; iBeg--;
startOk = true; startOk = true;
} }
else if ((!startOk) && mid != map.end() && mid.key().left(prefixLen) < pref) { else if ((!startOk) && mid != map.end() && mid.key().left(prefixLen) < pref) {
...@@ -321,12 +351,14 @@ void NumberCompletionModelPrivate::getRange(QMap<QString,NumberWrapper*> map, co ...@@ -321,12 +351,14 @@ void NumberCompletionModelPrivate::getRange(QMap<QString,NumberWrapper*> map, co
iEnd = map.end(); iEnd = map.end();
iBeg = map.end(); iBeg = map.end();
} }
while(iBeg != iEnd) { while(iBeg != iEnd) {
foreach(ContactMethod* n,iBeg.value()->numbers) { foreach(ContactMethod* n,iBeg.value()->numbers) {
if (n) { if (n) {
set << n; set << n;
} }
} }
++iBeg; ++iBeg;
} }
} }
...@@ -350,6 +382,7 @@ uint NumberCompletionModelPrivate::getWeight(ContactMethod* number) ...@@ -350,6 +382,7 @@ uint NumberCompletionModelPrivate::getWeight(ContactMethod* number)
weight += (number->callCount()+1)*35 ; weight += (number->callCount()+1)*35 ;
weight *= (number->uri().indexOf(m_Prefix)!= -1?3:1); weight *= (number->uri().indexOf(m_Prefix)!= -1?3:1);
weight *= (number->isPresent()?2:1); weight *= (number->isPresent()?2:1);
return weight; return weight;
} }
......
...@@ -35,7 +35,7 @@ class LIB_EXPORT NumberCompletionModel : public QAbstractTableModel { ...@@ -35,7 +35,7 @@ class LIB_EXPORT NumberCompletionModel : public QAbstractTableModel {
public: public:
//Properties //Properties
Q_PROPERTY(QString prefix READ prefix WRITE setPrefix) Q_PROPERTY(QString prefix READ prefix)
enum Role { enum Role {
ALTERNATE_ACCOUNT= 100, ALTERNATE_ACCOUNT= 100,
...@@ -67,13 +67,9 @@ public: ...@@ -67,13 +67,9 @@ public:
QString prefix() const; QString prefix() const;
private: private:
QScopedPointer<NumberCompletionModelPrivate> d_ptr; NumberCompletionModelPrivate* d_ptr;
Q_DECLARE_PRIVATE(NumberCompletionModel) Q_DECLARE_PRIVATE(NumberCompletionModel)
public Q_SLOTS:
void setPrefix(const QString& str);
Q_SIGNALS: Q_SIGNALS:
void enabled(bool); void enabled(bool);
......
...@@ -54,6 +54,7 @@ public: ...@@ -54,6 +54,7 @@ public:
friend class TlsMethodModelPrivate; friend class TlsMethodModelPrivate;
friend class TlsMethodModel; friend class TlsMethodModel;
friend class BootstrapModelPrivate; friend class BootstrapModelPrivate;
friend class ContactMethod;
//Constructor //Constructor
explicit AccountPrivate(Account* acc); explicit AccountPrivate(Account* acc);
...@@ -71,6 +72,13 @@ public: ...@@ -71,6 +72,13 @@ public:
unsigned short m_UseDefaultPort ; unsigned short m_UseDefaultPort ;
bool m_RemoteEnabledState ; bool m_RemoteEnabledState ;
//Statistic
bool m_HaveCalled ;
uint m_TotalCount ;
uint m_LastWeekCount ;
uint m_LastTrimCount ;
time_t m_LastUsed ;
//Setters //Setters
void setAccountProperties(const QHash<QString,QString>& m ); void setAccountProperties(const QHash<QString,QString>& m );
bool setAccountProperty (const QString& param, const QString& val ); bool setAccountProperty (const QString& param, const QString& val );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment