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
a20c32af
You need to sign in or sign up before continuing.
Commit
a20c32af
authored
Nov 21, 2016
by
Ronan Abhamon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(TimelineModel): init with sqlite data
parent
9eb533b7
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
119 additions
and
30 deletions
+119
-30
CMakeLists.txt
tests/CMakeLists.txt
+1
-0
resources.qrc
tests/resources.qrc
+4
-0
Database.cpp
tests/src/app/Database.cpp
+6
-4
ContactsListModel.cpp
tests/src/components/contacts/ContactsListModel.cpp
+5
-3
ContactsListModel.hpp
tests/src/components/contacts/ContactsListModel.hpp
+1
-1
ContactsListProxyModel.cpp
tests/src/components/contacts/ContactsListProxyModel.cpp
+4
-2
CoreManager.cpp
tests/src/components/core/CoreManager.cpp
+1
-3
TimelineModel.cpp
tests/src/components/timeline/TimelineModel.cpp
+84
-16
TimelineModel.hpp
tests/src/components/timeline/TimelineModel.hpp
+5
-1
ConnectedCallsControl.qml
tests/ui/modules/Linphone/Call/ConnectedCallsControl.qml
+2
-0
IncomingCallControls.qml
tests/ui/modules/Linphone/Call/IncomingCallControls.qml
+2
-0
OutgoingCallControls.qml
tests/ui/modules/Linphone/Call/OutgoingCallControls.qml
+2
-0
PausedCallControls.qml
tests/ui/modules/Linphone/Call/PausedCallControls.qml
+2
-0
No files found.
tests/CMakeLists.txt
View file @
a20c32af
...
...
@@ -6,6 +6,7 @@ cmake_minimum_required(VERSION 3.1)
project
(
linphone
)
set
(
LINPHONE_EXEC linphone
)
set
(
CMAKE_CXX_STANDARD 11
)
# Use automatically moc from Qt5.
set
(
CMAKE_AUTOMOC ON
)
...
...
tests/resources.qrc
View file @
a20c32af
...
...
@@ -109,6 +109,10 @@
<file>
ui/modules/Common/View/ScrollableListView.qml
</file>
<file>
ui/modules/Linphone/Account/AccountStatus.qml
</file>
<file>
ui/modules/Linphone/Call/CallControls.qml
</file>
<file>
ui/modules/Linphone/Call/ConnectedCallsControl.qml
</file>
<file>
ui/modules/Linphone/Call/IncomingCallControls.qml
</file>
<file>
ui/modules/Linphone/Call/OutgoingCallControls.qml
</file>
<file>
ui/modules/Linphone/Call/PausedCallControls.qml
</file>
<file>
ui/modules/Linphone/Chat/Chat.qml
</file>
<file>
ui/modules/Linphone/Chat/Event.qml
</file>
<file>
ui/modules/Linphone/Chat/IncomingMessage.qml
</file>
...
...
tests/src/app/Database.cpp
View file @
a20c32af
...
...
@@ -16,6 +16,8 @@
#define DATABASE_PATH_CALL_HISTORY_LIST ".linphone-call-history.db"
#define DATABASE_PATH_MESSAGE_HISTORY_LIST ".linphone-history.db"
using
namespace
std
;
// ===================================================================
inline
bool
ensureDatabaseFilePathExists
(
const
QString
&
path
)
{
...
...
@@ -29,7 +31,7 @@ inline bool ensureDatabaseFilePathExists (const QString &path) {
return
file
.
exists
()
||
file
.
open
(
QIODevice
::
ReadWrite
);
}
inline
st
d
::
st
ring
getDatabaseFilePath
(
const
QString
&
filename
)
{
inline
string
getDatabaseFilePath
(
const
QString
&
filename
)
{
QString
path
(
DATABASES_PATH
+
"/"
);
path
+=
filename
;
return
ensureDatabaseFilePathExists
(
path
)
...
...
@@ -37,14 +39,14 @@ inline std::string getDatabaseFilePath (const QString &filename) {
:
""
;
}
st
d
::
st
ring
Database
::
getFriendsListPath
()
{
string
Database
::
getFriendsListPath
()
{
return
getDatabaseFilePath
(
DATABASE_PATH_FRIENDS_LIST
);
}
st
d
::
st
ring
Database
::
getCallHistoryPath
()
{
string
Database
::
getCallHistoryPath
()
{
return
getDatabaseFilePath
(
DATABASE_PATH_CALL_HISTORY_LIST
);
}
st
d
::
st
ring
Database
::
getMessageHistoryPath
()
{
string
Database
::
getMessageHistoryPath
()
{
return
getDatabaseFilePath
(
DATABASE_PATH_MESSAGE_HISTORY_LIST
);
}
tests/src/components/contacts/ContactsListModel.cpp
View file @
a20c32af
...
...
@@ -3,14 +3,16 @@
#include "ContactsListModel.hpp"
using
namespace
std
;
// ===================================================================
ContactsListModel
::
ContactsListModel
(
QObject
*
parent
)
:
QAbstractListModel
(
parent
)
{
s
td
::
s
hared_ptr
<
linphone
::
Core
>
core
(
CoreManager
::
getInstance
()
->
getCore
());
shared_ptr
<
linphone
::
Core
>
core
(
CoreManager
::
getInstance
()
->
getCore
());
// Init contacts with linphone friends list.
for
(
auto
friend_
:
core
->
getFriendsLists
().
front
()
->
getFriends
())
{
m_list
<<
new
ContactModel
(
friend_
);
for
(
auto
&&
contact
:
core
->
getFriendsLists
().
front
()
->
getFriends
())
{
m_list
<<
new
ContactModel
(
contact
);
}
}
...
...
tests/src/components/contacts/ContactsListModel.hpp
View file @
a20c32af
...
...
@@ -6,7 +6,7 @@
#include "ContactModel.hpp"
// ===================================================================
#include <QtDebug>
class
ContactsListModel
:
public
QAbstractListModel
{
friend
class
ContactsListProxyModel
;
...
...
tests/src/components/contacts/ContactsListProxyModel.cpp
View file @
a20c32af
...
...
@@ -11,6 +11,8 @@
#define FACTOR_POS_3 0.70
#define FACTOR_POS_OTHER 0.60
using
namespace
std
;
// ===================================================================
ContactsListModel
*
ContactsListProxyModel
::
m_list
=
nullptr
;
...
...
@@ -117,10 +119,10 @@ float ContactsListProxyModel::computeContactWeight (const ContactModel &contact)
float
weight
=
computeStringWeight
(
contact
.
getUsername
(),
USERNAME_WEIGHT
);
// Get all contact's addresses.
const
std
::
list
<
std
::
shared_ptr
<
linphone
::
Address
>
>
addresses
=
const
list
<
shared_ptr
<
linphone
::
Address
>
>
addresses
=
contact
.
m_linphone_friend
->
getAddresses
();
auto
it
=
addresses
.
cbegin
();
auto
&&
it
=
addresses
.
cbegin
();
// It exists at least one sip address.
weight
+=
computeStringWeight
(
...
...
tests/src/components/core/CoreManager.cpp
View file @
a20c32af
...
...
@@ -28,7 +28,5 @@ void CoreManager::setDatabasesPaths () {
database_path
=
Database
::
getMessageHistoryPath
();
if
(
database_path
.
length
()
==
0
)
qFatal
(
"Unable to get message history database path."
);
// FIXME.
// m_core->setChatDatabasePath(database_path);
m_core
->
setChatDatabasePath
(
database_path
);
}
tests/src/components/timeline/TimelineModel.cpp
View file @
a20c32af
#include <algorithm>
#include <QDateTime>
#include <linphone++/linphone.hh>
#include "../../utils.hpp"
#include "../core/CoreManager.hpp"
#include "TimelineModel.hpp"
using
namespace
std
;
// ===================================================================
TimelineModel
::
TimelineModel
(
QObject
*
parent
)
:
QAbstractListModel
(
parent
)
{
// TMP.
m_addresses
<<
"toto.linphone.sip.linphone.org"
;
m_addresses
<<
"toto1.linphone.sip.linphone.org"
;
m_addresses
<<
"toto2.linphone.sip.linphone.org"
;
m_addresses
<<
"toto3.linphone.sip.linphone.org"
;
m_addresses
<<
"toto4.linphone.sip.linphone.org"
;
m_addresses
<<
"toto5.linphone.sip.linphone.org"
;
m_addresses
<<
"toto6.linphone.sip.linphone.org"
;
m_addresses
<<
"toto7.linphone.sip.linphone.org"
;
m_addresses
<<
"toto8.linphone.sip.linphone.org"
;
m_addresses
<<
"toto9.linphone.sip.linphone.org"
;
m_addresses
<<
"toto10.linphone.sip.linphone.org"
;
m_addresses
<<
"toto11.linphone.sip.linphone.org"
;
// Returns an iterator entry position to insert a new entry.
auto
search_entry
=
[
this
](
const
QVariantMap
&
map
,
const
QList
<
QMap
<
QString
,
QVariant
>
>::
iterator
*
start
=
NULL
)
{
return
lower_bound
(
start
?
*
start
:
m_entries
.
begin
(),
m_entries
.
end
(),
map
,
[](
const
QVariantMap
&
a
,
const
QVariantMap
&
b
)
{
return
a
[
"timestamp"
]
<
b
[
"timestamp"
];
}
);
};
shared_ptr
<
linphone
::
Core
>
core
(
CoreManager
::
getInstance
()
->
getCore
());
// Insert chat rooms events.
for
(
auto
&&
chat_room
:
core
->
getChatRooms
())
{
list
<
shared_ptr
<
linphone
::
ChatMessage
>
>
history
=
chat_room
->
getHistory
(
0
);
if
(
history
.
size
()
==
0
)
continue
;
// Last message must be at the end of history.
shared_ptr
<
linphone
::
ChatMessage
>
message
=
history
.
back
();
// Insert event message in timeline entries.
QVariantMap
map
;
map
[
"timestamp"
]
=
QDateTime
::
fromTime_t
(
message
->
getTime
());
map
[
"sipAddresses"
]
=
Utils
::
linphoneStringToQString
(
chat_room
->
getPeerAddress
()
->
asString
()
);
m_entries
.
insert
(
search_entry
(
map
),
map
);
}
// Insert calls events.
QHash
<
QString
,
bool
>
address_done
;
for
(
auto
&&
call_log
:
core
->
getCallLogs
())
{
// Get a sip uri to check.
QString
address
=
Utils
::
linphoneStringToQString
(
call_log
->
getRemoteAddress
()
->
asString
()
);
if
(
address_done
.
value
(
address
))
continue
;
// Already used.
address_done
[
address
]
=
true
;
// Make a new map.
QVariantMap
map
;
map
[
"timestamp"
]
=
QDateTime
::
fromTime_t
(
call_log
->
getStartDate
()
+
call_log
->
getDuration
()
);
map
[
"sipAddresses"
]
=
address
;
// Search existing entry.
auto
&&
it
=
find_if
(
m_entries
.
begin
(),
m_entries
.
end
(),
[
&
address
](
const
QVariantMap
&
map
)
{
return
address
==
map
[
"sipAddresses"
].
toString
();
}
);
// Is it a new entry?
if
(
it
==
m_entries
.
cend
())
m_entries
.
insert
(
search_entry
(
map
),
map
);
else
if
(
map
[
"timestamp"
]
>
(
*
it
)[
"timestamp"
])
{
// Remove old entry and insert.
it
=
m_entries
.
erase
(
it
)
-
1
;
m_entries
.
insert
(
search_entry
(
map
,
&
it
),
map
);
}
}
}
int
TimelineModel
::
rowCount
(
const
QModelIndex
&
)
const
{
return
m_
address
es
.
count
();
return
m_
entri
es
.
count
();
}
QHash
<
int
,
QByteArray
>
TimelineModel
::
roleNames
()
const
{
...
...
@@ -31,11 +99,11 @@ QHash<int, QByteArray> TimelineModel::roleNames () const {
QVariant
TimelineModel
::
data
(
const
QModelIndex
&
index
,
int
role
)
const
{
int
row
=
index
.
row
();
if
(
row
<
0
||
row
>=
m_
address
es
.
count
())
if
(
row
<
0
||
row
>=
m_
entri
es
.
count
())
return
QVariant
();
if
(
role
==
Qt
::
DisplayRole
)
return
QVariant
::
fromValue
(
m_addresses
[
row
])
;
return
m_entries
[
row
]
;
return
QVariant
();
}
tests/src/components/timeline/TimelineModel.hpp
View file @
a20c32af
...
...
@@ -16,7 +16,11 @@ public:
QVariant
data
(
const
QModelIndex
&
index
,
int
role
)
const
;
private:
QStringList
m_addresses
;
// A timeline enty is a object that contains:
// - A QDateTime `timestamp`.
// - A `sipAddresses` value, if it exists only one address, it's
// a string, otherwise it's a string array.
QList
<
QVariantMap
>
m_entries
;
};
#endif // TIMELINE_MODEL_H_
tests/ui/modules/Linphone/Call/ConnectedCallsControl.qml
View file @
a20c32af
import
QtQuick
2.7
Item
{}
tests/ui/modules/Linphone/Call/IncomingCallControls.qml
View file @
a20c32af
import
QtQuick
2.7
Item
{}
tests/ui/modules/Linphone/Call/OutgoingCallControls.qml
View file @
a20c32af
import
QtQuick
2.7
Item
{}
tests/ui/modules/Linphone/Call/PausedCallControls.qml
View file @
a20c32af
import
QtQuick
2.7
Item
{}
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