Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
J
jami-client-macos
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
savoirfairelinux
jami-client-macos
Commits
6e817148
Commit
6e817148
authored
10 years ago
by
Alexandre Lision
Browse files
Options
Downloads
Patches
Plain Diff
history: adapt to lrc changes
Refs #66840 Change-Id: I4fde45ba26cf0e08ac2c6ac77af26f4f96dc42e9
parent
4a7b95e6
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
MinimalHistoryBackend.mm
+163
-155
163 additions, 155 deletions
MinimalHistoryBackend.mm
minimalhistorybackend.h
+15
-52
15 additions, 52 deletions
minimalhistorybackend.h
with
178 additions
and
207 deletions
MinimalHistoryBackend.mm
+
163
−
155
View file @
6e817148
...
...
@@ -20,223 +20,231 @@
//Qt
#include
<QtCore/QFile>
#include
<QtCore/QDir>
#include
<QtCore/QHash>
#include
<QtCore/qcoreapplication.h>
#include
<QtWidgets/QApplication>
#include
<QtCore/QStandardPaths>
//Ring
#include
"call.h"
#include
"account.h"
#include
"phonenumber.h"
#include
"historymodel.h"
#include
<call.h>
#include
<account.h>
#include
<person.h>
#include
<contactmethod.h>
#include
<historymodel.h>
class
MinimalHistoryEditor
:
public
CollectionEditor
<
Call
>
{
public:
MinimalHistoryEditor
(
CollectionMediator
<
Call
>*
m
,
MinimalHistoryBackend
*
parent
);
virtual
bool
save
(
const
Call
*
item
)
override
;
virtual
bool
remove
(
const
Call
*
item
)
override
;
virtual
bool
edit
(
Call
*
item
)
override
;
virtual
bool
addNew
(
const
Call
*
item
)
override
;
virtual
bool
addExisting
(
const
Call
*
item
)
override
;
private:
virtual
QVector
<
Call
*>
items
()
const
override
;
//Helpers
void
saveCall
(
QTextStream
&
stream
,
const
Call
*
call
);
bool
regenFile
(
const
Call
*
toIgnore
);
//Attributes
QVector
<
Call
*>
m_lItems
;
MinimalHistoryBackend
*
m_pCollection
;
};
MinimalHistoryEditor
::
MinimalHistoryEditor
(
CollectionMediator
<
Call
>*
m
,
MinimalHistoryBackend
*
parent
)
:
CollectionEditor
<
Call
>
(
m
),
m_pCollection
(
parent
)
{
}
MinimalHistoryBackend
::
MinimalHistoryBackend
(
CollectionMediator
<
Call
>*
mediator
)
:
CollectionInterface
(
new
MinimalHistoryEditor
(
mediator
,
this
)),
m_pMediator
(
mediator
)
{
}
MinimalHistoryBackend
::~
MinimalHistoryBackend
()
{
}
bool
MinimalHistoryEditor
::
save
(
const
Call
*
item
)
void
MinimalHistoryEditor
::
saveCall
(
QTextStream
&
stream
,
const
Call
*
call
)
{
const
QString
direction
=
(
call
->
direction
()
==
Call
::
Direction
::
INCOMING
)?
Call
:
:
HistoryStateName
::
INCOMING
:
Call
::
HistoryStateName
::
OUTGOING
;
const
Account
*
a
=
call
->
account
();
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
CALLID
).
arg
(
call
->
historyId
()
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
TIMESTAMP_START
).
arg
(
call
->
startTimeStamp
()
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
TIMESTAMP_STOP
).
arg
(
call
->
stopTimeStamp
()
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
ACCOUNT_ID
).
arg
(
a
?
QString
(
a
->
id
()):
""
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
DISPLAY_NAME
).
arg
(
call
->
peerName
()
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
PEER_NUMBER
).
arg
(
call
->
peerContactMethod
()
->
uri
()
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
DIRECTION
).
arg
(
direction
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
MISSED
).
arg
(
call
->
isMissed
()
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
RECORDING_PATH
).
arg
(
call
->
recordingPath
()
);
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
CONTACT_USED
).
arg
(
false
);
//TODO
if
(
call
->
peerContactMethod
()
->
contact
())
{
stream
<<
QString
(
"%1=%2
\n
"
).
arg
(
Call
::
HistoryMapFields
::
CONTACT_UID
).
arg
(
QString
(
call
->
peerContactMethod
()
->
contact
()
->
uid
())
);
}
stream
<<
"
\n
"
;
stream
.
flush
();
}
bool
MinimalHistoryEditor
::
regenFile
(
const
Call
*
toIgnore
)
{
Q_UNUSED
(
item
)
return
false
;
QDir
dir
(
QString
(
'/'
));
dir
.
mkpath
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DataLocation
)
+
QLatin1Char
(
'/'
)
+
QString
());
QFile
file
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DataLocation
)
+
QLatin1Char
(
'/'
)
+
"history.ini"
);
if
(
file
.
open
(
QIODevice
::
WriteOnly
|
QIODevice
::
Text
)
)
{
QTextStream
stream
(
&
file
);
for
(
const
Call
*
c
:
HistoryModel
::
instance
()
->
getHistoryCalls
())
{
if
(
c
!=
toIgnore
)
saveCall
(
stream
,
c
);
}
file
.
close
();
return
true
;
}
return
false
;
}
bool
MinimalHistoryEditor
::
append
(
const
Call
*
item
)
bool
MinimalHistoryEditor
::
save
(
const
Call
*
call
)
{
Q_UNUSED
(
item
)
return
false
;
if
(
call
->
collection
()
->
editor
<
Call
>
()
!=
this
)
return
addNew
(
call
);
return
regenFile
(
nullptr
);
}
bool
MinimalHistoryEditor
::
remove
(
Call
*
item
)
bool
MinimalHistoryEditor
::
remove
(
const
Call
*
item
)
{
Q_UNUSED
(
item
)
return
false
;
return
regenFile
(
item
);
}
bool
MinimalHistoryEditor
::
edit
(
Call
*
item
)
{
Q_UNUSED
(
item
)
return
false
;
Q_UNUSED
(
item
)
return
false
;
}
bool
MinimalHistoryEditor
::
addNew
(
const
Call
*
call
)
{
QDir
dir
(
QString
(
'/'
));
dir
.
mkpath
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DataLocation
)
+
QLatin1Char
(
'/'
)
+
QString
());
if
((
call
->
collection
()
&&
call
->
collection
()
->
editor
<
Call
>
()
==
this
)
||
call
->
historyId
().
isEmpty
())
return
false
;
//TODO support \r and \n\r end of line
QFile
file
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DataLocation
)
+
QLatin1Char
(
'/'
)
+
"history.ini"
);
if
(
file
.
open
(
QIODevice
::
Append
|
QIODevice
::
Text
)
)
{
QTextStream
streamFileOut
(
&
file
);
saveCall
(
streamFileOut
,
call
);
file
.
close
();
const_cast
<
Call
*>
(
call
)
->
setCollection
(
m_pCollection
);
addExisting
(
call
);
return
true
;
}
else
qWarning
()
<<
"Unable to save history"
;
return
false
;
}
bool
MinimalHistoryEditor
::
add
New
(
Call
*
item
)
bool
MinimalHistoryEditor
::
add
Existing
(
const
Call
*
item
)
{
Q_UNUSED
(
item
)
return
false
;
m_lItems
<<
const_cast
<
Call
*>
(
item
);
mediator
()
->
addItem
(
item
);
return
true
;
}
QVector
<
Call
*>
MinimalHistoryEditor
::
items
()
const
{
return
QVector
<
Call
*>
()
;
return
m_lItems
;
}
QString
MinimalHistoryBackend
::
name
()
const
{
return
QObject
::
tr
(
"Minimal history backend"
);
return
QObject
::
tr
(
"Minimal history backend"
);
}
QString
MinimalHistoryBackend
::
category
()
const
{
return
QObject
::
tr
(
"History"
);
return
QObject
::
tr
(
"History"
);
}
QVariant
MinimalHistoryBackend
::
icon
()
const
{
return
QVariant
();
return
QVariant
();
}
bool
MinimalHistoryBackend
::
isEnabled
()
const
{
return
true
;
return
true
;
}
bool
MinimalHistoryBackend
::
load
()
{
QFile
file
(
QCoreApplication
::
applicationDirPath
()
+
"/history.ini"
);
if
(
file
.
open
(
QIODevice
::
ReadOnly
|
QIODevice
::
Text
)
)
{
QMap
<
QString
,
QString
>
hc
;
while
(
!
file
.
atEnd
())
{
QByteArray
line
=
file
.
readLine
().
trimmed
();
//The item is complete
if
((
line
.
isEmpty
()
||
!
line
.
size
())
&&
hc
.
size
())
{
Call
*
pastCall
=
Call
::
buildHistoryCall
(
hc
);
if
(
pastCall
->
peerName
().
isEmpty
())
{
pastCall
->
setPeerName
(
QObject
::
tr
(
"Unknown"
));
QFile
file
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DataLocation
)
+
QLatin1Char
(
'/'
)
+
"history.ini"
);
if
(
file
.
open
(
QIODevice
::
ReadOnly
|
QIODevice
::
Text
)
)
{
QMap
<
QString
,
QString
>
hc
;
while
(
!
file
.
atEnd
())
{
QByteArray
line
=
file
.
readLine
().
trimmed
();
//The item is complete
if
((
line
.
isEmpty
()
||
!
line
.
size
())
&&
hc
.
size
())
{
Call
*
pastCall
=
Call
::
buildHistoryCall
(
hc
);
if
(
pastCall
->
peerName
().
isEmpty
())
{
pastCall
->
setPeerName
(
QObject
::
tr
(
"Unknown"
));
}
pastCall
->
setRecordingPath
(
hc
[
Call
:
:
HistoryMapFields
:
:
RECORDING_PATH
]);
pastCall
->
setCollection
(
this
);
editor
<
Call
>
()
->
addExisting
(
pastCall
);
hc
.
clear
();
}
pastCall
->
setRecordingPath
(
hc
[
Call
:
:
HistoryMapFields
:
:
RECORDING_PATH
]);
pastCall
->
setBackend
(
this
);
m_pMediator
->
addItem
(
pastCall
);
hc
.
clear
();
}
// Add to the current set
else
{
const
int
idx
=
line
.
indexOf
(
"="
);
if
(
idx
>=
0
)
hc
[
line
.
left
(
idx
)]
=
line
.
right
(
line
.
size
()
-
idx
-
1
);
}
}
return
true
;
}
else
qWarning
()
<<
"History doesn't exist or is not readable"
;
return
false
;
// Add to the current set
else
{
const
int
idx
=
line
.
indexOf
(
"="
);
if
(
idx
>=
0
)
hc
[
line
.
left
(
idx
)]
=
line
.
right
(
line
.
size
()
-
idx
-
1
);
}
}
return
true
;
}
else
qWarning
()
<<
"History doesn't exist or is not readable"
;
return
false
;
}
bool
MinimalHistoryBackend
::
reload
()
{
return
false
;
}
// bool MinimalHistoryBackend::append(const Call* call)
// {
// if (call->backend() == this || call->id().isEmpty()) return false;
// //TODO support \r and \n\r end of line
// QFile file(KStandardDirs::locateLocal("appdata","")+"history.ini");
// if ( file.open(QIODevice::Append | QIODevice::Text) ) {
// const QString direction = (call->direction()==Call::Direction::INCOMING)?
// Call::HistoryStateName::INCOMING : Call::HistoryStateName::OUTGOING;
// QTextStream streamFileOut(&file);
// const Account* a = call->account();
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::CALLID ).arg(call->id() );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::TIMESTAMP_START ).arg(call->startTimeStamp() );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::TIMESTAMP_STOP ).arg(call->stopTimeStamp() );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::ACCOUNT_ID ).arg(a?QString(a->id()):"" );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::DISPLAY_NAME ).arg(call->peerName() );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::PEER_NUMBER ).arg(call->peerPhoneNumber()->uri() );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::DIRECTION ).arg(direction );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::MISSED ).arg(call->isMissed() );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::RECORDING_PATH ).arg(call->recordingPath() );
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::CONTACT_USED ).arg(false );//TODO
// if (call->peerPhoneNumber()->contact()) {
// streamFileOut << QString("%1=%2\n").arg(Call::HistoryMapFields::CONTACT_UID ).arg(
// QString(call->peerPhoneNumber()->contact()->uid())
// );
// }
// streamFileOut << "\n";
// streamFileOut.flush();
// file.close();
// return true;
// }
// else
// qWarning() << "Unable to save history";
// return false;
// }
/** Rewrite the file from scratch
* @todo Eventually check if it is necessary, it will be faster
*/
// bool MinimalHistoryBackend::save(const Call* call)
// {
// Q_UNUSED(call)
// if (call->backend() != this)
// append(call);
//
// //TODO, need to regenerate everything
// /*QFile file(KStandardDirs::locateLocal("appdata","")+"history.ini");
// if ( file.open(QIODevice::WriteOnly | QIODevice::Text) ) {
// foreach(const Call* call, HistoryModel::instance()->getHistoryCalls()) {
// qDebug() << "HERE" << call->id();
// }
// return true;
// }*/
// return false;
// }
return
false
;
}
CollectionInterface
::
SupportedFeatures
MinimalHistoryBackend
::
supportedFeatures
()
const
{
return
(
CollectionInterface
::
SupportedFeatures
)
(
CollectionInterface
::
SupportedFeatures
::
NONE
|
CollectionInterface
::
SupportedFeatures
::
LOAD
|
CollectionInterface
::
SupportedFeatures
::
CLEAR
|
// CollectionInterface::SupportedFeatures::REMOVE|
CollectionInterface
::
SupportedFeatures
::
ADD
);
}
///Edit 'item', the implementation may be a GUI or somehting else
// bool MinimalHistoryBackend::edit( Call* call)
// {
// Q_UNUSED(call)
// return false;
// }
// bool MinimalHistoryBackend::remove ( Call* c )
// {
// Q_UNUSED(c)
// qDebug() << "Removing item is not yet supported";
// return true;
// }
///Add a new item to the backend
// bool MinimalHistoryBackend::addNew( Call* call)
// {
// Q_UNUSED(call)
// return true;
// }
///Add a new phone number to an existing item
// bool MinimalHistoryBackend::addPhoneNumber( Call* call , PhoneNumber* number )
// {
// Q_UNUSED(call)
// Q_UNUSED(number)
// return false;
// }
return
(
CollectionInterface
::
SupportedFeatures
)
(
CollectionInterface
::
SupportedFeatures
::
NONE
|
CollectionInterface
::
SupportedFeatures
::
LOAD
|
CollectionInterface
::
SupportedFeatures
::
CLEAR
|
CollectionInterface
::
SupportedFeatures
::
REMOVE
|
CollectionInterface
::
SupportedFeatures
::
ADD
);
}
bool
MinimalHistoryBackend
::
clear
()
{
QFile
::
remove
(
QCoreApplication
::
applicationDirPath
()
+
"/history.ini"
);
/* TODO: insert confirm dialog? */
QFile
::
remove
(
QStandardPaths
::
writableLocation
(
QStandardPaths
::
DataLocation
)
+
QLatin1Char
(
'/'
)
+
"history.ini"
);
return
true
;
}
QByteArray
MinimalHistoryBackend
::
id
()
const
{
return
"mhb"
;
return
"mhb"
;
}
// QList<Call*> MinimalHistoryBackend::items() const
// {
// return QList<Call*>(); //TODO
// }
This diff is collapsed.
Click to expand it.
minimalhistorybackend.h
+
15
−
52
View file @
6e817148
...
...
@@ -19,8 +19,8 @@
#ifndef MINIMALHISTORYBACKEND_H
#define MINIMALHISTORYBACKEND_H
#include
"
collectioninterface.h
"
#include
"
collectioneditor.h
"
#include
<
collectioninterface.h
>
#include
<
collectioneditor.h
>
class
Call
;
...
...
@@ -29,58 +29,21 @@ template<typename T> class CollectionMediator;
class
LIB_EXPORT
MinimalHistoryBackend
:
public
CollectionInterface
{
public:
template
<
typename
T
>
explicit
MinimalHistoryBackend
(
CollectionMediator
<
T
>*
mediator
);
virtual
~
MinimalHistoryBackend
();
virtual
bool
load
()
override
;
virtual
bool
reload
()
override
;
virtual
bool
clear
()
override
;
// virtual bool save(const Call* call) override;
// virtual bool append(const Call* item) override;
virtual
QString
name
()
const
override
;
virtual
QString
category
()
const
override
;
virtual
QVariant
icon
()
const
override
;
virtual
bool
isEnabled
()
const
override
;
virtual
QByteArray
id
()
const
override
;
// virtual bool remove ( Call* c ) override;
virtual
SupportedFeatures
supportedFeatures
()
const
override
;
// virtual QList<Call*> items() const override;
///Edit 'item', the implementation may be a GUI or somehting else
// virtual bool edit( Call* call) override;
///Add a new item to the backend
// virtual bool addNew( Call* call) override;
///Add a new phone number to an existing item
// virtual bool addPhoneNumber( Call* call , PhoneNumber* number ) override;
private:
CollectionMediator
<
Call
>*
m_pMediator
;
};
class
MinimalHistoryEditor
:
public
CollectionEditor
<
Call
>
{
public:
MinimalHistoryEditor
(
CollectionMediator
<
Call
>*
m
)
:
CollectionEditor
<
Call
>
(
m
)
{}
virtual
bool
save
(
const
Call
*
item
)
override
;
virtual
bool
append
(
const
Call
*
item
)
override
;
virtual
bool
remove
(
Call
*
item
)
override
;
virtual
bool
edit
(
Call
*
item
)
override
;
virtual
bool
addNew
(
Call
*
item
)
override
;
explicit
MinimalHistoryBackend
(
CollectionMediator
<
Call
>*
mediator
);
virtual
~
MinimalHistoryBackend
();
virtual
bool
load
()
override
;
virtual
bool
reload
()
override
;
virtual
bool
clear
()
override
;
virtual
QString
name
()
const
override
;
virtual
QString
category
()
const
override
;
virtual
QVariant
icon
()
const
override
;
virtual
bool
isEnabled
()
const
override
;
virtual
QByteArray
id
()
const
override
;
virtual
SupportedFeatures
supportedFeatures
()
const
override
;
private:
virtual
QVector
<
Call
*>
items
()
const
override
;
CollectionMediator
<
Call
>*
m_pMediator
;
};
template
<
typename
T
>
MinimalHistoryBackend
::
MinimalHistoryBackend
(
CollectionMediator
<
T
>*
mediator
)
:
CollectionInterface
(
new
MinimalHistoryEditor
(
mediator
)),
m_pMediator
(
mediator
)
{
// setObjectName("MinimalHistoryBackend");
}
#endif
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment