From a58e21356846127f2cccd2d8e8c1cf6783b6b66a Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 25 Jul 2018 11:04:54 +0200 Subject: [PATCH] feat(Call): add caller/callee on saved capture files --- src/components/call/CallModel.cpp | 54 ++++++++++++++++--- src/components/call/CallModel.hpp | 8 ++- src/components/calls/CallsListModel.cpp | 4 +- .../settings/AccountSettingsModel.cpp | 32 +++++------ .../settings/AccountSettingsModel.hpp | 6 +-- 5 files changed, 74 insertions(+), 30 deletions(-) diff --git a/src/components/call/CallModel.cpp b/src/components/call/CallModel.cpp index 327ca2227..06a656845 100644 --- a/src/components/call/CallModel.cpp +++ b/src/components/call/CallModel.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include "app/App.hpp" @@ -29,6 +30,7 @@ #include "components/core/CoreHandlers.hpp" #include "components/core/CoreManager.hpp" #include "components/notifier/Notifier.hpp" +#include "components/settings/AccountSettingsModel.hpp" #include "components/settings/SettingsModel.hpp" #include "utils/LinphoneUtils.hpp" #include "utils/Utils.hpp" @@ -92,15 +94,29 @@ QString CallModel::getSipAddress () const { // ----------------------------------------------------------------------------- void CallModel::setRecordFile (const shared_ptr &callParams) { - callParams->setRecordFile( - Utils::appStringToCoreString( - QStringLiteral("%1%2.mkv") - .arg(CoreManager::getInstance()->getSettingsModel()->getSavedCallsFolder()) - .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss")) + callParams->setRecordFile(Utils::appStringToCoreString( + CoreManager::getInstance()->getSettingsModel()->getSavedCallsFolder() + .append(generateSavedFilename()) + .append(".mkv") + )); +} + +void CallModel::setRecordFile (const shared_ptr &callParams, const QString &to) { + const QString from( + Utils::coreStringToAppString( + CoreManager::getInstance()->getAccountSettingsModel()->getUsedSipAddress()->getUsername() ) ); + + callParams->setRecordFile(Utils::appStringToCoreString( + CoreManager::getInstance()->getSettingsModel()->getSavedCallsFolder() + .append(generateSavedFilename(from, to)) + .append(".mkv") + )); } +// ----------------------------------------------------------------------------- + void CallModel::updateStats (const shared_ptr &callStats) { switch (callStats->getType()) { case linphone::StreamTypeText: @@ -196,18 +212,17 @@ void CallModel::rejectVideoRequest () { void CallModel::takeSnapshot () { static QString oldName; - QString newName = QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss") + ".jpg"; + QString newName(generateSavedFilename().append(".jpg")); if (newName == oldName) { qWarning() << QStringLiteral("Unable to take snapshot. Wait one second."); return; } - oldName = newName; qInfo() << QStringLiteral("Take snapshot of call:") << this; - const QString filePath = CoreManager::getInstance()->getSettingsModel()->getSavedScreenshotsFolder() + newName; + const QString filePath(CoreManager::getInstance()->getSettingsModel()->getSavedScreenshotsFolder().append(newName)); mCall->takeVideoSnapshot(Utils::appStringToCoreString(filePath)); App::getInstance()->getNotifier()->notifySnapshotWasTaken(filePath); } @@ -731,3 +746,26 @@ QString CallModel::iceStateToString (linphone::IceState state) const { return tr("iceStateInvalid"); } + +// ----------------------------------------------------------------------------- + +QString CallModel::generateSavedFilename () const { + const shared_ptr callLog(mCall->getCallLog()); + return generateSavedFilename( + Utils::coreStringToAppString(callLog->getFromAddress()->getUsername()), + Utils::coreStringToAppString(callLog->getToAddress()->getUsername()) + ); +} + +QString CallModel::generateSavedFilename (const QString &from, const QString &to) { + auto escape = [](const QString &str) { + constexpr char ReservedCharacters[] = "<>:\"/\\|\\?\\*"; + static QRegularExpression regexp(ReservedCharacters); + return QString(str).replace(regexp, ""); + }; + + return QStringLiteral("%1_%2_%3") + .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss")) + .arg(escape(from)) + .arg(escape(to)); +} diff --git a/src/components/call/CallModel.hpp b/src/components/call/CallModel.hpp index 2290434d7..d18bffaa3 100644 --- a/src/components/call/CallModel.hpp +++ b/src/components/call/CallModel.hpp @@ -97,7 +97,9 @@ public: return mIsInConference; } - static void setRecordFile (const std::shared_ptr &callParams); + void setRecordFile (const std::shared_ptr &callParams); + static void setRecordFile (const std::shared_ptr &callParams, const QString &to); + void updateStats (const std::shared_ptr &callStats); void notifyCameraFirstFrameReceived (unsigned int width, unsigned int height); @@ -198,6 +200,10 @@ private: float getMicroVolumeGain () const; void setMicroVolumeGain (float volume); + QString generateSavedFilename () const; + + static QString generateSavedFilename (const QString &from, const QString &to); + bool mIsInConference = false; bool mPausedByRemote = false; diff --git a/src/components/calls/CallsListModel.cpp b/src/components/calls/CallsListModel.cpp index 4d64a5a66..60db77228 100644 --- a/src/components/calls/CallsListModel.cpp +++ b/src/components/calls/CallsListModel.cpp @@ -107,7 +107,6 @@ void CallsListModel::launchAudioCall (const QString &sipAddress, const QHash params = core->createCallParams(nullptr); params->enableVideo(false); - CallModel::setRecordFile(params); QHashIterator iterator(headers); while (iterator.hasNext()) { @@ -115,6 +114,7 @@ void CallsListModel::launchAudioCall (const QString &sipAddress, const QHashaddCustomHeader(Utils::appStringToCoreString(iterator.key()), Utils::appStringToCoreString(iterator.value())); } + CallModel::setRecordFile(params, Utils::coreStringToAppString(address->getUsername())); core->inviteAddressWithParams(address, params); } @@ -133,8 +133,8 @@ void CallsListModel::launchVideoCall (const QString &sipAddress) const { shared_ptr params = core->createCallParams(nullptr); params->enableEarlyMediaSending(true); params->enableVideo(true); - CallModel::setRecordFile(params); + CallModel::setRecordFile(params, Utils::coreStringToAppString(address->getUsername())); core->inviteAddressWithParams(address, params); } diff --git a/src/components/settings/AccountSettingsModel.cpp b/src/components/settings/AccountSettingsModel.cpp index def515399..7e1142f06 100644 --- a/src/components/settings/AccountSettingsModel.cpp +++ b/src/components/settings/AccountSettingsModel.cpp @@ -62,6 +62,22 @@ AccountSettingsModel::AccountSettingsModel (QObject *parent) : QObject(parent) { // ----------------------------------------------------------------------------- +shared_ptr AccountSettingsModel::getUsedSipAddress () const { + shared_ptr core = CoreManager::getInstance()->getCore(); + shared_ptr proxyConfig = core->getDefaultProxyConfig(); + + return proxyConfig ? proxyConfig->getIdentityAddress() : core->getPrimaryContactParsed(); +} + +void AccountSettingsModel::setUsedSipAddress (const shared_ptr &address) { + shared_ptr core = CoreManager::getInstance()->getCore(); + shared_ptr proxyConfig = core->getDefaultProxyConfig(); + + proxyConfig ? proxyConfig->setIdentityAddress(address) : core->setPrimaryContact(address->asString()); +} + +// ----------------------------------------------------------------------------- + bool AccountSettingsModel::addOrUpdateProxyConfig (const shared_ptr &proxyConfig) { Q_CHECK_PTR(proxyConfig); @@ -342,22 +358,6 @@ QVariantList AccountSettingsModel::getAccounts () const { // ----------------------------------------------------------------------------- -void AccountSettingsModel::setUsedSipAddress (const shared_ptr &address) { - shared_ptr core = CoreManager::getInstance()->getCore(); - shared_ptr proxyConfig = core->getDefaultProxyConfig(); - - proxyConfig ? proxyConfig->setIdentityAddress(address) : core->setPrimaryContact(address->asString()); -} - -shared_ptr AccountSettingsModel::getUsedSipAddress () const { - shared_ptr core = CoreManager::getInstance()->getCore(); - shared_ptr proxyConfig = core->getDefaultProxyConfig(); - - return proxyConfig ? proxyConfig->getIdentityAddress() : core->getPrimaryContactParsed(); -} - -// ----------------------------------------------------------------------------- - void AccountSettingsModel::handleRegistrationStateChanged ( const shared_ptr &, linphone::RegistrationState diff --git a/src/components/settings/AccountSettingsModel.hpp b/src/components/settings/AccountSettingsModel.hpp index 32e5ff3fa..9532bb3d2 100644 --- a/src/components/settings/AccountSettingsModel.hpp +++ b/src/components/settings/AccountSettingsModel.hpp @@ -53,6 +53,9 @@ public: AccountSettingsModel (QObject *parent = Q_NULLPTR); + std::shared_ptr getUsedSipAddress () const; + void setUsedSipAddress (const std::shared_ptr &address); + bool addOrUpdateProxyConfig (const std::shared_ptr &proxyConfig); Q_INVOKABLE QVariantMap getProxyConfigDescription (const std::shared_ptr &proxyConfig); @@ -97,9 +100,6 @@ private: QVariantList getAccounts () const; - void setUsedSipAddress (const std::shared_ptr &address); - std::shared_ptr getUsedSipAddress () const; - // --------------------------------------------------------------------------- void handleRegistrationStateChanged (