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
29c5342c
Commit
29c5342c
authored
Jun 26, 2017
by
Wescoeur
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(Timeline): display composing
parent
6027de15
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
107 additions
and
6 deletions
+107
-6
chat_is_composing_0.svg
assets/images/chat_is_composing_0.svg
+15
-0
chat_is_composing_1.svg
assets/images/chat_is_composing_1.svg
+15
-0
chat_is_composing_2.svg
assets/images/chat_is_composing_2.svg
+15
-0
chat_is_composing_3.svg
assets/images/chat_is_composing_3.svg
+15
-0
resources.qrc
resources.qrc
+4
-0
SipAddressesModel.cpp
src/components/sip-addresses/SipAddressesModel.cpp
+16
-4
SipAddressesModel.hpp
src/components/sip-addresses/SipAddressesModel.hpp
+2
-0
Contact.qml
ui/modules/Linphone/Contact/Contact.qml
+3
-1
MessagesCounter.qml
ui/modules/Linphone/Contact/MessagesCounter.qml
+22
-1
No files found.
assets/images/chat_is_composing_0.svg
0 → 100644
View file @
29c5342c
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"18px"
height=
"18px"
viewBox=
"0 0 18 18"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
>
<!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
<title>
chat_in_writing_0
</title>
<desc>
Created with Sketch.
</desc>
<defs></defs>
<g
id=
"Symbols"
stroke=
"none"
stroke-width=
"1"
fill=
"none"
fill-rule=
"evenodd"
>
<g
id=
"chat_in_writing_0"
>
<path
d=
"M6.40657699,14.958235 C6.4063782,14.958235 4.02960743,17.4749743 1,16.7980486 C1,16.7980486 3.96659001,15.9311541 3.29347644,13.3085893 L3.27180799,13.1872479 C1.86653929,11.8936694 1,10.1230801 1,8.16948422 C1,4.20997633 4.5607827,1 8.95192433,1 C13.3432648,1 16.9036499,4.20997633 16.9036499,8.16948422 C16.9036499,12.1289921 13.3432648,15.3387695 8.95192433,15.3387695 C8.06133107,15.3387695 7.20552661,15.2072832 6.4061794,14.9638048 L6.40657699,14.958235 L6.40657699,14.958235 Z"
stroke=
"#96A6B1"
stroke-width=
"1.5"
stroke-linecap=
"round"
stroke-linejoin=
"round"
></path>
<circle
fill=
"#D0D8DE"
cx=
"6"
cy=
"8"
r=
"1"
></circle>
<circle
fill=
"#D0D8DE"
cx=
"9"
cy=
"8"
r=
"1"
></circle>
<circle
fill=
"#D0D8DE"
cx=
"12"
cy=
"8"
r=
"1"
></circle>
</g>
</g>
</svg>
\ No newline at end of file
assets/images/chat_is_composing_1.svg
0 → 100644
View file @
29c5342c
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"18px"
height=
"18px"
viewBox=
"0 0 18 18"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
>
<!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
<title>
chat_in_writing_1
</title>
<desc>
Created with Sketch.
</desc>
<defs></defs>
<g
id=
"Symbols"
stroke=
"none"
stroke-width=
"1"
fill=
"none"
fill-rule=
"evenodd"
>
<g
id=
"chat_in_writing_1"
>
<path
d=
"M6.40657699,14.958235 C6.4063782,14.958235 4.02960743,17.4749743 1,16.7980486 C1,16.7980486 3.96659001,15.9311541 3.29347644,13.3085893 L3.27180799,13.1872479 C1.86653929,11.8936694 1,10.1230801 1,8.16948422 C1,4.20997633 4.5607827,1 8.95192433,1 C13.3432648,1 16.9036499,4.20997633 16.9036499,8.16948422 C16.9036499,12.1289921 13.3432648,15.3387695 8.95192433,15.3387695 C8.06133107,15.3387695 7.20552661,15.2072832 6.4061794,14.9638048 L6.40657699,14.958235 L6.40657699,14.958235 Z"
stroke=
"#96A6B1"
stroke-width=
"1.5"
stroke-linecap=
"round"
stroke-linejoin=
"round"
></path>
<circle
fill=
"#96A6B1"
cx=
"6"
cy=
"8"
r=
"1"
></circle>
<circle
fill=
"#D0D8DE"
cx=
"9"
cy=
"8"
r=
"1"
></circle>
<circle
fill=
"#D0D8DE"
cx=
"12"
cy=
"8"
r=
"1"
></circle>
</g>
</g>
</svg>
\ No newline at end of file
assets/images/chat_is_composing_2.svg
0 → 100644
View file @
29c5342c
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"18px"
height=
"18px"
viewBox=
"0 0 18 18"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
>
<!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
<title>
chat_in_writing_2
</title>
<desc>
Created with Sketch.
</desc>
<defs></defs>
<g
id=
"Symbols"
stroke=
"none"
stroke-width=
"1"
fill=
"none"
fill-rule=
"evenodd"
>
<g
id=
"chat_in_writing_2"
>
<path
d=
"M6.40657699,14.958235 C6.4063782,14.958235 4.02960743,17.4749743 1,16.7980486 C1,16.7980486 3.96659001,15.9311541 3.29347644,13.3085893 L3.27180799,13.1872479 C1.86653929,11.8936694 1,10.1230801 1,8.16948422 C1,4.20997633 4.5607827,1 8.95192433,1 C13.3432648,1 16.9036499,4.20997633 16.9036499,8.16948422 C16.9036499,12.1289921 13.3432648,15.3387695 8.95192433,15.3387695 C8.06133107,15.3387695 7.20552661,15.2072832 6.4061794,14.9638048 L6.40657699,14.958235 L6.40657699,14.958235 Z"
stroke=
"#96A6B1"
stroke-width=
"1.5"
stroke-linecap=
"round"
stroke-linejoin=
"round"
></path>
<circle
fill=
"#96A6B1"
cx=
"6"
cy=
"8"
r=
"1"
></circle>
<circle
fill=
"#96A6B1"
cx=
"9"
cy=
"8"
r=
"1"
></circle>
<circle
fill=
"#D0D8DE"
cx=
"12"
cy=
"8"
r=
"1"
></circle>
</g>
</g>
</svg>
\ No newline at end of file
assets/images/chat_is_composing_3.svg
0 → 100644
View file @
29c5342c
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"18px"
height=
"18px"
viewBox=
"0 0 18 18"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
>
<!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
<title>
chat_in_writing_3
</title>
<desc>
Created with Sketch.
</desc>
<defs></defs>
<g
id=
"Symbols"
stroke=
"none"
stroke-width=
"1"
fill=
"none"
fill-rule=
"evenodd"
>
<g
id=
"chat_in_writing_3"
>
<path
d=
"M6.40657699,14.958235 C6.4063782,14.958235 4.02960743,17.4749743 1,16.7980486 C1,16.7980486 3.96659001,15.9311541 3.29347644,13.3085893 L3.27180799,13.1872479 C1.86653929,11.8936694 1,10.1230801 1,8.16948422 C1,4.20997633 4.5607827,1 8.95192433,1 C13.3432648,1 16.9036499,4.20997633 16.9036499,8.16948422 C16.9036499,12.1289921 13.3432648,15.3387695 8.95192433,15.3387695 C8.06133107,15.3387695 7.20552661,15.2072832 6.4061794,14.9638048 L6.40657699,14.958235 L6.40657699,14.958235 Z"
stroke=
"#96A6B1"
stroke-width=
"1.5"
stroke-linecap=
"round"
stroke-linejoin=
"round"
></path>
<circle
fill=
"#96A6B1"
cx=
"6"
cy=
"8"
r=
"1"
></circle>
<circle
fill=
"#96A6B1"
cx=
"9"
cy=
"8"
r=
"1"
></circle>
<circle
fill=
"#96A6B1"
cx=
"12"
cy=
"8"
r=
"1"
></circle>
</g>
</g>
</svg>
\ No newline at end of file
resources.qrc
View file @
29c5342c
...
@@ -60,6 +60,10 @@
...
@@ -60,6 +60,10 @@
<file>
assets/images/chat_delivered.svg
</file>
<file>
assets/images/chat_delivered.svg
</file>
<file>
assets/images/chat_error.svg
</file>
<file>
assets/images/chat_error.svg
</file>
<file>
assets/images/chat_hovered.svg
</file>
<file>
assets/images/chat_hovered.svg
</file>
<file>
assets/images/chat_is_composing_0.svg
</file>
<file>
assets/images/chat_is_composing_1.svg
</file>
<file>
assets/images/chat_is_composing_2.svg
</file>
<file>
assets/images/chat_is_composing_3.svg
</file>
<file>
assets/images/chat_normal.svg
</file>
<file>
assets/images/chat_normal.svg
</file>
<file>
assets/images/chat_pressed.svg
</file>
<file>
assets/images/chat_pressed.svg
</file>
<file>
assets/images/chat_read.svg
</file>
<file>
assets/images/chat_read.svg
</file>
...
...
src/components/sip-addresses/SipAddressesModel.cpp
View file @
29c5342c
...
@@ -48,10 +48,11 @@ SipAddressesModel::SipAddressesModel (QObject *parent) : QAbstractListModel(pare
...
@@ -48,10 +48,11 @@ SipAddressesModel::SipAddressesModel (QObject *parent) : QAbstractListModel(pare
QObject
::
connect
(
contacts
,
&
ContactsListModel
::
sipAddressAdded
,
this
,
&
SipAddressesModel
::
handleSipAddressAdded
);
QObject
::
connect
(
contacts
,
&
ContactsListModel
::
sipAddressAdded
,
this
,
&
SipAddressesModel
::
handleSipAddressAdded
);
QObject
::
connect
(
contacts
,
&
ContactsListModel
::
sipAddressRemoved
,
this
,
&
SipAddressesModel
::
handleSipAddressRemoved
);
QObject
::
connect
(
contacts
,
&
ContactsListModel
::
sipAddressRemoved
,
this
,
&
SipAddressesModel
::
handleSipAddressRemoved
);
CoreHandlers
*
intHandlers
=
mCoreHandlers
.
get
();
CoreHandlers
*
coreHandlers
=
mCoreHandlers
.
get
();
QObject
::
connect
(
intHandlers
,
&
CoreHandlers
::
messageReceived
,
this
,
&
SipAddressesModel
::
handleMessageReceived
);
QObject
::
connect
(
coreHandlers
,
&
CoreHandlers
::
messageReceived
,
this
,
&
SipAddressesModel
::
handleMessageReceived
);
QObject
::
connect
(
intHandlers
,
&
CoreHandlers
::
callStateChanged
,
this
,
&
SipAddressesModel
::
handleCallStateChanged
);
QObject
::
connect
(
coreHandlers
,
&
CoreHandlers
::
callStateChanged
,
this
,
&
SipAddressesModel
::
handleCallStateChanged
);
QObject
::
connect
(
intHandlers
,
&
CoreHandlers
::
presenceReceived
,
this
,
&
SipAddressesModel
::
handlePresenceReceived
);
QObject
::
connect
(
coreHandlers
,
&
CoreHandlers
::
presenceReceived
,
this
,
&
SipAddressesModel
::
handlePresenceReceived
);
QObject
::
connect
(
coreHandlers
,
&
CoreHandlers
::
isComposingChanged
,
this
,
&
SipAddressesModel
::
handlerIsComposingChanged
);
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
...
@@ -348,6 +349,17 @@ void SipAddressesModel::handleMessagesCountReset (const QString &sipAddress) {
...
@@ -348,6 +349,17 @@ void SipAddressesModel::handleMessagesCountReset (const QString &sipAddress) {
updateObservers
(
sipAddress
,
0
);
updateObservers
(
sipAddress
,
0
);
}
}
void
SipAddressesModel
::
handlerIsComposingChanged
(
const
shared_ptr
<
linphone
::
ChatRoom
>
&
chatRoom
)
{
auto
it
=
mSipAddresses
.
find
(
::
Utils
::
coreStringToAppString
(
chatRoom
->
getPeerAddress
()
->
asStringUriOnly
()));
if
(
it
!=
mSipAddresses
.
end
())
{
(
*
it
)[
"isComposing"
]
=
chatRoom
->
isRemoteComposing
();
int
row
=
mRefs
.
indexOf
(
&
(
*
it
));
Q_ASSERT
(
row
!=
-
1
);
emit
dataChanged
(
index
(
row
,
0
),
index
(
row
,
0
));
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
SipAddressesModel
::
addOrUpdateSipAddress
(
QVariantMap
&
map
,
ContactModel
*
contact
)
{
void
SipAddressesModel
::
addOrUpdateSipAddress
(
QVariantMap
&
map
,
ContactModel
*
contact
)
{
...
...
src/components/sip-addresses/SipAddressesModel.hpp
View file @
29c5342c
...
@@ -86,6 +86,8 @@ private:
...
@@ -86,6 +86,8 @@ private:
void
handleMessageSent
(
const
std
::
shared_ptr
<
linphone
::
ChatMessage
>
&
message
);
void
handleMessageSent
(
const
std
::
shared_ptr
<
linphone
::
ChatMessage
>
&
message
);
void
handleMessagesCountReset
(
const
QString
&
sipAddress
);
void
handleMessagesCountReset
(
const
QString
&
sipAddress
);
void
handlerIsComposingChanged
(
const
std
::
shared_ptr
<
linphone
::
ChatRoom
>
&
chatRoom
);
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// A sip address exists in this list if a contact is linked to it, or a call, or a message.
// A sip address exists in this list if a contact is linked to it, or a call, or a message.
...
...
ui/modules/Linphone/Contact/Contact.qml
View file @
29c5342c
...
@@ -65,7 +65,9 @@ Rectangle {
...
@@ -65,7 +65,9 @@ Rectangle {
Layout.alignment
:
Qt
.
AlignTop
Layout.alignment
:
Qt
.
AlignTop
count
:
Number
(
entry
.
unreadMessagesCount
)
count
:
Number
(
entry
.
unreadMessagesCount
)
visible
:
displayUnreadMessagesCount
&&
entry
.
unreadMessagesCount
>
0
isComposing
:
Boolean
(
entry
.
isComposing
)
visible
:
item
.
displayUnreadMessagesCount
}
}
}
}
}
}
ui/modules/Linphone/Contact/MessagesCounter.qml
View file @
29c5342c
...
@@ -10,6 +10,7 @@ Item {
...
@@ -10,6 +10,7 @@ Item {
id
:
messagesCounter
id
:
messagesCounter
property
int
count
property
int
count
property
bool
isComposing
implicitHeight
:
counterIcon
.
height
+
MessagesCounterStyle
.
verticalMargins
*
2
implicitHeight
:
counterIcon
.
height
+
MessagesCounterStyle
.
verticalMargins
*
2
implicitWidth
:
counterIcon
.
width
+
MessagesCounterStyle
.
horizontalMargins
*
2
implicitWidth
:
counterIcon
.
width
+
MessagesCounterStyle
.
horizontalMargins
*
2
...
@@ -17,10 +18,15 @@ Item {
...
@@ -17,10 +18,15 @@ Item {
Icon
{
Icon
{
id
:
counterIcon
id
:
counterIcon
property
int
composingIndex
:
0
anchors.centerIn
:
parent
anchors.centerIn
:
parent
icon
:
'
chat_count
'
icon
:
messagesCounter
.
isComposing
?
(
'
chat_is_composing_
'
+
counterIcon
.
composingIndex
)
:
'
chat_count
'
iconSize
:
MessagesCounterStyle
.
iconSize
.
message
iconSize
:
MessagesCounterStyle
.
iconSize
.
message
visible
:
messagesCounter
.
count
>
0
||
messagesCounter
.
isComposing
Icon
{
Icon
{
anchors
{
anchors
{
...
@@ -30,6 +36,7 @@ Item {
...
@@ -30,6 +36,7 @@ Item {
icon
:
'
chat_amount
'
icon
:
'
chat_amount
'
iconSize
:
MessagesCounterStyle
.
iconSize
.
amount
iconSize
:
MessagesCounterStyle
.
iconSize
.
amount
visible
:
messagesCounter
.
count
>
0
Text
{
Text
{
anchors.centerIn
:
parent
anchors.centerIn
:
parent
...
@@ -38,5 +45,19 @@ Item {
...
@@ -38,5 +45,19 @@ Item {
text
:
messagesCounter
.
count
text
:
messagesCounter
.
count
}
}
}
}
Timer
{
interval
:
500
repeat
:
true
running
:
messagesCounter
.
isComposing
onRunningChanged
:
{
if
(
running
)
{
counterIcon
.
composingIndex
=
0
}
}
onTriggered
:
counterIcon
.
composingIndex
=
(
counterIcon
.
composingIndex
+
1
)
%
4
}
}
}
}
}
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