Commit 6e817148 authored by Alexandre Lision's avatar Alexandre Lision

history: adapt to lrc changes

Refs #66840

Change-Id: I4fde45ba26cf0e08ac2c6ac77af26f4f96dc42e9
parent 4a7b95e6
...@@ -20,223 +20,231 @@ ...@@ -20,223 +20,231 @@
//Qt //Qt
#include <QtCore/QFile> #include <QtCore/QFile>
#include <QtCore/QDir>
#include <QtCore/QHash> #include <QtCore/QHash>
#include <QtCore/qcoreapplication.h> #include <QtWidgets/QApplication>
#include <QtCore/QStandardPaths>
//Ring //Ring
#include "call.h" #include <call.h>
#include "account.h" #include <account.h>
#include "phonenumber.h" #include <person.h>
#include "historymodel.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() 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) QDir dir(QString('/'));
return false; 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) if (call->collection()->editor<Call>() != this)
return false; return addNew(call);
return regenFile(nullptr);
} }
bool MinimalHistoryEditor::remove(Call* item) bool MinimalHistoryEditor::remove(const Call* item)
{ {
Q_UNUSED(item) return regenFile(item);
return false;
} }
bool MinimalHistoryEditor::edit( Call* item) bool MinimalHistoryEditor::edit( Call* item)
{ {
Q_UNUSED(item) Q_UNUSED(item)
return false; 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::addNew( Call* item) bool MinimalHistoryEditor::addExisting(const Call* item)
{ {
Q_UNUSED(item) m_lItems << const_cast<Call*>(item);
return false; mediator()->addItem(item);
return true;
} }
QVector<Call*> MinimalHistoryEditor::items() const QVector<Call*> MinimalHistoryEditor::items() const
{ {
return QVector<Call*>(); return m_lItems;
} }
QString MinimalHistoryBackend::name () const QString MinimalHistoryBackend::name () const
{ {
return QObject::tr("Minimal history backend"); return QObject::tr("Minimal history backend");
} }
QString MinimalHistoryBackend::category () const QString MinimalHistoryBackend::category () const
{ {
return QObject::tr("History"); return QObject::tr("History");
} }
QVariant MinimalHistoryBackend::icon() const QVariant MinimalHistoryBackend::icon() const
{ {
return QVariant(); return QVariant();
} }
bool MinimalHistoryBackend::isEnabled() const bool MinimalHistoryBackend::isEnabled() const
{ {
return true; return true;
} }
bool MinimalHistoryBackend::load() bool MinimalHistoryBackend::load()
{ {
QFile file(QCoreApplication::applicationDirPath() +"/history.ini"); QFile file(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1Char('/') +"history.ini");
if ( file.open(QIODevice::ReadOnly | QIODevice::Text) ) { if ( file.open(QIODevice::ReadOnly | QIODevice::Text) ) {
QMap<QString,QString> hc; QMap<QString,QString> hc;
while (!file.atEnd()) { while (!file.atEnd()) {
QByteArray line = file.readLine().trimmed(); QByteArray line = file.readLine().trimmed();
//The item is complete //The item is complete
if ((line.isEmpty() || !line.size()) && hc.size()) { if ((line.isEmpty() || !line.size()) && hc.size()) {
Call* pastCall = Call::buildHistoryCall(hc); Call* pastCall = Call::buildHistoryCall(hc);
if (pastCall->peerName().isEmpty()) { if (pastCall->peerName().isEmpty()) {
pastCall->setPeerName(QObject::tr("Unknown")); 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 ]); // Add to the current set
pastCall->setBackend(this); else {
m_pMediator->addItem(pastCall); const int idx = line.indexOf("=");
hc.clear(); if (idx >= 0)
} hc[line.left(idx)] = line.right(line.size()-idx-1);
// Add to the current set }
else { }
const int idx = line.indexOf("="); return true;
if (idx >= 0) }
hc[line.left(idx)] = line.right(line.size()-idx-1); else
} qWarning() << "History doesn't exist or is not readable";
} return false;
return true;
}
else
qWarning() << "History doesn't exist or is not readable";
return false;
} }
bool MinimalHistoryBackend::reload() bool MinimalHistoryBackend::reload()
{ {
return false; 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;
// }
CollectionInterface::SupportedFeatures MinimalHistoryBackend::supportedFeatures() const CollectionInterface::SupportedFeatures MinimalHistoryBackend::supportedFeatures() const
{ {
return (CollectionInterface::SupportedFeatures) ( return (CollectionInterface::SupportedFeatures) (
CollectionInterface::SupportedFeatures::NONE | CollectionInterface::SupportedFeatures::NONE |
CollectionInterface::SupportedFeatures::LOAD | CollectionInterface::SupportedFeatures::LOAD |
CollectionInterface::SupportedFeatures::CLEAR | CollectionInterface::SupportedFeatures::CLEAR |
// CollectionInterface::SupportedFeatures::REMOVE| CollectionInterface::SupportedFeatures::REMOVE|
CollectionInterface::SupportedFeatures::ADD ); 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;
// }
bool MinimalHistoryBackend::clear() 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 QByteArray MinimalHistoryBackend::id() const
{ {
return "mhb"; return "mhb";
} }
// QList<Call*> MinimalHistoryBackend::items() const
// {
// return QList<Call*>(); //TODO
// }
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
#ifndef MINIMALHISTORYBACKEND_H #ifndef MINIMALHISTORYBACKEND_H
#define MINIMALHISTORYBACKEND_H #define MINIMALHISTORYBACKEND_H
#include "collectioninterface.h" #include <collectioninterface.h>
#include "collectioneditor.h" #include <collectioneditor.h>
class Call; class Call;
...@@ -29,58 +29,21 @@ template<typename T> class CollectionMediator; ...@@ -29,58 +29,21 @@ template<typename T> class CollectionMediator;
class LIB_EXPORT MinimalHistoryBackend : public CollectionInterface class LIB_EXPORT MinimalHistoryBackend : public CollectionInterface
{ {
public: public:
template<typename T> explicit MinimalHistoryBackend(CollectionMediator<Call>* mediator);
explicit MinimalHistoryBackend(CollectionMediator<T>* mediator); virtual ~MinimalHistoryBackend();
virtual ~MinimalHistoryBackend();
virtual bool load() override;
virtual bool load() override; virtual bool reload() override;
virtual bool reload() override; virtual bool clear() override;
virtual bool clear() override; virtual QString name () const override;
// virtual bool save(const Call* call) override; virtual QString category () const override;
// virtual bool append(const Call* item) override; virtual QVariant icon () const override;
virtual bool isEnabled() const override;
virtual QString name () const override; virtual QByteArray id () const override;
virtual QString category () const override; virtual SupportedFeatures supportedFeatures() 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;
private: 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 #endif
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment