Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linphone-desktop
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
linphone-desktop
Commits
4f16551b
Commit
4f16551b
authored
May 04, 2017
by
Ronan Abhamon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(src/components/contact/VcardModel): api refactoring and better usage (avatars broken)
parent
5537900b
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
124 additions
and
108 deletions
+124
-108
AuthenticationNotifier.cpp
.../src/components/authentication/AuthenticationNotifier.cpp
+1
-1
CallModel.cpp
linphone-desktop/src/components/call/CallModel.cpp
+1
-1
CallsListModel.cpp
linphone-desktop/src/components/calls/CallsListModel.cpp
+2
-2
ChatModel.cpp
linphone-desktop/src/components/chat/ChatModel.cpp
+2
-2
ContactModel.cpp
linphone-desktop/src/components/contact/ContactModel.cpp
+53
-45
ContactModel.hpp
linphone-desktop/src/components/contact/ContactModel.hpp
+5
-6
VcardModel.cpp
linphone-desktop/src/components/contact/VcardModel.cpp
+42
-36
VcardModel.hpp
linphone-desktop/src/components/contact/VcardModel.hpp
+9
-2
ContactsListModel.cpp
...one-desktop/src/components/contacts/ContactsListModel.cpp
+3
-3
AccountSettingsModel.cpp
...-desktop/src/components/settings/AccountSettingsModel.cpp
+1
-1
SipAddressesModel.cpp
...esktop/src/components/sip-addresses/SipAddressesModel.cpp
+3
-3
ContactEdit.js
linphone-desktop/ui/views/App/Main/ContactEdit.js
+2
-6
No files found.
linphone-desktop/src/components/authentication/AuthenticationNotifier.cpp
View file @
4f16551b
...
...
@@ -31,7 +31,7 @@ using namespace std;
AuthenticationNotifier
::
AuthenticationNotifier
(
QObject
*
parent
)
:
QObject
(
parent
)
{
QObject
::
connect
(
&
(
*
CoreManager
::
getInstance
()
->
getHandlers
()
),
&
CoreHandlers
::
authenticationRequested
,
CoreManager
::
getInstance
()
->
getHandlers
().
get
(
),
&
CoreHandlers
::
authenticationRequested
,
this
,
&
AuthenticationNotifier
::
handleAuthenticationRequested
);
}
...
...
linphone-desktop/src/components/call/CallModel.cpp
View file @
4f16551b
...
...
@@ -57,7 +57,7 @@ CallModel::CallModel (shared_ptr<linphone::Call> call) {
}
QObject
::
connect
(
&
(
*
CoreManager
::
getInstance
()
->
getHandlers
()
),
&
CoreHandlers
::
callStateChanged
,
CoreManager
::
getInstance
()
->
getHandlers
().
get
(
),
&
CoreHandlers
::
callStateChanged
,
this
,
[
this
](
const
shared_ptr
<
linphone
::
Call
>
&
call
,
linphone
::
CallState
state
)
{
if
(
call
!=
mCall
)
return
;
...
...
linphone-desktop/src/components/calls/CallsListModel.cpp
View file @
4f16551b
...
...
@@ -52,7 +52,7 @@ inline QList<CallModel *>::iterator findCallModel (
CallsListModel
::
CallsListModel
(
QObject
*
parent
)
:
QAbstractListModel
(
parent
)
{
mCoreHandlers
=
CoreManager
::
getInstance
()
->
getHandlers
();
QObject
::
connect
(
&
(
*
mCoreHandlers
),
&
CoreHandlers
::
callStateChanged
,
mCoreHandlers
.
get
(
),
&
CoreHandlers
::
callStateChanged
,
this
,
[
this
](
const
shared_ptr
<
linphone
::
Call
>
&
call
,
linphone
::
CallState
state
)
{
switch
(
state
)
{
case
linphone
:
:
CallStateIncomingReceived
:
...
...
@@ -195,7 +195,7 @@ void CallsListModel::removeCall (const shared_ptr<linphone::Call> &call) {
}
catch
(
const
out_of_range
&
)
{
// Can be a bug. Or the call model not exists because the linphone call state
// `CallStateIncomingReceived`/`CallStateOutgoingInit` was not notified.
qWarning
()
<<
QStringLiteral
(
"Unable to found linphone call:"
)
<<
&
(
*
call
);
qWarning
()
<<
QStringLiteral
(
"Unable to found linphone call:"
)
<<
call
.
get
(
);
return
;
}
...
...
linphone-desktop/src/components/chat/ChatModel.cpp
View file @
4f16551b
...
...
@@ -179,8 +179,8 @@ ChatModel::ChatModel (QObject *parent) : QAbstractListModel(parent) {
core
->
getSipAddressesModel
()
->
connectToChatModel
(
this
);
QObject
::
connect
(
&
(
*
mCoreHandlers
),
&
CoreHandlers
::
messageReceived
,
this
,
&
ChatModel
::
handleMessageReceived
);
QObject
::
connect
(
&
(
*
mCoreHandlers
),
&
CoreHandlers
::
callStateChanged
,
this
,
&
ChatModel
::
handleCallStateChanged
);
QObject
::
connect
(
mCoreHandlers
.
get
(
),
&
CoreHandlers
::
messageReceived
,
this
,
&
ChatModel
::
handleMessageReceived
);
QObject
::
connect
(
mCoreHandlers
.
get
(
),
&
CoreHandlers
::
callStateChanged
,
this
,
&
ChatModel
::
handleCallStateChanged
);
}
ChatModel
::~
ChatModel
()
{
...
...
linphone-desktop/src/components/contact/ContactModel.cpp
View file @
4f16551b
...
...
@@ -34,32 +34,21 @@ ContactModel::ContactModel (QObject *parent, shared_ptr<linphone::Friend> linpho
Q_ASSERT
(
linphoneFriend
!=
nullptr
);
mLinphoneFriend
=
linphoneFriend
;
mVcardModel
=
new
VcardModel
(
linphoneFriend
->
getVcard
());
App
::
getInstance
()
->
getEngine
()
->
setObjectOwnership
(
mVcardModel
,
QQmlEngine
::
CppOwnership
);
mLinphoneFriend
->
setData
(
"contact-model"
,
*
this
);
setVcardModelInternal
(
new
VcardModel
(
linphoneFriend
->
getVcard
()));
}
ContactModel
::
ContactModel
(
QObject
*
parent
,
VcardModel
*
vcardModel
)
:
QObject
(
parent
)
{
Q_ASSERT
(
vcardModel
!=
nullptr
);
QQmlEngine
*
engine
=
App
::
getInstance
()
->
getEngine
();
if
(
engine
->
objectOwnership
(
vcardModel
)
==
QQmlEngine
::
CppOwnership
)
{
qWarning
()
<<
QStringLiteral
(
"A contact is already linked to this vcard:"
)
<<
vcardModel
;
abort
();
}
Q_ASSERT
(
vcardModel
->
mVcard
!=
nullptr
);
Q_ASSERT
(
!
vcardModel
->
mIsReadOnly
);
mLinphoneFriend
=
linphone
::
Friend
::
newFromVcard
(
vcardModel
->
mVcard
);
mLinphoneFriend
->
setData
(
"contact-model"
,
*
this
);
mVcardModel
=
vcardModel
;
engine
->
setObjectOwnership
(
vcardModel
,
QQmlEngine
::
CppOwnership
);
qInfo
()
<<
QStringLiteral
(
"Create contact from vcard:"
)
<<
this
<<
vcardModel
;
setVcardModelInternal
(
vcardModel
);
}
// -----------------------------------------------------------------------------
...
...
@@ -75,18 +64,47 @@ void ContactModel::refreshPresence () {
// -----------------------------------------------------------------------------
void
ContactModel
::
startEdit
()
{
mLinphoneFriend
->
edit
();
mOldSipAddresses
=
mVcardModel
->
getSipAddresses
();
VcardModel
*
ContactModel
::
getVcardModel
()
const
{
return
mVcardModel
;
}
void
ContactModel
::
endEdit
()
{
void
ContactModel
::
setVcardModel
(
VcardModel
*
vcardModel
)
{
VcardModel
*
oldVcardModel
=
mVcardModel
;
qInfo
()
<<
QStringLiteral
(
"Remove vcard on contact:"
)
<<
this
<<
oldVcardModel
;
oldVcardModel
->
mIsReadOnly
=
false
;
oldVcardModel
->
mAvatarIsReadOnly
=
vcardModel
->
getAvatar
()
==
oldVcardModel
->
getAvatar
();
oldVcardModel
->
deleteLater
();
qInfo
()
<<
QStringLiteral
(
"Set vcard on contact:"
)
<<
this
<<
vcardModel
;
setVcardModelInternal
(
vcardModel
);
// Flush vcard.
mLinphoneFriend
->
done
();
updateSipAddresses
(
oldVcardModel
);
}
void
ContactModel
::
setVcardModelInternal
(
VcardModel
*
vcardModel
)
{
Q_ASSERT
(
vcardModel
!=
nullptr
);
Q_ASSERT
(
vcardModel
!=
mVcardModel
);
mVcardModel
=
vcardModel
;
mVcardModel
->
mAvatarIsReadOnly
=
false
;
mVcardModel
->
mIsReadOnly
=
true
;
App
::
getInstance
()
->
getEngine
()
->
setObjectOwnership
(
mVcardModel
,
QQmlEngine
::
CppOwnership
);
if
(
mLinphoneFriend
->
getVcard
()
!=
vcardModel
->
mVcard
)
mLinphoneFriend
->
setVcard
(
vcardModel
->
mVcard
);
}
void
ContactModel
::
updateSipAddresses
(
VcardModel
*
oldVcardModel
)
{
QVariantList
oldSipAddresses
=
oldVcardModel
->
getSipAddresses
();
QVariantList
sipAddresses
=
mVcardModel
->
getSipAddresses
();
QSet
<
QString
>
done
;
for
(
const
auto
&
variantA
:
mO
ldSipAddresses
)
{
for
(
const
auto
&
variantA
:
o
ldSipAddresses
)
{
next:
const
QString
&
sipAddress
=
variantA
.
toString
();
if
(
done
.
contains
(
sipAddress
))
...
...
@@ -102,7 +120,7 @@ next:
emit
sipAddressRemoved
(
sipAddress
);
}
mO
ldSipAddresses
.
clear
();
o
ldSipAddresses
.
clear
();
for
(
const
auto
&
variant
:
sipAddresses
)
{
const
QString
&
sipAddress
=
variant
.
toString
();
...
...
@@ -116,10 +134,21 @@ next:
emit
contactUpdated
();
}
void
ContactModel
::
abortEdit
()
{
mOldSipAddresses
.
clear
();
// -----------------------------------------------------------------------------
emit
contactUpdated
();
VcardModel
*
ContactModel
::
cloneVcardModel
()
const
{
shared_ptr
<
linphone
::
Vcard
>
vcard
=
mVcardModel
->
mVcard
->
clone
();
Q_ASSERT
(
vcard
!=
nullptr
);
Q_ASSERT
(
vcard
->
getVcard
()
!=
nullptr
);
mLinphoneFriend
->
edit
();
VcardModel
*
vcardModel
=
new
VcardModel
(
vcard
);
vcardModel
->
mIsReadOnly
=
false
;
qInfo
()
<<
QStringLiteral
(
"Clone vcard from contact:"
)
<<
this
<<
vcardModel
;
return
vcardModel
;
}
// -----------------------------------------------------------------------------
...
...
@@ -131,24 +160,3 @@ Presence::PresenceStatus ContactModel::getPresenceStatus () const {
Presence
::
PresenceLevel
ContactModel
::
getPresenceLevel
()
const
{
return
Presence
::
getPresenceLevel
(
getPresenceStatus
());
}
// -----------------------------------------------------------------------------
VcardModel
*
ContactModel
::
getVcardModel
()
const
{
return
mVcardModel
;
}
void
ContactModel
::
setVcardModel
(
VcardModel
*
vcardModel
)
{
Q_ASSERT
(
vcardModel
!=
nullptr
);
Q_ASSERT
(
vcardModel
!=
mVcardModel
);
QQmlEngine
*
engine
=
App
::
getInstance
()
->
getEngine
();
engine
->
setObjectOwnership
(
vcardModel
,
QQmlEngine
::
CppOwnership
);
engine
->
setObjectOwnership
(
mVcardModel
,
QQmlEngine
::
JavaScriptOwnership
);
qInfo
()
<<
QStringLiteral
(
"Set vcard on contact:"
)
<<
this
<<
vcardModel
;
qInfo
()
<<
QStringLiteral
(
"Remove vcard on contact:"
)
<<
this
<<
mVcardModel
;
mLinphoneFriend
->
setVcard
(
vcardModel
->
mVcard
);
mVcardModel
=
vcardModel
;
}
linphone-desktop/src/components/contact/ContactModel.hpp
View file @
4f16551b
...
...
@@ -47,13 +47,11 @@ public:
void
refreshPresence
();
Q_INVOKABLE
void
startEdit
();
Q_INVOKABLE
void
endEdit
();
Q_INVOKABLE
void
abortEdit
();
VcardModel
*
getVcardModel
()
const
;
void
setVcardModel
(
VcardModel
*
vcardModel
);
Q_INVOKABLE
VcardModel
*
cloneVcardModel
()
const
;
signals:
void
contactUpdated
();
...
...
@@ -63,11 +61,12 @@ signals:
void
sipAddressRemoved
(
const
QString
&
sipAddress
);
private:
void
setVcardModelInternal
(
VcardModel
*
vcardModel
);
void
updateSipAddresses
(
VcardModel
*
oldVcardModel
);
Presence
::
PresenceStatus
getPresenceStatus
()
const
;
Presence
::
PresenceLevel
getPresenceLevel
()
const
;
QVariantList
mOldSipAddresses
;
VcardModel
*
mVcardModel
;
std
::
shared_ptr
<
linphone
::
Friend
>
mLinphoneFriend
;
};
...
...
linphone-desktop/src/components/contact/VcardModel.cpp
View file @
4f16551b
...
...
@@ -36,6 +36,8 @@
#define VCARD_SCHEME "linphone-desktop:/"
#define CHECK_VCARD_IS_WRITABLE(VCARD) Q_ASSERT(VCARD->mIsReadOnly == false)
using
namespace
std
;
// =============================================================================
...
...
@@ -93,10 +95,13 @@ VcardModel::VcardModel (shared_ptr<linphone::Vcard> vcard) {
}
VcardModel
::~
VcardModel
()
{
// If it's a detached Vcard and if necessary the linked photo must be destroyed from fs.
if
(
App
::
getInstance
()
->
getEngine
()
->
objectOwnership
(
this
)
!=
QQmlEngine
::
CppOwnership
)
{
if
(
!
mIsReadOnly
)
{
qInfo
()
<<
QStringLiteral
(
"Destroy detached vcard:"
)
<<
this
;
// If it's a detached Vcard and if necessary the linked photo must be destroyed from fs.
if
(
mAvatarIsReadOnly
)
return
;
shared_ptr
<
belcard
::
BelCardPhoto
>
photo
(
findBelcardPhoto
(
mVcard
->
getVcard
()));
if
(
!
photo
)
return
;
...
...
@@ -116,19 +121,6 @@ VcardModel::~VcardModel () {
// -----------------------------------------------------------------------------
VcardModel
*
VcardModel
::
clone
()
const
{
shared_ptr
<
linphone
::
Vcard
>
vcard
=
mVcard
->
clone
();
Q_ASSERT
(
vcard
!=
nullptr
);
Q_ASSERT
(
vcard
->
getVcard
()
!=
nullptr
);
VcardModel
*
vcardModel
=
new
VcardModel
(
vcard
);
qInfo
()
<<
QStringLiteral
(
"Clone vcard:"
)
<<
this
<<
vcardModel
;
return
vcardModel
;
}
// -----------------------------------------------------------------------------
QString
VcardModel
::
getAvatar
()
const
{
// Find desktop avatar.
shared_ptr
<
belcard
::
BelCardPhoto
>
photo
=
findBelcardPhoto
(
mVcard
->
getVcard
());
...
...
@@ -144,6 +136,8 @@ QString VcardModel::getAvatar () const {
}
bool
VcardModel
::
setAvatar
(
const
QString
&
path
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCard
>
belcard
=
mVcard
->
getVcard
();
// Remove avatar if path is empty.
...
...
@@ -174,7 +168,9 @@ bool VcardModel::setAvatar (const QString &path) {
qInfo
()
<<
QStringLiteral
(
"Update avatar of `%1`. (path=%2)"
).
arg
(
getUsername
()).
arg
(
dest
);
// 2. Remove oldest photo.
removeBelcardPhoto
(
belcard
);
if
(
!
mAvatarIsReadOnly
)
removeBelcardPhoto
(
belcard
);
mAvatarIsReadOnly
=
false
;
// 3. Update new photo.
shared_ptr
<
belcard
::
BelCardPhoto
>
photo
=
belcard
::
BelCardGeneric
::
create
<
belcard
::
BelCardPhoto
>
();
...
...
@@ -195,6 +191,8 @@ QString VcardModel::getUsername () const {
}
void
VcardModel
::
setUsername
(
const
QString
&
username
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
if
(
username
.
length
()
==
0
||
username
==
getUsername
())
return
;
...
...
@@ -235,24 +233,32 @@ QVariantMap VcardModel::getAddress () const {
}
void
VcardModel
::
setStreet
(
const
QString
&
street
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCardAddress
>
address
=
getOrCreateBelCardAddress
(
mVcard
->
getVcard
());
address
->
setStreet
(
::
Utils
::
qStringToLinphoneString
(
street
));
emit
vcardUpdated
();
}
void
VcardModel
::
setLocality
(
const
QString
&
locality
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCardAddress
>
address
=
getOrCreateBelCardAddress
(
mVcard
->
getVcard
());
address
->
setLocality
(
::
Utils
::
qStringToLinphoneString
(
locality
));
emit
vcardUpdated
();
}
void
VcardModel
::
setPostalCode
(
const
QString
&
postalCode
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCardAddress
>
address
=
getOrCreateBelCardAddress
(
mVcard
->
getVcard
());
address
->
setPostalCode
(
::
Utils
::
qStringToLinphoneString
(
postalCode
));
emit
vcardUpdated
();
}
void
VcardModel
::
setCountry
(
const
QString
&
country
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCardAddress
>
address
=
getOrCreateBelCardAddress
(
mVcard
->
getVcard
());
address
->
setCountry
(
::
Utils
::
qStringToLinphoneString
(
country
));
emit
vcardUpdated
();
...
...
@@ -276,6 +282,8 @@ QVariantList VcardModel::getSipAddresses () const {
}
bool
VcardModel
::
addSipAddress
(
const
QString
&
sipAddress
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
// Check sip address format.
shared_ptr
<
linphone
::
Address
>
linphoneAddress
=
CoreManager
::
getInstance
()
->
getCore
()
->
interpretUrl
(
::
Utils
::
qStringToLinphoneString
(
sipAddress
)
...
...
@@ -303,6 +311,8 @@ bool VcardModel::addSipAddress (const QString &sipAddress) {
}
void
VcardModel
::
removeSipAddress
(
const
QString
&
sipAddress
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCard
>
belcard
=
mVcard
->
getVcard
();
list
<
shared_ptr
<
belcard
::
BelCardImpp
>
>
addresses
=
belcard
->
getImpp
();
shared_ptr
<
belcard
::
BelCardImpp
>
value
=
findBelCardValue
(
addresses
,
sipAddress
);
...
...
@@ -325,12 +335,8 @@ void VcardModel::removeSipAddress (const QString &sipAddress) {
}
bool
VcardModel
::
updateSipAddress
(
const
QString
&
oldSipAddress
,
const
QString
&
sipAddress
)
{
if
(
oldSipAddress
==
sipAddress
||
!
addSipAddress
(
sipAddress
))
return
false
;
removeSipAddress
(
oldSipAddress
);
return
true
;
return
addSipAddress
(
sipAddress
);
}
// -----------------------------------------------------------------------------
...
...
@@ -345,6 +351,8 @@ QVariantList VcardModel::getCompanies () const {
}
bool
VcardModel
::
addCompany
(
const
QString
&
company
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCard
>
belcard
=
mVcard
->
getVcard
();
shared_ptr
<
belcard
::
BelCardRole
>
value
=
belcard
::
BelCardGeneric
::
create
<
belcard
::
BelCardRole
>
();
value
->
setValue
(
::
Utils
::
qStringToLinphoneString
(
company
));
...
...
@@ -361,6 +369,8 @@ bool VcardModel::addCompany (const QString &company) {
}
void
VcardModel
::
removeCompany
(
const
QString
&
company
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCard
>
belcard
=
mVcard
->
getVcard
();
shared_ptr
<
belcard
::
BelCardRole
>
value
=
findBelCardValue
(
belcard
->
getRoles
(),
company
);
...
...
@@ -376,12 +386,8 @@ void VcardModel::removeCompany (const QString &company) {
}
bool
VcardModel
::
updateCompany
(
const
QString
&
oldCompany
,
const
QString
&
company
)
{
if
(
oldCompany
==
company
||
!
addCompany
(
company
))
return
false
;
removeCompany
(
oldCompany
);
return
true
;
return
addCompany
(
company
);
}
// -----------------------------------------------------------------------------
...
...
@@ -396,6 +402,8 @@ QVariantList VcardModel::getEmails () const {
}
bool
VcardModel
::
addEmail
(
const
QString
&
email
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCard
>
belcard
=
mVcard
->
getVcard
();
shared_ptr
<
belcard
::
BelCardEmail
>
value
=
belcard
::
BelCardGeneric
::
create
<
belcard
::
BelCardEmail
>
();
value
->
setValue
(
::
Utils
::
qStringToLinphoneString
(
email
));
...
...
@@ -412,6 +420,8 @@ bool VcardModel::addEmail (const QString &email) {
}
void
VcardModel
::
removeEmail
(
const
QString
&
email
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCard
>
belcard
=
mVcard
->
getVcard
();
shared_ptr
<
belcard
::
BelCardEmail
>
value
=
findBelCardValue
(
belcard
->
getEmails
(),
email
);
...
...
@@ -427,12 +437,8 @@ void VcardModel::removeEmail (const QString &email) {
}
bool
VcardModel
::
updateEmail
(
const
QString
&
oldEmail
,
const
QString
&
email
)
{
if
(
oldEmail
==
email
||
!
addEmail
(
email
))
return
false
;
removeEmail
(
oldEmail
);
return
true
;
return
addEmail
(
email
);
}
// -----------------------------------------------------------------------------
...
...
@@ -447,6 +453,8 @@ QVariantList VcardModel::getUrls () const {
}
bool
VcardModel
::
addUrl
(
const
QString
&
url
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCard
>
belcard
=
mVcard
->
getVcard
();
shared_ptr
<
belcard
::
BelCardURL
>
value
=
belcard
::
BelCardGeneric
::
create
<
belcard
::
BelCardURL
>
();
value
->
setValue
(
::
Utils
::
qStringToLinphoneString
(
url
));
...
...
@@ -463,6 +471,8 @@ bool VcardModel::addUrl (const QString &url) {
}
void
VcardModel
::
removeUrl
(
const
QString
&
url
)
{
CHECK_VCARD_IS_WRITABLE
(
this
);
shared_ptr
<
belcard
::
BelCard
>
belcard
=
mVcard
->
getVcard
();
shared_ptr
<
belcard
::
BelCardURL
>
value
=
findBelCardValue
(
belcard
->
getURLs
(),
url
);
...
...
@@ -478,10 +488,6 @@ void VcardModel::removeUrl (const QString &url) {
}
bool
VcardModel
::
updateUrl
(
const
QString
&
oldUrl
,
const
QString
&
url
)
{
if
(
oldUrl
==
url
||
!
addUrl
(
url
))
return
false
;
removeUrl
(
oldUrl
);
return
true
;
return
addUrl
(
url
);
}
linphone-desktop/src/components/contact/VcardModel.hpp
View file @
4f16551b
...
...
@@ -50,6 +50,12 @@ public:
// ---------------------------------------------------------------------------
bool
getIsReadOnly
()
const
{
return
mIsReadOnly
;
}
// ---------------------------------------------------------------------------
QString
getAvatar
()
const
;
bool
setAvatar
(
const
QString
&
path
);
...
...
@@ -66,8 +72,6 @@ public:
// ---------------------------------------------------------------------------
Q_INVOKABLE
VcardModel
*
clone
()
const
;
Q_INVOKABLE
bool
addSipAddress
(
const
QString
&
sipAddress
);
Q_INVOKABLE
void
removeSipAddress
(
const
QString
&
sipAddress
);
Q_INVOKABLE
bool
updateSipAddress
(
const
QString
&
oldSipAddress
,
const
QString
&
sipAddress
);
...
...
@@ -97,6 +101,9 @@ signals:
// ---------------------------------------------------------------------------
private:
bool
mIsReadOnly
=
true
;
bool
mAvatarIsReadOnly
=
true
;
std
::
shared_ptr
<
linphone
::
Vcard
>
mVcard
;
};
...
...
linphone-desktop/src/components/contacts/ContactsListModel.cpp
View file @
4f16551b
...
...
@@ -143,9 +143,9 @@ void ContactsListModel::cleanAvatars () {
qInfo
()
<<
QStringLiteral
(
"Delete all avatars."
);
for
(
const
auto
&
contact
:
mList
)
{
contact
->
startEdit
();
contact
->
getVcardModel
()
->
setAvatar
(
""
);
contact
->
endEdit
(
);
VcardModel
*
vcardModel
=
contact
->
cloneVcardModel
();
vcardModel
->
setAvatar
(
""
);
contact
->
setVcardModel
(
vcardModel
);
}
}
...
...
linphone-desktop/src/components/settings/AccountSettingsModel.cpp
View file @
4f16551b
...
...
@@ -52,7 +52,7 @@ inline AccountSettingsModel::RegistrationState mapLinphoneRegistrationStateToUi
AccountSettingsModel
::
AccountSettingsModel
(
QObject
*
parent
)
:
QObject
(
parent
)
{
QObject
::
connect
(
&
(
*
CoreManager
::
getInstance
()
->
getHandlers
()
),
&
CoreHandlers
::
registrationStateChanged
,
CoreManager
::
getInstance
()
->
getHandlers
().
get
(
),
&
CoreHandlers
::
registrationStateChanged
,
this
,
&
AccountSettingsModel
::
handleRegistrationStateChanged
);
}
...
...
linphone-desktop/src/components/sip-addresses/SipAddressesModel.cpp
View file @
4f16551b
...
...
@@ -47,9 +47,9 @@ SipAddressesModel::SipAddressesModel (QObject *parent) : QAbstractListModel(pare
QObject
::
connect
(
contacts
,
&
ContactsListModel
::
sipAddressAdded
,
this
,
&
SipAddressesModel
::
handleSipAddressAdded
);
QObject
::
connect
(
contacts
,
&
ContactsListModel
::
sipAddressRemoved
,
this
,
&
SipAddressesModel
::
handleSipAddressRemoved
);
QObject
::
connect
(
&
(
*
mCoreHandlers
),
&
CoreHandlers
::
messageReceived
,
this
,
&
SipAddressesModel
::
handleMessageReceived
);
QObject
::
connect
(
&
(
*
mCoreHandlers
),
&
CoreHandlers
::
callStateChanged
,
this
,
&
SipAddressesModel
::
handleCallStateChanged
);
QObject
::
connect
(
&
(
*
mCoreHandlers
),
&
CoreHandlers
::
presenceReceived
,
this
,
&
SipAddressesModel
::
handlePresenceReceived
);
QObject
::
connect
(
mCoreHandlers
.
get
(
),
&
CoreHandlers
::
messageReceived
,
this
,
&
SipAddressesModel
::
handleMessageReceived
);
QObject
::
connect
(
mCoreHandlers
.
get
(
),
&
CoreHandlers
::
callStateChanged
,
this
,
&
SipAddressesModel
::
handleCallStateChanged
);
QObject
::
connect
(
mCoreHandlers
.
get
(
),
&
CoreHandlers
::
presenceReceived
,
this
,
&
SipAddressesModel
::
handlePresenceReceived
);
}
// -----------------------------------------------------------------------------
...
...
linphone-desktop/ui/views/App/Main/ContactEdit.js
View file @
4f16551b
...
...
@@ -17,7 +17,7 @@ function handleContactUpdated () {
}
else
{
// Edition not ended, the contact was updated in other place.
// Update fields with new data.
contactEdit
.
_vcard
=
contact
.
vcard
.
clone
()
contactEdit
.
_vcard
=
contact
.
cloneVcardModel
()
}
}
...
...
@@ -59,9 +59,7 @@ function handleVcardChanged (vcard) {
function
editContact
()
{
var
contact
=
contactEdit
.
_contact
contact
.
startEdit
()
contactEdit
.
_vcard
=
contact
.
vcard
.
clone
()
contactEdit
.
_vcard
=
contact
.
cloneVcardModel
()
contactEdit
.
_edition
=
true
window
.
lockView
({
...
...
@@ -91,7 +89,6 @@ function save () {
if
(
contact
)
{
contact
.
vcard
=
vcard
contact
.
endEdit
()
window
.
unlockView
()
}
else
{
contactEdit
.
_contact
=
Linphone
.
ContactsListModel
.
addContact
(
vcard
)
...
...
@@ -103,7 +100,6 @@ function cancel () {
if
(
contact
)
{
contactEdit
.
_vcard
=
contact
.
vcard
contact
.
abortEdit
()
window
.
unlockView
()
contactEdit
.
_edition
=
false
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment