misc: vendor libjamiclient into 'src/libclient/'
This is libjamiclient from the jami-libclient.git repository as of
767c45b8b09806ac05cbada720864df93588c047, with the following changes:
* src/libclient/newaccountmodel.cpp:
(NewAccountModelPimpl::removeFromAccounts): The lock wait inside
'#ifdef CHK_FREEABLE_BEFORE_ERASE_ACCOUNT' was not updated when the
type of 'accounts' was changed over the years from this:
std::map<std::string, account::Info>
to this:
std::map<QString, std::pair<account::Info, std::shared_ptr<Database>>>
Basically we need to get the 'first' of the pair for 'account::Info'.
So we now do that.
* src/libclient/avmodel.cpp:
* src/libclient/callbackshandler.cpp:
* src/libclient/contactmodel.cpp:
* src/libclient/conversationmodel.cpp:
* src/libclient/database.cpp:
* src/libclient/namedirectory.cpp:
* src/libclient/newaccountmodel.cpp:
* src/libclient/newcallmodel.cpp:
* src/libclient/newdevicemodel.cpp:
* src/libclient/peerdiscoverymodel.cpp:
* src/libclient/pluginmodel.cpp:
* src/libclient/smartinfohub.cpp:
* src/libclient/vcard.h:
* src/libclient/authority/storagehelper.cpp: Replace Qt's 'foreach'
with 'Q_FOREACH' and its 'emit' with 'Q_EMIT' because in the client-qt
code base we have '-DQT_NO_KEYWORDS' to avoid conflicts with other
libraries we use.
* cmake/FindLibJami.cmake: Import cmake/FindRing.cmake from the
jami-libclient.git repository. Then, rename RING_BUILD_DIR to
LIBJAMI_BUILD_DIR (though the old name is still supported for now).
Also update other references of Ring to Jami. Further, add additional
calls to 'find_library' to make sure specified local paths for libjami
are checked before system-wide ones (in case of older/obsolete libjami
being available system-wide, which might happen on GNU/Linux systems).
* translations/lrc_*.ts: Import translation files from the libclient
repository. The message location paths were corrected by running
"sed -i 's|../src|&/libclient|g' lrc_*.ts" in 'translations/'.
.tx/config: Add section for the newly-imported libclient translations.
* CMakeLists.txt: Reformat, plus various fixes and cleanups, such as
changing indentation to 2 spaces and wrapping lines at 70 characters,
renaming the parent directory of translations from 'ring' to 'jami',
and using all lowercase function calls. Also add copyright headers.
* src/app/appsettingsmanager.cpp:
(AppSettingsManager::loadTranslations):
* src/app/utilsadapter.cpp (UtilsAdapter::supportedLang): Update to
adapt to the renaming of the parent directory of translations from
'ring' to 'jami'.
GitLab: #748
Change-Id: I86e3b0fb30e554755023e7b858b6a0d132cd59ab
2022-05-06 16:00:16 -04:00
|
|
|
/****************************************************************************
|
2023-02-06 01:47:15 -05:00
|
|
|
* Copyright (C) 2015-2023 Savoir-faire Linux Inc. *
|
misc: vendor libjamiclient into 'src/libclient/'
This is libjamiclient from the jami-libclient.git repository as of
767c45b8b09806ac05cbada720864df93588c047, with the following changes:
* src/libclient/newaccountmodel.cpp:
(NewAccountModelPimpl::removeFromAccounts): The lock wait inside
'#ifdef CHK_FREEABLE_BEFORE_ERASE_ACCOUNT' was not updated when the
type of 'accounts' was changed over the years from this:
std::map<std::string, account::Info>
to this:
std::map<QString, std::pair<account::Info, std::shared_ptr<Database>>>
Basically we need to get the 'first' of the pair for 'account::Info'.
So we now do that.
* src/libclient/avmodel.cpp:
* src/libclient/callbackshandler.cpp:
* src/libclient/contactmodel.cpp:
* src/libclient/conversationmodel.cpp:
* src/libclient/database.cpp:
* src/libclient/namedirectory.cpp:
* src/libclient/newaccountmodel.cpp:
* src/libclient/newcallmodel.cpp:
* src/libclient/newdevicemodel.cpp:
* src/libclient/peerdiscoverymodel.cpp:
* src/libclient/pluginmodel.cpp:
* src/libclient/smartinfohub.cpp:
* src/libclient/vcard.h:
* src/libclient/authority/storagehelper.cpp: Replace Qt's 'foreach'
with 'Q_FOREACH' and its 'emit' with 'Q_EMIT' because in the client-qt
code base we have '-DQT_NO_KEYWORDS' to avoid conflicts with other
libraries we use.
* cmake/FindLibJami.cmake: Import cmake/FindRing.cmake from the
jami-libclient.git repository. Then, rename RING_BUILD_DIR to
LIBJAMI_BUILD_DIR (though the old name is still supported for now).
Also update other references of Ring to Jami. Further, add additional
calls to 'find_library' to make sure specified local paths for libjami
are checked before system-wide ones (in case of older/obsolete libjami
being available system-wide, which might happen on GNU/Linux systems).
* translations/lrc_*.ts: Import translation files from the libclient
repository. The message location paths were corrected by running
"sed -i 's|../src|&/libclient|g' lrc_*.ts" in 'translations/'.
.tx/config: Add section for the newly-imported libclient translations.
* CMakeLists.txt: Reformat, plus various fixes and cleanups, such as
changing indentation to 2 spaces and wrapping lines at 70 characters,
renaming the parent directory of translations from 'ring' to 'jami',
and using all lowercase function calls. Also add copyright headers.
* src/app/appsettingsmanager.cpp:
(AppSettingsManager::loadTranslations):
* src/app/utilsadapter.cpp (UtilsAdapter::supportedLang): Update to
adapt to the renaming of the parent directory of translations from
'ring' to 'jami'.
GitLab: #748
Change-Id: I86e3b0fb30e554755023e7b858b6a0d132cd59ab
2022-05-06 16:00:16 -04:00
|
|
|
* Author : Stepan Salenikovich <stepan.salenikovich@savoirfairelinux.com>*
|
|
|
|
* *
|
|
|
|
* This library is free software; you can redistribute it and/or *
|
|
|
|
* modify it under the terms of the GNU Lesser General Public *
|
|
|
|
* License as published by the Free Software Foundation; either *
|
|
|
|
* version 2.1 of the License, or (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This library is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
|
|
|
* Lesser General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU General Public License *
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
|
|
|
***************************************************************************/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <typedefs.h>
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
|
|
|
namespace Interfaces {
|
|
|
|
class ContactMethodSelectorI;
|
|
|
|
class DBusErrorHandlerI;
|
|
|
|
class PixmapManipulatorI;
|
|
|
|
class ShortcutCreatorI;
|
|
|
|
} // namespace Interfaces
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Use these functions to get and set the global instance of the implementation of each interface.
|
|
|
|
*
|
|
|
|
* The setter functions demand an std::unique_ptr because they become the object owners.
|
|
|
|
*
|
|
|
|
* Note that certain interfaces do not have a default implementation in LRC, in this case the getter
|
|
|
|
* function will throw an exception if no instance has been set by the client.
|
|
|
|
*/
|
|
|
|
namespace GlobalInstances {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* LRC does not provide a default implementation of this interface, thus an exception will be thrown
|
|
|
|
* if this getter is called without an instance being set by the client
|
|
|
|
*/
|
|
|
|
|
|
|
|
Interfaces::DBusErrorHandlerI& dBusErrorHandler();
|
|
|
|
void setDBusErrorHandler(std::unique_ptr<Interfaces::DBusErrorHandlerI> instance);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* LRC does not provide a default implementation of this interface, thus an exception will be thrown
|
|
|
|
* if this getter is called without an instance being set by the client
|
|
|
|
*/
|
|
|
|
|
|
|
|
LIB_EXPORT Interfaces::PixmapManipulatorI& pixmapManipulator();
|
|
|
|
void LIB_EXPORT setPixmapManipulator(std::unique_ptr<Interfaces::PixmapManipulatorI> instance);
|
|
|
|
|
|
|
|
LIB_EXPORT Interfaces::ShortcutCreatorI& shortcutCreator();
|
|
|
|
void LIB_EXPORT setShortcutCreator(std::unique_ptr<Interfaces::ShortcutCreatorI> instance);
|
|
|
|
|
|
|
|
// Private use only
|
|
|
|
void setInterfaceInternal(Interfaces::ContactMethodSelectorI*);
|
|
|
|
void setInterfaceInternal(Interfaces::DBusErrorHandlerI*);
|
|
|
|
void setInterfaceInternal(Interfaces::PixmapManipulatorI*);
|
|
|
|
void setInterfaceInternal(Interfaces::ShortcutCreatorI*);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generic interface setter. This metamethod can set any type of interface
|
|
|
|
* dynamically using variadic template, compile time type deduction and
|
|
|
|
* the macro subsystem. Passing an invalid interface should trigger compile
|
|
|
|
* time errors.
|
|
|
|
*
|
|
|
|
* The interface object is created internally and additional parameters
|
|
|
|
* can be passed.
|
|
|
|
*/
|
|
|
|
template<class I, typename... Ts>
|
|
|
|
void
|
|
|
|
setInterface(Ts... args)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
auto i = new I(args...);
|
|
|
|
setInterfaceInternal(i);
|
|
|
|
} catch (void* e) { // TODO define some kind of object for errors like this
|
|
|
|
qDebug() << "Interface could not be set";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace GlobalInstances
|