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
fc9e8b68
Commit
fc9e8b68
authored
Apr 28, 2017
by
Ronan Abhamon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(src/components/calls/CallsListModel): handle getData exception and code refactoring
parent
69f114e5
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
126 additions
and
115 deletions
+126
-115
CallModel.cpp
linphone-desktop/src/components/call/CallModel.cpp
+56
-56
CallModel.hpp
linphone-desktop/src/components/call/CallModel.hpp
+6
-6
CallsListModel.cpp
linphone-desktop/src/components/calls/CallsListModel.cpp
+33
-24
CallsListModel.hpp
linphone-desktop/src/components/calls/CallsListModel.hpp
+4
-4
Camera.cpp
linphone-desktop/src/components/camera/Camera.cpp
+14
-14
Camera.hpp
linphone-desktop/src/components/camera/Camera.hpp
+6
-6
ChatModel.cpp
linphone-desktop/src/components/chat/ChatModel.cpp
+1
-0
VcardModel.hpp
linphone-desktop/src/components/contact/VcardModel.hpp
+2
-2
Notifier.cpp
linphone-desktop/src/components/notifier/Notifier.cpp
+3
-3
ContactEdit.js
linphone-desktop/ui/views/App/Main/ContactEdit.js
+1
-0
No files found.
linphone-desktop/src/components/call/CallModel.cpp
View file @
fc9e8b68
This diff is collapsed.
Click to expand it.
linphone-desktop/src/components/call/CallModel.hpp
View file @
fc9e8b68
...
...
@@ -67,12 +67,12 @@ public:
CallModel
(
std
::
shared_ptr
<
linphone
::
Call
>
linphoneCall
);
~
CallModel
();
std
::
shared_ptr
<
linphone
::
Call
>
get
Linphone
Call
()
const
{
return
m
Linphone
Call
;
std
::
shared_ptr
<
linphone
::
Call
>
getCall
()
const
{
return
mCall
;
}
static
void
setRecordFile
(
std
::
shared_ptr
<
linphone
::
CallParams
>
&
callParams
);
void
updateStats
(
const
std
::
shared_ptr
<
const
linphone
::
CallStats
>
&
s
tats
);
void
updateStats
(
const
std
::
shared_ptr
<
const
linphone
::
CallStats
>
&
callS
tats
);
Q_INVOKABLE
void
accept
();
Q_INVOKABLE
void
acceptWithVideo
();
...
...
@@ -103,7 +103,7 @@ private:
CallStatus
getStatus
()
const
;
bool
isOutgoing
()
const
{
return
m
Linphone
Call
->
getDir
()
==
linphone
::
CallDirOutgoing
;
return
mCall
->
getDir
()
==
linphone
::
CallDirOutgoing
;
}
int
getDuration
()
const
;
...
...
@@ -126,7 +126,7 @@ private:
QVariantList
getAudioStats
()
const
;
QVariantList
getVideoStats
()
const
;
void
updateStats
(
const
std
::
shared_ptr
<
const
linphone
::
CallStats
>
&
callStats
,
QVariantList
&
stats
);
void
updateStats
(
const
std
::
shared_ptr
<
const
linphone
::
CallStats
>
&
callStats
,
QVariantList
&
stats
List
);
QString
iceStateToString
(
linphone
::
IceState
state
)
const
;
...
...
@@ -137,7 +137,7 @@ private:
QVariantList
mAudioStats
;
QVariantList
mVideoStats
;
std
::
shared_ptr
<
linphone
::
Call
>
m
Linphone
Call
;
std
::
shared_ptr
<
linphone
::
Call
>
mCall
;
};
#endif // CALL_MODEL_H_
linphone-desktop/src/components/calls/CallsListModel.cpp
View file @
fc9e8b68
...
...
@@ -36,13 +36,13 @@ using namespace std;
// =============================================================================
inline
QList
<
CallModel
*>::
iterator
findCall
(
inline
QList
<
CallModel
*>::
iterator
findCall
Model
(
QList
<
CallModel
*>
&
list
,
const
shared_ptr
<
linphone
::
Call
>
&
linphoneC
all
const
shared_ptr
<
linphone
::
Call
>
&
c
all
)
{
return
find_if
(
list
.
begin
(),
list
.
end
(),
[
linphoneCall
](
CallModel
*
cal
l
)
{
return
linphoneCall
==
call
->
getLinphone
Call
();
list
.
begin
(),
list
.
end
(),
[
call
](
CallModel
*
callMode
l
)
{
return
call
==
callModel
->
get
Call
();
}
);
}
...
...
@@ -53,21 +53,21 @@ CallsListModel::CallsListModel (QObject *parent) : QAbstractListModel(parent) {
mCoreHandlers
=
CoreManager
::
getInstance
()
->
getHandlers
();
QObject
::
connect
(
&
(
*
mCoreHandlers
),
&
CoreHandlers
::
callStateChanged
,
this
,
[
this
](
const
shared_ptr
<
linphone
::
Call
>
&
linphoneC
all
,
linphone
::
CallState
state
)
{
this
,
[
this
](
const
shared_ptr
<
linphone
::
Call
>
&
c
all
,
linphone
::
CallState
state
)
{
switch
(
state
)
{
case
linphone
:
:
CallStateIncomingReceived
:
case
linphone
:
:
CallStateOutgoingInit
:
addCall
(
linphoneC
all
);
addCall
(
c
all
);
break
;
case
linphone
:
:
CallStateEnd
:
case
linphone
:
:
CallStateError
:
removeCall
(
linphoneC
all
);
removeCall
(
c
all
);
break
;
case
linphone
:
:
CallStateStreamsRunning
:
{
int
index
=
static_cast
<
int
>
(
distance
(
mList
.
begin
(),
findCall
(
mList
,
linphoneC
all
)));
emit
callRunning
(
index
,
&
linphoneC
all
->
getData
<
CallModel
>
(
"call-model"
));
int
index
=
static_cast
<
int
>
(
distance
(
mList
.
begin
(),
findCall
Model
(
mList
,
c
all
)));
emit
callRunning
(
index
,
&
c
all
->
getData
<
CallModel
>
(
"call-model"
));
}
break
;
...
...
@@ -100,8 +100,8 @@ QVariant CallsListModel::data (const QModelIndex &index, int role) const {
return
QVariant
();
}
CallModel
*
CallsListModel
::
getCall
(
const
shared_ptr
<
linphone
::
Call
>
&
linphoneC
all
)
const
{
auto
it
=
findCall
(
*
(
const_cast
<
QList
<
CallModel
*>
*>
(
&
mList
)),
linphoneC
all
);
CallModel
*
CallsListModel
::
getCall
Model
(
const
shared_ptr
<
linphone
::
Call
>
&
c
all
)
const
{
auto
it
=
findCall
Model
(
*
(
const_cast
<
QList
<
CallModel
*>
*>
(
&
mList
)),
c
all
);
return
it
!=
mList
.
end
()
?
*
it
:
nullptr
;
}
...
...
@@ -170,33 +170,42 @@ bool CallsListModel::removeRows (int row, int count, const QModelIndex &parent)
// -----------------------------------------------------------------------------
void
CallsListModel
::
addCall
(
const
shared_ptr
<
linphone
::
Call
>
&
linphoneC
all
)
{
if
(
linphoneC
all
->
getDir
()
==
linphone
::
CallDirOutgoing
)
void
CallsListModel
::
addCall
(
const
shared_ptr
<
linphone
::
Call
>
&
c
all
)
{
if
(
c
all
->
getDir
()
==
linphone
::
CallDirOutgoing
)
App
::
smartShowWindow
(
App
::
getInstance
()
->
getCallsWindow
());
CallModel
*
call
=
new
CallModel
(
linphoneC
all
);
CallModel
*
call
Model
=
new
CallModel
(
c
all
);
qInfo
()
<<
QStringLiteral
(
"Add call:"
)
<<
call
;
qInfo
()
<<
QStringLiteral
(
"Add call:"
)
<<
call
Model
;
App
::
getInstance
()
->
getEngine
()
->
setObjectOwnership
(
call
,
QQmlEngine
::
CppOwnership
);
App
::
getInstance
()
->
getEngine
()
->
setObjectOwnership
(
call
Model
,
QQmlEngine
::
CppOwnership
);
int
row
=
mList
.
count
();
beginInsertRows
(
QModelIndex
(),
row
,
row
);
mList
<<
call
;
mList
<<
call
Model
;
endInsertRows
();
}
void
CallsListModel
::
removeCall
(
const
shared_ptr
<
linphone
::
Call
>
&
linphoneCall
)
{
QTimer
::
singleShot
(
DELAY_BEFORE_REMOVE_CALL
,
this
,
[
this
,
linphoneCall
]()
{
CallModel
*
call
=
&
linphoneCall
->
getData
<
CallModel
>
(
"call-model"
);
void
CallsListModel
::
removeCall
(
const
shared_ptr
<
linphone
::
Call
>
&
call
)
{
CallModel
*
callModel
;
try
{
callModel
=
&
call
->
getData
<
CallModel
>
(
"call-model"
);
}
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 call in:"
)
<<
callModel
;
return
;
}
qInfo
()
<<
QStringLiteral
(
"Removing call:"
)
<<
call
;
QTimer
::
singleShot
(
DELAY_BEFORE_REMOVE_CALL
,
this
,
[
this
,
callModel
]()
{
qInfo
()
<<
QStringLiteral
(
"Removing call:"
)
<<
callModel
;
int
index
=
mList
.
indexOf
(
call
);
int
index
=
mList
.
indexOf
(
call
Model
);
if
(
index
==
-
1
||
!
removeRow
(
index
))
qWarning
()
<<
QStringLiteral
(
"Unable to remove call:"
)
<<
call
;
qWarning
()
<<
QStringLiteral
(
"Unable to remove call:"
)
<<
call
Model
;
if
(
mList
.
empty
())
App
::
getInstance
()
->
getCallsWindow
()
->
close
();
...
...
linphone-desktop/src/components/calls/CallsListModel.hpp
View file @
fc9e8b68
...
...
@@ -43,7 +43,7 @@ public:
QHash
<
int
,
QByteArray
>
roleNames
()
const
override
;
QVariant
data
(
const
QModelIndex
&
index
,
int
role
=
Qt
::
DisplayRole
)
const
override
;
CallModel
*
getCall
(
const
std
::
shared_ptr
<
linphone
::
Call
>
&
linphoneC
all
)
const
;
CallModel
*
getCall
Model
(
const
std
::
shared_ptr
<
linphone
::
Call
>
&
c
all
)
const
;
Q_INVOKABLE
void
launchAudioCall
(
const
QString
&
sipUri
)
const
;
Q_INVOKABLE
void
launchVideoCall
(
const
QString
&
sipUri
)
const
;
...
...
@@ -53,14 +53,14 @@ public:
Q_INVOKABLE
void
terminateAllCalls
()
const
;
signals:
void
callRunning
(
int
index
,
CallModel
*
call
);
void
callRunning
(
int
index
,
CallModel
*
call
Model
);
private:
bool
removeRow
(
int
row
,
const
QModelIndex
&
parent
=
QModelIndex
());
bool
removeRows
(
int
row
,
int
count
,
const
QModelIndex
&
parent
=
QModelIndex
())
override
;
void
addCall
(
const
std
::
shared_ptr
<
linphone
::
Call
>
&
linphoneC
all
);
void
removeCall
(
const
std
::
shared_ptr
<
linphone
::
Call
>
&
linphoneC
all
);
void
addCall
(
const
std
::
shared_ptr
<
linphone
::
Call
>
&
c
all
);
void
removeCall
(
const
std
::
shared_ptr
<
linphone
::
Call
>
&
c
all
);
QList
<
CallModel
*>
mList
;
...
...
linphone-desktop/src/components/camera/Camera.cpp
View file @
fc9e8b68
...
...
@@ -57,8 +57,8 @@ CameraRenderer::~CameraRenderer () {
if
(
mIsPreview
)
coreManager
->
getCore
()
->
setNativePreviewWindowId
(
nullptr
);
else
if
(
m
Linphone
Call
)
m
Linphone
Call
->
setNativeVideoWindowId
(
nullptr
);
else
if
(
mCall
)
mCall
->
setNativeVideoWindowId
(
nullptr
);
coreManager
->
unlockVideoRender
();
...
...
@@ -104,8 +104,8 @@ void CameraRenderer::render () {
if
(
mIsPreview
)
coreManager
->
getCore
()
->
previewOglRender
();
else
if
(
m
Linphone
Call
)
m
Linphone
Call
->
oglRender
();
else
if
(
mCall
)
mCall
->
oglRender
();
msFunctions
->
bind
(
nullptr
);
coreManager
->
unlockVideoRender
();
...
...
@@ -124,8 +124,8 @@ void CameraRenderer::synchronize (QQuickFramebufferObject *item) {
Camera
*
camera
=
qobject_cast
<
Camera
*>
(
item
);
{
CallModel
*
model
=
camera
->
getCall
();
m
LinphoneCall
=
model
?
model
->
getLinphone
Call
()
:
nullptr
;
CallModel
*
model
=
camera
->
getCall
Model
();
m
Call
=
model
?
model
->
get
Call
()
:
nullptr
;
}
mIsPreview
=
camera
->
mIsPreview
;
...
...
@@ -144,8 +144,8 @@ void CameraRenderer::updateWindowId () {
if
(
mIsPreview
)
CoreManager
::
getInstance
()
->
getCore
()
->
setNativePreviewWindowId
(
mContextInfo
);
else
if
(
m
Linphone
Call
)
m
Linphone
Call
->
setNativeVideoWindowId
(
mContextInfo
);
else
if
(
mCall
)
mCall
->
setNativeVideoWindowId
(
mContextInfo
);
}
// -----------------------------------------------------------------------------
...
...
@@ -172,16 +172,16 @@ QQuickFramebufferObject::Renderer *Camera::createRenderer () const {
// -----------------------------------------------------------------------------
CallModel
*
Camera
::
getCall
()
const
{
return
mCall
;
CallModel
*
Camera
::
getCall
Model
()
const
{
return
mCall
Model
;
}
void
Camera
::
setCall
(
CallModel
*
cal
l
)
{
if
(
mCall
!=
cal
l
)
{
mCall
=
cal
l
;
void
Camera
::
setCall
Model
(
CallModel
*
callMode
l
)
{
if
(
mCall
Model
!=
callMode
l
)
{
mCall
Model
=
callMode
l
;
update
();
emit
callChanged
(
mCall
);
emit
callChanged
(
mCall
Model
);
}
}
...
...
linphone-desktop/src/components/camera/Camera.hpp
View file @
fc9e8b68
...
...
@@ -57,7 +57,7 @@ private:
bool
mUpdateContextInfo
=
false
;
bool
mIsPreview
=
false
;
std
::
shared_ptr
<
linphone
::
Call
>
m
Linphone
Call
;
std
::
shared_ptr
<
linphone
::
Call
>
mCall
;
QQuickWindow
*
mWindow
;
};
...
...
@@ -69,7 +69,7 @@ class Camera : public QQuickFramebufferObject {
Q_OBJECT
;
Q_PROPERTY
(
CallModel
*
call
READ
getCall
WRITE
setCal
l
NOTIFY
callChanged
);
Q_PROPERTY
(
CallModel
*
call
READ
getCall
Model
WRITE
setCallMode
l
NOTIFY
callChanged
);
Q_PROPERTY
(
bool
isPreview
READ
getIsPreview
WRITE
setIsPreview
NOTIFY
isPreviewChanged
);
public:
...
...
@@ -79,18 +79,18 @@ public:
QQuickFramebufferObject
::
Renderer
*
createRenderer
()
const
override
;
signals:
void
callChanged
(
CallModel
*
call
);
void
callChanged
(
CallModel
*
call
Model
);
void
isPreviewChanged
(
bool
isPreview
);
private:
CallModel
*
getCall
()
const
;
void
setCall
(
CallModel
*
cal
l
);
CallModel
*
getCall
Model
()
const
;
void
setCall
Model
(
CallModel
*
callMode
l
);
bool
getIsPreview
()
const
;
void
setIsPreview
(
bool
status
);
bool
mIsPreview
=
false
;
CallModel
*
mCall
=
nullptr
;
CallModel
*
mCall
Model
=
nullptr
;
QTimer
*
mRefreshTimer
;
};
...
...
linphone-desktop/src/components/chat/ChatModel.cpp
View file @
fc9e8b68
...
...
@@ -524,6 +524,7 @@ void ChatModel::insertCall (const shared_ptr<linphone::CallLog> &callLog) {
case
linphone
:
:
CallStatusAborted
:
case
linphone
:
:
CallStatusEarlyAborted
:
return
;
// Ignore aborted calls.
case
linphone
:
:
CallStatusSuccess
:
case
linphone
:
:
CallStatusMissed
:
case
linphone
:
:
CallStatusDeclined
:
...
...
linphone-desktop/src/components/contact/VcardModel.hpp
View file @
fc9e8b68
...
...
@@ -29,6 +29,8 @@
// =============================================================================
class
VcardModel
:
public
QObject
{
friend
class
ContactModel
;
Q_OBJECT
;
Q_PROPERTY
(
QString
username
READ
getUsername
WRITE
setUsername
NOTIFY
vcardUpdated
);
...
...
@@ -39,8 +41,6 @@ class VcardModel : public QObject {
Q_PROPERTY
(
QVariantList
emails
READ
getEmails
NOTIFY
vcardUpdated
);
Q_PROPERTY
(
QVariantList
urls
READ
getUrls
NOTIFY
vcardUpdated
);
friend
class
ContactModel
;
public:
VcardModel
(
std
::
shared_ptr
<
linphone
::
Vcard
>
vcard
)
:
mVcard
(
vcard
)
{}
...
...
linphone-desktop/src/components/notifier/Notifier.cpp
View file @
fc9e8b68
...
...
@@ -256,17 +256,17 @@ void Notifier::notifyReceivedCall (const shared_ptr<linphone::Call> &call) {
if
(
!
notification
)
return
;
CallModel
*
model
=
CoreManager
::
getInstance
()
->
getCallsListModel
()
->
getCal
l
(
call
);
CallModel
*
callModel
=
CoreManager
::
getInstance
()
->
getCallsListModel
()
->
getCallMode
l
(
call
);
QObject
::
connect
(
m
odel
,
&
CallModel
::
statusChanged
,
notification
,
[
this
,
notification
](
CallModel
::
CallStatus
status
)
{
callM
odel
,
&
CallModel
::
statusChanged
,
notification
,
[
this
,
notification
](
CallModel
::
CallStatus
status
)
{
if
(
status
==
CallModel
::
CallStatusEnded
||
status
==
CallModel
::
CallStatusConnected
)
deleteNotification
(
QVariant
::
fromValue
(
notification
));
}
);
QVariantMap
map
;
map
[
"call"
].
setValue
(
m
odel
);
map
[
"call"
].
setValue
(
callM
odel
);
::
setProperty
(
*
notification
,
NOTIFICATION_PROPERTY_DATA
,
map
);
showNotification
(
notification
,
NOTIFICATION_TIMEOUT_RECEIVED_CALL
);
...
...
linphone-desktop/ui/views/App/Main/ContactEdit.js
View file @
fc9e8b68
...
...
@@ -24,6 +24,7 @@ function handleCreation () {
contactEdit
.
_edition
=
true
}
else
{
contactEdit
.
_vcard
=
contact
.
vcard
}
}
...
...
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