Merge branch 'release/6.1'
|
|
@ -180,14 +180,22 @@ win64-ninja-vs2022-scheduled-windows:
|
|||
needs: []
|
||||
rules:
|
||||
- !reference [.rules-merge-request-manual, rules]
|
||||
- if: $NIGHTLY_MASTER
|
||||
- if: $NIGHTLY_RELEASE
|
||||
- if: $PACKAGE_WINDOWS
|
||||
- if: $DEPLOY_WINDOWS
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
|
||||
RELEASE_FILE: -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$WINDOWS_PLATFORM/$APP_FOLDER
|
||||
|
||||
.vs-win64-package-cr:
|
||||
stage: package
|
||||
needs: []
|
||||
rules:
|
||||
- if: $NIGHTLY_MASTER
|
||||
- if: $DEPLOY_WINDOWS
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF -DENABLE_BUGSPLAT_SYMBOLS_UPLOAD=ON -DBUGSPLAT_CLIENT_ID=$BUGSPLAT_CLIENT_ID -DBUGSPLAT_CLIENT_SECRET=$BUGSPLAT_CLIENT_SECRET -DBUGSPLAT_DATABASE=$BUGSPLAT_DATABASE
|
||||
RELEASE_FILE: -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$WINDOWS_PLATFORM/$APP_FOLDER
|
||||
|
||||
win64-ninja-vs2022-package-windows:
|
||||
variables:
|
||||
CMAKE_GENERATOR: "Ninja"
|
||||
|
|
@ -198,6 +206,18 @@ win64-ninja-vs2022-package-windows:
|
|||
- .windows-ninja-variables
|
||||
- .vs-win64-package
|
||||
|
||||
#Packaging for deployment (Upload symbols at the same time of the packaging)
|
||||
win64-ninja-vs2022-package-cr-windows:
|
||||
variables:
|
||||
CMAKE_GENERATOR: "Ninja"
|
||||
CMAKE_ARCHITECTURE: ""
|
||||
PARALLEL_OPTIONS: ""
|
||||
extends:
|
||||
- .windows-vs2022
|
||||
- .windows-ninja-variables
|
||||
- .vs-win64-package-cr
|
||||
|
||||
|
||||
#################################################
|
||||
# SIGNING
|
||||
#################################################
|
||||
|
|
@ -213,8 +233,28 @@ win64-codesigning:
|
|||
MINGW_TYPE: mingw64
|
||||
rules:
|
||||
- !reference [.rules-merge-request-manual, rules]
|
||||
- if: $NIGHTLY_MASTER
|
||||
- if: $PACKAGE_WINDOWS
|
||||
script:
|
||||
- cd build-desktop/OUTPUT/Packages/
|
||||
- Invoke-Expression "& ${WINDOWS_SIGN_TOOL} sign /fd SHA256 /t ${WINDOWS_SIGN_TIMESTAMP_URL} /sha1 ${WINDOWS_SIGN_HASH} *.exe"
|
||||
- 'if (-not ($LastExitCode -eq 0)) {throw "Error: Signature failed"}'
|
||||
artifacts:
|
||||
paths:
|
||||
- build-desktop\OUTPUT\Packages\*
|
||||
when: always
|
||||
expire_in: 1 week
|
||||
|
||||
win64-codesigning-cr:
|
||||
stage: signing
|
||||
allow_failure: true
|
||||
extends:
|
||||
- .windows-codesigning
|
||||
needs:
|
||||
- win64-ninja-vs2022-package-cr-windows
|
||||
variables:
|
||||
MINGW_TYPE: mingw64
|
||||
rules:
|
||||
- if: $NIGHTLY_MASTER
|
||||
- if: $DEPLOY_WINDOWS
|
||||
script:
|
||||
- cd build-desktop/OUTPUT/Packages/
|
||||
|
|
@ -246,7 +286,7 @@ win64-ninja-vs2022-upload:
|
|||
extends:
|
||||
- .win64-upload
|
||||
needs:
|
||||
- win64-codesigning
|
||||
- win64-codesigning-cr
|
||||
|
||||
.win64-plugins-upload:
|
||||
stage: deploy
|
||||
|
|
|
|||
9
.gitmodules
vendored
|
|
@ -1,3 +1,12 @@
|
|||
[submodule "linphone-sdk"]
|
||||
path = external/linphone-sdk
|
||||
url = https://gitlab.linphone.org/BC/public/linphone-sdk.git
|
||||
[submodule "external/google/gn"]
|
||||
path = external/google/gn
|
||||
url = https://gitlab.linphone.org/BC/public/external/gn.git
|
||||
[submodule "external/google/crashpad"]
|
||||
path = external/google/crashpad
|
||||
url = https://gitlab.linphone.org/BC/public/external/crashpad.git
|
||||
[submodule "external/google/chromium-depot-tools"]
|
||||
path = external/google/chromium-depot-tools
|
||||
url = https://gitlab.linphone.org/BC/public/external/chromium-depot-tools.git
|
||||
|
|
|
|||
28
CHANGELOG.md
|
|
@ -10,6 +10,26 @@ Group changes to describe their impact on the project, as follows:
|
|||
Fixed for any bug fixes.
|
||||
Security to invite users to upgrade in case of vulnerabilities.
|
||||
|
||||
## [6.1.0] - Unreleased
|
||||
|
||||
6.1.0 release is the complete version of the new Linphone Desktop with all features including chat
|
||||
|
||||
### Added
|
||||
- Chat: chat with your contacts, including text messaging, voice recording, sharing files or medias
|
||||
- Presence: get your friend's presence status as long as you both are in your contact list
|
||||
- Translations: Linphone is now available in English, French, Chinese, Czech, German, Portuguese, Russian and Ukrainian thank's to the Weblate contributors
|
||||
- Check for update : you will get a notification on start if a new version is available, and you can look for a new version from the help page
|
||||
- Bugsplat integration: add Bugsplat database parameters to improve crash reporting.
|
||||
|
||||
### Fixed
|
||||
- Fixed "End-to-end encrypted call" label while in conference, the call may be end-to-end encrypted but only to the conference server, not to all participants
|
||||
- Audio device list : display the correct devices in multimedia settings according to their functions (capture / playback / video)
|
||||
|
||||
### Changed
|
||||
- Minimum supported Qt version is now 6.10.0
|
||||
- Removed QtMultimedia dependency
|
||||
|
||||
|
||||
## [6.0.0] - 2025-04-17
|
||||
|
||||
6.0.0 release is a complete rework of Linphone Desktop, with only the call and contact list features availables
|
||||
|
|
@ -30,10 +50,4 @@ Group changes to describe their impact on the project, as follows:
|
|||
- Settings: a lot of them are gone, the one that are still there have been reworked to increase user friendliness.
|
||||
- Default screen (between contacts, call history, conversations & meetings list) will change depending on where you were when the app was paused or killed, and you will return to that last visited screen on the next startup.
|
||||
- Minimum supported Qt version is now 6.5.3
|
||||
- Some settings have changed name and/or section in linphonerc file.
|
||||
|
||||
|
||||
## [6.1.0] - XXXX-XX-XX
|
||||
|
||||
### Changed
|
||||
- Minimum supported Qt version is now 6.10.0
|
||||
- Some settings have changed name and/or section in linphonerc file.
|
||||
|
|
@ -177,6 +177,7 @@ add_option(OPTION_LIST ENABLE_UNIT_TESTS "Enable unit test of SDK." OFF)
|
|||
add_option(OPTION_LIST ENABLE_UPDATE_CHECK "Enable update check." ON)
|
||||
add_option(OPTION_LIST ENABLE_VIDEO "Enable Video support." YES)
|
||||
add_option(OPTION_LIST ENABLE_WINDOWS_TOOLS_CHECK "Enable tools checks on Windows for auto install." OFF)
|
||||
add_option(OPTION_LIST ENABLE_CRASH_HANDLER "Enable Crash Handler" YES)
|
||||
|
||||
add_cache(OPTION_LIST LINPHONE_SDK_MAKE_RELEASE_FILE_URL "Make a RELEASE file that work along check_version and use this URL" "")
|
||||
|
||||
|
|
@ -184,6 +185,13 @@ add_cache(OPTION_LIST LINPHONE_SDK_MAKE_RELEASE_FILE_URL "Make a RELEASE file th
|
|||
add_option(OPTION_LIST ENABLE_OPENH264 "Enable the use of OpenH264 codec" ${ENABLE_VIDEO})
|
||||
add_option(OPTION_LIST ENABLE_SCREENSHARING "Enable screen sharing." ${ENABLE_VIDEO})
|
||||
|
||||
add_option(OPTION_LIST ENABLE_BUGSPLAT_SYMBOLS_UPLOAD "Generate and upload symbols to Bugsplat." OFF)
|
||||
add_cache(OPTION_LIST BUGSPLAT_CLIENT_ID "Client ID for Bugsplat." "")
|
||||
add_cache(OPTION_LIST BUGSPLAT_CLIENT_SECRET "Client Secret for Bugsplat." "")
|
||||
add_cache(OPTION_LIST BUGSPLAT_DATABASE "Database name for Bugsplat." "Linphone")
|
||||
|
||||
|
||||
|
||||
# QtKeychain
|
||||
add_option(OPTION_LIST LIBSECRET_SUPPORT "Build with libsecret support" OFF) # Need libsecret-devel
|
||||
if(WIN32)
|
||||
|
|
@ -226,8 +234,8 @@ if(LINPHONEAPP_BUILD_TYPE STREQUAL "Default")
|
|||
|
||||
endif()
|
||||
|
||||
|
||||
if(NOT APPLE OR MONO_ARCH)
|
||||
add_custom_target(linphone-deps)
|
||||
if(NOT LINPHONE_QT_ONLY)
|
||||
function(add_external)
|
||||
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) # Prevent project from overriding the options we just set here
|
||||
|
|
@ -235,6 +243,9 @@ if(NOT APPLE OR MONO_ARCH)
|
|||
endfunction()
|
||||
add_external()
|
||||
endif()
|
||||
if(TARGET Crashpad)
|
||||
set(HAVE_CRASH_HANDLER 1)
|
||||
endif()
|
||||
function(add_linphone_app)
|
||||
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) # Prevent project from overriding the options we just set here
|
||||
if(UNIX)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ set(APP_TARGETS ${LinphoneCxx_TARGET}
|
|||
${LibLinphone_TARGET})#Liblinphone
|
||||
|
||||
set(QT_DEFAULT_MAJOR_VERSION 6)
|
||||
set(QT_PACKAGES Quick Qml Widgets Svg Multimedia Test NetworkAuth Concurrent)# Search Core at first for initialize Qt scripts for next find_packages.
|
||||
set(QT_PACKAGES Quick Qml Widgets Svg Test NetworkAuth Concurrent)# Search Core at first for initialize Qt scripts for next find_packages.
|
||||
if (UNIX AND NOT APPLE)
|
||||
list(APPEND QT_PACKAGES DBus)
|
||||
endif()
|
||||
|
|
@ -96,15 +96,12 @@ else()
|
|||
set(MSPLUGINS_DIR "${CMAKE_INSTALL_LIBDIR}/mediastreamer/plugins")
|
||||
endif()
|
||||
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h")
|
||||
|
||||
if(${Qt6_VERSION} VERSION_LESS "6.10.0")
|
||||
message( FATAL_ERROR "Linphone requires Qt 6.10.0 or newer. Exiting CMake." )
|
||||
endif()
|
||||
|
||||
qt6_standard_project_setup()
|
||||
|
||||
|
||||
################################################################
|
||||
# SOURCES
|
||||
################################################################
|
||||
|
|
@ -124,6 +121,7 @@ add_subdirectory(core)
|
|||
set(LANGUAGES_DIRECTORY "data/languages")
|
||||
set(I18N_FILENAME i18n.qrc)
|
||||
set(LANGUAGES en fr de)
|
||||
set(CMAKE_CPP_COMPILER gcc)
|
||||
|
||||
# Add languages support.
|
||||
add_subdirectory("${LANGUAGES_DIRECTORY}" "data/languages")
|
||||
|
|
@ -154,7 +152,7 @@ qt6_add_big_resources(_LINPHONEAPP_FONTS_FILES data/fonts.qrc)
|
|||
list(APPEND _LINPHONEAPP_FONTS_FILES data/fonts.qrc)
|
||||
set_property(SOURCE data/fonts.qrc PROPERTY SKIP_AUTORCC ON)
|
||||
|
||||
qt6_add_executable(Linphone
|
||||
qt6_add_executable(${TARGET_NAME}
|
||||
${_LINPHONEAPP_SOURCES}
|
||||
${_LINPHONEAPP_FONTS_FILES}
|
||||
${_APPDETAILS_RC_FILE}
|
||||
|
|
@ -170,15 +168,19 @@ qt6_add_qml_module(Linphone
|
|||
RESOURCES data/fonts.qrc
|
||||
)
|
||||
|
||||
if (WIN32)
|
||||
if(MSVC AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||
install(FILES "$<TARGET_PDB_FILE:${TARGET_NAME}>" DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
qt6_add_resources(Linphone "resources" PREFIX "/" FILES ${_LINPHONEAPP_RC_FILES})
|
||||
set_property(TARGET Linphone PROPERTY POSITION_INDEPENDENT_CODE ON) #Need by Qt
|
||||
|
||||
################################################################
|
||||
# CRASHPAD
|
||||
################################################################
|
||||
|
||||
if (HAVE_CRASH_HANDLER)
|
||||
add_dependencies(${TARGET_NAME} Crashpad)
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE Crashpad)
|
||||
get_target_property(CRASHPAD_EXECUTABLE_NAME Crashpad CRASHPAD_EXECUTABLE_NAME)
|
||||
endif()
|
||||
|
||||
################################################################
|
||||
# TARGETS LINKS
|
||||
################################################################
|
||||
|
|
@ -223,3 +225,14 @@ foreach(T ${QT_PACKAGES})
|
|||
endforeach()
|
||||
|
||||
|
||||
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h")
|
||||
|
||||
if (WIN32)
|
||||
if(MSVC AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||
install(FILES "$<TARGET_PDB_FILE:${TARGET_NAME}>" DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
foreach(T ${APP_TARGETS})
|
||||
install(FILES "$<TARGET_PDB_FILE:${T}>" DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
endforeach ()
|
||||
endif()
|
||||
endif()
|
||||
|
|
@ -39,3 +39,6 @@
|
|||
#cmakedefine LINPHONEAPP_SHORT_VERSION "${LINPHONEAPP_SHORT_VERSION}"
|
||||
#cmakedefine GIT_BRANCH_NAME "${GIT_BRANCH_NAME}"
|
||||
#cmakedefine LINPHONESDK_VERSION "${LINPHONESDK_VERSION}"
|
||||
#cmakedefine HAVE_CRASH_HANDLER "${HAVE_CRASH_HANDLER}"
|
||||
#cmakedefine CRASHPAD_EXECUTABLE_NAME "${CRASHPAD_EXECUTABLE_NAME}"
|
||||
#cmakedefine BUGSPLAT_DATABASE "${BUGSPLAT_DATABASE}"
|
||||
|
|
|
|||
|
|
@ -101,6 +101,9 @@
|
|||
#include "tool/accessibility/AccessibilityHelper.hpp"
|
||||
#include "tool/accessibility/FocusHelper.hpp"
|
||||
#include "tool/accessibility/KeyboardShortcuts.hpp"
|
||||
#ifdef HAVE_CRASH_HANDLER
|
||||
#include "tool/crash_reporter/CrashReporter.hpp"
|
||||
#endif
|
||||
#include "tool/native/DesktopTools.hpp"
|
||||
#include "tool/providers/AvatarProvider.hpp"
|
||||
#include "tool/providers/EmojiProvider.hpp"
|
||||
|
|
@ -293,11 +296,21 @@ App::App(int &argc, char *argv[])
|
|||
QCoreApplication::setApplicationName(EXECUTABLE_NAME);
|
||||
QApplication::setOrganizationDomain(EXECUTABLE_NAME);
|
||||
QCoreApplication::setApplicationVersion(APPLICATION_SEMVER);
|
||||
// CarshReporter must be call after app initialization like names.
|
||||
#ifdef HAVE_CRASH_HANDLER
|
||||
CrashReporter::start();
|
||||
#else
|
||||
lWarning() << "[Main] The application doesn't support the CrashReporter.";
|
||||
#endif
|
||||
|
||||
// If not OpenGL, createRender is never call.
|
||||
QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
|
||||
setWindowIcon(QIcon(Constants::WindowIconPath));
|
||||
initFonts();
|
||||
//-------------------
|
||||
mOIDCRefreshTimer.setInterval(1000);
|
||||
mOIDCRefreshTimer.setSingleShot(false);
|
||||
|
||||
mLinphoneThread = new Thread(this);
|
||||
|
||||
init();
|
||||
|
|
@ -376,9 +389,29 @@ void App::setSelf(QSharedPointer<App>(me)) {
|
|||
mCoreModelConnection->makeConnectToModel(
|
||||
&CoreModel::globalStateChanged,
|
||||
[this](const std::shared_ptr<linphone::Core> &core, linphone::GlobalState gstate, const std::string &message) {
|
||||
if (gstate == linphone::GlobalState::On) {
|
||||
mCoreModelConnection->invokeToCore([this] { setCoreStarted(true); });
|
||||
}
|
||||
mCoreModelConnection->invokeToCore([this, gstate] {
|
||||
setCoreStarted(gstate == linphone::GlobalState::On);
|
||||
if (gstate == linphone::GlobalState::Configuring) {
|
||||
if (mMainWindow) {
|
||||
QMetaObject::invokeMethod(mMainWindow, "openSSOPage", Qt::DirectConnection);
|
||||
} else {
|
||||
connect(
|
||||
this, &App::mainWindowChanged, this,
|
||||
[this] {
|
||||
mCoreModelConnection->invokeToModel([this] {
|
||||
auto gstate = CoreModel::getInstance()->getCore()->getGlobalState();
|
||||
if (gstate == linphone::GlobalState::Configuring)
|
||||
mCoreModelConnection->invokeToCore([this] {
|
||||
if (mMainWindow)
|
||||
QMetaObject::invokeMethod(mMainWindow, "openSSOPage",
|
||||
Qt::DirectConnection);
|
||||
});
|
||||
});
|
||||
},
|
||||
Qt::SingleShotConnection);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::authenticationRequested, &App::onAuthenticationRequested);
|
||||
// Config error message
|
||||
|
|
@ -386,7 +419,7 @@ void App::setSelf(QSharedPointer<App>(me)) {
|
|||
&CoreModel::configuringStatus, [this](const std::shared_ptr<linphone::Core> &core,
|
||||
linphone::ConfiguringState status, const std::string &message) {
|
||||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||
if (status == linphone::ConfiguringState::Failed) {
|
||||
if (mIsRestarting && status == linphone::ConfiguringState::Failed) {
|
||||
mCoreModelConnection->invokeToCore([this, message]() {
|
||||
mustBeInMainThread(log().arg(Q_FUNC_INFO));
|
||||
//: Error
|
||||
|
|
@ -403,16 +436,20 @@ void App::setSelf(QSharedPointer<App>(me)) {
|
|||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||
if (CoreModel::getInstance()->mConfigStatus == linphone::ConfiguringState::Successful) {
|
||||
bool accountConnected = account && account->getState() == linphone::RegistrationState::Ok;
|
||||
// update settings if case config contains changes
|
||||
if (mSettings) mSettings->reloadSettings();
|
||||
mCoreModelConnection->invokeToCore([this, accountConnected]() {
|
||||
mustBeInMainThread(log().arg(Q_FUNC_INFO));
|
||||
// There is an account added by a remote provisioning, force switching to main page
|
||||
// because the account may not be connected already
|
||||
// if (accountConnected)
|
||||
if (mPossiblyLookForAddedAccount) {
|
||||
QMetaObject::invokeMethod(mMainWindow, "openMainPage", Qt::DirectConnection,
|
||||
Q_ARG(QVariant, accountConnected));
|
||||
}
|
||||
mPossiblyLookForAddedAccount = false;
|
||||
// setLocale(mSettings->getConfigLocale());
|
||||
// setAutoStart(mSettings->getAutoStart());
|
||||
// setQuitOnLastWindowClosed(mSettings->getExitOnClose());
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -420,7 +457,28 @@ void App::setSelf(QSharedPointer<App>(me)) {
|
|||
// Synchronize state for because linphoneCore was ran before any connections.
|
||||
mCoreModelConnection->invokeToModel([this]() {
|
||||
auto state = CoreModel::getInstance()->getCore()->getGlobalState();
|
||||
mCoreModelConnection->invokeToCore([this, state] { setCoreStarted(state == linphone::GlobalState::On); });
|
||||
mCoreModelConnection->invokeToCore([this, state] {
|
||||
setCoreStarted(state == linphone::GlobalState::On);
|
||||
if (state == linphone::GlobalState::Configuring) {
|
||||
if (mMainWindow) {
|
||||
QMetaObject::invokeMethod(mMainWindow, "openSSOPage", Qt::DirectConnection);
|
||||
} else {
|
||||
connect(
|
||||
this, &App::mainWindowChanged, this,
|
||||
[this] {
|
||||
mCoreModelConnection->invokeToModel([this] {
|
||||
auto gstate = CoreModel::getInstance()->getCore()->getGlobalState();
|
||||
if (gstate == linphone::GlobalState::Configuring)
|
||||
mCoreModelConnection->invokeToCore([this] {
|
||||
if (mMainWindow)
|
||||
QMetaObject::invokeMethod(mMainWindow, "openSSOPage", Qt::DirectConnection);
|
||||
});
|
||||
});
|
||||
},
|
||||
Qt::SingleShotConnection);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::unreadNotificationsChanged, [this] {
|
||||
|
|
@ -472,6 +530,29 @@ void App::setSelf(QSharedPointer<App>(me)) {
|
|||
});
|
||||
});
|
||||
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::oidcRemainingTimeBeforeTimeoutChanged,
|
||||
[this](int remainingTime) {
|
||||
mCoreModelConnection->invokeToCore([this, remainingTime] {
|
||||
mRemainingTimeBeforeOidcTimeout = remainingTime;
|
||||
emit remainingTimeBeforeOidcTimeoutChanged();
|
||||
});
|
||||
});
|
||||
mCoreModelConnection->makeConnectToCore(&App::lForceOidcTimeout, [this] {
|
||||
qDebug() << "App: force oidc timeout";
|
||||
mCoreModelConnection->invokeToModel([this] { emit CoreModel::getInstance()->forceOidcTimeout(); });
|
||||
});
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::timeoutTimerStarted, [this]() {
|
||||
qDebug() << "App: oidc timer started";
|
||||
mCoreModelConnection->invokeToCore([this] { mOIDCRefreshTimer.start(); });
|
||||
});
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::timeoutTimerStopped, [this]() {
|
||||
qDebug() << "App: oidc timer stopped";
|
||||
mCoreModelConnection->invokeToCore([this] { mOIDCRefreshTimer.stop(); });
|
||||
});
|
||||
connect(&mOIDCRefreshTimer, &QTimer::timeout, this, [this]() {
|
||||
mCoreModelConnection->invokeToModel([this] { CoreModel::getInstance()->refreshOidcRemainingTime(); });
|
||||
});
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
mCliModelConnection = SafeConnection<App, CliModel>::create(me, CliModel::getInstance());
|
||||
mCliModelConnection->makeConnectToCore(&App::receivedMessage, [this](int, const QByteArray &byteArray) {
|
||||
|
|
@ -494,7 +575,7 @@ App *App::getInstance() {
|
|||
}
|
||||
|
||||
Thread *App::getLinphoneThread() {
|
||||
return App::getInstance()->mLinphoneThread;
|
||||
return App::getInstance() ? App::getInstance()->mLinphoneThread : nullptr;
|
||||
}
|
||||
|
||||
Notifier *App::getNotifier() const {
|
||||
|
|
@ -565,7 +646,7 @@ void App::initCore() {
|
|||
lDebug() << log().arg("Creating SettingsModel");
|
||||
SettingsModel::create();
|
||||
lDebug() << log().arg("Creating SettingsCore");
|
||||
if (!settings) settings = SettingsCore::create();
|
||||
settings = SettingsCore::create();
|
||||
lDebug() << log().arg("Checking downloaded codecs updates");
|
||||
Utils::checkDownloadedCodecsUpdates();
|
||||
lDebug() << log().arg("Setting Video Codec Priority Policy");
|
||||
|
|
@ -622,45 +703,55 @@ void App::initCore() {
|
|||
mNotifier = new Notifier(mEngine);
|
||||
mEngine->setObjectOwnership(settings.get(), QQmlEngine::CppOwnership);
|
||||
mEngine->setObjectOwnership(this, QQmlEngine::CppOwnership);
|
||||
if (!mAccountList) setAccountList(AccountList::create());
|
||||
else {
|
||||
mAccountList->setInitialized(false);
|
||||
mAccountList->lUpdate(true);
|
||||
}
|
||||
// Update global unread Notifications when an account updates his unread Notifications
|
||||
connect(mAccountList.get(), &AccountList::unreadNotificationsChanged, this, [this]() {
|
||||
lDebug() << "unreadNotificationsChanged of AccountList";
|
||||
mCoreModelConnection->invokeToModel([this] {
|
||||
int n = mEventCountNotifier->getCurrentEventCount();
|
||||
mCoreModelConnection->invokeToCore([this, n] { mEventCountNotifier->notifyEventCount(n); });
|
||||
});
|
||||
});
|
||||
if (!mCallList) setCallList(CallList::create());
|
||||
else mCallList->lUpdate();
|
||||
if (!mSettings) {
|
||||
mSettings = settings;
|
||||
setLocale(settings->getConfigLocale());
|
||||
setAutoStart(settings->getAutoStart());
|
||||
setQuitOnLastWindowClosed(settings->getExitOnClose());
|
||||
mEngine->setObjectOwnership(mSettings.get(), QQmlEngine::CppOwnership);
|
||||
|
||||
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
|
||||
Qt::UniqueConnection);
|
||||
QObject::connect(mSettings.get(), &SettingsCore::autoStartChanged, [this]() {
|
||||
mustBeInMainThread(log().arg(Q_FUNC_INFO));
|
||||
setAutoStart(mSettings->getAutoStart());
|
||||
});
|
||||
QObject::connect(mSettings.get(), &SettingsCore::configLocaleChanged, [this]() {
|
||||
mustBeInMainThread(log().arg(Q_FUNC_INFO));
|
||||
if (mSettings) setLocale(mSettings->getConfigLocale());
|
||||
});
|
||||
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
|
||||
Qt::UniqueConnection);
|
||||
} else {
|
||||
setLocale(settings->getConfigLocale());
|
||||
setAutoStart(settings->getAutoStart());
|
||||
setQuitOnLastWindowClosed(settings->getExitOnClose());
|
||||
}
|
||||
connect(this, &App::coreStartedChanged, this, [this] {
|
||||
if (mCoreStarted) {
|
||||
if (!mAccountList) setAccountList(AccountList::create());
|
||||
else {
|
||||
mAccountList->setInitialized(false);
|
||||
mAccountList->lUpdate(true);
|
||||
}
|
||||
// Update global unread Notifications when an account updates his unread Notifications
|
||||
connect(mAccountList.get(), &AccountList::unreadNotificationsChanged, this, [this]() {
|
||||
lDebug() << "unreadNotificationsChanged of AccountList";
|
||||
mCoreModelConnection->invokeToModel([this] {
|
||||
int n = mEventCountNotifier->getCurrentEventCount();
|
||||
mCoreModelConnection->invokeToCore(
|
||||
[this, n] { mEventCountNotifier->notifyEventCount(n); });
|
||||
});
|
||||
});
|
||||
if (!mCallList) setCallList(CallList::create());
|
||||
else mCallList->lUpdate();
|
||||
if (!mChatList) setChatList(ChatList::create());
|
||||
else mChatList->lUpdate();
|
||||
disconnect(this, &App::coreStartedChanged, this, nullptr);
|
||||
}
|
||||
});
|
||||
|
||||
// if (!mSettings) {
|
||||
mSettings = settings;
|
||||
setLocale(settings->getConfigLocale());
|
||||
setAutoStart(settings->getAutoStart());
|
||||
setQuitOnLastWindowClosed(settings->getExitOnClose());
|
||||
mEngine->setObjectOwnership(mSettings.get(), QQmlEngine::CppOwnership);
|
||||
|
||||
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
|
||||
Qt::UniqueConnection);
|
||||
QObject::connect(mSettings.get(), &SettingsCore::autoStartChanged, [this]() {
|
||||
mustBeInMainThread(log().arg(Q_FUNC_INFO));
|
||||
setAutoStart(mSettings->getAutoStart());
|
||||
});
|
||||
QObject::connect(mSettings.get(), &SettingsCore::configLocaleChanged, [this]() {
|
||||
mustBeInMainThread(log().arg(Q_FUNC_INFO));
|
||||
if (mSettings) setLocale(mSettings->getConfigLocale());
|
||||
});
|
||||
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
|
||||
Qt::UniqueConnection);
|
||||
// } else {
|
||||
// setLocale(settings->getConfigLocale());
|
||||
// setAutoStart(settings->getAutoStart());
|
||||
// setQuitOnLastWindowClosed(settings->getExitOnClose());
|
||||
// }
|
||||
const QUrl url("qrc:/qt/qml/Linphone/view/Page/Window/Main/MainWindow.qml");
|
||||
QObject::connect(
|
||||
mEngine, &QQmlApplicationEngine::objectCreated, this,
|
||||
|
|
@ -703,10 +794,20 @@ void App::initCore() {
|
|||
});
|
||||
} else {
|
||||
mPossiblyLookForAddedAccount = true;
|
||||
if (mAccountList && mAccountList->getCount() > 0) {
|
||||
auto defaultConnected =
|
||||
mAccountList->getDefaultAccountCore() &&
|
||||
mAccountList->getDefaultAccountCore()->getRegistrationState() ==
|
||||
LinphoneEnums::RegistrationState::Ok;
|
||||
QMetaObject::invokeMethod(mMainWindow, "openMainPage", Qt::DirectConnection,
|
||||
Q_ARG(QVariant, defaultConnected));
|
||||
}
|
||||
}
|
||||
}
|
||||
checkForUpdate();
|
||||
mIsRestarting = false;
|
||||
window->show();
|
||||
window->requestActivate();
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
lDebug() << log().arg("Creating KeyboardShortcuts");
|
||||
|
|
@ -823,7 +924,6 @@ void App::initCppInterfaces() {
|
|||
qmlRegisterType<CallHistoryProxy>(Constants::MainQmlUri, 1, 0, "CallHistoryProxy");
|
||||
qmlRegisterType<CallGui>(Constants::MainQmlUri, 1, 0, "CallGui");
|
||||
qmlRegisterType<CallProxy>(Constants::MainQmlUri, 1, 0, "CallProxy");
|
||||
qmlRegisterType<ChatList>(Constants::MainQmlUri, 1, 0, "ChatList");
|
||||
qmlRegisterType<ChatProxy>(Constants::MainQmlUri, 1, 0, "ChatProxy");
|
||||
qmlRegisterType<ChatGui>(Constants::MainQmlUri, 1, 0, "ChatGui");
|
||||
qmlRegisterType<EventLogGui>(Constants::MainQmlUri, 1, 0, "EventLogGui");
|
||||
|
|
@ -946,8 +1046,14 @@ void App::restart() {
|
|||
CoreModel::getInstance()->getCore()->stop();
|
||||
mCoreModelConnection->invokeToCore([this]() {
|
||||
mIsRestarting = true;
|
||||
if (mAccountList) mAccountList->resetData();
|
||||
if (mCallList) mCallList->resetData();
|
||||
if (mCallHistoryList) mCallHistoryList->resetData();
|
||||
if (mChatList) mChatList->resetData();
|
||||
if (mConferenceInfoList) mConferenceInfoList->resetData();
|
||||
closeCallsWindow();
|
||||
setMainWindow(nullptr);
|
||||
setCoreStarted(false);
|
||||
mEngine->clearComponentCache();
|
||||
mEngine->clearSingletons();
|
||||
delete mEngine;
|
||||
|
|
@ -1060,7 +1166,7 @@ bool App::notify(QObject *receiver, QEvent *event) {
|
|||
}
|
||||
if (event->type() == QEvent::MouseButtonPress) {
|
||||
auto window = findParentWindow(receiver);
|
||||
if (getMainWindow() == window) {
|
||||
if (getMainWindow() == window && mAccountList) {
|
||||
auto defaultAccountCore = mAccountList->getDefaultAccountCore();
|
||||
if (defaultAccountCore && defaultAccountCore->getUnreadCallNotifications() > 0) {
|
||||
emit defaultAccountCore->lResetMissedCalls();
|
||||
|
|
@ -1070,27 +1176,30 @@ bool App::notify(QObject *receiver, QEvent *event) {
|
|||
return done;
|
||||
}
|
||||
|
||||
void App::handleAccountActivity(QSharedPointer<AccountCore> accountCore) {
|
||||
if (!accountCore) return;
|
||||
auto accountPresence = accountCore->getPresence();
|
||||
if ((mMainWindow && mMainWindow->isActive() || (mCallsWindow && mCallsWindow->isActive())) &&
|
||||
accountPresence == LinphoneEnums::Presence::Away) {
|
||||
accountCore->lSetPresence(LinphoneEnums::Presence::Online, false);
|
||||
} else if (((!mMainWindow || !mMainWindow->isActive() || !mMainWindow->isVisible()) &&
|
||||
(!mCallsWindow || !mCallsWindow->isActive() || !mCallsWindow->isVisible())) &&
|
||||
accountPresence == LinphoneEnums::Presence::Online) {
|
||||
accountCore->lSetPresence(LinphoneEnums::Presence::Away, false);
|
||||
}
|
||||
}
|
||||
|
||||
void App::handleAppActivity() {
|
||||
auto handle = [this](QSharedPointer<AccountCore> accountCore) {
|
||||
if (!accountCore) return;
|
||||
auto accountPresence = accountCore->getPresence();
|
||||
if ((mMainWindow && mMainWindow->isActive() || (mCallsWindow && mCallsWindow->isActive())) &&
|
||||
accountPresence == LinphoneEnums::Presence::Away)
|
||||
accountCore->lSetPresence(LinphoneEnums::Presence::Online);
|
||||
if (((!mMainWindow || !mMainWindow->isActive()) && (!mCallsWindow || !mCallsWindow->isActive())) &&
|
||||
accountPresence == LinphoneEnums::Presence::Online)
|
||||
accountCore->lSetPresence(LinphoneEnums::Presence::Away);
|
||||
};
|
||||
if (mAccountList) {
|
||||
for (auto &account : mAccountList->getSharedList<AccountCore>())
|
||||
handle(account);
|
||||
handleAccountActivity(account);
|
||||
} else {
|
||||
connect(
|
||||
this, &App::accountsChanged, this,
|
||||
[this, &handle] {
|
||||
[this] {
|
||||
if (mAccountList) {
|
||||
for (auto &account : mAccountList->getSharedList<AccountCore>())
|
||||
handle(account);
|
||||
handleAccountActivity(account);
|
||||
}
|
||||
},
|
||||
Qt::SingleShotConnection);
|
||||
|
|
@ -1192,6 +1301,41 @@ AccountList *App::getAccounts() const {
|
|||
return mAccountList.get();
|
||||
}
|
||||
|
||||
QSharedPointer<ConferenceInfoList> App::getConferenceInfoList() const {
|
||||
return mConferenceInfoList;
|
||||
}
|
||||
void App::setConferenceInfoList(QSharedPointer<ConferenceInfoList> data) {
|
||||
if (mConferenceInfoList != data) {
|
||||
mConferenceInfoList = data;
|
||||
emit conferenceInfosChanged();
|
||||
}
|
||||
}
|
||||
|
||||
QSharedPointer<CallHistoryList> App::getCallHistoryList() const {
|
||||
return mCallHistoryList;
|
||||
}
|
||||
void App::setCallHistoryList(QSharedPointer<CallHistoryList> data) {
|
||||
if (mCallHistoryList != data) {
|
||||
mCallHistoryList = data;
|
||||
emit callHistoryChanged();
|
||||
}
|
||||
}
|
||||
|
||||
QSharedPointer<ChatList> App::getChatList() const {
|
||||
return mChatList;
|
||||
}
|
||||
|
||||
ChatList *App::getChats() const {
|
||||
return mChatList.get();
|
||||
}
|
||||
|
||||
void App::setChatList(QSharedPointer<ChatList> data) {
|
||||
if (mChatList != data) {
|
||||
mChatList = data;
|
||||
emit chatsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
QSharedPointer<CallList> App::getCallList() const {
|
||||
return mCallList;
|
||||
}
|
||||
|
|
@ -1221,12 +1365,24 @@ void App::onAuthenticationRequested(const std::shared_ptr<linphone::Core> &core,
|
|||
const std::shared_ptr<linphone::AuthInfo> &authInfo,
|
||||
linphone::AuthMethod method) {
|
||||
bool authInfoIsInAccounts = false;
|
||||
for (auto &account : core->getAccountList()) {
|
||||
auto accountAuthInfo = account->findAuthInfo();
|
||||
if (authInfo && accountAuthInfo && authInfo->isEqualButAlgorithms(accountAuthInfo)) {
|
||||
authInfoIsInAccounts = true;
|
||||
if (account->getState() == linphone::RegistrationState::Ok) return;
|
||||
break;
|
||||
if (authInfo) {
|
||||
for (auto &account : core->getAccountList()) {
|
||||
if (!account) continue;
|
||||
auto accountAuthInfo = account->findAuthInfo();
|
||||
if (accountAuthInfo) {
|
||||
if (authInfo->isEqualButAlgorithms(accountAuthInfo)) {
|
||||
authInfoIsInAccounts = true;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
auto identityAddress = account->getParams()->getIdentityAddress();
|
||||
if (!identityAddress) continue;
|
||||
if (authInfo->getUsername() == identityAddress->getUsername() &&
|
||||
authInfo->getDomain() == identityAddress->getDomain()) {
|
||||
authInfoIsInAccounts = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!authInfoIsInAccounts) return;
|
||||
|
|
@ -1374,12 +1530,12 @@ bool App::event(QEvent *event) {
|
|||
} else if (event->type() == QEvent::ApplicationActivate) {
|
||||
for (int i = 0; i < getAccountList()->rowCount(); ++i) {
|
||||
auto accountCore = getAccountList()->getAt<AccountCore>(i);
|
||||
emit accountCore->lSetPresence(LinphoneEnums::Presence::Online, false, false);
|
||||
handleAccountActivity(accountCore);
|
||||
}
|
||||
} else if (event->type() == QEvent::ApplicationDeactivate) {
|
||||
for (int i = 0; i < getAccountList()->rowCount(); ++i) {
|
||||
auto accountCore = getAccountList()->getAt<AccountCore>(i);
|
||||
emit accountCore->lSetPresence(LinphoneEnums::Presence::Away, false, false);
|
||||
handleAccountActivity(accountCore);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1488,12 +1644,17 @@ void App::setMacOSDockActions() {
|
|||
void App::setLocale(QString configLocale) {
|
||||
if (!configLocale.isEmpty()) mLocale = QLocale(configLocale);
|
||||
else mLocale = QLocale(QLocale::system().name());
|
||||
emit localeChanged();
|
||||
}
|
||||
|
||||
QLocale App::getLocale() {
|
||||
return mLocale;
|
||||
}
|
||||
|
||||
QString App::getLocaleAsString() {
|
||||
return mLocale.name();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------
|
||||
// Version infos.
|
||||
//-----------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -24,8 +24,11 @@
|
|||
#include <QSharedPointer>
|
||||
|
||||
#include "core/account/AccountProxy.hpp"
|
||||
#include "core/call-history/CallHistoryList.hpp"
|
||||
#include "core/call/CallProxy.hpp"
|
||||
#include "core/chat/ChatGui.hpp"
|
||||
#include "core/chat/ChatList.hpp"
|
||||
#include "core/conference/ConferenceInfoList.hpp"
|
||||
#include "core/setting/SettingsCore.hpp"
|
||||
#include "core/singleapplication/singleapplication.h"
|
||||
#include "model/cli/CliModel.hpp"
|
||||
|
|
@ -45,11 +48,15 @@ class App : public SingleApplication, public AbstractObject {
|
|||
Q_PROPERTY(bool coreStarted READ getCoreStarted WRITE setCoreStarted NOTIFY coreStartedChanged)
|
||||
Q_PROPERTY(AccountList *accounts READ getAccounts NOTIFY accountsChanged)
|
||||
Q_PROPERTY(CallList *calls READ getCalls NOTIFY callsChanged)
|
||||
Q_PROPERTY(ChatList *chats READ getChats NOTIFY chatsChanged)
|
||||
Q_PROPERTY(QString shortApplicationVersion READ getShortApplicationVersion CONSTANT)
|
||||
Q_PROPERTY(QString qtVersion READ getQtVersion CONSTANT)
|
||||
Q_PROPERTY(QString gitBranchName READ getGitBranchName CONSTANT)
|
||||
Q_PROPERTY(QString sdkVersion READ getSdkVersion CONSTANT)
|
||||
Q_PROPERTY(ChatGui *currentChat READ getCurrentChat WRITE setCurrentChat NOTIFY currentChatChanged)
|
||||
Q_PROPERTY(QString localeAsString READ getLocaleAsString CONSTANT)
|
||||
Q_PROPERTY(int remainingTimeBeforeOidcTimeout MEMBER mRemainingTimeBeforeOidcTimeout NOTIFY
|
||||
remainingTimeBeforeOidcTimeoutChanged)
|
||||
|
||||
public:
|
||||
App(int &argc, char *argv[]);
|
||||
|
|
@ -132,6 +139,7 @@ public:
|
|||
}
|
||||
void updateSysTrayCount(int n);
|
||||
QLocale getLocale();
|
||||
QString getLocaleAsString();
|
||||
|
||||
void onLoggerInitialized();
|
||||
void sendCommand();
|
||||
|
|
@ -140,6 +148,7 @@ public:
|
|||
void setCoreStarted(bool started);
|
||||
|
||||
QQuickWindow *getCallsWindow();
|
||||
void handleAccountActivity(QSharedPointer<AccountCore> accountCore);
|
||||
Q_INVOKABLE void handleAppActivity();
|
||||
QQuickWindow *getOrCreateCallsWindow(QVariant callGui = QVariant());
|
||||
void setCallsWindowProperty(const char *id, QVariant property);
|
||||
|
|
@ -154,6 +163,16 @@ public:
|
|||
void setAccountList(QSharedPointer<AccountList> data);
|
||||
Q_INVOKABLE AccountList *getAccounts() const;
|
||||
|
||||
QSharedPointer<ConferenceInfoList> getConferenceInfoList() const;
|
||||
void setConferenceInfoList(QSharedPointer<ConferenceInfoList> data);
|
||||
|
||||
QSharedPointer<CallHistoryList> getCallHistoryList() const;
|
||||
void setCallHistoryList(QSharedPointer<CallHistoryList> data);
|
||||
|
||||
QSharedPointer<ChatList> getChatList() const;
|
||||
ChatList *getChats() const;
|
||||
void setChatList(QSharedPointer<ChatList> data);
|
||||
|
||||
QSharedPointer<CallList> getCallList() const;
|
||||
void setCallList(QSharedPointer<CallList> data);
|
||||
Q_INVOKABLE CallList *getCalls() const;
|
||||
|
|
@ -198,6 +217,12 @@ signals:
|
|||
void callsChanged();
|
||||
void currentDateChanged();
|
||||
void currentChatChanged();
|
||||
void conferenceInfosChanged();
|
||||
void chatsChanged();
|
||||
void callHistoryChanged();
|
||||
void localeChanged();
|
||||
void lForceOidcTimeout();
|
||||
void remainingTimeBeforeOidcTimeoutChanged();
|
||||
// void executeCommand(QString command);
|
||||
|
||||
private:
|
||||
|
|
@ -220,7 +245,10 @@ private:
|
|||
ChatGui *mCurrentChat = nullptr;
|
||||
QSharedPointer<SettingsCore> mSettings;
|
||||
QSharedPointer<AccountList> mAccountList;
|
||||
QSharedPointer<ConferenceInfoList> mConferenceInfoList;
|
||||
QSharedPointer<ChatList> mChatList;
|
||||
QSharedPointer<CallList> mCallList;
|
||||
QSharedPointer<CallHistoryList> mCallHistoryList;
|
||||
QSharedPointer<SafeConnection<App, CoreModel>> mCoreModelConnection;
|
||||
QSharedPointer<SafeConnection<App, CliModel>> mCliModelConnection;
|
||||
bool mAutoStart = false;
|
||||
|
|
@ -233,6 +261,8 @@ private:
|
|||
QTimer mDateUpdateTimer;
|
||||
QDate mCurrentDate;
|
||||
float mScreenRatio = 1;
|
||||
QTimer mOIDCRefreshTimer;
|
||||
int mRemainingTimeBeforeOidcTimeout = 0;
|
||||
|
||||
DECLARE_ABSTRACT_OBJECT
|
||||
};
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ list(APPEND _LINPHONEAPP_SOURCES
|
|||
core/call-history/CallHistoryProxy.cpp
|
||||
core/camera/CameraGui.cpp
|
||||
core/camera/CameraDummy.cpp
|
||||
core/camera/PreviewManager.cpp
|
||||
core/chat/ChatCore.cpp
|
||||
core/chat/ChatGui.cpp
|
||||
core/chat/ChatList.cpp
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ AccountCore::AccountCore(const std::shared_ptr<linphone::Account> &account) : QO
|
|||
mIsDefaultAccount = CoreModel::getInstance()->getCore()->getDefaultAccount() == account;
|
||||
mUnreadNotifications = account->getMissedCallsCount() + account->getUnreadChatMessageCount();
|
||||
mDisplayName = Utils::coreStringToAppString(identityAddress->getDisplayName());
|
||||
mPublishEnabled = params->publishEnabled();
|
||||
if (mDisplayName.isEmpty()) {
|
||||
mDisplayName = ToolModel::getDisplayName(identityAddress);
|
||||
auto copyAddress = identityAddress->clone();
|
||||
|
|
@ -320,20 +321,20 @@ void AccountCore::reset(const AccountCore &accountCore) {
|
|||
setUnreadNotifications(accountCore.mUnreadNotifications);
|
||||
setUnreadCallNotifications(accountCore.mUnreadCallNotifications);
|
||||
setUnreadMessageNotifications(accountCore.mUnreadMessageNotifications);
|
||||
setMwiServerAddress(accountCore.mMwiServerAddress);
|
||||
setVoicemailAddress(accountCore.mVoicemailAddress);
|
||||
setTransport(accountCore.mTransport);
|
||||
setRegistrarUri(accountCore.mRegistrarUri);
|
||||
setOutboundProxyUri(accountCore.mOutboundProxyUri);
|
||||
onMwiServerAddressChanged(accountCore.mMwiServerAddress);
|
||||
onVoicemailAddressChanged(accountCore.mVoicemailAddress);
|
||||
onTransportChanged(accountCore.mTransport);
|
||||
onRegistrarUriChanged(accountCore.mRegistrarUri);
|
||||
onOutboundProxyUriChanged(accountCore.mOutboundProxyUri);
|
||||
setStunServer(accountCore.mStunServer);
|
||||
setIceEnabled(accountCore.mIceEnabled);
|
||||
setAvpfEnabled(accountCore.mAvpfEnabled);
|
||||
setBundleModeEnabled(accountCore.mBundleModeEnabled);
|
||||
setExpire(accountCore.mExpire);
|
||||
setConferenceFactoryAddress(accountCore.mConferenceFactoryAddress);
|
||||
setAudioVideoConferenceFactoryAddress(accountCore.mAudioVideoConferenceFactoryAddress);
|
||||
setLimeServerUrl(accountCore.mLimeServerUrl);
|
||||
setCcmpServerUrl(accountCore.mCcmpServerUrl);
|
||||
onIceEnabledChanged(accountCore.mIceEnabled);
|
||||
onAvpfEnabledChanged(accountCore.mAvpfEnabled);
|
||||
onBundleModeEnabledChanged(accountCore.mBundleModeEnabled);
|
||||
onExpireChanged(accountCore.mExpire);
|
||||
onConferenceFactoryAddressChanged(accountCore.mConferenceFactoryAddress);
|
||||
onAudioVideoConferenceFactoryAddressChanged(accountCore.mAudioVideoConferenceFactoryAddress);
|
||||
onLimeServerUrlChanged(accountCore.mLimeServerUrl);
|
||||
onCcmpServerUrlChanged(accountCore.mCcmpServerUrl);
|
||||
}
|
||||
|
||||
const std::shared_ptr<AccountModel> &AccountCore::getModel() const {
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ public:
|
|||
Q_PROPERTY(LinphoneEnums::Presence explicitPresence MEMBER mExplicitPresence NOTIFY presenceChanged)
|
||||
Q_PROPERTY(QString presenceNote READ getPresenceNote WRITE setPresenceNote NOTIFY presenceChanged)
|
||||
Q_PROPERTY(int maxPresenceNoteSize MEMBER mMaxPresenceNoteSize CONSTANT)
|
||||
Q_PROPERTY(bool publishEnabled MEMBER mPublishEnabled CONSTANT)
|
||||
Q_PROPERTY(QString ccmpServerUrl READ getCcmpServerUrl WRITE setCcmpServerUrl NOTIFY ccmpServerUrlChanged)
|
||||
|
||||
DECLARE_CORE_GET(int, voicemailCount, VoicemailCount)
|
||||
|
|
@ -278,6 +279,7 @@ private:
|
|||
LinphoneEnums::Presence mExplicitPresence;
|
||||
QString mPresenceNote;
|
||||
int mMaxPresenceNoteSize;
|
||||
bool mPublishEnabled = false;
|
||||
|
||||
bool mIsSaved = true;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,12 @@
|
|||
#include "core/App.hpp"
|
||||
|
||||
AccountProxy::AccountProxy(QObject *parent) : LimitProxy(parent) {
|
||||
if (!App::getInstance()->getAccountList()) {
|
||||
mList = AccountList::create();
|
||||
App::getInstance()->setAccountList(mList);
|
||||
}
|
||||
mList = App::getInstance()->getAccountList();
|
||||
setSourceModel(mList.get());
|
||||
connect(this, &AccountProxy::initializedChanged, this, &AccountProxy::resetDefaultAccount);
|
||||
connect(this, &AccountProxy::initializedChanged, this, &AccountProxy::haveAccountChanged);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ signals:
|
|||
|
||||
protected:
|
||||
bool mInitialized = false;
|
||||
QSharedPointer<AccountList> mList;
|
||||
QSharedPointer<AccountCore> mDefaultAccount; // When null, a new UI object is build from List
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ void CarddavCore::setSelf(QSharedPointer<CarddavCore> me) {
|
|||
mCarddavModelConnection = SafeConnection<CarddavCore, CarddavModel>::create(me, mCarddavModel);
|
||||
mCarddavModelConnection->makeConnectToModel(&CarddavModel::saved, [this](bool success, QString message) {
|
||||
mCarddavModelConnection->invokeToCore([this, success, message]() {
|
||||
if (success) emit App::getInstance() -> getSettings()->cardDAVAddressBookSynchronized();
|
||||
if (success) emit App::getInstance()->getSettings()->cardDAVAddressBookSynchronized();
|
||||
emit saved(success, message);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ void CallHistoryList::setSelf(QSharedPointer<CallHistoryList> me) {
|
|||
for (auto it : linphoneCallLogs) {
|
||||
auto model = createCallHistoryCore(it);
|
||||
toConnect(model.get());
|
||||
callLogs->push_back(model);
|
||||
callLogs->push_front(model);
|
||||
}
|
||||
mModelConnection->invokeToCore([this, callLogs]() {
|
||||
mustBeInMainThread(getClassName());
|
||||
|
|
|
|||
|
|
@ -27,6 +27,11 @@ DEFINE_ABSTRACT_OBJECT(CallHistoryProxy)
|
|||
|
||||
CallHistoryProxy::CallHistoryProxy(QObject *parent) : LimitProxy(parent) {
|
||||
mHistoryList = CallHistoryList::create();
|
||||
if (!App::getInstance()->getCallHistoryList()) {
|
||||
mHistoryList = CallHistoryList::create();
|
||||
App::getInstance()->setCallHistoryList(mHistoryList);
|
||||
}
|
||||
mHistoryList = App::getInstance()->getCallHistoryList();
|
||||
connect(mHistoryList.get(), &CallHistoryList::listAboutToBeReset, this, &CallHistoryProxy::listAboutToBeReset);
|
||||
setSourceModels(new SortFilterList(mHistoryList.get(), Qt::DescendingOrder));
|
||||
connect(App::getInstance(), &App::currentDateChanged, this, [this] { emit mHistoryList->lUpdate(); });
|
||||
|
|
@ -63,8 +68,5 @@ bool CallHistoryProxy::SortFilterList::filterAcceptsRow(int sourceRow, const QMo
|
|||
}
|
||||
|
||||
bool CallHistoryProxy::SortFilterList::lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const {
|
||||
auto l = getItemAtSource<CallHistoryList, CallHistoryCore>(sourceLeft.row());
|
||||
auto r = getItemAtSource<CallHistoryList, CallHistoryCore>(sourceRight.row());
|
||||
|
||||
return l->mDate < r->mDate;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,7 +113,8 @@ CallCore::CallCore(const std::shared_ptr<linphone::Call> &call) : QObject(nullpt
|
|||
auto videoDirection = callParams->getVideoDirection();
|
||||
mLocalVideoEnabled =
|
||||
videoDirection == linphone::MediaDirection::SendOnly || videoDirection == linphone::MediaDirection::SendRecv;
|
||||
mCameraEnabled = callParams->cameraEnabled();
|
||||
mCameraEnabled = mLocalVideoEnabled && callParams->cameraEnabled();
|
||||
qDebug() << "create call with camera enabled" << mLocalVideoEnabled << callParams->cameraEnabled();
|
||||
auto remoteParams = call->getRemoteParams();
|
||||
videoDirection = remoteParams ? remoteParams->getVideoDirection() : linphone::MediaDirection::Inactive;
|
||||
mRemoteVideoEnabled =
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
#include "CameraDummy.hpp"
|
||||
#include "CameraGui.hpp"
|
||||
#include "PreviewManager.hpp"
|
||||
#include "core/App.hpp"
|
||||
#include "core/call/CallCore.hpp"
|
||||
#include "core/call/CallGui.hpp"
|
||||
|
|
@ -51,6 +50,10 @@ CameraGui::CameraGui(QQuickItem *parent) : QQuickFramebufferObject(parent) {
|
|||
CameraGui::~CameraGui() {
|
||||
mustBeInMainThread("~" + getClassName());
|
||||
mRefreshTimer.stop();
|
||||
if (mIsPreview) {
|
||||
lDebug() << "[CameraGui] Deactivation";
|
||||
CoreModel::getInstance()->getCore()->enableVideoPreview(false);
|
||||
}
|
||||
setWindowIdLocation(None);
|
||||
}
|
||||
|
||||
|
|
@ -84,9 +87,12 @@ QQuickFramebufferObject::Renderer *CameraGui::createRenderer() const {
|
|||
// A renderer is mandatory, we cannot wait async.
|
||||
switch (getSourceLocation()) {
|
||||
case CorePreview: {
|
||||
// if (resetWindowId) PreviewManager::getInstance()->unsubscribe(this);
|
||||
renderer = PreviewManager::getInstance()->subscribe(this);
|
||||
//(QQuickFramebufferObject::Renderer *)CoreModel::getInstance()->getCore()->createNativePreviewWindowId();
|
||||
App::postModelBlock([qmlName = mQmlName, callGui = mCallGui, &renderer]() {
|
||||
lInfo() << "[Camera] (" << qmlName << ") Camera create from Preview";
|
||||
renderer = (QQuickFramebufferObject::Renderer *)CoreModel::getInstance()
|
||||
->getCore()
|
||||
->createNativePreviewWindowId(nullptr);
|
||||
});
|
||||
|
||||
} break;
|
||||
case Call: {
|
||||
|
|
@ -135,7 +141,10 @@ void CameraGui::updateSDKRenderer(QQuickFramebufferObject::Renderer *renderer) {
|
|||
lDebug() << log().arg("Apply Qt Renderer to SDK") << renderer;
|
||||
switch (getSourceLocation()) {
|
||||
case CorePreview: {
|
||||
|
||||
App::postModelBlock([qmlName = mQmlName, renderer]() {
|
||||
lInfo() << "[Camera] (" << qmlName << ") Camera to CorePreview";
|
||||
CoreModel::getInstance()->getCore()->setNativePreviewWindowId(renderer);
|
||||
});
|
||||
} break;
|
||||
case Call: {
|
||||
App::postModelAsync([qmlName = mQmlName, callGui = mCallGui, renderer]() {
|
||||
|
|
@ -197,6 +206,11 @@ bool CameraGui::getIsPreview() const {
|
|||
void CameraGui::setIsPreview(bool status) {
|
||||
if (mIsPreview != status) {
|
||||
mIsPreview = status;
|
||||
// We block it to serialize the action and allow only one CameraGui to change the state.
|
||||
App::postModelBlock([status]() {
|
||||
lDebug() << "[CameraGui] " << (status ? "Activation" : "Deactivation");
|
||||
CoreModel::getInstance()->getCore()->enableVideoPreview(status);
|
||||
});
|
||||
updateWindowIdLocation();
|
||||
update();
|
||||
|
||||
|
|
@ -240,18 +254,9 @@ CameraGui::WindowIdLocation CameraGui::getSourceLocation() const {
|
|||
void CameraGui::setWindowIdLocation(const WindowIdLocation &location) {
|
||||
if (mWindowIdLocation != location) {
|
||||
lDebug() << log().arg("Update Window Id location from %2 to %3").arg(mWindowIdLocation).arg(location);
|
||||
if (mWindowIdLocation == CorePreview) PreviewManager::getInstance()->unsubscribe(this);
|
||||
// else if (mWindowIdLocation != None) resetWindowId(); // Location change: Reset old window ID.
|
||||
resetWindowId();
|
||||
mWindowIdLocation = location;
|
||||
if (mWindowIdLocation == CorePreview) PreviewManager::getInstance()->subscribe(this);
|
||||
else updateSDKRenderer();
|
||||
// QTimer::singleShot(100, this, &CameraGui::requestNewRenderer);
|
||||
// if (mWindowIdLocation == WindowIdLocation::CorePreview) {
|
||||
// mLastVideoDefinition =
|
||||
// CoreManager::getInstance()->getSettingsModel()->getCurrentPreviewVideoDefinition(); emit
|
||||
// videoDefinitionChanged(); mLastVideoDefinitionChecker.start();
|
||||
// } else mLastVideoDefinitionChecker.stop();
|
||||
updateSDKRenderer();
|
||||
}
|
||||
}
|
||||
void CameraGui::updateWindowIdLocation() {
|
||||
|
|
@ -262,7 +267,7 @@ void CameraGui::updateWindowIdLocation() {
|
|||
setWindowIdLocation(WindowIdLocation::Device);
|
||||
else setWindowIdLocation(WindowIdLocation::CorePreview);
|
||||
}
|
||||
|
||||
// TODO to remove
|
||||
void CameraGui::callStateChanged(LinphoneEnums::CallState state) {
|
||||
if (getSourceLocation() == CorePreview && state == LinphoneEnums::CallState::Connected) {
|
||||
if (!getIsReady()) {
|
||||
|
|
|
|||
|
|
@ -1,136 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2010-2024 Belledonne Communications SARL.
|
||||
*
|
||||
* This file is part of linphone-desktop
|
||||
* (see https://www.linphone.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 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/>.
|
||||
*/
|
||||
|
||||
#include <QOpenGLFramebufferObject>
|
||||
#include <QQuickWindow>
|
||||
#include <QThread>
|
||||
#include <QTimer>
|
||||
|
||||
#include "../App.hpp"
|
||||
#include "PreviewManager.hpp"
|
||||
#include "tool/Utils.hpp"
|
||||
|
||||
DEFINE_ABSTRACT_OBJECT(PreviewManager)
|
||||
|
||||
// =============================================================================
|
||||
PreviewManager *PreviewManager::gInstance = nullptr;
|
||||
|
||||
PreviewManager::PreviewManager(QObject *parent) : QObject(parent) {
|
||||
}
|
||||
|
||||
PreviewManager::~PreviewManager() {
|
||||
}
|
||||
|
||||
PreviewManager *PreviewManager::getInstance() {
|
||||
if (gInstance) return gInstance;
|
||||
else {
|
||||
gInstance = new PreviewManager();
|
||||
return gInstance;
|
||||
}
|
||||
}
|
||||
|
||||
// Create a Renderer from SDK preview
|
||||
QQuickFramebufferObject::Renderer *PreviewManager::subscribe(const CameraGui *candidate) {
|
||||
QQuickFramebufferObject::Renderer *renderer = nullptr;
|
||||
mCounterMutex.lock();
|
||||
|
||||
if (mCandidates.size() == 0) {
|
||||
activate();
|
||||
}
|
||||
auto itCandidate =
|
||||
std::find_if(mCandidates.begin(), mCandidates.end(),
|
||||
[candidate](const QPair<const CameraGui *, QQuickFramebufferObject::Renderer *> &item) {
|
||||
return item.first == candidate;
|
||||
});
|
||||
if (itCandidate == mCandidates.end()) {
|
||||
connect(candidate, &QObject::destroyed, this, qOverload<QObject *>(&PreviewManager::unsubscribe));
|
||||
mCandidates.append({candidate, nullptr});
|
||||
itCandidate = mCandidates.end() - 1;
|
||||
lDebug() << log().arg("Subscribing New") << itCandidate->first->getQmlName();
|
||||
} else {
|
||||
lDebug() << log().arg("Resubscribing") << itCandidate->first->getQmlName();
|
||||
}
|
||||
mCounterMutex.unlock();
|
||||
App::postModelBlock([&renderer, isFirst = (itCandidate == mCandidates.begin()),
|
||||
name = itCandidate->first->getQmlName()]() {
|
||||
renderer =
|
||||
(QQuickFramebufferObject::Renderer *)CoreModel::getInstance()->getCore()->createNativePreviewWindowId(
|
||||
nullptr);
|
||||
if (!renderer) { // TODO debug
|
||||
renderer =
|
||||
(QQuickFramebufferObject::Renderer *)CoreModel::getInstance()->getCore()->createNativePreviewWindowId(
|
||||
nullptr);
|
||||
}
|
||||
if (isFirst) {
|
||||
lDebug() << "[PreviewManager] " << name << " Set Native Preview Id with " << renderer;
|
||||
CoreModel::getInstance()->getCore()->setNativePreviewWindowId(renderer);
|
||||
}
|
||||
});
|
||||
mCounterMutex.lock();
|
||||
itCandidate->second = renderer;
|
||||
mCounterMutex.unlock();
|
||||
return renderer;
|
||||
}
|
||||
|
||||
void PreviewManager::unsubscribe(const CameraGui *candidate) { // If nullptr, Use of sender()
|
||||
mCounterMutex.lock();
|
||||
auto itCandidate = std::find_if(mCandidates.begin(), mCandidates.end(),
|
||||
[candidate = (candidate ? candidate : sender())](
|
||||
const QPair<const CameraGui *, QQuickFramebufferObject::Renderer *> &item) {
|
||||
return item.first == candidate;
|
||||
});
|
||||
if (itCandidate != mCandidates.end()) {
|
||||
lDebug() << log().arg("Unsubscribing") << itCandidate->first->getQmlName();
|
||||
disconnect(candidate, nullptr, this, nullptr);
|
||||
if (mCandidates.size() == 1) {
|
||||
mCandidates.erase(itCandidate);
|
||||
deactivate();
|
||||
} else if (mCandidates.begin() == itCandidate) {
|
||||
mCandidates.erase(itCandidate);
|
||||
lDebug() << log().arg("Update") << mCandidates.first().first->getQmlName();
|
||||
auto renderer = mCandidates.first().second;
|
||||
if (renderer)
|
||||
App::postModelBlock([renderer = mCandidates.first().second]() {
|
||||
CoreModel::getInstance()->getCore()->setNativePreviewWindowId(renderer);
|
||||
});
|
||||
} else {
|
||||
mCandidates.erase(itCandidate);
|
||||
}
|
||||
}
|
||||
mCounterMutex.unlock();
|
||||
}
|
||||
|
||||
void PreviewManager::unsubscribe(QObject *sender) {
|
||||
unsubscribe(dynamic_cast<CameraGui *>(sender));
|
||||
}
|
||||
|
||||
void PreviewManager::activate() {
|
||||
App::postModelAsync([]() {
|
||||
lDebug() << "[PreviewManager] Activation";
|
||||
CoreModel::getInstance()->getCore()->enableVideoPreview(true);
|
||||
});
|
||||
}
|
||||
|
||||
void PreviewManager::deactivate() {
|
||||
App::postModelAsync([]() {
|
||||
lDebug() << "[PreviewManager] Deactivation";
|
||||
CoreModel::getInstance()->getCore()->enableVideoPreview(false);
|
||||
});
|
||||
}
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2024 Belledonne Communications SARL.
|
||||
*
|
||||
* This file is part of linphone-desktop
|
||||
* (see https://www.linphone.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 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/>.
|
||||
*/
|
||||
|
||||
#ifndef PREVIEW_MANAGER_H_
|
||||
#define PREVIEW_MANAGER_H_
|
||||
|
||||
#include "CameraGui.hpp"
|
||||
#include "tool/AbstractObject.hpp"
|
||||
#include <QMutex>
|
||||
#include <QObject>
|
||||
#include <QPair>
|
||||
#include <QQuickFramebufferObject>
|
||||
|
||||
// Manage the SDK preview as a singleton.
|
||||
// The goal is to process the limitation that only one preview can be displayed.
|
||||
// On asynchronized application, the destruction of a previous Preview can be done AFTER the creation on a new Preview
|
||||
// Sticker.
|
||||
|
||||
// =============================================================================
|
||||
|
||||
class PreviewManager : public QObject, public AbstractObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
PreviewManager(QObject *parent = nullptr);
|
||||
virtual ~PreviewManager();
|
||||
|
||||
static PreviewManager *getInstance();
|
||||
|
||||
QQuickFramebufferObject::Renderer *subscribe(const CameraGui *candidate);
|
||||
void unsubscribe(const CameraGui *candidate);
|
||||
|
||||
void activate();
|
||||
void deactivate();
|
||||
public slots:
|
||||
void unsubscribe(QObject *sender);
|
||||
|
||||
private:
|
||||
QMutex mCounterMutex;
|
||||
QList<QPair<const CameraGui *, QQuickFramebufferObject::Renderer *>> mCandidates;
|
||||
static PreviewManager *gInstance;
|
||||
QQuickFramebufferObject::Renderer *mPreviewRenderer = nullptr;
|
||||
DECLARE_ABSTRACT_OBJECT
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -43,7 +43,7 @@ QSharedPointer<ChatCore> ChatCore::create(const std::shared_ptr<linphone::ChatRo
|
|||
}
|
||||
|
||||
ChatCore::ChatCore(const std::shared_ptr<linphone::ChatRoom> &chatRoom) : QObject(nullptr) {
|
||||
// lDebug() << "[ChatCore] new" << this;
|
||||
lDebug() << "[ChatCore] new" << this;
|
||||
mustBeInLinphoneThread(getClassName());
|
||||
App::getInstance()->mEngine->setObjectOwnership(this, QQmlEngine::CppOwnership);
|
||||
mLastUpdatedTime = QDateTime::fromSecsSinceEpoch(chatRoom->getLastUpdateTime());
|
||||
|
|
@ -118,11 +118,10 @@ ChatCore::ChatCore(const std::shared_ptr<linphone::ChatRoom> &chatRoom) : QObjec
|
|||
ChatCore::~ChatCore() {
|
||||
lDebug() << "[ChatCore] delete" << this;
|
||||
mustBeInMainThread("~" + getClassName());
|
||||
if (mChatModelConnection) mChatModelConnection->disconnect();
|
||||
emit mChatModel->removeListener();
|
||||
}
|
||||
|
||||
void ChatCore::setSelf(QSharedPointer<ChatCore> me) {
|
||||
void ChatCore::setSelf(const QSharedPointer<ChatCore> &me) {
|
||||
mChatModelConnection = SafeConnection<ChatCore, ChatModel>::create(me, mChatModel);
|
||||
mChatModelConnection->makeConnectToCore(&ChatCore::lDeleteHistory, [this]() {
|
||||
mChatModelConnection->invokeToModel([this]() { mChatModel->deleteHistory(); });
|
||||
|
|
@ -199,7 +198,11 @@ void ChatCore::setSelf(QSharedPointer<ChatCore> me) {
|
|||
emit conferenceJoined();
|
||||
});
|
||||
}
|
||||
mChatModelConnection->invokeToCore([this, participants]() { setParticipants(participants); });
|
||||
auto meAdmin = chatRoom->getMe() && chatRoom->getMe()->isAdmin();
|
||||
mChatModelConnection->invokeToCore([this, participants, meAdmin]() {
|
||||
setParticipants(participants);
|
||||
setMeAdmin(meAdmin);
|
||||
});
|
||||
});
|
||||
|
||||
// Events (excluding messages)
|
||||
|
|
@ -207,7 +210,8 @@ void ChatCore::setSelf(QSharedPointer<ChatCore> me) {
|
|||
&ChatModel::newEvent, [this](const std::shared_ptr<linphone::ChatRoom> &chatRoom,
|
||||
const std::shared_ptr<const linphone::EventLog> &eventLog) {
|
||||
if (mChatModel->getMonitor() != chatRoom) return;
|
||||
lDebug() << "EVENT LOG RECEIVED IN CHATROOM" << mChatModel->getTitle();
|
||||
if (!eventLog) return;
|
||||
lDebug() << log().arg("EVENT LOG RECEIVED IN CHATROOM") << this << mChatModel->getTitle();
|
||||
auto event = EventLogCore::create(eventLog, chatRoom);
|
||||
if (event->isHandled()) {
|
||||
mChatModelConnection->invokeToCore([this, event]() { emit eventsInserted({event}); });
|
||||
|
|
@ -220,7 +224,7 @@ void ChatCore::setSelf(QSharedPointer<ChatCore> me) {
|
|||
&ChatModel::chatMessagesReceived, [this](const std::shared_ptr<linphone::ChatRoom> &chatRoom,
|
||||
const std::list<std::shared_ptr<linphone::EventLog>> &eventsLog) {
|
||||
if (mChatModel->getMonitor() != chatRoom) return;
|
||||
lDebug() << "CHAT MESSAGE RECEIVED IN CHATROOM" << mChatModel->getTitle();
|
||||
lDebug() << log().arg("CHAT MESSAGE RECEIVED IN CHATROOM") << this << mChatModel->getTitle();
|
||||
QList<QSharedPointer<EventLogCore>> list;
|
||||
for (auto &e : eventsLog) {
|
||||
auto event = EventLogCore::create(e, chatRoom);
|
||||
|
|
@ -394,7 +398,6 @@ void ChatCore::setSelf(QSharedPointer<ChatCore> me) {
|
|||
[this](std::shared_ptr<linphone::Friend> f) { updateInfo(f); });
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::friendRemoved,
|
||||
[this](std::shared_ptr<linphone::Friend> f) { updateInfo(f, true); });
|
||||
|
||||
}
|
||||
|
||||
QDateTime ChatCore::getLastUpdatedTime() const {
|
||||
|
|
@ -623,6 +626,8 @@ ChatCore::buildParticipants(const std::shared_ptr<linphone::ChatRoom> &chatRoom)
|
|||
auto participantCore = ParticipantCore::create(participant);
|
||||
result.append(participantCore);
|
||||
}
|
||||
auto meCore = ParticipantCore::create(chatRoom->getMe());
|
||||
if (meCore) result.append(meCore);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ public:
|
|||
static QSharedPointer<ChatCore> create(const std::shared_ptr<linphone::ChatRoom> &chatRoom);
|
||||
ChatCore(const std::shared_ptr<linphone::ChatRoom> &chatRoom);
|
||||
~ChatCore();
|
||||
void setSelf(QSharedPointer<ChatCore> me);
|
||||
void setSelf(const QSharedPointer<ChatCore> &me);
|
||||
|
||||
QDateTime getLastUpdatedTime() const;
|
||||
void setLastUpdatedTime(QDateTime time);
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ ChatList::ChatList(QObject *parent) : ListProxy(parent) {
|
|||
|
||||
ChatList::~ChatList() {
|
||||
mustBeInMainThread("~" + getClassName());
|
||||
mModelConnection = nullptr;
|
||||
mModelConnection->disconnect();
|
||||
}
|
||||
|
||||
void ChatList::connectItem(QSharedPointer<ChatCore> chat) {
|
||||
|
|
@ -73,7 +73,9 @@ void ChatList::connectItem(QSharedPointer<ChatCore> chat) {
|
|||
};
|
||||
connect(chat.get(), &ChatCore::unreadMessagesCountChanged, this, [this, dataChange] {
|
||||
dataChange();
|
||||
auto defaultAccount = App::getInstance()->getAccountList()->getDefaultAccountCore();
|
||||
auto defaultAccount = App::getInstance()->getAccountList()
|
||||
? App::getInstance()->getAccountList()->getDefaultAccountCore()
|
||||
: nullptr;
|
||||
if (defaultAccount) emit defaultAccount->lRefreshNotifications();
|
||||
});
|
||||
connect(chat.get(), &ChatCore::lastUpdatedTimeChanged, this, dataChange);
|
||||
|
|
@ -93,15 +95,17 @@ void ChatList::setSelf(QSharedPointer<ChatList> me) {
|
|||
return;
|
||||
}
|
||||
setIsUpdating(true);
|
||||
beginResetModel();
|
||||
mModelConnection->invokeToModel([this]() {
|
||||
mustBeInLinphoneThread(getClassName());
|
||||
beginResetModel();
|
||||
// Avoid copy to lambdas
|
||||
QList<QSharedPointer<ChatCore>> *chats = new QList<QSharedPointer<ChatCore>>();
|
||||
auto currentAccount = CoreModel::getInstance()->getCore()->getDefaultAccount();
|
||||
if (!currentAccount) {
|
||||
setIsUpdating(false);
|
||||
endResetModel();
|
||||
mModelConnection->invokeToCore([this, chats]() {
|
||||
setIsUpdating(false);
|
||||
endResetModel();
|
||||
});
|
||||
return;
|
||||
}
|
||||
auto linphoneChatRooms = currentAccount->filterChatRooms(Utils::appStringToCoreString(mFilter));
|
||||
|
|
@ -122,10 +126,11 @@ void ChatList::setSelf(QSharedPointer<ChatList> me) {
|
|||
mList.clear();
|
||||
for (auto &chat : *chats) {
|
||||
connectItem(chat);
|
||||
mList.append(chat);
|
||||
}
|
||||
add(*chats);
|
||||
endResetModel();
|
||||
setIsUpdating(false);
|
||||
chats->clear();
|
||||
delete chats;
|
||||
});
|
||||
});
|
||||
|
|
@ -141,11 +146,11 @@ void ChatList::setSelf(QSharedPointer<ChatList> me) {
|
|||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||
if (!message) return;
|
||||
if (room->getAccount() != core->getDefaultAccount()) {
|
||||
qWarning() << log().arg("Chat room does not refer to current account, return");
|
||||
qInfo() << log().arg("Chat room does not refer to current account, return");
|
||||
return;
|
||||
}
|
||||
auto chatCore = ChatCore::create(room);
|
||||
mModelConnection->invokeToCore([this, chatCore] { addChatInList(chatCore); });
|
||||
mModelConnection->invokeToCore([this, chatCore] { addChatInList(chatCore, false); });
|
||||
};
|
||||
mModelConnection->makeConnectToModel(&CoreModel::messageReceived,
|
||||
[this, addChatToList](const std::shared_ptr<linphone::Core> &core,
|
||||
|
|
@ -168,6 +173,33 @@ void ChatList::setSelf(QSharedPointer<ChatList> me) {
|
|||
const std::shared_ptr<const linphone::ChatMessageReaction> &reaction) {
|
||||
addChatToList(core, room, message);
|
||||
});
|
||||
mModelConnection->makeConnectToModel(
|
||||
&CoreModel::chatRoomStateChanged,
|
||||
[this, addChatToList](const std::shared_ptr<linphone::Core> &core,
|
||||
const std::shared_ptr<linphone::ChatRoom> &chatRoom, linphone::ChatRoom::State state) {
|
||||
if (state == linphone::ChatRoom::State::Created) {
|
||||
bool sendAddSignal = false;
|
||||
if (chatRoom == CoreModel::getInstance()->mChatRoomBeingCreated) {
|
||||
sendAddSignal = true;
|
||||
}
|
||||
CoreModel::getInstance()->mChatRoomBeingCreated = nullptr;
|
||||
if (chatRoom->getConferenceInfo()) {
|
||||
qWarning() << log().arg("Chatroom created during a conference, return");
|
||||
return;
|
||||
}
|
||||
auto chatAccount = chatRoom->getAccount();
|
||||
auto defaultAccount = core->getDefaultAccount();
|
||||
if (!chatAccount || !defaultAccount) return;
|
||||
if (!chatAccount->getParams()->getIdentityAddress()->weakEqual(
|
||||
defaultAccount->getParams()->getIdentityAddress())) {
|
||||
qWarning() << log().arg("Chatroom does not refer to current account, return");
|
||||
return;
|
||||
}
|
||||
auto chatCore = ChatCore::create(chatRoom);
|
||||
mModelConnection->invokeToCore(
|
||||
[this, chatCore, sendAddSignal] { addChatInList(chatCore, sendAddSignal); });
|
||||
}
|
||||
});
|
||||
|
||||
connect(this, &ChatList::filterChanged, [this](QString filter) {
|
||||
mFilter = filter;
|
||||
|
|
@ -186,8 +218,12 @@ int ChatList::findChatIndex(ChatGui *chatGui) {
|
|||
return it == chatList.end() ? -1 : std::distance(chatList.begin(), it);
|
||||
}
|
||||
|
||||
bool ChatList::addChatInList(QSharedPointer<ChatCore> chatCore) {
|
||||
bool ChatList::addChatInList(QSharedPointer<ChatCore> chatCore, bool emitAddSignal) {
|
||||
mustBeInMainThread(log().arg(Q_FUNC_INFO));
|
||||
if (chatCore->getIdentifier().isEmpty()) {
|
||||
qWarning() << "ChatRoom with invalid identifier cannot be added to the list, return";
|
||||
return false;
|
||||
}
|
||||
auto chatList = getSharedList<ChatCore>();
|
||||
auto it = std::find_if(chatList.begin(), chatList.end(), [chatCore](const QSharedPointer<ChatCore> item) {
|
||||
return item && chatCore && item->getIdentifier() == chatCore->getIdentifier();
|
||||
|
|
@ -195,7 +231,7 @@ bool ChatList::addChatInList(QSharedPointer<ChatCore> chatCore) {
|
|||
if (it == chatList.end()) {
|
||||
connectItem(chatCore);
|
||||
add(chatCore);
|
||||
emit chatAdded();
|
||||
if (emitAddSignal) emit chatAdded(chatCore);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -42,13 +42,13 @@ public:
|
|||
void connectItem(QSharedPointer<ChatCore> chat);
|
||||
|
||||
int findChatIndex(ChatGui *chat);
|
||||
bool addChatInList(QSharedPointer<ChatCore> chatCore);
|
||||
bool addChatInList(QSharedPointer<ChatCore> chatCore, bool emitAddSignal);
|
||||
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||
|
||||
signals:
|
||||
void lUpdate();
|
||||
void filterChanged(QString filter);
|
||||
void chatAdded();
|
||||
void chatAdded(QSharedPointer<ChatCore> chatCore);
|
||||
void chatUpdated();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ DEFINE_ABSTRACT_OBJECT(ChatProxy)
|
|||
ChatProxy::ChatProxy(QObject *parent) {
|
||||
mList = ChatList::create();
|
||||
setSourceModel(mList.get());
|
||||
setDynamicSortFilter(true);
|
||||
}
|
||||
|
||||
ChatProxy::~ChatProxy() {
|
||||
|
|
@ -45,11 +44,17 @@ void ChatProxy::setSourceModel(QAbstractItemModel *model) {
|
|||
if (newChatList) {
|
||||
connect(this, &ChatProxy::filterTextChanged, newChatList,
|
||||
[this, newChatList] { emit newChatList->filterChanged(getFilterText()); });
|
||||
connect(newChatList, &ChatList::chatAdded, this, [this] { invalidate(); });
|
||||
connect(newChatList, &ChatList::chatAdded, this, [this](QSharedPointer<ChatCore> chatCore) {
|
||||
if (chatCore) {
|
||||
invalidate();
|
||||
emit chatAdded(new ChatGui(chatCore));
|
||||
}
|
||||
});
|
||||
connect(newChatList, &ChatList::dataChanged, this, [this] { invalidate(); });
|
||||
}
|
||||
QSortFilterProxyModel::setSourceModel(newChatList);
|
||||
sort(0);
|
||||
emit modelChanged();
|
||||
}
|
||||
|
||||
int ChatProxy::findChatIndex(ChatGui *chatGui) {
|
||||
|
|
@ -67,7 +72,7 @@ int ChatProxy::findChatIndex(ChatGui *chatGui) {
|
|||
bool ChatProxy::addChatInList(ChatGui *chatGui) {
|
||||
auto chatList = dynamic_cast<ChatList *>(sourceModel());
|
||||
if (chatList && chatGui) {
|
||||
return chatList->addChatInList(chatGui->mCore);
|
||||
return chatList->addChatInList(chatGui->mCore, true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
class ChatProxy : public SortFilterProxy, public AbstractObject {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QAbstractItemModel *model WRITE setSourceModel NOTIFY modelChanged)
|
||||
|
||||
public:
|
||||
ChatProxy(QObject *parent = Q_NULLPTR);
|
||||
|
|
@ -42,6 +43,10 @@ public:
|
|||
Q_INVOKABLE int findChatIndex(ChatGui *chatGui);
|
||||
Q_INVOKABLE bool addChatInList(ChatGui *chatGui);
|
||||
|
||||
signals:
|
||||
void chatAdded(ChatGui *chat);
|
||||
void modelChanged();
|
||||
|
||||
protected:
|
||||
QSharedPointer<ChatList> mList;
|
||||
DECLARE_ABSTRACT_OBJECT
|
||||
|
|
|
|||
|
|
@ -77,10 +77,12 @@ void ChatMessageFileList::setSelf(QSharedPointer<ChatMessageFileList> me) {
|
|||
docs = chatModel->getSharedDocuments();
|
||||
}
|
||||
for (auto it : medias) {
|
||||
if (it->isVoiceRecording()) continue;
|
||||
auto model = ChatMessageContentCore::create(it, nullptr);
|
||||
contents->push_back(model);
|
||||
}
|
||||
for (auto it : docs) {
|
||||
if (it->isVoiceRecording()) continue;
|
||||
auto model = ChatMessageContentCore::create(it, nullptr);
|
||||
contents->push_back(model);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ ChatMessageCore::ChatMessageCore(const std::shared_ptr<linphone::ChatMessage> &c
|
|||
mTotalReactionsLabel = tr("all_reactions_label");
|
||||
auto reac = chatmessage->getOwnReaction();
|
||||
mOwnReaction = reac ? Utils::coreStringToAppString(reac->getBody()) : QString();
|
||||
for (auto &reaction : chatmessage->getReactions()) {
|
||||
for (const auto &reaction : chatmessage->getReactions()) {
|
||||
if (reaction) {
|
||||
auto fromAddr = reaction->getFromAddress()->clone();
|
||||
fromAddr->clean();
|
||||
|
|
@ -239,9 +239,11 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
|
|||
});
|
||||
}
|
||||
});
|
||||
mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::messageRead, [this]() {
|
||||
mChatMessageModelConnection->invokeToCore([this] { setIsRead(true); });
|
||||
});
|
||||
mChatMessageModelConnection->makeConnectToModel(
|
||||
&ChatMessageModel::messageRead, [this](const std::shared_ptr<linphone::ChatMessage> &chatMessage) {
|
||||
bool isRead = chatMessage->isRead();
|
||||
mChatMessageModelConnection->invokeToCore([this, isRead] { setIsRead(isRead); });
|
||||
});
|
||||
mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lSendReaction, [this](const QString &reaction) {
|
||||
mChatMessageModelConnection->invokeToModel([this, reaction] { mChatMessageModel->sendReaction(reaction); });
|
||||
});
|
||||
|
|
|
|||
|
|
@ -107,13 +107,13 @@ void EventLogCore::computeEvent(const std::shared_ptr<const linphone::EventLog>
|
|||
|
||||
switch (eventLog->getType()) {
|
||||
case linphone::EventLog::Type::ConferenceCreated:
|
||||
if (chatRoom->hasCapability((int)linphone::ChatRoom::Capabilities::OneToOne) &&
|
||||
if (chatRoom->hasCapability((int)linphone::ChatRoom::Capabilities::OneToOne) ||
|
||||
!chatRoom->hasCapability((int)linphone::ChatRoom::Capabilities::Conference))
|
||||
mHandled = false;
|
||||
mEventDetails = tr("conference_created_event");
|
||||
break;
|
||||
case linphone::EventLog::Type::ConferenceTerminated:
|
||||
if (chatRoom->hasCapability((int)linphone::ChatRoom::Capabilities::OneToOne) &&
|
||||
if (chatRoom->hasCapability((int)linphone::ChatRoom::Capabilities::OneToOne) ||
|
||||
!chatRoom->hasCapability((int)linphone::ChatRoom::Capabilities::Conference))
|
||||
mHandled = false;
|
||||
mEventDetails = tr("conference_created_terminated");
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ void EventLogList::setChatCore(QSharedPointer<ChatCore> core) {
|
|||
connect(mChatCore.get(), &ChatCore::eventListCleared, this, [this] { resetData(); });
|
||||
connect(mChatCore.get(), &ChatCore::eventsInserted, this, [this](QList<QSharedPointer<EventLogCore>> list) {
|
||||
auto eventsList = getSharedList<EventLogCore>();
|
||||
for (auto &event : list) {
|
||||
for (const auto &event : list) {
|
||||
auto it = std::find_if(eventsList.begin(), eventsList.end(),
|
||||
[event](const QSharedPointer<EventLogCore> item) { return item == event; });
|
||||
if (it == eventsList.end()) {
|
||||
|
|
@ -242,15 +242,20 @@ void EventLogList::findChatMessageWithFilter(QString filter, int startIndex, boo
|
|||
lInfo() << log().arg("searching event starting from index") << startIndex << "| event :"
|
||||
<< (startEvent && startEvent->getChatMessageCore() ? startEvent->getChatMessageCore()->getText()
|
||||
: "null")
|
||||
<< "| filter :" << filter;
|
||||
<< "| filter :" << filter << "forward =" << forward;
|
||||
auto startEventModel = startEvent ? startEvent->getModel() : nullptr;
|
||||
mCoreModelConnection->invokeToModel([this, chatModel, startEventModel, filter, forward, isFirstResearch] {
|
||||
auto linStartEvent = startEventModel ? startEventModel->getEventLog() : nullptr;
|
||||
auto eventLog = chatModel->searchMessageByText(filter, linStartEvent, forward);
|
||||
if (!eventLog) {
|
||||
if (!eventLog && isFirstResearch) {
|
||||
// event not found, search backward
|
||||
lInfo() << log().arg("not found, search backward");
|
||||
eventLog = chatModel->searchMessageByText(filter, linStartEvent, !forward);
|
||||
}
|
||||
if (!eventLog && isFirstResearch) {
|
||||
// event not found, search in the entire history
|
||||
lInfo() << log().arg("not found, search in entire history");
|
||||
auto eventLog = chatModel->searchMessageByText(filter, nullptr, forward);
|
||||
eventLog = chatModel->searchMessageByText(filter, nullptr, forward);
|
||||
}
|
||||
int index = -1;
|
||||
if (eventLog) {
|
||||
|
|
@ -312,12 +317,14 @@ void EventLogList::setSelf(QSharedPointer<EventLogList> me) {
|
|||
if (!mChatCore) {
|
||||
endResetModel();
|
||||
setIsUpdating(false);
|
||||
emit modelUpdated();
|
||||
return;
|
||||
}
|
||||
auto chatModel = mChatCore->getModel();
|
||||
if (!chatModel) {
|
||||
endResetModel();
|
||||
setIsUpdating(false);
|
||||
emit modelUpdated();
|
||||
return;
|
||||
}
|
||||
mCoreModelConnection->invokeToModel([this, chatModel]() {
|
||||
|
|
@ -335,6 +342,7 @@ void EventLogList::setSelf(QSharedPointer<EventLogList> me) {
|
|||
}
|
||||
endResetModel();
|
||||
setIsUpdating(false);
|
||||
emit modelUpdated();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ public:
|
|||
|
||||
signals:
|
||||
void lUpdate();
|
||||
void modelUpdated();
|
||||
void filterChanged(QString filter);
|
||||
void eventInsertedByUser(int index);
|
||||
void messageWithFilterFound(int index);
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ void EventLogProxy::setSourceModel(QAbstractItemModel *model) {
|
|||
int proxyIndex = mapFromSource(newEventLogList->index(i, 0)).row();
|
||||
emit eventInsertedByUser(proxyIndex);
|
||||
});
|
||||
connect(newEventLogList, &EventLogList::modelUpdated, this, &EventLogProxy::modelUpdated);
|
||||
}
|
||||
QSortFilterProxyModel::setSourceModel(model);
|
||||
}
|
||||
|
|
@ -148,7 +149,7 @@ void EventLogProxy::setDisplayItemsStep(int step) {
|
|||
}
|
||||
|
||||
void EventLogProxy::loadUntil(int index) {
|
||||
if (mMaxDisplayItems < index) setMaxDisplayItems(index + mDisplayItemsStep);
|
||||
if (mMaxDisplayItems <= index) setMaxDisplayItems(index + mDisplayItemsStep);
|
||||
}
|
||||
|
||||
int EventLogProxy::findFirstUnreadIndex() {
|
||||
|
|
@ -157,7 +158,7 @@ int EventLogProxy::findFirstUnreadIndex() {
|
|||
auto listIndex = eventLogList->findFirstUnreadIndex();
|
||||
if (listIndex != -1) {
|
||||
listIndex = mapFromSource(eventLogList->index(listIndex, 0)).row();
|
||||
if (mMaxDisplayItems <= listIndex) setMaxDisplayItems(listIndex + mDisplayItemsStep);
|
||||
loadUntil(listIndex);
|
||||
return listIndex;
|
||||
} else {
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ signals:
|
|||
void maxDisplayItemsChanged();
|
||||
void displayItemsStepChanged();
|
||||
void filterTextChanged();
|
||||
void modelUpdated();
|
||||
|
||||
protected:
|
||||
QSharedPointer<EventLogList> mList;
|
||||
|
|
|
|||
|
|
@ -64,7 +64,13 @@ ChatMessageContentCore::ChatMessageContentCore(const std::shared_ptr<linphone::C
|
|||
mFileOffset = 0;
|
||||
mUtf8Text = Utils::coreStringToAppString(content->getUtf8Text());
|
||||
auto chatRoom = chatMessageModel ? chatMessageModel->getMonitor()->getChatRoom() : nullptr;
|
||||
mRichFormatText = ToolModel::encodeTextToQmlRichFormat(mUtf8Text, {}, chatRoom);
|
||||
mRichFormatText = ToolModel::encodeTextToQmlRichFormat(mUtf8Text, mSearchedTextPart, {}, chatRoom);
|
||||
connect(this, &ChatMessageContentCore::searchedTextPartChanged, this, [this] {
|
||||
auto chatroom = mChatMessageContentModel->getChatMessageModel()
|
||||
? mChatMessageContentModel->getChatMessageModel()->getMonitor()->getChatRoom()
|
||||
: nullptr;
|
||||
setRichFormatText(ToolModel::encodeTextToQmlRichFormat(mUtf8Text, mSearchedTextPart, {}, chatroom));
|
||||
});
|
||||
mWasDownloaded = !mFilePath.isEmpty() && QFileInfo(mFilePath).isFile();
|
||||
mThumbnail = mFilePath.isEmpty()
|
||||
? QUrl()
|
||||
|
|
@ -246,10 +252,6 @@ ConferenceInfoGui *ChatMessageContentCore::getConferenceInfoGui() const {
|
|||
return mConferenceInfo ? new ConferenceInfoGui(mConferenceInfo) : nullptr;
|
||||
}
|
||||
|
||||
bool ChatMessageContentCore::wasDownloaded() const {
|
||||
return mWasDownloaded;
|
||||
}
|
||||
|
||||
QUrl ChatMessageContentCore::getThumbnail() const {
|
||||
return mThumbnail;
|
||||
}
|
||||
|
|
@ -260,6 +262,10 @@ void ChatMessageContentCore::setThumbnail(const QUrl &data) {
|
|||
emit thumbnailChanged();
|
||||
}
|
||||
}
|
||||
|
||||
bool ChatMessageContentCore::wasDownloaded() const {
|
||||
return mWasDownloaded;
|
||||
}
|
||||
void ChatMessageContentCore::setWasDownloaded(bool wasDownloaded) {
|
||||
if (mWasDownloaded != wasDownloaded) {
|
||||
mWasDownloaded = wasDownloaded;
|
||||
|
|
@ -267,6 +273,24 @@ void ChatMessageContentCore::setWasDownloaded(bool wasDownloaded) {
|
|||
}
|
||||
}
|
||||
|
||||
void ChatMessageContentCore::setRichFormatText(const QString &richFormatText) {
|
||||
if (mRichFormatText != richFormatText) {
|
||||
mRichFormatText = richFormatText;
|
||||
emit richFormatTextChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void ChatMessageContentCore::setSearchedTextPart(const QString &searchedTextPart) {
|
||||
if (mSearchedTextPart != searchedTextPart) {
|
||||
mSearchedTextPart = searchedTextPart;
|
||||
emit searchedTextPartChanged();
|
||||
}
|
||||
}
|
||||
|
||||
QString ChatMessageContentCore::getSearchedTextPart() const {
|
||||
return mSearchedTextPart;
|
||||
}
|
||||
|
||||
const std::shared_ptr<ChatMessageContentModel> &ChatMessageContentCore::getContentModel() const {
|
||||
return mChatMessageContentModel;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,8 @@ class ChatMessageContentCore : public QObject, public AbstractObject {
|
|||
Q_PROPERTY(bool wasDownloaded READ wasDownloaded WRITE setWasDownloaded NOTIFY wasDownloadedChanged)
|
||||
Q_PROPERTY(QString filePath READ getFilePath WRITE setFilePath NOTIFY filePathChanged)
|
||||
Q_PROPERTY(QString utf8Text READ getUtf8Text CONSTANT)
|
||||
Q_PROPERTY(QString richFormatText MEMBER mRichFormatText CONSTANT)
|
||||
Q_PROPERTY(QString richFormatText WRITE setRichFormatText MEMBER mRichFormatText NOTIFY richFormatTextChanged)
|
||||
Q_PROPERTY(QString searchTextPart READ getSearchedTextPart WRITE setSearchedTextPart NOTIFY searchedTextPartChanged)
|
||||
Q_PROPERTY(bool isFile READ isFile WRITE setIsFile NOTIFY isFileChanged)
|
||||
Q_PROPERTY(bool isFileEncrypted READ isFileEncrypted WRITE setIsFileEncrypted NOTIFY isFileEncryptedChanged)
|
||||
Q_PROPERTY(bool isFileTransfer READ isFileTransfer WRITE setIsFileTransfer NOTIFY isFileTransferChanged)
|
||||
|
|
@ -90,6 +91,10 @@ public:
|
|||
bool wasDownloaded() const;
|
||||
void setWasDownloaded(bool downloaded);
|
||||
|
||||
void setRichFormatText(const QString &richFormatText);
|
||||
Q_INVOKABLE void setSearchedTextPart(const QString &searchedTextPart);
|
||||
QString getSearchedTextPart() const;
|
||||
|
||||
const std::shared_ptr<ChatMessageContentModel> &getContentModel() const;
|
||||
|
||||
signals:
|
||||
|
|
@ -102,6 +107,8 @@ signals:
|
|||
void isFileEncryptedChanged();
|
||||
void wasDownloadedChanged(bool downloaded);
|
||||
void isVideoChanged();
|
||||
void searchedTextPartChanged();
|
||||
void richFormatTextChanged();
|
||||
|
||||
void lCreateThumbnail(const bool &force = false);
|
||||
void lRemoveDownloadedFile();
|
||||
|
|
@ -124,6 +131,7 @@ private:
|
|||
QUrl mThumbnail;
|
||||
QString mUtf8Text;
|
||||
QString mRichFormatText;
|
||||
QString mSearchedTextPart;
|
||||
QString mFilePath;
|
||||
QString mName;
|
||||
quint64 mFileSize;
|
||||
|
|
|
|||
|
|
@ -198,15 +198,14 @@ void ConferenceInfoCore::setSelf(QSharedPointer<ConferenceInfoCore> me) {
|
|||
mConfInfoModelConnection->makeConnectToModel(
|
||||
&ConferenceInfoModel::schedulerStateChanged, [this](linphone::ConferenceScheduler::State state) {
|
||||
auto confInfoState = mConferenceInfoModel->getState();
|
||||
QString uri;
|
||||
if (state == linphone::ConferenceScheduler::State::Ready) {
|
||||
uri = mConferenceInfoModel->getConferenceScheduler()->getUri();
|
||||
emit CoreModel::getInstance() -> conferenceInfoReceived(
|
||||
CoreModel::getInstance()->getCore(), mConferenceInfoModel->getConferenceInfo());
|
||||
if (confInfoState == linphone::ConferenceInfo::State::New) {
|
||||
emit CoreModel::getInstance()->conferenceInfoReceived(
|
||||
CoreModel::getInstance()->getCore(), mConferenceInfoModel->getConferenceInfo());
|
||||
}
|
||||
}
|
||||
mConfInfoModelConnection->invokeToCore([this, state = LinphoneEnums::fromLinphone(state),
|
||||
infoState = LinphoneEnums::fromLinphone(confInfoState),
|
||||
uri] {
|
||||
infoState = LinphoneEnums::fromLinphone(confInfoState)] {
|
||||
setConferenceSchedulerState(state);
|
||||
setConferenceInfoState(infoState);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -40,6 +40,9 @@ public:
|
|||
|
||||
void setSelf(QSharedPointer<ConferenceInfoList> me);
|
||||
void resetData(QList<QSharedPointer<ConferenceInfoCore>> data);
|
||||
void resetData() override {
|
||||
ListProxy::resetData();
|
||||
}
|
||||
|
||||
void addConference(const std::shared_ptr<linphone::ConferenceInfo> &confInfo);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,11 @@
|
|||
DEFINE_ABSTRACT_OBJECT(ConferenceInfoProxy)
|
||||
|
||||
ConferenceInfoProxy::ConferenceInfoProxy(QObject *parent) : LimitProxy(parent) {
|
||||
mList = ConferenceInfoList::create();
|
||||
if (!App::getInstance()->getConferenceInfoList()) {
|
||||
mList = ConferenceInfoList::create();
|
||||
App::getInstance()->setConferenceInfoList(mList);
|
||||
}
|
||||
mList = App::getInstance()->getConferenceInfoList();
|
||||
setSourceModels(new SortFilterList(mList.get(), Qt::AscendingOrder));
|
||||
connect(
|
||||
mList.get(), &ConferenceInfoList::haveCurrentDateChanged, this,
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@ void Notifier::notifyReceivedMessages(const std::shared_ptr<linphone::ChatRoom>
|
|||
if (content->isText()) txt += content->getUtf8Text().c_str();
|
||||
}
|
||||
} else if (fileContent->isVoiceRecording())
|
||||
//: 'Voice message received!' : message to warn the user in a notofication for voice messages.
|
||||
//: 'Voice message received!' : message to warn the user in a notification for voice messages.
|
||||
txt = tr("new_voice_message");
|
||||
else txt = tr("new_file_message");
|
||||
if (txt.isEmpty() && message->hasConferenceInvitationContent())
|
||||
|
|
|
|||
|
|
@ -20,10 +20,8 @@
|
|||
|
||||
#include <QQmlApplicationEngine>
|
||||
|
||||
#include "core/App.hpp"
|
||||
|
||||
#include "ParticipantCore.hpp"
|
||||
// #include "ParticipantDeviceList.hpp"
|
||||
#include "core/App.hpp"
|
||||
#include "model/participant/ParticipantModel.hpp"
|
||||
#include "model/tool/ToolModel.hpp"
|
||||
#include "tool/Utils.hpp"
|
||||
|
|
@ -77,6 +75,48 @@ void ParticipantCore::setSelf(QSharedPointer<ParticipantCore> me) {
|
|||
QTimer::singleShot(secs * 1000, this, &ParticipantCore::onEndOfInvitation);
|
||||
});
|
||||
connect(this, &ParticipantCore::sipAddressChanged, this, &ParticipantCore::updateIsMe);
|
||||
auto update = [this, remoteAddress = mSipAddress](const std::shared_ptr<linphone::Friend> &updatedFriend) {
|
||||
bool isThisFriend = false;
|
||||
std::shared_ptr<linphone::Address> friendAddress;
|
||||
auto participantAddress = mParticipantModel->getAddress();
|
||||
for (auto address : updatedFriend->getAddresses()) {
|
||||
if (address->weakEqual(participantAddress)) {
|
||||
isThisFriend = true;
|
||||
friendAddress = address;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isThisFriend) {
|
||||
auto displayName = friendAddress->getDisplayName();
|
||||
mCoreModelConnection->invokeToCore([this, displayName] {
|
||||
auto me = mCoreModelConnection->mCore.mQData; // Locked from previous call.
|
||||
setDisplayName(Utils::coreStringToAppString(displayName));
|
||||
});
|
||||
}
|
||||
};
|
||||
auto onRemoved = [this](const std::shared_ptr<linphone::Friend> &updatedFriend) {
|
||||
bool isThisFriend = false;
|
||||
std::shared_ptr<linphone::Address> friendAddress;
|
||||
auto participantAddress = mParticipantModel->getAddress();
|
||||
for (auto address : updatedFriend->getAddresses()) {
|
||||
if (address->weakEqual(participantAddress)) {
|
||||
isThisFriend = true;
|
||||
friendAddress = address;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isThisFriend) {
|
||||
auto displayName = ToolModel::getDisplayName(participantAddress);
|
||||
mCoreModelConnection->invokeToCore([this, displayName] {
|
||||
auto me = mCoreModelConnection->mCore.mQData; // Locked from previous call.
|
||||
setDisplayName(displayName);
|
||||
});
|
||||
}
|
||||
};
|
||||
mCoreModelConnection = SafeConnection<ParticipantCore, CoreModel>::create(me, CoreModel::getInstance());
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::friendCreated, update);
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::friendUpdated, update);
|
||||
mCoreModelConnection->makeConnectToModel(&CoreModel::friendRemoved, onRemoved);
|
||||
}
|
||||
|
||||
LinphoneEnums::SecurityLevel ParticipantCore::getSecurityLevel() const {
|
||||
|
|
|
|||
|
|
@ -107,6 +107,7 @@ signals:
|
|||
private:
|
||||
std::shared_ptr<ParticipantModel> mParticipantModel;
|
||||
QSharedPointer<SafeConnection<ParticipantCore, ParticipantModel>> mParticipantConnection;
|
||||
QSharedPointer<SafeConnection<ParticipantCore, CoreModel>> mCoreModelConnection;
|
||||
|
||||
QList<QVariant> mParticipantDevices;
|
||||
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ void ParticipantDeviceProxy::setCurrentCall(CallGui *call) {
|
|||
mCurrentCall = call;
|
||||
if (mCurrentCall) callCore = mCurrentCall->getCore();
|
||||
if (callCore) {
|
||||
connect(callCore, &CallCore::conferenceChanged, mParticipants.get(), [this]() {
|
||||
auto conference = mCurrentCall->getCore()->getConferenceCore();
|
||||
connect(callCore, &CallCore::conferenceChanged, mParticipants.get(), [this, callCore]() {
|
||||
auto conference = callCore->getConferenceCore();
|
||||
lDebug() << log().arg("Set conference") << this << " => " << conference;
|
||||
mParticipants->setConferenceModel(conference ? conference->getModel() : nullptr);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ ChatGui *ParticipantInfoProxy::getChat() const {
|
|||
}
|
||||
|
||||
void ParticipantInfoProxy::setChat(ChatGui *chat) {
|
||||
lDebug() << "[ParticipantInfoProxy] set current chat " << chat;
|
||||
lDebug() << "[ParticipantInfoProxy] set current chat " << chat << (chat ? chat->mCore->getTitle() : "NULL");
|
||||
if (mChat != chat) {
|
||||
mChat = chat;
|
||||
mParticipants->setChatCore(chat ? chat->mCore : nullptr);
|
||||
|
|
|
|||
|
|
@ -127,7 +127,8 @@ static inline QString getAppPackageDataDirPath() {
|
|||
dir.mkdir("share");
|
||||
dir.cd("share");
|
||||
}
|
||||
lInfo() << executableDir.absolutePath() << " VS " << dir.absolutePath() << " == " << executableDir.relativeFilePath(dir.absolutePath());
|
||||
lInfo() << executableDir.absolutePath() << " VS " << dir.absolutePath()
|
||||
<< " == " << executableDir.relativeFilePath(dir.absolutePath());
|
||||
return executableDir.relativeFilePath(dir.absolutePath());
|
||||
}
|
||||
|
||||
|
|
@ -141,7 +142,11 @@ static inline QString getAppPackageMsPluginsDirPath() {
|
|||
static inline QString getAppPackagePluginsDirPath() {
|
||||
QDir executableDir(QCoreApplication::applicationDirPath());
|
||||
QDir packageDir = getAppPackageDir();
|
||||
return executableDir.relativeFilePath( packageDir.absolutePath() + Constants::PathPlugins);
|
||||
return executableDir.relativeFilePath(packageDir.absolutePath() + Constants::PathPlugins);
|
||||
}
|
||||
|
||||
static inline QString getAppBinDirPath() {
|
||||
return getAppPackageDir().absolutePath() + Constants::PathBin;
|
||||
}
|
||||
|
||||
static inline QString getAppAssistantConfigDirPath() {
|
||||
|
|
@ -270,51 +275,71 @@ QString Paths::getLogsDirPath() {
|
|||
QString Paths::getAppRootCaFilePath() {
|
||||
// Hardcoded because it comes from linphone and is not customizable.
|
||||
return getReadableFilePath(getAppPackageDataDirPath() + "/linphone/rootca.pem");
|
||||
}
|
||||
QString Paths::getCrashpadDirPath() {
|
||||
#ifdef HAVE_CRASH_HANDLER
|
||||
return getWritableDirPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) +
|
||||
Constants::PathCrashpad);
|
||||
#else
|
||||
return "";
|
||||
#endif
|
||||
}
|
||||
|
||||
QString Paths::getMessageHistoryFilePath() {
|
||||
return getReadableFilePath(
|
||||
getAppMessageHistoryFilePath()); // No need to ensure that the file exists as this DB is deprecated
|
||||
}
|
||||
QString Paths::getMetricsDirPath() {
|
||||
return getWritableDirPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) +
|
||||
Constants::PathMetrics);
|
||||
}
|
||||
|
||||
QString Paths::getPackageMsPluginsDirPath() {
|
||||
return getReadableDirPath(getAppPackageMsPluginsDirPath());
|
||||
}
|
||||
QString Paths::getMessageHistoryFilePath() {
|
||||
return getReadableFilePath(
|
||||
getAppMessageHistoryFilePath()); // No need to ensure that the file exists as this DB is deprecated
|
||||
}
|
||||
|
||||
QString Paths::getPackagePluginsAppDirPath() {
|
||||
return getReadableDirPath(getAppPackagePluginsDirPath() + Constants::PathPluginsApp);
|
||||
}
|
||||
QString Paths::getPackageMsPluginsDirPath() {
|
||||
return getReadableDirPath(getAppPackageMsPluginsDirPath());
|
||||
}
|
||||
|
||||
QString Paths::getPackageTopDirPath() {
|
||||
return getReadableDirPath(getAppPackageDataDirPath());
|
||||
}
|
||||
QString Paths::getPackagePluginsAppDirPath() {
|
||||
return getReadableDirPath(getAppPackagePluginsDirPath() + Constants::PathPluginsApp);
|
||||
}
|
||||
|
||||
QString Paths::getPluginsAppDirPath() {
|
||||
return getWritableDirPath(getAppPluginsDirPath() + Constants::PathPluginsApp);
|
||||
}
|
||||
QString Paths::getPackageTopDirPath() {
|
||||
return getReadableDirPath(getAppPackageDataDirPath());
|
||||
}
|
||||
|
||||
QStringList Paths::getPluginsAppFolders() {
|
||||
QStringList pluginPaths;
|
||||
pluginPaths << Paths::getPluginsAppDirPath();
|
||||
pluginPaths << Paths::getPackagePluginsAppDirPath();
|
||||
return pluginPaths;
|
||||
}
|
||||
QString Paths::getPluginsAppDirPath() {
|
||||
return getWritableDirPath(getAppPluginsDirPath() + Constants::PathPluginsApp);
|
||||
}
|
||||
|
||||
QString Paths::getToolsDirPath() {
|
||||
return getWritableDirPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) +
|
||||
Constants::PathTools);
|
||||
}
|
||||
QString Paths::getUserCertificatesDirPath() {
|
||||
return getWritableDirPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) +
|
||||
Constants::PathUserCertificates);
|
||||
}
|
||||
QStringList Paths::getPluginsAppFolders() {
|
||||
QStringList pluginPaths;
|
||||
pluginPaths << Paths::getPluginsAppDirPath();
|
||||
pluginPaths << Paths::getPackagePluginsAppDirPath();
|
||||
return pluginPaths;
|
||||
}
|
||||
|
||||
QString Paths::getZrtpSecretsFilePath() {
|
||||
return getWritableFilePath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) +
|
||||
Constants::PathZrtpSecrets);
|
||||
}
|
||||
QString Paths::getToolsDirPath() {
|
||||
return getWritableDirPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) +
|
||||
Constants::PathTools);
|
||||
}
|
||||
QString Paths::getUserCertificatesDirPath() {
|
||||
return getWritableDirPath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) +
|
||||
Constants::PathUserCertificates);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
QString Paths::getZrtpSecretsFilePath() {
|
||||
return getWritableFilePath(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) +
|
||||
Constants::PathZrtpSecrets);
|
||||
}
|
||||
|
||||
void Paths::migrate() {
|
||||
}
|
||||
QString Paths::getCrashpadHandlerFilePath() {
|
||||
#ifdef HAVE_CRASH_HANDLER
|
||||
return getAppBinDirPath() + Constants::PathCrashpadHandler;
|
||||
#else
|
||||
return "";
|
||||
#endif
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void Paths::migrate() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
namespace Paths {
|
||||
bool filePathExists(const QString &path, const bool isWritable = false);
|
||||
//bool convertToRelativePath(const QString &path, QString *relativePath);
|
||||
// bool convertToRelativePath(const QString &path, QString *relativePath);
|
||||
|
||||
// Return true if paths are different and point to the same file
|
||||
bool isSameRelativeFile(const QString &filePath, const QString &relativeFilePath);
|
||||
|
|
@ -48,6 +48,8 @@ QString getFactoryConfigFilePath();
|
|||
QString getFriendsListFilePath();
|
||||
QString getLimeDatabasePath();
|
||||
QString getLogsDirPath();
|
||||
QString getCrashpadDirPath();
|
||||
QString getMetricsDirPath();
|
||||
QString getMessageHistoryFilePath();
|
||||
QString getPackageMsPluginsDirPath();
|
||||
QString getPackagePluginsAppDirPath();
|
||||
|
|
@ -58,6 +60,7 @@ QString getToolsDirPath();
|
|||
QString getUserCertificatesDirPath();
|
||||
QString getZrtpDataFilePath();
|
||||
QString getZrtpSecretsFilePath();
|
||||
QString getCrashpadHandlerFilePath();
|
||||
|
||||
void migrate();
|
||||
} // namespace Paths
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ public:
|
|||
const std::shared_ptr<linphone::PayloadType> &payloadType);
|
||||
|
||||
PayloadTypeCore(Family family, const std::shared_ptr<linphone::PayloadType> &payloadType);
|
||||
PayloadTypeCore() {};
|
||||
PayloadTypeCore(){};
|
||||
~PayloadTypeCore();
|
||||
|
||||
void setSelf(QSharedPointer<PayloadTypeCore> me);
|
||||
|
|
|
|||
|
|
@ -31,14 +31,7 @@ class PayloadTypeProxy : public LimitProxy, public AbstractObject {
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum PayloadTypeProxyFiltering {
|
||||
All = 0,
|
||||
Audio = 2,
|
||||
Video = 4,
|
||||
Text = 8,
|
||||
Downloadable = 16,
|
||||
NotDownloadable = 32
|
||||
};
|
||||
enum PayloadTypeProxyFiltering { All = 0, Audio = 2, Video = 4, Text = 8, Downloadable = 16, NotDownloadable = 32 };
|
||||
Q_ENUMS(PayloadTypeProxyFiltering)
|
||||
|
||||
DECLARE_SORTFILTER_CLASS()
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ int SortFilterProxy::getCount() const {
|
|||
|
||||
QVariant SortFilterProxy::getAt(const int &atIndex) const {
|
||||
auto modelIndex = index(atIndex, 0);
|
||||
return sourceModel()->data(mapToSource(modelIndex), 0);
|
||||
return sourceModel() ? sourceModel()->data(mapToSource(modelIndex), 0) : QVariant();
|
||||
}
|
||||
|
||||
int SortFilterProxy::getFilterType() const {
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ MagicSearchList::~MagicSearchList() {
|
|||
mustBeInMainThread("~" + getClassName());
|
||||
}
|
||||
|
||||
void MagicSearchList::setSelf(QSharedPointer<MagicSearchList> me) {
|
||||
void MagicSearchList::setSelf(const QSharedPointer<MagicSearchList> &me) {
|
||||
mCoreModelConnection = SafeConnection<MagicSearchList, CoreModel>::create(me, CoreModel::getInstance());
|
||||
mCoreModelConnection->makeConnectToModel(
|
||||
&CoreModel::friendCreated, [this](const std::shared_ptr<linphone::Friend> &f) {
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public:
|
|||
MagicSearchList(QObject *parent = Q_NULLPTR);
|
||||
~MagicSearchList();
|
||||
|
||||
void setSelf(QSharedPointer<MagicSearchList> me);
|
||||
void setSelf(const QSharedPointer<MagicSearchList> &me);
|
||||
void connectContact(FriendCore *data);
|
||||
void setSearch(const QString &search);
|
||||
void setResults(const QList<QSharedPointer<FriendCore>> &contacts);
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) {
|
|||
// Logs
|
||||
mLogsEnabled = settingsModel->getLogsEnabled();
|
||||
mFullLogsEnabled = settingsModel->getFullLogsEnabled();
|
||||
mCrashReporterEnabled = settingsModel->getCrashReporterEnabled();
|
||||
mLogsFolder = settingsModel->getLogsFolder();
|
||||
mLogsEmail = settingsModel->getLogsEmail();
|
||||
|
||||
|
|
@ -125,7 +126,6 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) {
|
|||
INIT_CORE_MEMBER(HideAccountSettings, settingsModel)
|
||||
INIT_CORE_MEMBER(DisableCallRecordings, settingsModel)
|
||||
INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel)
|
||||
INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel)
|
||||
INIT_CORE_MEMBER(AssistantDisableQrCode, settingsModel)
|
||||
|
||||
INIT_CORE_MEMBER(AssistantHideThirdPartyAccount, settingsModel)
|
||||
|
|
@ -189,6 +189,7 @@ SettingsCore::SettingsCore(const SettingsCore &settingsCore) {
|
|||
// Logs
|
||||
mLogsEnabled = settingsCore.mLogsEnabled;
|
||||
mFullLogsEnabled = settingsCore.mFullLogsEnabled;
|
||||
mCrashReporterEnabled = settingsCore.mCrashReporterEnabled;
|
||||
mLogsFolder = settingsCore.mLogsFolder;
|
||||
mLogsEmail = settingsCore.mLogsEmail;
|
||||
|
||||
|
|
@ -237,6 +238,110 @@ SettingsCore::SettingsCore(const SettingsCore &settingsCore) {
|
|||
SettingsCore::~SettingsCore() {
|
||||
}
|
||||
|
||||
void SettingsCore::reloadSettings() {
|
||||
mustBeInLinphoneThread(getClassName());
|
||||
auto settingsModel = SettingsModel::getInstance();
|
||||
assert(settingsModel);
|
||||
|
||||
// Security
|
||||
setVfsEnabled(settingsModel->getVfsEnabled());
|
||||
|
||||
// Call
|
||||
setVideoEnabled(settingsModel->getVideoEnabled());
|
||||
setEchoCancellationEnabled(settingsModel->getEchoCancellationEnabled());
|
||||
setAutoDownloadReceivedFiles(settingsModel->getAutoDownloadReceivedFiles());
|
||||
setAutomaticallyRecordCallsEnabled(settingsModel->getAutomaticallyRecordCallsEnabled());
|
||||
setRingtone(settingsModel->getRingtone());
|
||||
|
||||
// Network
|
||||
setIpv6Enabled(settingsModel->getIpv6Enabled());
|
||||
|
||||
// Advanced
|
||||
setAutoStart(settingsModel->getAutoStart());
|
||||
setHideFps(settingsModel->getHideFps());
|
||||
|
||||
// Audio
|
||||
setCaptureDevices(settingsModel->getCaptureDevices());
|
||||
setPlaybackDevices(settingsModel->getPlaybackDevices());
|
||||
setRingerDevices(settingsModel->getRingerDevices());
|
||||
setCaptureDevice(settingsModel->getCaptureDevice());
|
||||
setPlaybackDevice(settingsModel->getPlaybackDevice());
|
||||
setRingerDevice(settingsModel->getRingerDevice());
|
||||
|
||||
setConferenceLayout(
|
||||
LinphoneEnums::toVariant(LinphoneEnums::fromLinphone(settingsModel->getDefaultConferenceLayout())));
|
||||
|
||||
setMediaEncryption(
|
||||
LinphoneEnums::toVariant(LinphoneEnums::fromLinphone(settingsModel->getDefaultMediaEncryption())));
|
||||
|
||||
setMediaEncryptionMandatory(settingsModel->getMediaEncryptionMandatory());
|
||||
setCreateEndToEndEncryptedMeetingsAndGroupCalls(settingsModel->getCreateEndToEndEncryptedMeetingsAndGroupCalls());
|
||||
|
||||
setCaptureGain(settingsModel->getCaptureGain());
|
||||
setPlaybackGain(settingsModel->getPlaybackGain());
|
||||
|
||||
// Video
|
||||
setVideoDevice(settingsModel->getVideoDevice());
|
||||
setVideoDevices(settingsModel->getVideoDevices());
|
||||
|
||||
// Logs
|
||||
setLogsEnabled(settingsModel->getLogsEnabled());
|
||||
setFullLogsEnabled(settingsModel->getFullLogsEnabled());
|
||||
setCrashReporterEnabled(settingsModel->getCrashReporterEnabled());
|
||||
setLogsFolder(settingsModel->getLogsFolder());
|
||||
mLogsEmail = settingsModel->getLogsEmail();
|
||||
|
||||
// DND
|
||||
setDndEnabled(settingsModel->dndEnabled());
|
||||
|
||||
mDefaultDomain = settingsModel->getDefaultDomain();
|
||||
auto currentAccount = CoreModel::getInstance()->getCore()->getDefaultAccount();
|
||||
if (currentAccount) {
|
||||
auto accountDomain = Utils::coreStringToAppString(currentAccount->getParams()->getDomain());
|
||||
setShowAccountDevices(accountDomain == mDefaultDomain);
|
||||
}
|
||||
|
||||
// Chat
|
||||
mEmojiFont = settingsModel->getEmojiFont();
|
||||
mTextMessageFont = settingsModel->getTextMessageFont();
|
||||
|
||||
// Check for update
|
||||
mIsCheckForUpdateAvailable = settingsModel->isCheckForUpdateAvailable();
|
||||
|
||||
setDisableChatFeature(settingsModel->getDisableChatFeature());
|
||||
setDisableMeetingsFeature(settingsModel->getDisableMeetingsFeature());
|
||||
setDisableBroadcastFeature(settingsModel->getDisableBroadcastFeature());
|
||||
|
||||
setHideSettings(settingsModel->getHideSettings());
|
||||
setHideAccountSettings(settingsModel->getHideAccountSettings());
|
||||
|
||||
setDisableCallRecordings(settingsModel->getDisableCallRecordings());
|
||||
setAssistantHideCreateAccount(settingsModel->getAssistantHideCreateAccount());
|
||||
setAssistantDisableQrCode(settingsModel->getAssistantDisableQrCode());
|
||||
setAssistantHideThirdPartyAccount(settingsModel->getAssistantHideThirdPartyAccount());
|
||||
setHideSipAddresses(settingsModel->getHideSipAddresses());
|
||||
setDarkModeAllowed(settingsModel->getDarkModeAllowed());
|
||||
setMaxAccount(settingsModel->getMaxAccount());
|
||||
setAssistantGoDirectlyToThirdPartySipAccountLogin(
|
||||
settingsModel->getAssistantGoDirectlyToThirdPartySipAccountLogin());
|
||||
setAssistantGoDirectlyToThirdPartySipAccountLogin(
|
||||
settingsModel->getAssistantGoDirectlyToThirdPartySipAccountLogin());
|
||||
setAssistantThirdPartySipAccountDomain(settingsModel->getAssistantThirdPartySipAccountDomain());
|
||||
setAssistantThirdPartySipAccountTransport(settingsModel->getAssistantThirdPartySipAccountTransport());
|
||||
setAutoStart(settingsModel->getAutoStart());
|
||||
setExitOnClose(settingsModel->getExitOnClose());
|
||||
setSyncLdapContacts(settingsModel->getSyncLdapContacts());
|
||||
setConfigLocale(settingsModel->getConfigLocale());
|
||||
setDownloadFolder(settingsModel->getDownloadFolder());
|
||||
|
||||
setCallToneIndicationsEnabled(settingsModel->getCallToneIndicationsEnabled());
|
||||
setCommandLine(settingsModel->getCommandLine());
|
||||
setDisableCommandLine(settingsModel->getDisableCommandLine());
|
||||
setCallForwardToAddress(settingsModel->getCallForwardToAddress());
|
||||
setThemeMainColor(settingsModel->getThemeMainColor());
|
||||
setThemeAboutPictureUrl(settingsModel->getThemeAboutPictureUrl());
|
||||
}
|
||||
|
||||
void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
|
||||
mustBeInLinphoneThread(getClassName());
|
||||
mSettingsModelConnection = SafeConnection<SettingsCore, SettingsModel>::create(me, SettingsModel::getInstance());
|
||||
|
|
@ -416,7 +521,10 @@ void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
|
|||
|
||||
// Logs
|
||||
mSettingsModelConnection->makeConnectToModel(&SettingsModel::logsEnabledChanged, [this](const bool status) {
|
||||
mSettingsModelConnection->invokeToCore([this, status]() { setLogsEnabled(status); });
|
||||
mSettingsModelConnection->invokeToCore([this, status]() {
|
||||
setCrashReporterEnabled(status);
|
||||
setLogsEnabled(status);
|
||||
});
|
||||
});
|
||||
|
||||
mSettingsModelConnection->makeConnectToModel(&SettingsModel::fullLogsEnabledChanged, [this](const bool status) {
|
||||
|
|
@ -558,6 +666,7 @@ void SettingsCore::reset(const SettingsCore &settingsCore) {
|
|||
// Logs
|
||||
setLogsEnabled(settingsCore.mLogsEnabled);
|
||||
setFullLogsEnabled(settingsCore.mFullLogsEnabled);
|
||||
setCrashReporterEnabled(settingsCore.mCrashReporterEnabled);
|
||||
setLogsFolder(settingsCore.mLogsFolder);
|
||||
|
||||
// DND
|
||||
|
|
@ -1007,6 +1116,18 @@ void SettingsCore::setFullLogsEnabled(bool enabled) {
|
|||
}
|
||||
}
|
||||
|
||||
bool SettingsCore::getCrashReporterEnabled() const {
|
||||
return mCrashReporterEnabled;
|
||||
}
|
||||
|
||||
void SettingsCore::setCrashReporterEnabled(bool enabled) {
|
||||
if (mCrashReporterEnabled != enabled) {
|
||||
mCrashReporterEnabled = enabled;
|
||||
emit crashReporterEnabledChanged();
|
||||
setIsSaved(false);
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsCore::setRingtone(QString path) {
|
||||
if (mRingtonePath != path) {
|
||||
mRingtonePath = path;
|
||||
|
|
@ -1103,6 +1224,7 @@ QString SettingsCore::getDownloadFolder() const {
|
|||
auto path = mDownloadFolder;
|
||||
if (mDownloadFolder.isEmpty()) path = Paths::getDownloadDirPath();
|
||||
QString cleanPath = QDir::cleanPath(path);
|
||||
if (!cleanPath.endsWith(QDir::separator())) cleanPath.append(QDir::separator());
|
||||
return cleanPath;
|
||||
}
|
||||
|
||||
|
|
@ -1143,6 +1265,7 @@ void SettingsCore::writeIntoModel(std::shared_ptr<SettingsModel> model) const {
|
|||
// Logs
|
||||
model->setLogsEnabled(mLogsEnabled);
|
||||
model->setFullLogsEnabled(mFullLogsEnabled);
|
||||
model->setCrashReporterEnabled(mLogsEnabled);
|
||||
|
||||
// UI
|
||||
model->setDisableChatFeature(mDisableChatFeature);
|
||||
|
|
@ -1219,6 +1342,7 @@ void SettingsCore::writeFromModel(const std::shared_ptr<SettingsModel> &model) {
|
|||
// Logs
|
||||
mLogsEnabled = model->getLogsEnabled();
|
||||
mFullLogsEnabled = model->getFullLogsEnabled();
|
||||
mCrashReporterEnabled = model->getCrashReporterEnabled();
|
||||
mLogsFolder = model->getLogsFolder();
|
||||
mLogsEmail = model->getLogsEmail();
|
||||
|
||||
|
|
|
|||
|
|
@ -91,6 +91,8 @@ public:
|
|||
|
||||
Q_PROPERTY(bool logsEnabled READ getLogsEnabled WRITE setLogsEnabled NOTIFY logsEnabledChanged)
|
||||
Q_PROPERTY(bool fullLogsEnabled READ getFullLogsEnabled WRITE setFullLogsEnabled NOTIFY fullLogsEnabledChanged)
|
||||
Q_PROPERTY(bool crashReporterEnabled READ getCrashReporterEnabled WRITE setCrashReporterEnabled NOTIFY
|
||||
crashReporterEnabledChanged)
|
||||
Q_PROPERTY(QString logsEmail READ getLogsEmail)
|
||||
Q_PROPERTY(QString logsFolder READ getLogsFolder)
|
||||
Q_PROPERTY(QString ringtoneName READ getRingtoneFileName NOTIFY ringtoneChanged)
|
||||
|
|
@ -107,6 +109,8 @@ public:
|
|||
SettingsCore(const SettingsCore &settingsCore);
|
||||
virtual ~SettingsCore();
|
||||
|
||||
void reloadSettings();
|
||||
|
||||
void setSelf(QSharedPointer<SettingsCore> me);
|
||||
void reset(const SettingsCore &settingsCore);
|
||||
|
||||
|
|
@ -234,9 +238,10 @@ public:
|
|||
|
||||
bool getLogsEnabled() const;
|
||||
void setLogsEnabled(bool enabled);
|
||||
|
||||
bool getFullLogsEnabled() const;
|
||||
void setFullLogsEnabled(bool enabled);
|
||||
bool getCrashReporterEnabled() const;
|
||||
void setCrashReporterEnabled(bool enabled);
|
||||
|
||||
void setRingtone(QString path);
|
||||
QString getRingtoneFileName() const;
|
||||
|
|
@ -364,6 +369,7 @@ signals:
|
|||
|
||||
void logsEnabledChanged();
|
||||
void fullLogsEnabledChanged();
|
||||
void crashReporterEnabledChanged();
|
||||
|
||||
void logsUploadTerminated(bool status, QString url);
|
||||
void logsFolderChanged(const QString &folder);
|
||||
|
|
@ -439,6 +445,7 @@ private:
|
|||
// Debug logs
|
||||
bool mLogsEnabled;
|
||||
bool mFullLogsEnabled;
|
||||
bool mCrashReporterEnabled;
|
||||
QString mLogsFolder;
|
||||
QString mLogsEmail;
|
||||
|
||||
|
|
|
|||
|
|
@ -296,7 +296,7 @@ bool SingleApplicationPrivate::writeConfirmedFrame(int msecs, const QByteArray &
|
|||
socket->write(msg);
|
||||
socket->flush();
|
||||
|
||||
bool result = socket->waitForReadyRead( msecs < 0 ? -1 : msecs); // await ack byte
|
||||
bool result = socket->waitForReadyRead(msecs < 0 ? -1 : msecs); // await ack byte
|
||||
if (result) {
|
||||
socket->read(1);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ private:
|
|||
|
||||
// class MAC_APPLICATION_MENU : public QObject{
|
||||
// QString forcedTranslation(){
|
||||
// return tr("About %1") + tr("Preferences…") + tr("Services") + tr("Hide %1") + tr("Hide Others") + tr("Show All") +
|
||||
//tr("Quit %1");
|
||||
// return tr("About %1") + tr("Preferences…") + tr("Services") + tr("Hide %1") + tr("Hide Others") + tr("Show All")
|
||||
//+ tr("Quit %1");
|
||||
// }
|
||||
// };
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
<config xmlns="http://www.linphone.org/xsds/lpconfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.linphone.org/xsds/lpconfig.xsd lpconfig.xsd">
|
||||
<section name="app">
|
||||
<entry name="auto_download_incoming_files_max_size" overwrite="true">10000000</entry>
|
||||
<entry name="record_aware" overwrite="true">1</entry>
|
||||
</section>
|
||||
<section name="proxy_default_values">
|
||||
<entry name="avpf" overwrite="true">1</entry>
|
||||
|
|
@ -35,11 +36,20 @@
|
|||
</section>
|
||||
<section name="sip">
|
||||
<entry name="rls_uri" overwrite="true">sips:rls@sip.linphone.org</entry>
|
||||
<entry name="sip_tcp_port" overwrite="true">-2</entry>
|
||||
<entry name="sip_udp_port" overwrite="true">-2</entry>
|
||||
<entry name="sip_tls_port" overwrite="true">-2</entry>
|
||||
</section>
|
||||
<section name="video">
|
||||
<entry name="automatically_accept" overwrite="true">1</entry>
|
||||
<entry name="automatically_initiate" overwrite="true">0</entry>
|
||||
<entry name="automatically_accept_direction" overwrite="true">2</entry>
|
||||
<entry name="displaytype" overwrite="true">MSQOGL</entry>
|
||||
<entry name="show_local" overwrite="true">0</entry>
|
||||
</section>
|
||||
<section name="sound">
|
||||
<entry name="mic_gain_db" overwrite="true">0</entry>
|
||||
<entry name="playback_gain_db" overwrite="true">0</entry>
|
||||
</section>
|
||||
<section name="assistant">
|
||||
<entry name="domain" overwrite="true">sip.linphone.org</entry>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
<config xmlns="http://www.linphone.org/xsds/lpconfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.linphone.org/xsds/lpconfig.xsd lpconfig.xsd">
|
||||
<section name="app">
|
||||
<entry name="auto_download_incoming_files_max_size" overwrite="true">10000000</entry>
|
||||
<entry name="record_aware" overwrite="true">1</entry>
|
||||
</section>
|
||||
<section name="proxy_default_values">
|
||||
<entry name="avpf" overwrite="true">0</entry>
|
||||
|
|
@ -30,11 +31,20 @@
|
|||
<section name="sip">
|
||||
<entry name="use_rls_presence" overwrite="true"></entry>
|
||||
<entry name="rls_uri" overwrite="true"></entry>
|
||||
<entry name="sip_tcp_port" overwrite="true">-2</entry>
|
||||
<entry name="sip_udp_port" overwrite="true">-2</entry>
|
||||
<entry name="sip_tls_port" overwrite="true">-2</entry>
|
||||
</section>
|
||||
<section name="video">
|
||||
<entry name="automatically_accept" overwrite="true">1</entry>
|
||||
<entry name="automatically_initiate" overwrite="true">0</entry>
|
||||
<entry name="automatically_accept_direction" overwrite="true">2</entry>
|
||||
<entry name="displaytype" overwrite="true">MSQOGL</entry>
|
||||
<entry name="show_local" overwrite="true">0</entry>
|
||||
</section>
|
||||
<section name="sound">
|
||||
<entry name="mic_gain_db" overwrite="true">0</entry>
|
||||
<entry name="playback_gain_db" overwrite="true">0</entry>
|
||||
</section>
|
||||
<section name="assistant">
|
||||
<entry name="domain" overwrite="true"></entry>
|
||||
|
|
|
|||
|
|
@ -128,6 +128,20 @@
|
|||
"smile"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1fae0",
|
||||
"char": "🫠",
|
||||
"name": "melting face",
|
||||
"keywords": [
|
||||
"face",
|
||||
"melting",
|
||||
"smile",
|
||||
"embarrassed",
|
||||
"overwhelmed",
|
||||
"shame",
|
||||
"dread"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f609",
|
||||
"char": "😉",
|
||||
|
|
@ -360,6 +374,30 @@
|
|||
"surprise"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1fae2",
|
||||
"char": "🫢",
|
||||
"name": "face with open eyes and hand over mouth",
|
||||
"keywords": [
|
||||
"face with open eyes hand over mouth",
|
||||
"whoops",
|
||||
"shock",
|
||||
"gasp",
|
||||
"sudden realization",
|
||||
"surprise"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1fae3",
|
||||
"char": "🫣",
|
||||
"name": "face with peeking eye",
|
||||
"keywords": [
|
||||
"face with peeking eye",
|
||||
"hide",
|
||||
"hidden",
|
||||
"eye"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f92b",
|
||||
"char": "🤫",
|
||||
|
|
@ -378,6 +416,17 @@
|
|||
"thinking face"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1fae1",
|
||||
"char": "🫡",
|
||||
"name": "saluting face",
|
||||
"keywords": [
|
||||
"face",
|
||||
"saluting face",
|
||||
"respect",
|
||||
"honor"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f910",
|
||||
"char": "🤐",
|
||||
|
|
@ -437,6 +486,32 @@
|
|||
"silent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1fae5",
|
||||
"char": "🫥",
|
||||
"name": "dotted line face",
|
||||
"keywords": [
|
||||
"dotted line face",
|
||||
"shy",
|
||||
"embarrased",
|
||||
"quiet",
|
||||
"ignore"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f636-200d-1f32b-feof",
|
||||
"char": "😶🌫️",
|
||||
"name": "face in clouds",
|
||||
"keywords": [
|
||||
"face in clouds",
|
||||
"confused",
|
||||
"embarrased",
|
||||
"lost",
|
||||
"daydreaming",
|
||||
"overwhelmed",
|
||||
"hazy"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f60f",
|
||||
"char": "😏",
|
||||
|
|
@ -476,6 +551,20 @@
|
|||
"grimace face"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f62e-200d-1f4a8",
|
||||
"char": "😮💨",
|
||||
"name": "face exhaling",
|
||||
"keywords": [
|
||||
"face",
|
||||
"face exhaling",
|
||||
"relief",
|
||||
"exhausted",
|
||||
"frustrated",
|
||||
"exasperation",
|
||||
"calm"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f925",
|
||||
"char": "🤥",
|
||||
|
|
@ -487,6 +576,39 @@
|
|||
"lying face"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1fae8",
|
||||
"char": "🫨",
|
||||
"name": "shaking face",
|
||||
"keywords": [
|
||||
"face",
|
||||
"shaking",
|
||||
"overwhelmed",
|
||||
"excited",
|
||||
"shocked",
|
||||
"anxious"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f642-200d-2194-fe0f",
|
||||
"char": "🙂↔️",
|
||||
"name": "head shaking horizontally",
|
||||
"keywords": [
|
||||
"head shaking horizontally",
|
||||
"no"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f642-200d-2195-fe0f",
|
||||
"char": "🙂↕️",
|
||||
"name": "head shaking vertically",
|
||||
"keywords": [
|
||||
"head shaking vertically",
|
||||
"yes",
|
||||
"support",
|
||||
"confirm"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f60c",
|
||||
"char": "😌",
|
||||
|
|
@ -536,6 +658,18 @@
|
|||
"zzz"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1fae9",
|
||||
"char": "",
|
||||
"name": "face with bags under eyes",
|
||||
"keywords": [
|
||||
"face",
|
||||
"sleeping",
|
||||
"bags under eyes",
|
||||
"tired",
|
||||
"stressed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "1f637",
|
||||
"char": "😷",
|
||||
|
|
|
|||
75
Linphone/data/emoji/emojiSvgs/1f62e-200d-1f4a8.svg
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_7" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<g>
|
||||
|
||||
<radialGradient id="face_00000019647643363045288750000001315328106473507229_" cx="64" cy="3167.6001" r="56.9597" gradientTransform="matrix(1 0 0 1 0 -3106)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face_19_" style="fill:url(#face_00000019647643363045288750000001315328106473507229_);" d="M64,117.5
|
||||
c-27.9,0-58-17.5-58-55.9S36.1,5.7,64,5.7c15.5,0,29.8,5.1,40.4,14.4C115.9,30.3,122,44.7,122,61.6s-6.1,31.2-17.6,41.4
|
||||
C93.8,112.3,79.4,117.5,64,117.5z"/>
|
||||
<path style="fill:#EB8F00;" d="M111.9,28.3c5.3,8.6,8.1,18.8,8.1,30.2c0,16.9-6.1,31.2-17.6,41.4c-10.6,9.3-25,14.5-40.4,14.5
|
||||
c-18.1,0-37-7.3-48.2-22.9c10.8,17.7,31,25.9,50.2,25.9c15.4,0,29.8-5.2,40.4-14.5C115.9,92.8,122,78.5,122,61.6
|
||||
C122,48.8,118.5,37.5,111.9,28.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g id="eyebrows_28_">
|
||||
<path style="fill:#422B0D;" d="M44.7,30.8c0,0,1.9-1.1,3.5,0.3c0.9,0.7,1.4,2.1,0.4,3.1c-4,5-14.5,8-19.6,6.5
|
||||
c-1-0.3-1.5-1.4-1.2-2.3c0.3-0.9,1.1-1.4,2-1.3C36.5,36.4,40.8,34.3,44.7,30.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g id="eyebrows_20_">
|
||||
<path style="fill:#422B0D;" d="M69.9,30.3c0,0-1.9-1.1-3.5,0.3c-0.9,0.7-1.4,2.1-0.4,3.1c4,5,14.5,8,19.6,6.5
|
||||
c1-0.3,1.5-1.4,1.2-2.3c-0.3-0.9-1.1-1.4-2-1.3C78.2,35.9,73.9,33.7,69.9,30.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g id="face-with-open-mouth_3_">
|
||||
<path id="mouth_10_" style="fill:#422B0D;" d="M35.3,91.3c-0.4,3.5,3.4,3.9,3.4,3.9s28,1.2,36.8,1.2c5.2,0,4.3-5.2-0.8-9.1
|
||||
c-3.1-2.3-8.1-4.8-19.8-4.8C46,82.5,35.8,87.4,35.3,91.3z"/>
|
||||
</g>
|
||||
<path style="fill:#F48FB1;" d="M46,95.5c0,0,4.6-3.5,11-3.6c7.8-0.1,14.6,4.5,14.6,4.5s-7.1,0.1-13.9-0.1S46,95.5,46,95.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#422B0D;" d="M46.1,57.6H25.3c-1.4,0-2.5-1.1-2.5-2.5s1.1-2.5,2.5-2.5h20.8c1.4,0,2.5,1.1,2.5,2.5
|
||||
S47.4,57.6,46.1,57.6z"/>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M28.9,55.6c0,0.5-0.1,0.9-0.1,1.4c0,5.9,3.4,9.4,7,9.4s7-3.5,7-9.4c0-0.5,0-1-0.1-1.4H28.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#422B0D;" d="M89.3,57.6H68.5c-1.4,0-2.5-1.1-2.5-2.5s1.1-2.5,2.5-2.5h20.8c1.4,0,2.5,1.1,2.5,2.5
|
||||
S90.7,57.6,89.3,57.6z"/>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M72.5,55.1c-0.1,0.6-0.1,1.3-0.1,2c0,5.9,3.4,9.4,7,9.4c3.7,0,7-3.5,7-9.4c0-0.7-0.1-1.4-0.1-2
|
||||
H72.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#EB8F00;" d="M67.2,102.9c-2,0.4-3.6,0.5-5.3,0.6c-1.6,0.1-3.2,0.1-4.8,0s-3.1-0.2-4.7-0.4
|
||||
c-1.6-0.2-3.2-0.4-5.2-0.8l-0.1-0.3c1.6-0.7,3.3-1.1,5-1.3c1.7-0.2,3.4-0.3,5.1-0.2c1.7,0.1,3.4,0.3,5.1,0.6
|
||||
c1.7,0.3,3.3,0.8,4.9,1.4V102.9z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M37.7,92.8c-2,0.3-4.1,0.5-6.1,0.7c-2.7,0.3-5.5,0.4-7.8-0.8c-1.1-0.6-2.1-1.4-3.2-2
|
||||
c-2.7-1.4-6.1-1-8.9,0.4C9.3,92.4,8,94.5,7.3,97c-0.7,2.6,0.8,5.5,2.9,7c3.8,2.7,1.6,3.1,2.7,6.8c1.1,4,4.9,6.2,8.9,5
|
||||
c1.4-0.4,2.8-1.4,4.2-1.7c1.6-0.3,2.9,0.7,4.4,0.6c3.3,0,5.1-2.6,5.5-5.9c0.2-1.6,0-3.2,0.3-4.8c0.9-4.9,5.3-8.2,8.9-11.6
|
||||
c1.7-1.6-1.7-0.8-2.3-0.7C41.2,92.2,39.4,92.5,37.7,92.8z"/>
|
||||
</g>
|
||||
<path style="fill:#92CBEB;" d="M6.8,97c0.7-2.6,2.4-4.9,4.8-6.2c2.7-1.4,6.5-1.9,9.3-0.2c0.2,0.1,0.3,0.3,0.4,0.5
|
||||
c-1.2-0.1-2.4-0.2-3.6-0.1c-1.7,0.2-3.5,0.7-4.7,1.9c-0.5,0.5-0.9,1-1.3,1.6c-0.9,1.5-1.5,3.3-1,5.1c0.3,1.3,1.5,2.8,3,3.1
|
||||
c1.6,0.2,3-1.2,4.7-1c0.7,0.1,1.5,0.9,1.1,1.5c-0.2,0.4-0.7,0.4-1.2,0.5c-1.4,0.3-2.6,1.2-3.1,2.5c-0.3,0.6-0.4,1.3-0.4,2
|
||||
c0,2.6,1.8,5.1,4.2,5.9c1.6,0.5,3.4,0.3,4.8-0.4c0.7-0.4,1.1-1.1,1.8-1.4c0.7-0.3,1.7-0.4,2.4-0.3c0.8,0,1.6,0.2,2.4,0.1
|
||||
c1.9-0.2,3.3-1.5,4.1-3.1c0.9-1.9,0.6-3.7,0.8-5.8c0.2-1.8,1.1-3.4,2.2-4.8c1.1-1.3,2.3-2.5,3.7-3.6c0.7-0.6,1.5-1,2.2-1.4
|
||||
c0.3-0.2,2-1.4,2.2-1.3c0.3,0.1,0.3,0.4-0.3,0.9c-3.6,3.4-8.1,6.7-8.9,11.6c-0.3,1.6-0.1,3.2-0.3,4.8c-0.3,3.3-2.7,6.8-6,6.8
|
||||
c-1.6,0-3.2-0.9-4.8-0.6c-1.4,0.3-2.7,1.5-4.1,1.9c-4,1.2-8.6-1.9-9.7-5.9c-1-3.7,1.2-4.4-2.6-7.1C6.8,102.9,6,99.6,6.8,97z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
73
Linphone/data/emoji/emojiSvgs/1f635-200d-1f4ab.svg
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<g>
|
||||
|
||||
<radialGradient id="face_1_" cx="64" cy="-2088.8999" r="56.9597" gradientTransform="matrix(1 0 0 -1 0 -2026)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face_18_" style="fill:url(#face_1_);" d="M64,118.8c-27.9,0-58-17.5-58-55.9S36.1,7,64,7c15.5,0,29.8,5.1,40.4,14.4
|
||||
C115.9,31.6,122,46,122,62.9s-6.1,31.2-17.6,41.4C93.8,113.6,79.4,118.8,64,118.8z"/>
|
||||
<path style="fill:#EB8F00;" d="M111.89,29.67c5.33,8.6,8.11,18.84,8.11,30.23c0,16.9-6.1,31.2-17.6,41.4
|
||||
c-10.6,9.3-25,14.5-40.4,14.5c-18.06,0-37.04-7.35-48.18-22.94C24.58,110.52,44.81,118.8,64,118.8c15.4,0,29.8-5.2,40.4-14.5
|
||||
C115.9,94.1,122,79.8,122,62.9C122,50.16,118.53,38.84,111.89,29.67z"/>
|
||||
|
||||
<radialGradient id="face_2_" cx="64" cy="-2088.8999" r="56.9597" gradientTransform="matrix(1 0 0 -1 0 -2026)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face_17_" style="fill:url(#face_2_);" d="M64,118.8c-27.9,0-58-17.5-58-55.9S36.1,7,64,7c15.5,0,29.8,5.1,40.4,14.4
|
||||
C115.9,31.6,122,46,122,62.9s-6.1,31.2-17.6,41.4C93.8,113.6,79.4,118.8,64,118.8z"/>
|
||||
<path style="fill:#EB8F00;" d="M111.89,29.67c5.33,8.6,8.11,18.84,8.11,30.23c0,16.9-6.1,31.2-17.6,41.4
|
||||
c-10.6,9.3-25,14.5-40.4,14.5c-18.06,0-37.04-7.35-48.18-22.94C24.58,110.52,44.81,118.8,64,118.8c15.4,0,29.8-5.2,40.4-14.5
|
||||
C115.9,94.1,122,79.8,122,62.9C122,50.16,118.53,38.84,111.89,29.67z"/>
|
||||
</g>
|
||||
<g id="prop_18_">
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#5F7AFF;" d="M38.53,48C38.58,48,38.55,48,38.53,48L38.53,48z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#5F7AFF;" d="M95.86,48C95.9,48,95.88,48,95.86,48L95.86,48z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="prop_17_">
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#5F7AFF;" d="M36.53,48C36.58,48,36.55,48,36.53,48L36.53,48z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#5F7AFF;" d="M93.86,48C93.9,48,93.88,48,93.86,48L93.86,48z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill:#422B0D;" d="M82.1,34.68c-8.45,2.31-13.06,9.49-11.62,18.67c0.88,5.66,6.55,16.63,21.59,13.31
|
||||
c8.97-1.98,13.51-8.51,13.34-17.06c-0.01-0.53-0.35-0.84-0.45-0.86c0,0-0.21,0.2-0.55,1.47c-1.72,6.39-6.21,12.36-14.24,13.25
|
||||
c-10.05,1.12-15.17-5.86-15.95-10.86c-1.03-6.65,2.35-12.47,8.89-14.26c3.87-1.06,7.63,0.04,10.32,3.02
|
||||
c1.26,1.4,2.62,3.99,2.16,6.55c-1.27,6.99-7.76,6.89-9.99,5.23c-1.7-1.28-2.3-3.94,1.25-4.81c1.29-0.31,2.4-0.61,2.75-2.32
|
||||
c0.23-1.09-0.67-2.2-1.64-2.69c-2.14-1.09-4.85-0.08-6.46,1.32c-1.73,1.5-2.45,3.85-1.99,6.44c0.36,2.02,2,4.66,4.83,6.07
|
||||
c3.49,1.74,12.69,1.53,14.85-7.49c0.99-4.15-0.82-8.44-2.76-10.65C90.96,32.82,83.48,34.3,82.1,34.68z"/>
|
||||
<path style="fill:#422B0D;" d="M45.9,66.85c8.45-2.31,13.06-9.49,11.62-18.67c-0.88-5.66-6.55-16.63-21.59-13.31
|
||||
c-8.97,1.98-13.51,8.51-13.34,17.06c0.01,0.53,0.35,0.84,0.45,0.86c0,0,0.21-0.2,0.55-1.47c1.72-6.39,6.21-12.36,14.24-13.25
|
||||
c10.05-1.12,15.17,5.86,15.95,10.86c1.03,6.65-2.35,12.47-8.89,14.26c-3.87,1.06-7.63-0.04-10.32-3.02
|
||||
c-1.26-1.4-2.62-3.99-2.16-6.55c1.27-6.99,7.76-6.89,9.99-5.23c1.7,1.28,2.3,3.94-1.25,4.81c-1.29,0.31-2.4,0.61-2.75,2.32
|
||||
c-0.23,1.09,0.67,2.2,1.64,2.69c2.14,1.09,4.85,0.08,6.46-1.32c1.73-1.5,2.45-3.85,1.99-6.44c-0.36-2.02-2-4.66-4.83-6.07
|
||||
c-3.49-1.74-12.69-1.53-14.85,7.49c-0.99,4.15,0.82,8.44,2.76,10.65C37.04,68.7,44.52,67.23,45.9,66.85z"/>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M99.49,87.26c-1.49-1.72-6.05-4.81-14.33-0.76c-1.84,0.9-2.81,1.92-6.14,1.68
|
||||
c-2.19-0.15-3.83-1.21-5.71-2.42c-2.39-1.54-5.1-3.26-9.3-3.43c-4.2,0.17-6.91,1.89-9.3,3.43c-1.89,1.22-3.52,2.27-5.71,2.42
|
||||
c-3.33,0.24-4.39-0.62-6.23-1.52c-8.28-4.05-12.75-1.12-14.24,0.6c-1.33,1.54-0.43,3.18,2.02,1.43c1.51-1.08,4.22-2.45,10.35,1.01
|
||||
c1.97,1.11,3.83,2.79,8.38,2.47c3.22-0.23,5.45-1.66,7.6-3.05c2.1-1.36,4.11-2.63,7.13-2.79c3.03,0.16,5.03,1.43,7.13,2.79
|
||||
c2.15,1.39,4.38,2.83,7.6,3.05c4.55,0.32,6.32-1.52,8.29-2.63c6.13-3.46,8.93-1.93,10.44-0.85C99.91,90.44,100.82,88.8,99.49,87.26z
|
||||
"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
54
Linphone/data/emoji/emojiSvgs/1f636-200d-1f32b-feof.svg
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_7" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<radialGradient id="SVGID_1_" cx="65.1292" cy="68.0936" r="53.2369" gradientTransform="matrix(1 0 0 -1 0 130)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_1_);" d="M97.9,32.9c-0.4-0.9-0.7-1.9-1.5-2.5c-1-0.9-2.4-1.2-3.7-1.1c-4.2,0.5-10.5-0.1-14.7-3
|
||||
c-4.1-2.9-7-6.8-8.8-10.6l-0.1-0.1c-5.3,5.7-14.4,7.2-21.4,4c-0.8,7-8.7,12.2-15.4,10c-1.5,6.6-5.8,13-12.1,15.6
|
||||
c-3.3,1.4-6.1,2-8.4,2.2c-0.3,0.1-0.6,0.1-0.9,0.2c-0.9,4.1-1.4,8.5-1.4,13.2c0,1.5,0.2,4,0.3,5.8c4.3,0.9,9.7,3.6,14,11
|
||||
c3.7,6.4,6.6,4.3,12.9,2.9c7.9-1.8,16.4-1.2,23.6,3.1c1.3,0.7,2.4,1.6,3.5,2.6c2.1-2.7,4.6-5.2,11.2-7.4c9.3-3.1,16.3,1.5,16.3,1.5
|
||||
c3-6.3,7-12.3,12.7-16.5c3.6-2.7,9.6-4.2,14.3-4.6h0.1c-0.2-5.3-1-10.7-2.4-15.4C110.2,45,102.6,43.7,97.9,32.9z"/>
|
||||
<path style="fill:#EB8F00;" d="M116.5,58.2c0,0.3,0,1.1,0,1.4c0.6-0.1,1.2-0.2,1.9-0.2c-0.2-5.3-1-10.7-2.4-15.4
|
||||
c-0.4,0.1-0.7,0.1-1.1,0.1C116,48.5,116.5,53.2,116.5,58.2z"/>
|
||||
<ellipse style="fill:#422B0D;" cx="42.6" cy="59.5" rx="7" ry="11.5"/>
|
||||
<path style="fill:#422B0D;" d="M83.8,70.8c3.7,0,7-4.3,7-11.5s-3.4-11.5-7-11.5c-3.7,0-7,4.3-7,11.5C76.7,66.5,80.1,70.8,83.8,70.8z
|
||||
"/>
|
||||
<path style="fill:#FFFFFF;" d="M60.4,83.8c-7.2-4.3-15.7-4.9-23.6-3.1c-6.2,1.4-9.2,3.5-12.9-2.9C17.9,67.6,10,66.3,5.5,66.5
|
||||
c-1.1,0-1.6,1.5-0.6,2.1c4,2.6,11,8.5,13.4,18.8c0,0-6.2,7.1-6.6,13.2c-0.1,0.9,1.1,1.4,1.7,0.8c5.3-5.1,21.2-14.5,32.2-10
|
||||
C59.5,97,62,108.9,62.4,114.5c0.1,1.4,1.5,2.3,2.8,1.9c2.9-0.9,7.9-1.9,13.4-0.8c8.8,1.7,15.3,8.5,15.3,8.5
|
||||
c0-10.6-7.8-16.8-17.3-17.9c-1-0.1-4.3,0.5-5.2-5.3C70.4,93.8,66.5,87.5,60.4,83.8z"/>
|
||||
<path style="fill:#FFFFFF;" d="M119.9,59.3c-4.9,0-11.9,1.7-16,4.7c-5.6,4.2-9.7,10.2-12.7,16.5c0,0-7-4.6-16.3-1.5
|
||||
c-6.5,2.2-9.1,4.7-11.2,7.4c2.6,2.4,4.6,5.3,6,8.6c4.7-5.1,12.1-6.4,20.2-6c11.4,0.7,20.1,8.2,20.1,8.2s-1.9-8.7-11.8-14
|
||||
c4.6-10.1,11.7-18.5,23.2-19.5c1.5-0.1,3.8-0.2,3.8-1.5C125.3,61.2,123.1,59.3,119.9,59.3z"/>
|
||||
<path style="fill:#FFFFFF;" d="M108,11.6c0.4-0.5,1.2-0.3,1.2,0.4c0.7,8.3-6.2,14.4-6.5,15c-0.7,1.4,1.4,4.8,2.2,6
|
||||
c1.4,2.1,3.2,3.7,5.2,5.2c3.6,2.7,8.7,3,11.6,3c0.5,0,0.7,0.7,0.2,0.9c-4.9,2.3-17.4,6.2-24-9.1c-0.4-0.9-0.7-1.9-1.5-2.5
|
||||
c-1-0.9-2.4-1.2-3.7-1.1c-4.2,0.5-10.5-0.1-14.7-3c-9.7-7-12.7-19.8-10.5-23c1-1.5,2.5,10.8,15.1,14.6
|
||||
C97.5,22.5,103.8,16.9,108,11.6z"/>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M67.2,9.5c-4.1,4.3-12.3,7.7-18,5.8c1.7-8-4.1-11.1-4.1-11.1S48.9,15.6,38,22s-20.1-3.5-20.1-3.5
|
||||
c-1.4,7.9,6.4,11.1,6.4,11.1S24.8,40,2.8,44.4c0,0,4.2,6.4,17.5,0.8c6.3-2.6,10.5-9,12.1-15.6c6.7,2.1,14.6-3.1,15.4-10
|
||||
c7,3.2,16.1,1.6,21.4-4C69.2,15.6,67.9,13.3,67.2,9.5z"/>
|
||||
</g>
|
||||
<g style="opacity:0.7;">
|
||||
<path style="fill:#92CBEB;" d="M67.2,9.5c-4.1,4.3-12.3,7.7-18,5.8c1.7-8-4.1-11.1-4.1-11.1S48.9,15.6,38,22s-20.1-3.5-20.1-3.5
|
||||
c-1.4,7.9,6.4,11.1,6.4,11.1S24.8,40,2.8,44.4c0,0,4.2,6.4,17.5,0.8c6.3-2.6,10.5-9,12.1-15.6c6.7,2.1,14.6-3.1,15.4-10
|
||||
c7,3.2,16.1,1.6,21.4-4C69.2,15.6,67.9,13.3,67.2,9.5z"/>
|
||||
</g>
|
||||
<path style="opacity:0.8;fill:#D5EBF5;enable-background:new ;" d="M60.4,83.8c-7.2-4.3-15.7-4.9-23.6-3.1
|
||||
c-6.2,1.4-9.2,3.5-12.9-2.9C17.9,67.6,10,66.3,5.5,66.5c-1.1,0-1.6,1.5-0.6,2.1c4,2.6,11,8.5,13.4,18.8c0,0-6.2,7.1-6.6,13.2
|
||||
c-0.1,0.9,1.1,1.4,1.7,0.8c5.3-5.1,21.2-14.5,32.2-10C59.5,97,62,108.9,62.4,114.5c0.1,1.4,1.5,2.3,2.8,1.9
|
||||
c2.9-0.9,7.9-1.9,13.4-0.8c8.8,1.7,15.3,8.5,15.3,8.5c0-10.6-7.8-16.8-17.3-17.9c-1-0.1-4.3,0.5-5.2-5.3
|
||||
C70.4,93.8,66.5,87.5,60.4,83.8z"/>
|
||||
<path style="opacity:0.8;fill:#92CBEB;enable-background:new ;" d="M119.9,59.3c-4.9,0-11.9,1.7-16,4.7
|
||||
c-5.6,4.2-9.7,10.2-12.7,16.5c0,0-7-4.6-16.3-1.5c-6.5,2.2-9.1,4.7-11.2,7.4c2.6,2.4,4.6,5.3,6,8.6c4.7-5.1,12.1-6.4,20.2-6
|
||||
c11.4,0.7,20.1,8.2,20.1,8.2s-1.9-8.7-11.8-14c4.6-10.1,11.7-18.5,23.2-19.5c1.5-0.1,3.8-0.2,3.8-1.5
|
||||
C125.3,61.2,123.1,59.3,119.9,59.3z"/>
|
||||
<path style="opacity:0.8;fill:#D5EBF5;enable-background:new ;" d="M108,11.6c0.4-0.5,1.2-0.3,1.2,0.4c0.7,8.3-6.2,14.4-6.5,15
|
||||
c-0.7,1.4,1.4,4.8,2.2,6c1.4,2.1,3.2,3.7,5.2,5.2c3.6,2.7,8.7,3,11.6,3c0.5,0,0.7,0.7,0.2,0.9c-4.9,2.3-17.4,6.2-24-9.1
|
||||
c-0.4-0.9-0.7-1.9-1.5-2.5c-1-0.9-2.4-1.2-3.7-1.1c-4.2,0.5-10.5-0.1-14.7-3c-9.7-7-12.7-19.8-10.5-23c1-1.5,2.5,10.8,15.1,14.6
|
||||
C97.5,22.5,103.8,16.9,108,11.6z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
46
Linphone/data/emoji/emojiSvgs/1f642-200d-2194-fe0f.svg
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g id="gold_00000165203022899322124450000003472139253212578981_">
|
||||
|
||||
<radialGradient id="face_00000132807857306419350450000001097916018144416688_" cx="-360.1916" cy="-976" r="50.808" gradientTransform="matrix(1 0 0 -1 417.6916 -912)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.92" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
|
||||
<path id="face_00000007413901337749749020000011305445033205062047_" style="fill:url(#face_00000132807857306419350450000001097916018144416688_);" d="
|
||||
M57.5,113.9C32.6,113.9,5.8,98.3,5.8,64s26.9-49.9,51.7-49.9c13.8,0,26.6,4.5,36,12.8c10.3,9.1,15.7,21.9,15.7,37
|
||||
s-5.4,27.8-15.7,36.9C84.1,109.2,71.2,113.9,57.5,113.9z"/>
|
||||
<path style="fill:#EB8F00;" d="M100.2,34.4c4.8,7.7,7.2,16.8,7.2,27c0,15.1-5.4,27.8-15.7,36.9c-9.5,8.3-22.3,12.9-36,12.9
|
||||
c-16.1,0-33-6.6-43-20.5c9.6,15.8,27.7,23.1,44.8,23.1c13.7,0,26.6-4.6,36-12.9c10.3-9.1,15.7-21.9,15.7-36.9
|
||||
C109.2,52.6,106.1,42.5,100.2,34.4z"/>
|
||||
</g>
|
||||
<g id="facial_expressions_00000025421089436170878270000002927336676223602107_">
|
||||
<g id="relieved-face_00000016054590052930058270000014482799045747817651_">
|
||||
<g id="eyes_00000110462259112332263830000011555022149649664945_">
|
||||
<g id="peepers_00000153697237836777825860000002547105109993645750_">
|
||||
<path style="fill:#422B0D;" d="M60.4,54.3c-2.6,2.9-5.1,4-7.7,3.9c-2.1-0.1-4-0.8-5.6-3.2c-1.7-2.6-5.1-2.1-4.8,1.3
|
||||
c0.5,5,5.6,8.4,10.4,8.6c5.9,0.2,10.5-3,12.5-7.8C66.5,54.1,62.4,52,60.4,54.3z"/>
|
||||
<path style="fill:#422B0D;" d="M26.3,54.3c-2.5,3.1-4.6,3.9-7.2,3.9c-2,0-3.7-1.7-4.5-3.4c-1.1-2.1-3.9-1.6-3.9,0.9
|
||||
c0,4.6,4,8.6,8.7,8.6c5.8,0,9.6-2.9,11.2-7.2C31.6,54,28.3,52,26.3,54.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M51.8,78.3c-0.5-0.7-2.1-0.9-3.8-0.6c-9.5,1.7-18.1,1-22.2-0.1c-1.4-0.4-2.7-0.6-3.3,0.2
|
||||
c-0.6,0.6-0.5,1.9,0.4,3c2.2,2.5,6.5,4.3,10,5c6.7,1.4,14.8-1.5,18.5-4.4C52.4,80.4,52.4,79.1,51.8,78.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#B0BEC5;" d="M107.2,48.8c0.4,1.5,0.7,3,1.1,4.5c6.6,1.6,11.7,4.3,11.5,8.5c-0.3,6.2-23.7,9.1-40.5,8.9
|
||||
c-1.3,0-2.4,0.9-2.4,2s1.1,2,2.4,2c14.5,0,45.4-0.8,46-12.6C125.6,54.3,115.6,50.5,107.2,48.8z"/>
|
||||
<g>
|
||||
<path style="fill:#B0BEC5;" d="M79.7,87.8c-2.1,0-2.9-0.9-2.9-2s1-1.9,2.4-2c7-0.3,22.6-0.8,35.8-5.1c2.1-0.7,3.3-0.5,3.7,0.4
|
||||
c0.5,1.2,0,2.4-2,3.2C102.8,88.2,91.3,87.8,79.7,87.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
65
Linphone/data/emoji/emojiSvgs/1f642-200d-2195-fe0f.svg
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_7" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g id="gold_00000017474218815335838940000003074807137798816404_">
|
||||
|
||||
<radialGradient id="face_00000067949348182267862280000012244060020478301350_" cx="64" cy="-985.9" r="51.0588" gradientTransform="matrix(1 0 0 -1 0 -912)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.92" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
|
||||
<path id="face_00000134933215444162423110000011147743369961211012_" style="fill:url(#face_00000067949348182267862280000012244060020478301350_);" d="
|
||||
M64,124c-25,0-52-15.7-52-50.1s27-50.1,52-50.1c13.9,0,26.7,4.6,36.2,12.9c10.3,9.1,15.8,22.1,15.8,37.2s-5.5,28-15.8,37.1
|
||||
C90.7,119.3,77.8,124,64,124z"/>
|
||||
<path style="fill:#EB8F00;" d="M106.9,44.1c4.8,7.7,7.3,16.9,7.3,27.1c0,15.2-5.5,28-15.8,37.1c-9.5,8.3-22.4,13-36.2,13
|
||||
c-16.2,0-33.2-6.6-43.2-20.6c9.6,15.8,27.8,23.3,45,23.3c13.8,0,26.7-4.7,36.2-13c10.3-9.1,15.8-22,15.8-37.1
|
||||
C116,62.4,112.9,52.3,106.9,44.1z"/>
|
||||
</g>
|
||||
<g id="facial_expressions_00000069385602432109716340000017232438276675465613_">
|
||||
<g id="relieved-face_00000006674354916450258610000003542533979739874985_">
|
||||
<g id="eyes_00000142877458650344134320000012098703580094482597_">
|
||||
<g id="peepers_00000071527329038589895370000005779041439730716814_">
|
||||
<path style="fill:#422B0D;" d="M51.1,81.9l-0.2,0.2c-0.1,0.2-0.3,0.3-0.5,0.4L49.8,83c-0.3,0.2-0.6,0.4-0.9,0.6
|
||||
c-0.3,0.2-0.7,0.4-1.1,0.6c-0.4,0.2-0.8,0.4-1.2,0.5s-0.9,0.2-1.3,0.3c-0.5,0.1-0.9,0.1-1.4,0.1h-0.4c-0.2,0-0.3,0-0.4,0
|
||||
L42.5,85c-0.5-0.1-0.9-0.2-1.3-0.3c-0.4-0.2-0.8-0.3-1.2-0.6c-0.4-0.2-0.7-0.4-1.1-0.6c-0.5-0.4-1-0.7-1.5-1.2l-0.6-0.5
|
||||
l-0.2-0.2c-1.1-1-2.9-1.1-4.1-0.2c-0.9,0.7-1.2,1.9-0.7,2.9l0.1,0.3c0.1,0.3,0.3,0.5,0.4,0.8c0.9,1.5,2.2,2.9,3.7,3.9
|
||||
c0.7,0.5,1.5,0.9,2.3,1.3c0.9,0.4,1.8,0.7,2.7,0.9c0.5,0.1,1,0.2,1.6,0.2c0.3,0,0.6,0.1,0.7,0.1H44c1,0,2-0.1,3-0.3
|
||||
c0.9-0.2,1.8-0.5,2.7-0.9c0.8-0.3,1.5-0.8,2.3-1.3c1.1-0.8,2.1-1.7,2.9-2.8l0.4-0.6l0.4-0.6c0.1-0.2,0.3-0.5,0.3-0.7l0.1-0.2
|
||||
c0.5-1.3-0.1-2.8-1.4-3.3c-0.1,0-0.2-0.1-0.3-0.1C53.1,80.7,51.9,81,51.1,81.9z"/>
|
||||
<path style="fill:#422B0D;" d="M91.4,81.9l-0.2,0.2c-0.1,0.2-0.3,0.3-0.5,0.4L90.2,83c-0.3,0.2-0.6,0.4-0.9,0.6
|
||||
s-0.7,0.4-1.1,0.6s-0.8,0.4-1.2,0.5c-0.4,0.1-0.9,0.2-1.3,0.3c-0.5,0.1-0.9,0.1-1.4,0.1h-0.4c-0.2,0-0.3,0-0.4,0L82.9,85
|
||||
c-0.5-0.1-0.9-0.2-1.3-0.3c-0.4-0.2-0.8-0.3-1.2-0.6c-0.4-0.2-0.7-0.4-1.1-0.6c-0.5-0.4-1-0.7-1.5-1.2l-0.6-0.5L77,81.6
|
||||
c-1.1-1-2.9-1.1-4.1-0.2c-0.9,0.7-1.2,1.9-0.7,2.9l0.1,0.3c0.1,0.3,0.3,0.5,0.4,0.8c0.9,1.5,2.2,2.9,3.7,3.9
|
||||
c0.7,0.5,1.5,0.9,2.3,1.3c0.9,0.4,1.8,0.7,2.7,0.9c0.5,0.1,1,0.2,1.6,0.2c0.3,0,0.6,0.1,0.7,0.1h0.7c1,0,2-0.1,3-0.3
|
||||
c0.9-0.2,1.9-0.5,2.7-0.9c0.8-0.3,1.5-0.8,2.3-1.3c1.1-0.8,2.1-1.7,2.9-2.8l0.4-0.6l0.4-0.6c0.1-0.2,0.3-0.5,0.3-0.7l0.1-0.2
|
||||
c0.5-1.3-0.1-2.8-1.4-3.3c-0.1,0-0.2-0.1-0.3-0.1C93.6,80.7,92.3,81,91.4,81.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M80.4,104.1c-0.4-0.7-1.2-0.7-2.5-0.3c-3.8,1.2-9.2,1.6-13.8,1.6s-10-0.4-13.9-1.6
|
||||
c-1.3-0.4-2.1-0.4-2.5,0.3c-0.4,0.7-0.4,1.6,0.4,2.7c1.6,2.3,8.8,5.7,16,5.7s14.3-3.5,16-5.7C80.8,105.7,80.8,104.8,80.4,104.1z
|
||||
"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g id="lines_00000098203385351539163110000000097349340490915742_">
|
||||
|
||||
<line id="XMLID_00000018916849331934550530000017805734775020808871_" style="fill:none;stroke:#B0BEC5;stroke-width:5;stroke-linecap:round;stroke-miterlimit:10;" x1="30.6" y1="26.4" x2="22.1" y2="15.8"/>
|
||||
|
||||
<line id="XMLID_00000101781988475875228320000002106814448799351993_" style="fill:none;stroke:#B0BEC5;stroke-width:5;stroke-linecap:round;stroke-miterlimit:10;" x1="52.3" y1="18.5" x2="48.5" y2="3.2"/>
|
||||
</g>
|
||||
<g>
|
||||
<g id="lines_00000050638600932056272870000006303227320535829131_">
|
||||
|
||||
<line id="XMLID_00000005957764186300516780000014482876088468405913_" style="fill:none;stroke:#B0BEC5;stroke-width:5;stroke-linecap:round;stroke-miterlimit:10;" x1="97.4" y1="26.4" x2="105.9" y2="15.8"/>
|
||||
|
||||
<line id="XMLID_00000146464136326571224610000000004984912525994428_" style="fill:none;stroke:#B0BEC5;stroke-width:5;stroke-linecap:round;stroke-miterlimit:10;" x1="75.7" y1="18.5" x2="79.5" y2="3.2"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
|
|
@ -1,56 +1,79 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Raised-Hand" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<svg version="1.1" id="Raised-Hand" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<radialGradient id="face_1_" cx="63.6" cy="7861.3501" r="56.9597" gradientTransform="matrix(1 0 0 1 0 -7798.4497)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.92" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.92" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face" style="fill:url(#face_1_);" d="M63.6,118.8c-27.9,0-58-17.5-58-55.9S35.7,7,63.6,7c15.5,0,29.8,5.1,40.4,14.4 c11.5,10.2,17.6,24.6,17.6,41.5s-6.1,31.2-17.6,41.4C93.4,113.6,79,118.8,63.6,118.8z"/>
|
||||
<path id="face" style="fill:url(#face_1_);" d="M63.6,118.8c-27.9,0-58-17.5-58-55.9S35.7,7,63.6,7c15.5,0,29.8,5.1,40.4,14.4
|
||||
c11.5,10.2,17.6,24.6,17.6,41.5s-6.1,31.2-17.6,41.4C93.4,113.6,79,118.8,63.6,118.8z"/>
|
||||
<g id="eyes">
|
||||
<path style="fill:#FFFFFF;" d="M43,47.7c9.58,0.03,17.33,7.82,17.3,17.4s-7.82,17.33-17.4,17.3c-9.58-0.03-17.33-7.82-17.3-17.4 C25.66,55.43,33.43,47.71,43,47.7"/>
|
||||
<path style="fill:#FFFFFF;" d="M43,47.7c9.58,0.03,17.33,7.82,17.3,17.4s-7.82,17.33-17.4,17.3c-9.58-0.03-17.33-7.82-17.3-17.4
|
||||
C25.66,55.43,33.43,47.71,43,47.7"/>
|
||||
<circle style="fill:#422B0D;" cx="42.7" cy="62.8" r="15.4"/>
|
||||
|
||||
<ellipse transform="matrix(0.7659 -0.6429 0.6429 0.7659 -32.8541 47.0076)" style="fill:#FFFFFF;" cx="48.13" cy="68.62" rx="2.6" ry="2.4"/>
|
||||
|
||||
<ellipse transform="matrix(0.8022 -0.5971 0.5971 0.8022 -26.9821 34.5782)" style="fill:#FFFFFF;" cx="38.69" cy="58.01" rx="9" ry="7.3"/>
|
||||
<path style="fill:#FFFFFF;" d="M86,47.7c9.58,0.03,17.33,7.82,17.3,17.4c-0.03,9.58-7.82,17.33-17.4,17.3 c-9.58-0.03-17.33-7.82-17.3-17.4C68.66,55.43,76.43,47.71,86,47.7"/>
|
||||
<path style="fill:#FFFFFF;" d="M86,47.7c9.58,0.03,17.33,7.82,17.3,17.4c-0.03,9.58-7.82,17.33-17.4,17.3
|
||||
c-9.58-0.03-17.33-7.82-17.3-17.4C68.66,55.43,76.43,47.71,86,47.7"/>
|
||||
<circle style="fill:#422B0D;" cx="85.7" cy="62.8" r="15.4"/>
|
||||
|
||||
<ellipse transform="matrix(0.7659 -0.6429 0.6429 0.7659 -22.7305 74.6885)" style="fill:#FFFFFF;" cx="91.21" cy="68.56" rx="2.6" ry="2.4"/>
|
||||
|
||||
<ellipse transform="matrix(0.8022 -0.5971 0.5971 0.8022 -18.4797 60.2586)" style="fill:#FFFFFF;" cx="81.7" cy="58.02" rx="9" ry="7.3"/>
|
||||
</g>
|
||||
<path style="fill:none;" d="M43,47.7c-9.58,0.03-17.33,7.82-17.3,17.4c0.03,9.58,7.82,17.33,17.4,17.3 c9.58-0.03,17.33-7.82,17.3-17.4C60.34,55.43,52.57,47.71,43,47.7"/>
|
||||
<path style="fill:none;" d="M43,47.7c-9.58,0.03-17.33,7.82-17.3,17.4c0.03,9.58,7.82,17.33,17.4,17.3
|
||||
c9.58-0.03,17.33-7.82,17.3-17.4C60.34,55.43,52.57,47.71,43,47.7"/>
|
||||
<circle style="fill:none;" cx="43.3" cy="62.8" r="15.4"/>
|
||||
<ellipse transform="matrix(0.6429 -0.7659 0.7659 0.6429 -39.0221 53.4261)" style="fill:none;" cx="37.79" cy="68.56" rx="2.4" ry="2.6"/>
|
||||
<ellipse transform="matrix(0.5971 -0.8022 0.8022 0.5971 -27.4803 61.3103)" style="fill:none;" cx="47.29" cy="58.01" rx="7.3" ry="9"/>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M86,47.7c-9.58,0.03-17.33,7.82-17.3,17.4c0.03,9.58,7.82,17.33,17.4,17.3c9.58-0.03,17.33-7.82,17.3-17.4 C103.34,55.43,95.57,47.71,86,47.7"/>
|
||||
<path id="SVGID_1_" d="M86,47.7c-9.58,0.03-17.33,7.82-17.3,17.4c0.03,9.58,7.82,17.33,17.4,17.3c9.58-0.03,17.33-7.82,17.3-17.4
|
||||
C103.34,55.43,95.57,47.71,86,47.7"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_2_);">
|
||||
<path style="fill:#29B6F6;" d="M102.35,68.47c-2.16-0.36-4.35,0.48-5.71,2.21c-0.97,1.27-2.49,1.99-4.09,1.95h-0.27 c-1.1,0-2.19,0.3-3.13,0.87c-1.48,0.9-3.35,0.9-4.83,0c-0.94-0.57-2.03-0.87-3.13-0.87c-0.24-0.02-0.47-0.02-0.71,0 c-1.71,0.25-3.42-0.43-4.48-1.79c-1.14-1.55-2.95-2.46-4.88-2.45c-3.31,0.08-5.96,2.76-6,6.07c0.03,3.3,2.7,5.97,6,6 c0.28,0,0.57-0.02,0.85-0.06c1.65-0.27,3.31,0.4,4.31,1.74c1.85,2.65,5.46,3.36,8.17,1.61c1.41-0.89,3.2-0.89,4.61,0 c2.63,1.68,6.1,1.07,8-1.4c0.91-1.25,2.38-1.96,3.93-1.9h0.38c3.34-0.05,6.01-2.8,5.96-6.14c-0.04-2.89-2.12-5.34-4.96-5.86 L102.35,68.47z"/>
|
||||
<path style="fill:#29B6F6;" d="M102.35,68.47c-2.16-0.36-4.35,0.48-5.71,2.21c-0.97,1.27-2.49,1.99-4.09,1.95h-0.27
|
||||
c-1.1,0-2.19,0.3-3.13,0.87c-1.48,0.9-3.35,0.9-4.83,0c-0.94-0.57-2.03-0.87-3.13-0.87c-0.24-0.02-0.47-0.02-0.71,0
|
||||
c-1.71,0.25-3.42-0.43-4.48-1.79c-1.14-1.55-2.95-2.46-4.88-2.45c-3.31,0.08-5.96,2.76-6,6.07c0.03,3.3,2.7,5.97,6,6
|
||||
c0.28,0,0.57-0.02,0.85-0.06c1.65-0.27,3.31,0.4,4.31,1.74c1.85,2.65,5.46,3.36,8.17,1.61c1.41-0.89,3.2-0.89,4.61,0
|
||||
c2.63,1.68,6.1,1.07,8-1.4c0.91-1.25,2.38-1.96,3.93-1.9h0.38c3.34-0.05,6.01-2.8,5.96-6.14c-0.04-2.89-2.12-5.34-4.96-5.86
|
||||
L102.35,68.47z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_3_" d="M43,47.7c-9.58,0.03-17.33,7.82-17.3,17.4c0.03,9.58,7.82,17.33,17.4,17.3c9.58-0.03,17.33-7.82,17.3-17.4 C60.34,55.43,52.57,47.71,43,47.7"/>
|
||||
<path id="SVGID_3_" d="M43,47.7c-9.58,0.03-17.33,7.82-17.3,17.4c0.03,9.58,7.82,17.33,17.4,17.3c9.58-0.03,17.33-7.82,17.3-17.4
|
||||
C60.34,55.43,52.57,47.71,43,47.7"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_4_);">
|
||||
<path style="fill:#29B6F6;" d="M59.9,68.47c-2.16-0.36-4.35,0.49-5.7,2.21c-0.98,1.27-2.5,1.99-4.1,1.95h-0.26 c-1.1-0.01-2.19,0.29-3.13,0.87c-1.49,0.9-3.35,0.9-4.84,0c-0.94-0.58-2.03-0.88-3.13-0.87c-0.23-0.01-0.47-0.01-0.7,0 c-1.73,0.26-3.47-0.44-4.53-1.83c-1.14-1.55-2.95-2.46-4.87-2.45c-3.31,0.08-5.96,2.76-6,6.07c0,3.31,2.69,6,6,6 c0.02,0,0.03,0,0.05,0c0.28,0,0.56-0.02,0.84-0.06c1.65-0.27,3.32,0.4,4.32,1.74c1.82,2.66,5.42,3.4,8.15,1.68 c1.4-0.89,3.2-0.89,4.6,0c2.63,1.68,6.1,1.07,8-1.4c0.9-1.25,2.38-1.96,3.92-1.9h0.39c3.31,0.28,6.22-2.19,6.5-5.5 S63.22,68.76,59.9,68.47L59.9,68.47z"/>
|
||||
<path style="fill:#29B6F6;" d="M59.9,68.47c-2.16-0.36-4.35,0.49-5.7,2.21c-0.98,1.27-2.5,1.99-4.1,1.95h-0.26
|
||||
c-1.1-0.01-2.19,0.29-3.13,0.87c-1.49,0.9-3.35,0.9-4.84,0c-0.94-0.58-2.03-0.88-3.13-0.87c-0.23-0.01-0.47-0.01-0.7,0
|
||||
c-1.73,0.26-3.47-0.44-4.53-1.83c-1.14-1.55-2.95-2.46-4.87-2.45c-3.31,0.08-5.96,2.76-6,6.07c0,3.31,2.69,6,6,6
|
||||
c0.02,0,0.03,0,0.05,0c0.28,0,0.56-0.02,0.84-0.06c1.65-0.27,3.32,0.4,4.32,1.74c1.82,2.66,5.42,3.4,8.15,1.68
|
||||
c1.4-0.89,3.2-0.89,4.6,0c2.63,1.68,6.1,1.07,8-1.4c0.9-1.25,2.38-1.96,3.92-1.9h0.39c3.31,0.28,6.22-2.19,6.5-5.5
|
||||
S63.22,68.76,59.9,68.47L59.9,68.47z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="eyebrows">
|
||||
<path style="fill:#422B0D;" d="M27.4,39.8c-2.2,0.4-2.3,3.6,0.1,3.7c5.3,0.07,10.42-1.9,14.3-5.5c1.48-1.28,2.73-2.8,3.7-4.5 c0.58-0.83,0.38-1.97-0.45-2.55c-0.83-0.58-1.97-0.38-2.55,0.45l-0.1,0.1C38.48,35.88,33.19,38.81,27.4,39.8z"/>
|
||||
<path style="fill:#422B0D;" d="M84.5,31.4c-0.58-0.83-1.72-1.03-2.55-0.45c-0.83,0.58-1.03,1.72-0.45,2.55 c0.97,1.7,2.22,3.22,3.7,4.5c3.9,3.57,9.01,5.54,14.3,5.5c2.5-0.1,2.3-3.3,0.1-3.7C93.74,38.84,88.41,35.87,84.5,31.4L84.5,31.4"/>
|
||||
<path style="fill:#422B0D;" d="M27.4,39.8c-2.2,0.4-2.3,3.6,0.1,3.7c5.3,0.07,10.42-1.9,14.3-5.5c1.48-1.28,2.73-2.8,3.7-4.5
|
||||
c0.58-0.83,0.38-1.97-0.45-2.55c-0.83-0.58-1.97-0.38-2.55,0.45l-0.1,0.1C38.48,35.88,33.19,38.81,27.4,39.8z"/>
|
||||
<path style="fill:#422B0D;" d="M84.5,31.4c-0.58-0.83-1.72-1.03-2.55-0.45c-0.83,0.58-1.03,1.72-0.45,2.55
|
||||
c0.97,1.7,2.22,3.22,3.7,4.5c3.9,3.57,9.01,5.54,14.3,5.5c2.5-0.1,2.3-3.3,0.1-3.7C93.74,38.84,88.41,35.87,84.5,31.4L84.5,31.4"/>
|
||||
</g>
|
||||
<path style="fill:#EB8F00;" d="M111.49,29.67c5.33,8.6,8.11,18.84,8.11,30.23c0,16.9-6.1,31.2-17.6,41.4 c-10.6,9.3-25,14.5-40.4,14.5c-18.06,0-37-7.35-48.18-22.94c10.76,17.66,31,25.94,50.18,25.94c15.4,0,29.8-5.2,40.4-14.5 c11.5-10.2,17.6-24.5,17.6-41.4C121.6,50.16,118.13,38.84,111.49,29.67z"/>
|
||||
<path id="mouth" style="fill:#422B0D;" d="M64,103.2c10.8,0,17.8-7.9,19.7-11.6c0.7-1.4,0.7-2.6,0.1-3.1c-0.64-0.4-1.46-0.4-2.1,0 c-0.32,0.13-0.62,0.3-0.9,0.5c-4.9,3.52-10.77,5.44-16.8,5.5c-6.01-0.08-11.87-1.96-16.8-5.4c-0.28-0.2-0.58-0.37-0.9-0.5 c-0.64-0.4-1.46-0.4-2.1,0c-0.6,0.6-0.6,1.7,0.1,3.1C46.2,95.3,53.2,103.2,64,103.2z"/>
|
||||
</svg>
|
||||
<path style="fill:#EB8F00;" d="M111.49,29.67c5.33,8.6,8.11,18.84,8.11,30.23c0,16.9-6.1,31.2-17.6,41.4
|
||||
c-10.6,9.3-25,14.5-40.4,14.5c-18.06,0-37-7.35-48.18-22.94c10.76,17.66,31,25.94,50.18,25.94c15.4,0,29.8-5.2,40.4-14.5
|
||||
c11.5-10.2,17.6-24.5,17.6-41.4C121.6,50.16,118.13,38.84,111.49,29.67z"/>
|
||||
<path id="mouth" style="fill:#422B0D;" d="M64,103.2c10.8,0,17.8-7.9,19.7-11.6c0.7-1.4,0.7-2.6,0.1-3.1c-0.64-0.4-1.46-0.4-2.1,0
|
||||
c-0.32,0.13-0.62,0.3-0.9,0.5c-4.9,3.52-10.77,5.44-16.8,5.5c-6.01-0.08-11.87-1.96-16.8-5.4c-0.28-0.2-0.58-0.37-0.9-0.5
|
||||
c-0.64-0.4-1.46-0.4-2.1,0c-0.6,0.6-0.6,1.7,0.1,3.1C46.2,95.3,53.2,103.2,64,103.2z"/>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
119
Linphone/data/emoji/emojiSvgs/1fae0.svg
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_9" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<radialGradient id="SVGID_1_" cx="64" cy="55.0293" r="51.6864" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_1_);" d="M79.23,6.71C40.06-6.28,2.19,29.66,15.96,68.34c3.09,9.95-0.34,11.7,1.36,16.28
|
||||
c2.03,5.47,8.24,2.96,8.24,2.96s0.02,12.11,2.03,15.78c0.72,1.31,2.33,2.13,3.79,1.85c5.08-0.96,3.97-10.34,4.26-12.68
|
||||
c0.54-4.38,3.21-2.43,4.07-1.39c0.86,1.04,1.03,2.46,1.21,3.8c0.83,8.29,4.31,13.61,12.84,10.35c0.56-0.21,2.41-0.63,2.16,0.45
|
||||
c-0.22,3.03-0.4,8.86-0.27,11.9c0.13,2.99,1.12,7.16,4.9,6.23c9.13-2.53,4.48-13.83,4.9-21.32c0-6.2,7.02-5.13,7.02-0.65
|
||||
c0,4.48-1.58,10.63,2.14,13.29c6.51,4.64,7.93-2.28,7.57-5.58c0,0-0.36-7.81,0.71-9.15c1.07-1.35,1.5,3.03,6.14,1.99
|
||||
c6.23-1.4,5.97-8.45,6.52-11.76c0.55-3.31,2.41-6.24,3.57-2.91c1.16,3.33-0.7,8.21,0,12.05c0.7,3.84,2.19,4.96,4.88,4.72
|
||||
c4.19-0.37,4.86-4.92,4.92-8.56c0.06-3.64,0.08-10.57,0.76-14.05c1.35-6.89,1.94-9.82,2.9-12.77
|
||||
C120.98,43.41,106.05,15.45,79.23,6.71z"/>
|
||||
|
||||
<radialGradient id="SVGID_2_" cx="64.8001" cy="56.6768" r="54.0921" gradientTransform="matrix(0.9842 0.1772 -0.17 0.9438 10.6584 -8.297)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_2_);" d="M79.23,6.71C40.06-6.28,2.19,29.66,15.96,68.34c3.09,9.95-0.34,11.7,1.36,16.28
|
||||
c2.03,5.47,8.24,2.96,8.24,2.96s0.02,12.11,2.03,15.78c0.72,1.31,2.33,2.13,3.79,1.85c5.08-0.96,3.97-10.34,4.26-12.68
|
||||
c0.54-4.38,3.21-2.43,4.07-1.39c0.86,1.04,1.03,2.46,1.21,3.8c0.83,8.29,4.31,13.61,12.84,10.35c0.56-0.21,2.41-0.63,2.16,0.45
|
||||
c-0.22,3.03-0.4,8.86-0.27,11.9c0.13,2.99,1.12,7.16,4.9,6.23c9.13-2.53,4.48-13.83,4.9-21.32c0-6.2,7.02-5.13,7.02-0.65
|
||||
c0,4.48-1.58,10.63,2.14,13.29c6.51,4.64,7.93-2.28,7.57-5.58c0,0-0.36-7.81,0.71-9.15c1.07-1.35,1.5,3.03,6.14,1.99
|
||||
c6.23-1.4,5.97-8.45,6.52-11.76c0.55-3.31,2.41-6.24,3.57-2.91c1.16,3.33-0.7,8.21,0,12.05c0.7,3.84,2.19,4.96,4.88,4.72
|
||||
c4.19-0.37,4.86-4.92,4.92-8.56c0.06-3.64,0.08-10.57,0.76-14.05c1.35-6.89,1.94-9.82,2.9-12.77
|
||||
C120.98,43.41,106.05,15.45,79.23,6.71z"/>
|
||||
|
||||
<radialGradient id="SVGID_3_" cx="87.6611" cy="-537.0126" r="6.7462" gradientTransform="matrix(0.9999 6.846566e-03 -0.0189 0.8615 -10.1591 557.2983)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" style="stop-color:#F7C02B"/>
|
||||
<stop offset="0.7524" style="stop-color:#F7C02B;stop-opacity:0"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_3_);" d="M81.76,95.74c-0.63-5.66,2.62-8.24,5.86-8.24s6.63,0,5.86,8.24
|
||||
c-0.29,3.13-2.62,5.69-5.86,5.69S82.1,98.86,81.76,95.74z"/>
|
||||
|
||||
<radialGradient id="SVGID_4_" cx="53.3259" cy="-179.5832" r="5.5946" gradientTransform="matrix(0.9006 9.366775e-03 -0.017 1.1786 -29.3565 291.0061)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" style="stop-color:#F7C02B"/>
|
||||
<stop offset="0.7524" style="stop-color:#F7C02B;stop-opacity:0"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_4_);" d="M17.1,79.83c0.11-0.99,0.48-2.26,0.49-3.52c0.01-1.35-0.34-2.67-0.34-2.67
|
||||
c0.96-1.51,2.33-2.46,3.85-2.46c2.92,0,5.28,3.48,5.28,7.78c0,4.3-2.36,7.78-5.28,7.78c-1.39,0-2.65-0.79-3.59-2.08
|
||||
C17.51,84.65,16.82,82.48,17.1,79.83z"/>
|
||||
|
||||
<radialGradient id="SVGID_5_" cx="30.4605" cy="90.5767" r="4.7613" gradientTransform="matrix(0.9789 0.2042 -0.5216 2.5004 47.8825 -142.1224)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" style="stop-color:#F7C02B;stop-opacity:0.9706"/>
|
||||
<stop offset="0.928" style="stop-color:#F7C02B;stop-opacity:0"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_5_);" d="M25.57,87.58c-0.01-1.93-0.61-8.62,2.63-8.62s4.91,2.55,5.5,7.01
|
||||
c0.57,4.35,0.14,10.24-0.02,12.51c-0.34,4.72-3.03,6.65-6.33,4.32C27.34,102.8,25.62,98.67,25.57,87.58z"/>
|
||||
|
||||
<radialGradient id="SVGID_6_" cx="60.4735" cy="107.8734" r="5.2571" gradientTransform="matrix(0.9999 0.0144 -0.0367 2.554 3.9615 -168.4997)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.3068" style="stop-color:#F7C02B;stop-opacity:0.9706"/>
|
||||
<stop offset="1" style="stop-color:#F7C02B;stop-opacity:0"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_6_);" d="M56.11,104.34c-0.01-1.93-0.17-9.88,3.07-9.88s5.04,1.09,5.63,5.55
|
||||
c0.57,4.35,1.68,13.22,0.65,16.98c-1.61,5.91-7.19,4.98-8.53,2.83C55.04,116.81,56.11,104.34,56.11,104.34z"/>
|
||||
|
||||
<radialGradient id="SVGID_7_" cx="76.7644" cy="103.2429" r="6.6172" gradientTransform="matrix(1 0 0 2.0255 0 -105.8721)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.0737" style="stop-color:#F7C02B"/>
|
||||
<stop offset="0.7875" style="stop-color:#F7C02B;stop-opacity:0"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_7_);" d="M73.22,96.06c0.41-3.89,2.11-5.87,5.35-5.87s9.82,4.45,4.32,10.25
|
||||
c-1.22,1.28-0.69,4.78-1.27,10.05c-0.4,3.57-3.21,3.2-4.49,3.2C71.27,113.69,71.83,109.46,73.22,96.06z"/>
|
||||
|
||||
<radialGradient id="SVGID_8_" cx="102.7368" cy="88.1204" r="5.4789" gradientTransform="matrix(0.9769 0.2136 -0.5379 2.46 49.7747 -150.6061)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" style="stop-color:#F7C02B"/>
|
||||
<stop offset="0.7524" style="stop-color:#F7C02B;stop-opacity:0"/>
|
||||
</radialGradient>
|
||||
<path style="fill:url(#SVGID_8_);" d="M99.13,87.48c-0.99-3.79,2.51-16.16,5.74-16.16s0.06,7.04,1.87,26.23
|
||||
c0.34,3.58-2.75,4.61-4.03,4.61C96.85,102.16,100.41,92.39,99.13,87.48z"/>
|
||||
<path style="fill:#EB8F00;" d="M109.45,32.23c-0.05,1.92,6.38,17.74,0.28,35.99c-1.05,3.13-1.66,6.29-2.99,13.12
|
||||
c-1.58,5.7,0.86,19.82-3.76,23.17c4.69,0.7,6.08-4.86,5.95-8.54c0.06-3.64,0.08-10.57,0.76-14.05c1.35-6.89,1.94-9.82,2.9-12.77
|
||||
C116.7,56.53,115.2,43.39,109.45,32.23z"/>
|
||||
<path style="fill:#EB8F00;" d="M97.58,84.59c-0.41-1.88-3.73-0.96-4.58,1.46c-1.18,3.35-0.57,6.74-1.33,9.99
|
||||
c-0.42,1.9-2.62,5.36-5.98,3.15c-1.58-1.04-3.25-2.98-5.14-0.6c-3.02,4.94,0.4,12.32-1.9,16.39c-0.62,1.1-1.8,1.44-1.8,1.44
|
||||
c3.53,1.13,5.01-1.34,5.33-4.68c0.35-3.67-0.58-8.43,0.71-11.29c0.14-0.18,0.28-0.26,0.41-0.26c0.74,0,1.5,2.41,4.37,2.41
|
||||
c0.41,0,0.86-0.05,1.36-0.16c5.31-1,6.2-7.01,6.48-11.48C95.78,86.74,98.15,87.19,97.58,84.59z"/>
|
||||
<path style="fill:#EB8F00;" d="M68.31,96.51c-2.26-1.06-4.24,1.14-4.72,3.14c-1.93,5.5,0.83,10.18-0.78,15.76
|
||||
c-0.79,2.04-1.5,3.21-3.1,3.59c-2.9,0.69-3.82,2.86-2.14,4.27c0.82,0.77,1.92,0.85,3,0.59c12.29-3.03-0.41-23.07,7.77-25.6
|
||||
c0.09,0,0.6-0.19,2.2,0.36C70.53,98.62,70.53,97.55,68.31,96.51z"/>
|
||||
<path style="fill:#EB8F00;" d="M41.48,88.58c-1.13-1.69-2.81-2.33-4.84-1.75c-3.64,1.5-3.99,3.66-3.45,10.99
|
||||
c0.17,2.38-0.52,6.91-0.52,6.91s3.31-1.5,2.98-12.2c-0.09-3.07,2.61-3.09,4.07-1.39c0.86,1.04,1.03,2.46,1.21,3.8
|
||||
c0.66,6.6,3,11.32,8.24,11.32c1.67,0.03,4.18-0.92,5.34-1.13c1.16-0.21,1.7-1.33,1.44-2.07c-1.06-3-4.95,0.65-6.78,0.2
|
||||
c-1.09,0-4.84,0.12-5.7-8.5C43.36,92.76,42.59,90.22,41.48,88.58z"/>
|
||||
<path style="fill:#EB8F00;" d="M27.08,79.48c-0.51-0.61-0.95,2-2.13,3.86c-1.56,2.46-3.94,3.17-6.92,2.47
|
||||
c0.36,1.35,2.24,2.93,5.58,2.25C26.59,87.45,27.08,85.79,27.08,79.48z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#422B0D;" d="M48.62,24.6L48.62,24.6c-3.68-0.74-7.65,1.69-8.69,6.85c-1.04,5.16,1.68,8.93,5.36,9.67l0,0
|
||||
c3.69,0.74,7.65-1.69,8.68-6.84C55.01,29.13,52.34,25.35,48.62,24.6z"/>
|
||||
<g id="peepers_123_">
|
||||
<path style="fill:#896024;" d="M47.62,27.98L47.62,27.98c-1.13-0.85-2.73-0.63-3.59,0.5c-0.67,0.88-0.69,2.09-0.06,3l0,0
|
||||
c1.13,0.85,2.73,0.63,3.59-0.5C48.22,30.1,48.24,28.89,47.62,27.98z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill:#422B0D;" d="M77.51,33.94L77.51,33.94c-3.75,0-7.16,3.17-7.16,8.43s3.41,8.42,7.16,8.42l0,0
|
||||
c3.76,0,7.16-3.17,7.16-8.42S81.31,33.94,77.51,33.94z"/>
|
||||
<g id="peepers_122_">
|
||||
<path style="fill:#896024;" d="M77.2,37.46L77.2,37.46c-1.27-0.61-2.8-0.07-3.42,1.2c-0.48,1-0.26,2.19,0.53,2.95l0,0
|
||||
c1.27,0.61,2.8,0.07,3.42-1.2C78.21,39.42,78,38.23,77.2,37.46z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path id="mouth_80_" style="fill:#422B0D;stroke:#422B0D;stroke-width:1.0587;stroke-miterlimit:10;" d="M63.18,73.11
|
||||
c-9.88-1.62-16.9-7.86-20.34-13.86c-0.35-0.6-0.33-1.34,0.05-1.92c0.38-0.59,1.05-0.91,1.69-0.81l0,0
|
||||
c0.29,0.05,0.57,0.18,0.81,0.38c4,3.44,10.91,8.02,18.89,9.33l0.77,0.06c8.74,0.82,13.48-1.81,18-3.68
|
||||
c0.29-0.12,1.87-0.64,2.43,0.93c0.23,0.65-0.29,1.59-0.76,2.1c-3.65,4-10.08,8.51-21.01,7.52L63.18,73.11z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.7 KiB |
71
Linphone/data/emoji/emojiSvgs/1fae1.svg
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<radialGradient id="face_1_" cx="63.6" cy="-2382.8486" r="56.9597" gradientTransform="matrix(1 0 0 -1 0 -2316.9487)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face_8_" style="fill:url(#face_1_);" d="M63.6,121.8c-27.9,0-58-17.5-58-55.9S35.7,10,63.6,10c15.5,0,29.8,5.1,40.4,14.4
|
||||
c11.5,10.2,17.6,24.6,17.6,41.5s-6.1,31.2-17.6,41.4C93.4,116.6,79,121.8,63.6,121.8z"/>
|
||||
<path style="fill:#EB8F00;" d="M111.49,32.67c5.33,8.6,8.11,18.84,8.11,30.23c0,16.9-6.1,31.2-17.6,41.4
|
||||
c-10.6,9.3-25,14.5-40.4,14.5c-18.06,0-37.04-7.35-48.18-22.94c10.76,17.66,30.99,25.94,50.18,25.94c15.4,0,29.8-5.2,40.4-14.5
|
||||
c11.5-10.2,17.6-24.5,17.6-41.4C121.6,53.16,118.13,41.84,111.49,32.67z"/>
|
||||
<path style="fill:#422B0D;" d="M84.74,87.06c-2.98-0.41-9.6-0.55-21.53-0.55c-0.02,0-0.04,0-0.05,0s-0.04,0-0.05,0
|
||||
c-11.94,0-18.55,0.14-21.53,0.55c-1.81,0.25-2.5,2.5-0.19,4.02c4.26,2.8,10.65,4.71,21.78,4.79c11.13-0.07,17.52-1.99,21.78-4.79
|
||||
C87.24,89.56,86.55,87.31,84.74,87.06z"/>
|
||||
<path style="fill:#F09300;" d="M73.51,13.93c-0.05-0.07-0.1-0.13-0.15-0.19c-1.11-1.39-5.02-3.41-6.83-2.39
|
||||
c-0.8,0.45-1.07,2.02-1.44,2.8c-0.65,1.37-1.49,2.62-2.32,3.89c-2.63,4.01-43.48,34.05-43.48,34.05L7.67,50.17
|
||||
C6.56,53,6.41,56.33,6.41,56.33s3.17,2.31,16.34,1.55c8.51-0.49,24.79-7.48,27.86-12.6c0.75-1.25,6.99-9.94,6.93-10.7
|
||||
c1.41-0.74,8.49-5.06,12.15-8.12c2.79-2.33,4.57-4.18,4.9-7.95C74.73,16.92,74.45,15.23,73.51,13.93z"/>
|
||||
<path style="fill:#422B0D;" d="M44.04,47.94L44.04,47.94c-4.19,0-8,3.54-8,9.42s3.81,9.42,8,9.42l0,0c4.19,0,8-3.54,8-9.42
|
||||
S48.24,47.94,44.04,47.94z"/>
|
||||
<g>
|
||||
<g id="peepers_39_">
|
||||
<path style="fill:#896024;" d="M43.65,51.87L43.65,51.87c-1.03-0.72-2.58-0.49-3.58,0.95c-1,1.45-0.67,2.97,0.36,3.69l0,0
|
||||
c1.03,0.72,2.58,0.49,3.58-0.95S44.69,52.59,43.65,51.87z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M82.4,47.94L82.4,47.94c-4.19,0-8,3.54-8,9.42s3.81,9.42,8,9.42l0,0c4.19,0,8-3.54,8-9.42
|
||||
S86.59,47.94,82.4,47.94z"/>
|
||||
<g>
|
||||
<g id="peepers_6_">
|
||||
<path style="fill:#896024;" d="M82.01,51.87L82.01,51.87c-1.03-0.72-2.58-0.49-3.58,0.95c-1,1.45-0.67,2.97,0.36,3.69l0,0
|
||||
c1.03,0.72,2.58,0.49,3.58-0.95C83.38,54.11,83.04,52.59,82.01,51.87z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="51.815" y1="59.9018" x2="35.7392" y2="20.1638">
|
||||
<stop offset="0" style="stop-color:#FFC400"/>
|
||||
<stop offset="1" style="stop-color:#FFF176"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#SVGID_1_);" d="M7.67,50.17c-8.08-8.1-5.56-26.65,9.86-30.96c7.22-2.02,10.41-4.34,14.36-5.8
|
||||
c5.45-2.02,12.4-6.37,14.86-6.51c3.25-0.18,4.57,2.46,4.57,2.46s3.2-1.79,5.46-3.16s3.77-1.83,5.13-1.05
|
||||
c1.63,0.92,2.57,3.22,2.57,3.22s1.03-0.89,2.12-1.96c1.51-1.48,4.38-1.01,5.61,1.54c1.12,2.32-1.02,7.33-1.02,7.33
|
||||
s3.24,0.02,1.74,4.77s-3.95,5.85-5.76,7.47s-6.99,4.71-9.27,6.12c0,0,1.87,2.18,1.09,4.97c-0.35,1.24-1.47,2.07-2.43,2.89
|
||||
c-1.34,1.15-8.16,5.82-9.6,6.84c-3.4,2.41-14,7.65-20.25,8.02C26.69,56.35,15.92,58.45,7.67,50.17z"/>
|
||||
<g>
|
||||
<path style="fill:#F09300;" d="M15.84,41.29c-1.31,0.65-3.05-0.11-1.79-1.59c2.45-2.46,5.28-4.58,7.28-7.46
|
||||
c1.08-1.38,1.96-3.02,2.33-3.7c0.37-0.68,0.96-1.42,1.27-0.55c0.21,0.6-0.16,1.87-0.51,2.79C22.49,34.83,19.79,39,15.84,41.29z"/>
|
||||
</g>
|
||||
<path style="fill:#F09300;" d="M73.52,20.45c1.68-4.69-1.71-5.85-1.71-5.85s2.37-4.41,0.57-7.47c-1.34-2.29-3.11-2.67-5.18-1.61
|
||||
c-1.42,0.73-2.82,2.13-2.82,2.13s-0.36-2.2-1.99-3.12c-1.95-0.94-3.42-0.92-6.33,1.32c-1.72,1.32-4.75,3.52-4.75,3.52
|
||||
c-1.94-3.12-4.47-2.47-4.57-2.46c-2.47,0.13-9.41,4.49-14.86,6.51c-3.95,1.46-7.9,2.11-14.9,4.79C3.38,23.42,0.66,33.51,3.57,42.84
|
||||
c-0.7-14,7.41-19.12,14.48-21.83c4-1.53,6.96-2.38,9.57-3.12c4.66-1.18,8.98-3.08,13.24-5.3c2.18-1.09,3.65-1.97,4.43-2.35
|
||||
c1.04-0.5,2.22-0.4,3.06,0.12c0.81,0.5,1.85,1.74,0.41,3.65c-1.18,1.56-4.43,2.77-7.36,4.13c-1.65,0.83-11.35,4.98-9.7,7.25
|
||||
c0.29,0.43,0.82,0.64,1.32,0.51c0.43-0.14,1.27-0.2,1.58-0.57c2.58-2.55,5.95-3.74,9.37-5.41c3.8-1.77,6.95-3.24,8.7-7.75
|
||||
l0.59-0.38c1.24-1.03,3.74-3.12,5.49-4.46c1.35-1.28,4.04-0.34,4.34,1.36c0.3,1.7-0.82,3.27-3.18,5.84
|
||||
c-4.25,4.34-14.53,8.24-18.93,13.5c-0.73,0.87,0.17,2.27,1.27,1.96c0.5-0.14,1.21-0.33,2.44-1.79s4.43-3.52,8.31-5.83
|
||||
c5.13-3.11,9.99-7.18,12.05-12.3c0.61-1.51,2.42-2.46,4.09-2.48c1.81,0.01,3.06,2.27,1.61,5.23c-0.65,1.34-1.28,2.53-4.24,5.69
|
||||
c-2.62,2.79-6.17,4.87-9.9,7.01c-3.34,1.91-6.64,4.03-8.22,5.92c-0.78,0.87-0.29,2.32,0.86,2.04c0.48-0.1,0.73,0.25,1.87-1.09
|
||||
c1.14-1.34,3.58-3.22,6.58-4.93c5.31-2.71,9.7-6.58,12.96-10.98c0,0,2.01,0.23,1.38,2.83c-1.77,7.38-10.63,10.06-16.3,14.11
|
||||
c-3.36,1.72-11.59,8.41-13.23,7.69c-3.65-1.61-13.17-2.17-18.55,2.91c-0.6,0.57-1.58,1.58-1.26,2c0.32,0.42,1.02-0.17,1.49-0.47
|
||||
c4.24-2.68,10.2-3.98,17.45-1.7c1.52,0.48,12.22-6.57,15.38-8.53c-0.05-0.03,5.47-3.37,8.46-5.45
|
||||
C68.49,27.78,71.82,25.19,73.52,20.45z"/>
|
||||
<path style="fill:#F09300;" d="M58.55,33.99C58.55,33.99,58.55,33.99,58.55,33.99c0.46-0.29-2.13,1.25-2.13,1.25
|
||||
c0.15,0.16,1.51,1.51,1.25,2.43c-0.11,0.4,0.03,1.35-2.06,2.87c-1.12,0.81-10.54,7.43-10.54,7.43c-23.74,15.85-39.04,0.55-37.4,2.2
|
||||
c0.01,0.01,0.02,0.02,0.03,0.03c8.24,8.24,19.42,7.05,19.42,7.05c10.2-1.51,16.8-5.93,20.2-8.34c1.44-1.02,8.69-6.09,10.03-7.24
|
||||
c0.96-0.82,2.01-1.74,2.36-2.99C60.47,35.96,58.65,34.09,58.55,33.99z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
66
Linphone/data/emoji/emojiSvgs/1fae2.svg
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Raised-Hand" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<radialGradient id="face_1_" cx="63.6" cy="-7019.4609" r="56.9597" gradientTransform="matrix(1 0 0 -1 0 -6956.5605)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face_44_" style="fill:url(#face_1_);" d="M63.6,118.8c-27.9,0-58-17.5-58-55.9S35.7,7,63.6,7c15.5,0,29.8,5.1,40.4,14.4
|
||||
c11.5,10.2,17.6,24.6,17.6,41.5s-6.1,31.2-17.6,41.4C93.4,113.6,79,118.8,63.6,118.8z"/>
|
||||
<linearGradient id="face_2_" gradientUnits="userSpaceOnUse" x1="63.6" y1="-7075.3608" x2="63.6" y2="-6963.5605" gradientTransform="matrix(1 0 0 -1 0 -6956.5605)">
|
||||
<stop offset="0.1579" style="stop-color:#F4A223"/>
|
||||
<stop offset="0.333" style="stop-color:#F7C02B"/>
|
||||
<stop offset="0.8071" style="stop-color:#FDE030;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path id="face_65_" style="fill:url(#face_2_);" d="M63.6,118.8c-27.9,0-58-17.5-58-55.9S35.7,7,63.6,7c15.5,0,29.8,5.1,40.4,14.4
|
||||
c11.5,10.2,17.6,24.6,17.6,41.5s-6.1,31.2-17.6,41.4C93.4,113.6,79,118.8,63.6,118.8z"/>
|
||||
<path style="fill:#EB8F00;" d="M111.49,29.67c5.33,8.6,8.11,18.84,8.11,30.23c0,16.9-6.1,31.2-17.6,41.4
|
||||
c-10.6,9.3-25,14.5-40.4,14.5c-18.06,0-37.04-7.35-48.18-22.94c10.76,17.66,30.99,25.94,50.18,25.94c15.4,0,29.8-5.2,40.4-14.5
|
||||
c11.5-10.2,17.6-24.5,17.6-41.4C121.6,50.16,118.13,38.84,111.49,29.67z"/>
|
||||
<g>
|
||||
<path style="fill:#422B0D;" d="M44.04,40.94L44.04,40.94c-4.19,0-8,3.54-8,9.42s3.81,9.42,8,9.42l0,0c4.19,0,8-3.54,8-9.42
|
||||
S48.24,40.94,44.04,40.94z"/>
|
||||
<g>
|
||||
<g id="peepers_146_">
|
||||
<path style="fill:#896024;" d="M43.65,44.87L43.65,44.87c-1.03-0.72-2.58-0.49-3.58,0.95c-1,1.45-0.67,2.97,0.36,3.69l0,0
|
||||
c1.03,0.72,2.58,0.49,3.58-0.95S44.69,45.59,43.65,44.87z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M82.4,40.94L82.4,40.94c-4.19,0-8,3.54-8,9.42s3.81,9.42,8,9.42l0,0c4.19,0,8-3.54,8-9.42
|
||||
S86.59,40.94,82.4,40.94z"/>
|
||||
<g>
|
||||
<g id="peepers_145_">
|
||||
<path style="fill:#896024;" d="M82.01,44.87L82.01,44.87c-1.03-0.72-2.58-0.49-3.58,0.95c-1,1.45-0.67,2.97,0.36,3.69l0,0
|
||||
c1.03,0.72,2.58,0.49,3.58-0.95C83.38,47.11,83.04,45.59,82.01,44.87z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="palm">
|
||||
|
||||
<radialGradient id="prop-2_1_" cx="64.5261" cy="-4876.936" r="65.3306" gradientTransform="matrix(1 0 0 -1 0 -4800.5605)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.27" style="stop-color:#FFF176"/>
|
||||
<stop offset="1" style="stop-color:#FFC400"/>
|
||||
</radialGradient>
|
||||
<path id="prop-2" style="fill:url(#prop-2_1_);" d="M96.32,81.86c-2.22-3.18-8,0.07-8,0.07s3-2.61,5.5-5c1.6-1.53,3-4.79,1.69-7
|
||||
s-5.12-2.07-6.99-0.92l-7.33,4.5c0,0,2.75-1.2,3.58-5.92c0.52-1.91-0.6-3.88-2.51-4.4c-0.36-0.1-0.73-0.14-1.1-0.12
|
||||
c-1.73,0.15-3.38,0.79-4.77,1.84c-5.3,3.76-19.45,13.35-22.62,13.1c-1.23-0.1,0.35-3.89,2.63-6.07s4.85-7.2,3.4-10.65
|
||||
c-0.85-2-4.26-3.44-5.49-1.51c-0.93,1.42-4.51,6.02-8.07,9.48c-3.56,3.47-9.42,11.22-9.93,11.98c-3.73,5.52-10.25,18.06-2.97,29.6
|
||||
c6.44,10.22,21.14,10.7,28.67,8c14.39-5.1,27.64-14.9,27.89-15.1c2.62-2.08,5-5.13,3.92-7.91c-1.33-3.44-5.74-1.4-5.74-1.4
|
||||
c2.55-1.55,4.84-3.5,6.77-5.78C96.68,86.29,97.81,84.01,96.32,81.86z"/>
|
||||
<path style="fill:#EB8F00;" d="M96.03,89.56c1.18-1.52,3.94-5.07,1.52-8.56c-0.87-1.23-2.08-2-3.49-2.24
|
||||
c2.37-1.97,4.91-6.57,2.2-10.35c-1.01-1.41-2.94-2.51-6.01-1.8c-2.21,0.51-4.19,2.14-4.19,2.14c0.07-0.27,1.81-5.18-4.2-6.4
|
||||
c-2.42-0.49-5.17,1.11-6.75,2.3c-9.13,6.48-20.13,12.4-19.73,11.55c1.42-2.82,3.82-4.78,5.12-7.35c1.43-2.84,1.23-5.01,0.84-6.87
|
||||
c-0.64-3-3.35-4.94-6.09-4.09c-2.41,0.75-3.17,3.83-7.49,8.5c-7,7.56-17.46,13.63-17.46,29.57c0,0,1.71-9.25,6.01-14.74
|
||||
c4.05-5.16,9.97-10.13,13.65-14.19c3.5-3.85,3.51-5.16,4.67-6.14c2.02-1.7,5.12-0.51,4.81,3.19c-0.36,4.45-2.23,5.95-4.26,8.49
|
||||
c-1.25,1.57-2.58,3.42-3.14,4.74c-0.36,0.84,0.33,1.74,1.24,1.62c6.13-0.81,20.37-10.55,24-12.84c1.16-0.88,2.54-1.41,3.93-1.54
|
||||
c2.74-0.39,2.6,3.45,2.6,3.45c-0.77,3.15-1.26,3.15-4.4,5.79c-2.23,1.87-10.12,7.61-15.24,10.19c0,0,0.09,1.17,2.46,0.5
|
||||
s11.71-6.54,16.74-10.57c0,0,6.52-5.57,9.3-4.79c2.82,0.8,2.57,2.76,1.68,4.62c-0.88,1.86-3.19,4.1-6.85,6.89
|
||||
c-6.58,5-16.77,11.82-16.77,11.82s0.21,1,2.19,0.43c4.03-1.17,16.61-10.49,16.61-10.49c0.98-0.76,4.26-1.81,5.54,0.34
|
||||
c0.69,1.01,0.53,2.66-1.89,5.52c-2.88,3.43-11.67,9.41-19.31,13.75c0,0,0.58,0.98,2.69,0.26s10.83-6.03,12.21-6.49
|
||||
c1.38-0.46,2.76-0.9,3.68,0.73c1.09,2.25-0.37,4.03-3.26,6.33c-0.12,0.09-13.88,10.85-28.19,15.69c-7.56,2.56-16.01,1.24-25.7-5.09
|
||||
c5.88,7.1,18.72,10.27,27.43,7.09c14.65-5.36,28.21-15.25,28.32-15.34c2.1-1.67,6.47-5.13,4.06-10.08
|
||||
c-0.63-1.11-1.47-1.8-2.39-2.19C93.91,91.89,95.01,90.77,96.03,89.56z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
108
Linphone/data/emoji/emojiSvgs/1fae3.svg
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<g id="smiling-eyes-smiling-face_10_">
|
||||
<path id="mouth_9_" style="display:none;fill:#35220B;" d="M-213.36,98.75c12.29,0,23.26-7.11,30.51-18.26
|
||||
c1.1-1.7-1.23-4.29-3.23-2.29c-7.12,7.12-16.57,11.03-27.28,11.03h-0.21c-10.7,0-20.16-3.9-27.28-11.03c-2-2-4.33,0.59-3.23,2.29
|
||||
c7.24,11.15,18.22,18.26,30.51,18.26H-213.36z"/>
|
||||
</g>
|
||||
<radialGradient id="face_1_" cx="63" cy="-2091.1001" r="56.9597" gradientTransform="matrix(1 0 0 -1 0 -2028)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.92" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face_10_" style="fill:url(#face_1_);" d="M63,119c-27.9,0-58-17.5-58-55.9S35.1,7.2,63,7.2c15.5,0,29.8,5.1,40.4,14.4
|
||||
C114.9,31.8,121,46.2,121,63.1s-6.1,31.2-17.6,41.4C92.8,113.8,78.4,119,63,119z"/>
|
||||
<linearGradient id="face-2_1_" gradientUnits="userSpaceOnUse" x1="63" y1="1457" x2="63" y2="1345.2" gradientTransform="matrix(1 0 0 1 0 -1338)">
|
||||
<stop offset="0" style="stop-color:#F4A223"/>
|
||||
<stop offset="0.3812" style="stop-color:#F7C02B"/>
|
||||
<stop offset="0.7478" style="stop-color:#FDE030;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path id="face-2_2_" style="fill:url(#face-2_1_);" d="M63,119c-27.9,0-58-17.5-58-55.9S35.1,7.2,63,7.2c15.5,0,29.8,5.1,40.4,14.4
|
||||
C114.9,31.8,121,46.2,121,63.1s-6.1,31.2-17.6,41.4C92.8,113.8,78.4,119,63,119z"/>
|
||||
<path style="fill:#EB8F00;" d="M110.89,29.87c5.33,8.6,8.11,18.84,8.11,30.23c0,16.9-6.1,31.2-17.6,41.4C90.8,110.8,76.4,116,61,116
|
||||
c-18.06,0-37.04-7.35-48.18-22.94C23.58,110.72,43.81,119,63,119c15.4,0,29.8-5.2,40.4-14.5C114.9,94.3,121,80,121,63.1
|
||||
C121,50.36,117.53,39.04,110.89,29.87z"/>
|
||||
<radialGradient id="SVGID_1_" cx="35.5447" cy="72.5759" r="19.4444" gradientTransform="matrix(0.9791 0 0 0.9301 -3.7557 10.8462)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" style="stop-color:#ED7770"/>
|
||||
<stop offset="0.9" style="stop-color:#ED7770;stop-opacity:0"/>
|
||||
</radialGradient>
|
||||
<circle style="opacity:0.8;fill:url(#SVGID_1_);" cx="31.05" cy="78.35" r="17.5"/>
|
||||
<radialGradient id="SVGID_2_" cx="101.6369" cy="72.5759" r="19.4444" gradientTransform="matrix(0.9791 0 0 0.9301 -3.7557 10.8462)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" style="stop-color:#ED7770"/>
|
||||
<stop offset="0.9" style="stop-color:#ED7770;stop-opacity:0"/>
|
||||
</radialGradient>
|
||||
<circle style="opacity:0.8;fill:url(#SVGID_2_);" cx="95.75" cy="78.35" r="17.5"/>
|
||||
<g>
|
||||
<g>
|
||||
<circle style="fill:#FFFFFF;" cx="82.04" cy="58.16" r="18.53"/>
|
||||
<circle style="fill:#422B0D;" cx="81.88" cy="58.16" r="8.04"/>
|
||||
</g>
|
||||
<g id="peepers_1_">
|
||||
<path style="fill:#896024;" d="M81.1,52.69L81.1,52.69c-1.07-0.56-2.59-0.02-3.49,1.7c-0.9,1.72-0.46,3.27,0.61,3.83l0,0
|
||||
c1.07,0.56,2.59,0.02,3.49-1.7C82.61,54.8,82.17,53.25,81.1,52.69z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M70,92.41c-0.56,0-1.12,0.12-1.66,0.36c-5.96,2.72-11.34,0.17-11.56,0.06
|
||||
c-1.98-0.96-4.37-0.16-5.35,1.81c-0.98,1.97-0.2,4.35,1.76,5.34c0.36,0.18,8.92,4.42,18.47,0.07c2.01-0.92,2.9-3.29,1.98-5.3
|
||||
C72.97,93.28,71.52,92.41,70,92.41z"/>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="48.1545" y1="75.9095" x2="0.5267" y2="123.9094" gradientTransform="matrix(-0.5681 -0.823 -0.823 0.5681 181.4017 36.6179)">
|
||||
<stop offset="0" style="stop-color:#FFF176"/>
|
||||
<stop offset="1" style="stop-color:#FFC400"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#SVGID_3_);" d="M76.68,97.9c-1.46-1.9-4.02-6.07-8.8-12.22c-3.34-4.29-15.77-12.94-19.08-17.47
|
||||
c-1.71-2.34-3.15-4.69-2.23-6.42c3.06-5.77,6.93-0.85,6.93-0.85s-8.84-4.91-3.11-10.09c2.51-2.26,4.94-1.99,10.12,1.87
|
||||
c0,0,22.27,15.35,24.14,14.07c1.86-1.29-4.14-25.54-4.44-33.36c-0.16-4.22-0.34-7.65,3.56-8.7c5.68-1.54,6.35,6.44,6.24,5.29
|
||||
s1.53-4.16,5.61-4.96c3.16-0.63,4.72,3.41,5.74,9.46c1.02,6.05,6.61,28.07,9.29,29.92c0,0,0.94-11.93,6.74-16.18
|
||||
c2.63-1.93,7.22-2.7,7.79,0.56c0.33,1.92,0.33,5.24-1.19,10.15c-1.31,4.21-1.22,14.66-0.76,22.35
|
||||
c0.39,6.49,1.99,16.95-12.5,24.92C94.83,114.97,83.09,106.19,76.68,97.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#EB8F00;" d="M79.53,33.75c-0.35-3.34-0.51-6.02,1.84-8.25c2.59-2.47,5.47-2.42,6.92-0.95
|
||||
c0.61,0.62,1.23,1.59,1.84,3.05c0.94-2.41,2.69-3.48,5.16-3.84c2.87-0.42,5.29,1.68,6.33,6.21c0.62,2.69,7.14,28.2,8.41,29.62
|
||||
c0,0,0.02-9.3,8.64-13.4c2.36-1.12,5.12-1.02,7.22,1.22s-0.48,6.31-2.16,16.97c-0.91,5.78-0.65,12.64-0.65,12.64
|
||||
s-2.74-3.68-1.4-16.56c0.5-4.83,3.87-9.86,1.44-11.66c-1.57-1.16-3.16-1.39-6.13,1.35c-6.11,5.64-4.6,14.79-4.94,15.93
|
||||
c-0.34,1.14-1.49,1.8-3.53-3.61c-2.03-5.4-7.29-25.43-8.91-31.6c-1.31-4.98-3.14-5.39-5.42-4.18c-2.84,1.5-2,6.24-1.59,7.79
|
||||
c0.34,1.28,3.6,18.82,5.39,24.87c0.38,1.28,1.37,3.26,1.24,4.17c-0.15,1-3.58,2.94-4.2-2.23c-0.68-5.67-4.96-26.41-4.96-26.41
|
||||
s-0.67-4.28-1.9-6.97c-0.56-1.23-2.28-2.65-5.12-0.41c-2.43,1.92-1.09,7.71-1.09,7.71l4.62,28.09c0,0,0.73,3.29-0.65,4.56
|
||||
c-1.6,1.48-4.39-0.65-4.39-0.65s-19.29-12.73-22.3-14.37c-3-1.64-4.85-3.55-7.69-1.72c-0.82,0.53-2.46,2.84,0.29,5.21
|
||||
c2.75,2.37,11.91,9.7,22.66,16.79c0.62,0.42,5.21,1.67,3.3,4.76c-1.9,3.09-5.06-1.58-5.62-2.01C65.03,70.3,56.9,63.91,52.14,61.32
|
||||
c-3.58-1.95-5.73,2.12-2.35,5.87c2.21,2.46,5.63,5.66,9.6,9.01c3.88,3.27,7.09,6.55,8.77,8.75c4.11,5.36,5.9,8.38,8.69,12.3
|
||||
c11.9,14.34,24.49,13.81,38.02,6.33c-1.76,2.01-25.49,19.29-42.38-7.45c-1.53-2.28-3.63-5.4-6.68-9.39
|
||||
c-1.49-1.95-4.78-4.95-8.33-8.29S43.56,66.27,45.27,61.46c1.17-3.28,4.1-3.44,4.1-3.44s-4.38-5.13,1.29-9.15
|
||||
c3.08-2.18,7.76,1.14,7.76,1.14l22.1,14.21c0,0,0.95,0.71,2.14,1.31c1.59,0.79,1.48-1.54,1.39-2.1
|
||||
C83.17,57.94,79.81,36.46,79.53,33.75z"/>
|
||||
</g>
|
||||
<g>
|
||||
|
||||
<radialGradient id="prop-2_1_" cx="58.7255" cy="87.6971" r="71.7862" gradientTransform="matrix(0.7789 -0.6272 -0.6272 -0.7789 35.3961 162.4946)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.27" style="stop-color:#FFF176"/>
|
||||
<stop offset="1" style="stop-color:#FFC400"/>
|
||||
</radialGradient>
|
||||
<path id="prop-2" style="fill:url(#prop-2_1_);" d="M56.81,39.61c-4.11-1.2-6.83,5.6-6.83,5.6s0.77-4.32,1.27-8.1
|
||||
c0.32-2.42-0.74-6.19-3.39-7.19c-2.66-0.99-5.83,1.76-6.64,4.05l-3.19,8.94c0,0,1.53-2.93-1.02-7.57c-0.87-2-3.2-2.91-5.2-2.04
|
||||
c-0.38,0.16-0.72,0.38-1.03,0.66c-1.38,1.33-2.36,3.02-2.83,4.88c-1.95,6.9-7.48,24.93-10.37,26.91c-1.13,0.77-1.35,0.68-2.96-5.88
|
||||
c-0.81-4.06-3.38-7.54-7.03-9.5c-2.11-1.13-5.86,1.11-5.59,3.62c0.18,1.86,2.02,5.32,3.05,9.45c1.64,6.82,1.6,17.8,1.68,18.8
|
||||
c0.61,7.33,1.76,20.98,16,25.86c12.61,4.33,25.57-5.43,30.18-12.97C61.75,80.8,66.36,63.2,66.43,62.86
|
||||
c0.81-3.6,0.75-7.87-2.11-9.51c-3.52-2.04-5.9,2.77-5.9,2.77c1.12-3.1,1.74-6.36,1.82-9.65C60.18,43.17,59.58,40.43,56.81,39.61z"
|
||||
/>
|
||||
<path style="fill:#EB8F00;" d="M61.9,46.43c-0.04-2.12-0.13-7.08-4.62-8.41c-1.6-0.45-3.17-0.28-4.55,0.5
|
||||
c0.67-3.33-0.32-9.04-5.27-10.41c-1.84-0.51-4.27-0.12-6.41,2.61c-1.55,1.97-2.12,4.74-2.12,4.74c-0.13-0.28-2.03-5.71-8.04-2.59
|
||||
c-2.42,1.26-3.68,4.53-4.2,6.65C23.32,51.4,17.4,64.9,17.15,63.89c0.08-6.68-4.04-13.16-8.91-15.04c-2.11-1.13-7.53,1.13-7.07,4.65
|
||||
c0.38,2.89,3.32,8.13,4.08,13.58c0.59,4.21,0.7,20.26,3.2,26.23c0,0-0.38-4.36-0.6-10.77c-0.24-6.83-0.36-15.83-1.2-19.5
|
||||
c-0.73-3.28-2.45-6.53-3.01-9.23c-0.16-1.18,1.17-3.51,4.41-2.07c3.24,1.44,5.03,4.91,5.97,9.62c1.29,5.25,0.61,6.05,2.1,6.23
|
||||
c4.99,0.61,11.71-23.34,13.43-28.35c0.39-1.56,1.21-2.98,2.31-4.04c2.09-2.23,4.62,1.16,4.62,1.16c1.52,3.24,1.1,3.58,0.23,8.02
|
||||
c-0.62,3.16-3.43,13.55-6.05,19.3c0,0,0.88,0.94,2.46-1.28c1.58-2.22,5.53-13.73,7.07-20.67c0,0,1.75-9.3,4.68-10.55
|
||||
c2.98-1.27,4.11,0.59,4.64,2.8s0.1,5.73-1.12,10.66c-2.19,8.85-6.23,21.76-6.23,21.76s0.87,0.72,2.18-1.14
|
||||
c2.65-3.79,7.01-20.51,7.01-20.51c0.31-1.33,2.41-4.5,5-3.55c1.29,0.39,2.3,1.93,2.2,6.05c-0.1,4.94-3.51,16.16-7.08,25.18
|
||||
c0,0,1.18,0.44,2.49-1.64s5.13-12.67,6-14.03c0.87-1.36,1.75-2.68,3.66-1.92c2.5,1.18,2.47,3.72,1.57,7.7
|
||||
c-0.04,0.17-4.43,18.93-13.37,32.99c-4.72,7.43-12.9,12.15-25.6,13.41c9.97,2.03,23.2-4.13,28.47-12.89
|
||||
c8.88-14.74,13.69-32.62,13.72-32.78c0.65-2.88,2-8.89-3.48-11.47c-1.31-0.52-2.51-0.53-3.57-0.23
|
||||
C61.68,49.9,61.86,48.18,61.9,46.43z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
34
Linphone/data/emoji/emojiSvgs/1fae4.svg
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Raised-Hand" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<radialGradient id="face_1_" cx="63.6" cy="-7019.0771" r="56.9597" gradientTransform="matrix(1 0 0 -1 0 -6956.1772)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face_73_" style="fill:url(#face_1_);" d="M63.6,118.8c-27.9,0-58-17.5-58-55.9S35.7,7,63.6,7c15.5,0,29.8,5.1,40.4,14.4
|
||||
c11.5,10.2,17.6,24.6,17.6,41.5s-6.1,31.2-17.6,41.4C93.4,113.6,79,118.8,63.6,118.8z"/>
|
||||
<path style="fill:#EB8F00;" d="M111.49,29.67c5.33,8.6,8.11,18.84,8.11,30.23c0,16.9-6.1,31.2-17.6,41.4
|
||||
c-10.6,9.3-25,14.5-40.4,14.5c-18.06,0-37.04-7.35-48.18-22.94c10.76,17.66,30.99,25.94,50.18,25.94c15.4,0,29.8-5.2,40.4-14.5
|
||||
c11.5-10.2,17.6-24.5,17.6-41.4C121.6,50.16,118.13,38.84,111.49,29.67z"/>
|
||||
<path style="fill:#422B0D;" d="M44.67,45.94L44.67,45.94c-4.19,0-8,3.54-8,9.42s3.81,9.42,8,9.42l0,0c4.19,0,8-3.54,8-9.42
|
||||
S48.86,45.94,44.67,45.94z"/>
|
||||
<g>
|
||||
<g id="peepers_57_">
|
||||
<path style="fill:#896024;" d="M44.28,49.87L44.28,49.87c-1.03-0.72-2.58-0.49-3.58,0.95c-1,1.45-0.67,2.97,0.36,3.69l0,0
|
||||
c1.03,0.72,2.58,0.49,3.58-0.95C45.64,52.11,45.31,50.59,44.28,49.87z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M83.02,45.94L83.02,45.94c-4.19,0-8,3.54-8,9.42s3.81,9.42,8,9.42l0,0c4.19,0,8-3.54,8-9.42
|
||||
S87.21,45.94,83.02,45.94z"/>
|
||||
<g>
|
||||
<g id="peepers_56_">
|
||||
<path style="fill:#896024;" d="M82.63,49.87L82.63,49.87c-1.03-0.72-2.58-0.49-3.58,0.95c-1,1.45-0.67,2.97,0.36,3.69l0,0
|
||||
c1.03,0.72,2.58,0.49,3.58-0.95C84,52.11,83.67,50.59,82.63,49.87z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M89.3,79.3c-2.83,1.7-9.46,4.7-21.51,9.86c-0.02,0.01-0.04,0.02-0.05,0.02
|
||||
c-0.02,0.01-0.04,0.01-0.06,0.02c-12.06,5.16-18.8,7.88-21.99,8.75c-1.94,0.53-3.6-1.45-1.93-3.98c3.09-4.67,38.48-19.8,43.99-18.81
|
||||
C90.75,75.7,91.03,78.27,89.3,79.3z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
46
Linphone/data/emoji/emojiSvgs/1fae5.svg
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Raised-Hand" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<g>
|
||||
<g id="neutral-face_00000080885983375266818540000014933881844342678202_">
|
||||
<path id="mouth_00000064329789738385436900000009578621846817519233_" style="fill:#823E00;" d="M79,88H49c-2.21,0-4-1.79-4-4
|
||||
s1.79-4,4-4h30c2.21,0,4,1.79,4,4S81.21,88,79,88z"/>
|
||||
</g>
|
||||
<path style="fill:#AF6300;" d="M44.67,45.94L44.67,45.94c-4.19,0-8,3.54-8,9.42s3.81,9.42,8,9.42l0,0c4.19,0,8-3.54,8-9.42
|
||||
S48.86,45.94,44.67,45.94z"/>
|
||||
<path style="fill:#AF6300;" d="M83.02,45.94L83.02,45.94c-4.19,0-8,3.54-8,9.42s3.81,9.42,8,9.42l0,0c4.19,0,8-3.54,8-9.42
|
||||
S87.21,45.94,83.02,45.94z"/>
|
||||
</g>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="63.7232" y1="118.8388" x2="63.7232" y2="6.9618">
|
||||
<stop offset="0.015" style="stop-color:#EB8F00"/>
|
||||
<stop offset="1" style="stop-color:#FFD54F"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#SVGID_1_);" d="M63.77,118.84H63.6c-3.99,0-8.01-0.36-11.93-1.07l0.54-2.95c3.75,0.68,7.58,1.03,11.4,1.03
|
||||
h0.17V118.84z M75.71,117.74l-0.55-2.95c3.78-0.7,7.48-1.76,10.98-3.14l1.1,2.79C83.56,115.89,79.68,117,75.71,117.74z
|
||||
M40.12,114.54c-3.81-1.47-7.41-3.29-10.72-5.43l1.63-2.52c3.13,2.03,6.55,3.76,10.17,5.15L40.12,114.54z M97.91,108.92l-1.65-2.51
|
||||
c2-1.32,3.92-2.77,5.69-4.33c1.05-0.93,2.08-1.92,3.04-2.94l2.18,2.07c-1.02,1.08-2.11,2.13-3.23,3.12
|
||||
C102.06,105.99,100.03,107.53,97.91,108.92z M20.09,101.47c-2.8-2.91-5.24-6.15-7.25-9.63l2.6-1.5c1.89,3.27,4.18,6.32,6.81,9.05
|
||||
L20.09,101.47z M114.37,91.56l-2.6-1.49c1.86-3.24,3.37-6.75,4.47-10.44l2.88,0.86C117.95,84.39,116.35,88.12,114.37,91.56z
|
||||
M8.1,80.77c-1.11-3.72-1.86-7.69-2.22-11.79l2.99-0.26c0.35,3.9,1.05,7.67,2.11,11.2L8.1,80.77z M121.34,68.68l-2.99-0.26
|
||||
c0.16-1.8,0.24-3.66,0.24-5.52c0-2-0.09-3.99-0.27-5.92l2.99-0.28c0.19,2.02,0.28,4.11,0.28,6.2
|
||||
C121.58,64.85,121.5,66.79,121.34,68.68z M8.85,57.27l-2.99-0.26c0.35-4.1,1.08-8.07,2.18-11.8l2.88,0.85
|
||||
C9.88,49.6,9.19,53.37,8.85,57.27z M116.13,45.79c-1.12-3.68-2.65-7.18-4.53-10.41l2.59-1.51c2,3.43,3.61,7.15,4.8,11.04
|
||||
L116.13,45.79z M15.35,35.62l-2.6-1.49c1.99-3.49,4.42-6.74,7.21-9.66l2.17,2.07C19.51,29.29,17.23,32.35,15.35,35.62z
|
||||
M104.78,26.32c-0.89-0.93-1.85-1.85-2.83-2.72c-1.85-1.62-3.85-3.13-5.95-4.49l1.63-2.52c2.22,1.44,4.34,3.04,6.3,4.76
|
||||
c1.05,0.93,2.06,1.9,3.01,2.89L104.78,26.32z M30.87,19.31l-1.64-2.51c3.29-2.15,6.89-3.99,10.7-5.47l1.09,2.8
|
||||
C37.41,15.53,33.99,17.27,30.87,19.31z M85.84,13.96c-3.5-1.34-7.21-2.36-11.01-3.03l0.52-2.96c3.99,0.7,7.88,1.78,11.57,3.19
|
||||
L85.84,13.96z M52.02,11.02l-0.54-2.95c3.92-0.72,7.93-1.1,11.93-1.11l0.01,3C59.6,9.97,55.77,10.33,52.02,11.02z"/>
|
||||
<g>
|
||||
<g id="peepers_00000000943899703814137150000008559515959999254185_">
|
||||
<path style="opacity:0.4;fill:#FFFFFF;" d="M44.28,49.87L44.28,49.87c-1.03-0.72-2.58-0.49-3.58,0.95c-1,1.45-0.67,2.97,0.36,3.69
|
||||
l0,0c1.03,0.72,2.58,0.49,3.58-0.95C45.64,52.11,45.31,50.59,44.28,49.87z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g id="peepers_00000032608173352806590750000000877398772088101567_">
|
||||
<path style="opacity:0.4;fill:#FFFFFF;" d="M82.63,49.87L82.63,49.87c-1.03-0.72-2.58-0.49-3.58,0.95c-1,1.45-0.67,2.97,0.36,3.69
|
||||
l0,0c1.03,0.72,2.58,0.49,3.58-0.95C84,52.11,83.67,50.59,82.63,49.87z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
23
Linphone/data/emoji/emojiSvgs/1fae6.svg
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<g>
|
||||
<path style="fill:#EF4D8F;" d="M81.86,35.45c-9.09-1.02-14.68,2.81-16.34,3.73c-0.56,0.31-0.96,0.49-1.31,0.58
|
||||
c-0.34-0.09-0.75-0.27-1.31-0.58c-1.66-0.92-7.28-4.97-16.34-3.73C28.75,37.89,12.02,56.1,4.89,67.2
|
||||
c-1.66,2.59-0.92,6.04,1.66,7.72c3.19,2.07,9.82,3.33,15.71,5.22c17.92,5.75,48.15,24.1,68.89,19.54
|
||||
c23.71-5.21,27.54-22.7,30.72-24.76c0,0,3.33-5.12,1.66-7.72C116.41,56.1,101.27,37.62,81.86,35.45z"/>
|
||||
<path style="fill:#C51162;" d="M73.46,74.29c-3.12-0.67-15.69-1.37-31.05,0.09c-6.59,0.63-14.4,0.38-16.02-1.73
|
||||
c-1.62-2.11,0.14-3.49,6.74-4.85C53.44,63.62,72.92,74.18,73.46,74.29z"/>
|
||||
<path style="fill:#3E2723;" d="M40.93,65.04c-11.02,4.88-26.38,5.21-26.04,3.8c0.28-1.16,7.38-1.39,15.22-4.86
|
||||
c8.77-3.89,19.74-8.75,34.01-8.75c14.61,0,26.25,5.87,35.07,9.81c4.2,1.88,8.44,3.11,11.36,3.83c1.25,0.31,1.44,2,0.3,2.59
|
||||
l-14.09,7.22c0,0-7.41,3.26-13.88,0S47.85,61.98,40.93,65.04z"/>
|
||||
<path style="fill:#BDBDBD;" d="M101.27,65.93c0,0-0.01-0.01-0.01-0.01c-0.69-0.28-1.39-0.56-2.08-0.87
|
||||
c-8.82-3.94-20.46-9.81-35.07-9.81c-14.27,0-25.24,4.86-34.01,8.75c-0.46,0.2-0.9,0.4-1.35,0.6l0,0c0,0,2.29,8.21,35.99,8.21
|
||||
S101.27,65.93,101.27,65.93z"/>
|
||||
<path style="fill:#FFFFFF;" d="M101.27,65.93c0,0-0.01-0.01-0.01-0.01c-0.69-0.28-22.54-7.11-37.15-7.11
|
||||
c-14.27,0-34.91,5.57-35.36,5.77l0,0c0,0,2.29,8.21,35.99,8.21S101.27,65.93,101.27,65.93z"/>
|
||||
<path style="fill:#FF80AB;" d="M79.85,83.27c2.51,0.88,6.65,2.03,10.29,2.18c1.35,0.06,4.51-0.16,4.37,1.88
|
||||
c-0.22,3.09-10.81,7.1-19.25,4.48c-8.57-2.66-14.4-9.04-11.26-10.36C67.11,80.14,74.22,81.29,79.85,83.27z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
84
Linphone/data/emoji/emojiSvgs/1fae8.svg
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<radialGradient id="face_00000183927110871212819990000014011780520149750707_" cx="193.5273" cy="-2704.4158" r="49.6592" gradientTransform="matrix(0.8455 -0.5339 -0.5339 -0.8455 -1541.9877 -2121.0471)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.9188" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face_00000063628597563178067820000001178035299985375403_" style="fill:url(#face_00000183927110871212819990000014011780520149750707_);" d="
|
||||
M91.56,103.55c-20.57,12.99-50.9,14.1-68.78-14.21s-3.83-55.22,16.74-68.21C50.94,13.92,63.86,11.02,76,12.94
|
||||
c13.23,2.17,24.42,9.94,32.29,22.4s10.03,25.84,6.3,38.71C111.1,85.85,102.91,96.38,91.56,103.55z"/>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="face_00000177468677908721967140000015650757606444898459_" d="M91.56,103.55c-20.57,12.99-50.9,14.1-68.78-14.21
|
||||
s-3.83-55.22,16.74-68.21C50.94,13.92,63.86,11.02,76,12.94c13.23,2.17,24.42,9.94,32.29,22.4s10.03,25.84,6.3,38.71
|
||||
C111.1,85.85,102.91,96.38,91.56,103.55z"/>
|
||||
</defs>
|
||||
<clipPath id="face_00000134210471610893173210000013670477117985087906_">
|
||||
<use xlink:href="#face_00000177468677908721967140000015650757606444898459_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
</g>
|
||||
<path id="face_00000151525897067003441860000000483302440425602690_" style="fill:#EEBA4B;" d="M60.08,118.82
|
||||
c-0.06,0.51-0.51,0.89-1.02,0.85c-5.9-0.47-11.81-1.9-17.26-4.46c-5.78-2.61-10.96-6.45-15.48-10.86
|
||||
c-4.5-4.47-8.21-9.61-11.32-15.07c-3.03-5.51-5.38-11.49-6.61-17.73C7.2,65.32,6.93,58.85,8.1,52.61c0.44-2.73,1.16-5.4,2.04-8
|
||||
c0.21-0.62,0.89-0.96,1.51-0.76h0c0.62,0.2,0.97,0.86,0.79,1.49c-0.71,2.51-1.32,5.05-1.62,7.65c-0.85,5.94-0.51,12.02,0.77,17.87
|
||||
c1.27,5.86,3.5,11.5,6.45,16.72c5.77,10.48,14.25,19.71,24.99,25.16c5.06,2.6,10.59,4.25,16.22,5.03
|
||||
C59.78,117.84,60.15,118.31,60.08,118.82L60.08,118.82z"/>
|
||||
<path id="face_00000086667315457375879230000001308986425907973016_" style="fill:#EEBA4B;" d="M3.9,69.68
|
||||
c0.52,0.05,0.93,0.43,1.02,0.94c0.39,2.1,0.9,4.17,1.52,6.21c2.24,7.46,5.88,14.44,10.33,20.81c4.19,5.98,9.22,11.42,15.11,15.75
|
||||
c0.63,0.46,0.78,1.32,0.34,1.96l0,0c-0.43,0.63-1.29,0.82-1.94,0.4c-3.05-1.96-5.84-4.32-8.48-6.81c-2.92-2.86-5.53-6.01-7.91-9.3
|
||||
c-2.25-3.37-4.35-6.85-6.07-10.54c-1.67-3.7-3.13-7.52-4.03-11.5c-0.54-2.19-0.93-4.43-1.17-6.67C2.57,70.22,3.18,69.61,3.9,69.68
|
||||
L3.9,69.68z"/>
|
||||
<path id="face_00000003096618102886432540000018273636649996048533_" style="fill:#EEBA4B;" d="M121.73,63.28
|
||||
c-0.74,0.01-1.35-0.57-1.41-1.31c-0.42-5.32-1.55-10.56-3.48-15.53c-1.98-5.42-4.86-10.54-8.19-15.29
|
||||
c-3.28-4.79-7.18-9.12-11.66-12.71c-4.1-3.36-8.71-6.09-13.66-8.05c-0.69-0.27-1.06-1.03-0.83-1.74v0c0.24-0.74,1.05-1.16,1.79-0.9
|
||||
c11.1,3.88,20.59,11.76,27.24,21.39c3.45,5.02,6.43,10.41,8.44,16.18c1.88,5.3,3,10.88,3.19,16.5
|
||||
C123.16,62.62,122.52,63.28,121.73,63.28L121.73,63.28z"/>
|
||||
<path id="face_00000070798384020294411340000014144441823226825863_" style="fill:#EEBA4B;" d="M97.68,7.3
|
||||
c0.15-0.66,0.9-0.99,1.48-0.64c2.94,1.82,5.72,3.9,8.29,6.22c5.86,5.23,10.69,11.53,14.61,18.32c1.63,2.93,3.08,5.97,4.31,9.1
|
||||
c0.34,0.87-0.12,1.85-0.99,2.17l0,0c-0.84,0.31-1.77-0.11-2.11-0.94c-1.23-2.95-2.64-5.82-4.25-8.6c-1.83-3.28-3.88-6.43-6.12-9.44
|
||||
c-2.19-3.05-4.68-5.85-7.28-8.56c-2.34-2.39-4.87-4.59-7.57-6.63C97.75,8.06,97.6,7.68,97.68,7.3L97.68,7.3z"/>
|
||||
<g>
|
||||
<path style="fill:#EB8F00;" d="M85.37,15.55c7.93,3.86,14.75,10.12,20.05,18.51c7.87,12.46,10.03,25.84,6.3,38.71
|
||||
c-3.49,11.79-11.68,22.33-23.03,29.49c-13.32,8.41-30.72,11.82-46.19,5.52c16.15,8.01,34.92,4.7,49.06-4.24
|
||||
c11.35-7.17,19.55-17.7,23.03-29.49c3.73-12.87,1.57-26.25-6.3-38.71C102.36,25.95,94.53,19.22,85.37,15.55z"/>
|
||||
<g>
|
||||
<g>
|
||||
<g id="big-eyes-grinning-face_00000033336518990135324380000003319762986285226685_">
|
||||
<g id="eyes_00000155132990368273455040000016720763808801284782_">
|
||||
<path style="fill:#422B0D;" d="M65.92,34.68L65.92,34.68c2.55-1.61,7.25,0.71,11.2,6.98s4.03,11.51,1.48,13.12l0,0
|
||||
c-2.55,1.61-7.25-0.71-11.2-6.98S63.37,36.28,65.92,34.68z"/>
|
||||
<path style="fill:#422B0D;" d="M40.88,50.48L40.88,50.48c-2.72,1.72-2.8,7.05,1.16,13.32s8.81,8.49,11.53,6.77l0,0
|
||||
c2.72-1.72,2.8-7.05-1.16-13.32S43.6,48.77,40.88,50.48z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="peepers_00000017516456057931630050000008656183960350421163_">
|
||||
<path style="fill:#896024;" d="M42.28,53.04L42.28,53.04c-0.99-0.04-1.94,0.76-2,2.15c-0.06,1.39,0.81,2.27,1.8,2.32l0,0
|
||||
c0.99,0.04,1.94-0.76,2-2.15S43.28,53.08,42.28,53.04z"/>
|
||||
</g>
|
||||
<g id="peepers_00000077303468335883764480000001602613450775713458_">
|
||||
<path style="fill:#896024;" d="M67.84,36.9L67.84,36.9c-0.99-0.04-1.94,0.76-2,2.15c-0.06,1.39,0.81,2.27,1.8,2.32l0,0
|
||||
c0.99,0.04,1.94-0.76,2-2.15C69.7,37.82,68.83,36.94,67.84,36.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#BF9052;" d="M37.69,77.48c-2.73-2.37-4.95-5.1-6.61-8.06c-1.49-2.67-2.52-5.52-3.03-8.47
|
||||
c-0.06-0.37-0.51-1.02-1.25-0.99s-0.97,0.72-0.99,1.02c-0.16,3.31,0.74,6.51,2.56,9.65c2.16,3.74,4.67,6.27,7.78,8.43
|
||||
c0.34,0.24,1.12,0.59,1.7-0.1S37.96,77.71,37.69,77.48z"/>
|
||||
<g>
|
||||
<path style="fill:#896024;" d="M39.57,65.36c-2.45-3.87-3.35-7.39-3.04-9.92c-1.49-0.5-2.84-0.42-3.88,0.23
|
||||
c-2.72,1.72-2.8,7.05,1.16,13.32s8.81,8.49,11.53,6.77c1.04-0.65,1.69-1.84,1.88-3.4C44.81,71.56,42.02,69.24,39.57,65.36z"/>
|
||||
</g>
|
||||
<path style="fill:#BF9052;" d="M90.75,43.97c-0.97-3.48-2.48-6.66-4.44-9.43c-1.77-2.49-3.9-4.65-6.35-6.37
|
||||
c-0.31-0.22-0.7-0.89-0.36-1.55c0.34-0.66,1.07-0.57,1.35-0.45c3.06,1.27,5.56,3.46,7.62,6.46c2.44,3.56,3.65,6.91,4.26,10.65
|
||||
c0.07,0.41,0.05,1.27-0.82,1.49S90.85,44.31,90.75,43.97z"/>
|
||||
<g>
|
||||
<path style="fill:#896024;" d="M79.01,40.46c-2.45-3.87-5.24-6.2-7.65-7.01c0.19-1.56,0.84-2.75,1.88-3.4
|
||||
c2.72-1.72,7.57,0.51,11.53,6.77s3.87,11.6,1.16,13.32c-1.04,0.65-2.39,0.73-3.88,0.23C82.35,47.85,81.45,44.34,79.01,40.46z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M68.55,86.57c-1.21-2-1.97-4.95-1.48-8.14c0.98-6.44,6.85-10.15,13.09-8.31
|
||||
c5.91,1.74,10.09,8.12,9.34,14.25c-0.88,7.15-7.75,11.05-14.45,8.18C72.49,91.44,70.48,89.68,68.55,86.57z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
57
Linphone/data/emoji/emojiSvgs/1fae9.svg
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="BAGS_UNDER_EYES" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<radialGradient id="face_00000088816004770144277250000009556130401377754250_" cx="63.22" cy="-86.9" r="56.9597" gradientTransform="matrix(1 0 0 -1 0 -24)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.5" style="stop-color:#FDE030"/>
|
||||
<stop offset="0.92" style="stop-color:#F7C02B"/>
|
||||
<stop offset="1" style="stop-color:#F4A223"/>
|
||||
</radialGradient>
|
||||
<path id="face" style="fill:url(#face_00000088816004770144277250000009556130401377754250_);" d="M63.22,118.8
|
||||
c-27.9,0-58-17.5-58-55.9S35.32,7,63.22,7c15.5,0,29.8,5.1,40.4,14.4c11.5,10.2,17.6,24.6,17.6,41.5s-6.1,31.2-17.6,41.4
|
||||
C93,113.6,78.62,118.8,63.22,118.8z"/>
|
||||
<path style="fill:#EB8F00;" d="M111.28,29.89c5.33,8.6,8.32,18.62,8.32,30.01c0,16.9-6.1,31.2-17.6,41.4
|
||||
c-10.6,9.3-25,14.5-40.4,14.5c-18.06,0-37-7.35-48.18-22.94c10.76,17.66,31,25.94,50.18,25.94c15.4,0,29.8-5.2,40.4-14.5
|
||||
c11.5-10.2,17.6-24.5,17.6-41.4C121.6,50.16,117.92,39.06,111.28,29.89z"/>
|
||||
<path style="fill:#422B0D;" d="M82.4,100.1c-4.4,0.3-32.3,1.3-35.1,0.8c-3.8-0.7-3.5-5.9,0.3-6.4c1.8-0.2,12.5-1.2,17.6-1.2
|
||||
s8.3,0.5,10.3,0.8c1.8,0.3,6.2,1.5,7.2,1.7C84.8,96.4,84.8,99.9,82.4,100.1z M100.4,40.2C99,39.3,89,35.7,77,38.4
|
||||
c-3.2,0.7-2.1,5.1,0.8,4.5c10.4-2.2,18.8,0.3,21.2,0.7S101.8,41.1,100.4,40.2z"/>
|
||||
<path style="fill:#EB8F00;" d="M98.5,64.2c4.5-1.9,6.6,2.2,5.7,5.8c-2.3,8.9-22.6,16.7-32.2,0.7c-2.8-4.6,2.3-7.4,5.2-5.3
|
||||
C84.9,71,93.9,66.1,98.5,64.2z M29.8,65.2c-2.2-2.2-6.6,0-5.9,3.6c2.8,13.9,27.4,15.9,32.1,1.4c1.2-3.9-2.1-6.4-5.7-4.4
|
||||
C41.5,70.7,34.7,69.9,29.8,65.2z"/>
|
||||
<path style="fill:#FFFFFF;" d="M72.9,54.8c6.1-0.2,20.7,0.3,26.9,0.8c2.2,0.2,2.4,2.1,2.2,3.4c-2.7,15.8-29.5,18.7-31.4-1.2
|
||||
C70.4,55.1,71.8,54.8,72.9,54.8z M27.6,56.8c-1.7,0.3-2.4,2-2,3.7c3.7,15.6,30.3,15.4,31.5-3c0-1.7-0.6-3.1-2.7-3.1
|
||||
C49.8,54.4,34.1,55.8,27.6,56.8z"/>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M72.9,54.8c6.1-0.2,20.7,0.3,26.9,0.8c2.2,0.2,2.4,2.1,2.2,3.4c-2.7,15.8-29.5,18.7-31.4-1.2
|
||||
C70.4,55.1,71.8,54.8,72.9,54.8z M27.6,56.8c-1.7,0.3-2.4,2-2,3.7c3.7,15.6,30.3,15.4,31.5-3c0-1.7-0.6-3.1-2.7-3.1
|
||||
C49.8,54.4,34.1,55.8,27.6,56.8z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000085220233596697445750000011632254972251972495_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_00000085220233596697445750000011632254972251972495_);">
|
||||
<path style="fill:#422B0D;" d="M92.3,54.4c2.7,4.5-0.4,10.4-6.2,10.4s-8.9-5.4-5.3-10.8C83,50.6,89.8,50.2,92.3,54.4z M35.7,54.8
|
||||
c-2.9,4.9,0.9,10.1,5.6,10.1s8.2-6.2,5.3-10.4C44.3,51.2,37.8,51.2,35.7,54.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_00000002378470936803287900000015685046093406688959_" d="M72.9,54.8c6.1-0.2,20.7,0.3,26.9,0.8
|
||||
c2.2,0.2,2.4,2.1,2.2,3.4c-2.7,15.8-29.5,18.7-31.4-1.2C70.4,55.1,71.8,54.8,72.9,54.8z M27.6,56.8c-1.7,0.3-2.4,2-2,3.7
|
||||
c3.7,15.6,30.3,15.4,31.5-3c0-1.7-0.6-3.1-2.7-3.1C49.8,54.4,34.1,55.8,27.6,56.8z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000009573153617938949080000012364698636391462039_">
|
||||
<use xlink:href="#SVGID_00000002378470936803287900000015685046093406688959_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_00000009573153617938949080000012364698636391462039_);">
|
||||
<path style="fill:#896024;" d="M41.5,56.1c0,1.3-1.1,2.4-2.5,2.4s-2.5-1.1-2.5-2.4s1.1-2.4,2.5-2.4S41.5,54.8,41.5,56.1z
|
||||
M83.8,53.4c-1.4,0-2.5,1.1-2.5,2.5s1.1,2.5,2.5,2.5s2.5-1.1,2.5-2.5S85.2,53.4,83.8,53.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:#422B0D;" d="M53.18,36.85c-1.48-0.76-11.79-3.34-23.46,0.55c-3.11,1.02-1.58,5.28,1.25,4.4
|
||||
c10.13-3.23,18.74-1.58,21.16-1.43S54.67,37.6,53.18,36.85z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
68
Linphone/data/emoji/emojiSvgs/1faf0.svg
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_2_00000012443026519394611760000004431583338484677266_"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 128 128"
|
||||
style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<path style="fill:#FFCA28;" d="M54.8,14.4c0,0,3.2-3.8,5.1-6c4.7-5.5,13.8-2.8,11.7,5C70,18.9,65.3,28.1,64.2,30
|
||||
c0.4,1.7,0.9,3.6,1.1,4.4C69.8,33,78,36.3,76.1,46c5.8-6.7,17.4-0.9,13.6,10.5c2-2.1,7.3-0.8,9.3,1.8c1.8,2.2,2.7,3.7,2.8,6.9
|
||||
c0.1,3.1-0.1,5.1-2.3,7.2c-0.1,4.7-1.2,9.6-1.9,10.4c2.8,7.6-0.6,17.5-5.5,22.1c-1.5,3.6-3.4,8.4-4.2,11c-0.7,2.6-6.4,5.1-9,5.5
|
||||
c-5.6,0.9-19.9,0.4-27-4c-3-1.8-5.5-3.2-5.3-6c0.1-2.1,0.9-8.4,1-9.7c0.1-1.3,0.1-4.2-1.9-6.4C41.8,91,33,84.7,27.1,74
|
||||
c-1.9-3.5-1.5-10.6,0.4-16.2s8.3-16.7,17-28.2c-2.8-5.1-5.7-11.1-6.8-15.3c-1.8-6.9,4.3-9.9,8.7-7.9C50.3,8.1,54.8,14.4,54.8,14.4z"
|
||||
/>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M54.8,14.4c0,0,3.2-3.8,5.1-6c4.7-5.5,13.8-2.8,11.7,5C70,18.9,65.3,28.1,64.2,30c0.4,1.7,0.9,3.6,1.1,4.4
|
||||
C69.8,33,78,36.3,76.1,46c5.8-6.7,17.4-0.9,13.6,10.5c2-2.1,7.3-0.8,9.3,1.8c1.8,2.2,2.7,3.7,2.8,6.9c0.1,3.1-0.1,5.1-2.3,7.2
|
||||
c-0.1,4.7-1.2,9.6-1.9,10.4c2.8,7.6-0.6,17.5-5.5,22.1c-1.5,3.6-3.4,8.4-4.2,11c-0.7,2.6-6.4,5.1-9,5.5c-5.6,0.9-19.9,0.4-27-4
|
||||
c-3-1.8-5.5-3.2-5.3-6c0.1-2.1,0.9-8.4,1-9.7c0.1-1.3,0.1-4.2-1.9-6.4C41.8,91,33,84.7,27.1,74c-1.9-3.5-1.5-10.6,0.4-16.2
|
||||
s8.3-16.7,17-28.2c-2.8-5.1-5.7-11.1-6.8-15.3c-1.8-6.9,4.3-9.9,8.7-7.9C50.3,8.1,54.8,14.4,54.8,14.4z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000150089440312502309920000002382018553492475035_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_00000150089440312502309920000002382018553492475035_);">
|
||||
<path style="fill:#FAA700;" d="M48.7,116.1c0,0,1.1-12.1,1.2-14.6c4,4.1,14.8,15.6,33,20.6c10.1,2.8,18.1-28,18.1-28l-0.5-13.7
|
||||
c0,0-3.6-3.1-5.1,2s-4.2,11.1-8.1,13.3c-2.9,1.6-5.8,0.8-7.2,0.3c-1.4-0.6-3.7-2-6.6-1.7c-3.8,0.4-8.1-0.5-10.1-2.3
|
||||
s-4.9-3.7-9.5-3.9c-4.6-0.2-7.7-1.1-9.7-3.9c-1.9-2.6-4.3-4.3-7.2-4.8c-3.5-0.5-6.3-1.9-7.7-5.4c-1.4-3.5-1.1-9.5,0.8-14.3
|
||||
c3.2-8.4,12.5-23.3,14-26.1c1.6-2.9-4.8-2.3-4.8-2.3L14.6,64l17.9,53.7l10.7,1.5L48.7,116.1z"/>
|
||||
<path style="fill:#FAA700;" d="M37.7,18.6c0.7,0.8,3.8,0.6,2.7-3.6c-1.8-7,4.7-8,7.2-5.4c1.2,1.3,2.2,2.5,2.7,3.1
|
||||
c0.2,0.3,0.3,0.6,0.1,1c-0.4,1-1.9,3.4-7.1,9.3c-2,2.2,2.5,6.2,5.7,2.4C52.6,21.3,59.6,12,61.3,10c3.9-4.9,9.1-2.1,8.2,3.4
|
||||
s1.7,5.3,1.7,5.3L76.6,8L63.2,1.7L35.5,3.8L37.7,18.6z"/>
|
||||
<path style="fill:#FAA700;" d="M69.3,32.1c-7.6-0.7-9.1,5.5-6.8,5.2c4.1-0.5,12.4,0.6,12.3,9.3c0,1.5,1.1,1.4,1.7,1
|
||||
c3.8-2.2,13.6-1.2,11.9,9.6c-0.2,1.5,1.1,1.5,1.5,1.1c1.8-1.6,6.8-1.4,8.2,2.4c0.5,1.2,0.4,3.2,0.5,4.6c0.1,1.4,0.2,7,0.2,7.6
|
||||
s1.4,1.5,2.3,0c1.2-1.9,4.6-6,4.5-11C105.5,57,98.2,34.9,69.3,32.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_00000093882312774502917520000008863851808784800921_" d="M54.8,14.4c0,0,3.2-3.8,5.1-6c4.7-5.5,13.8-2.8,11.7,5
|
||||
C70,18.9,65.3,28.1,64.2,30c0.4,1.7,0.9,3.6,1.1,4.4C69.8,33,78,36.3,76.1,46c5.8-6.7,17.4-0.9,13.6,10.5c2-2.1,7.3-0.8,9.3,1.8
|
||||
c1.8,2.2,2.7,3.7,2.8,6.9c0.1,3.1-0.1,5.1-2.3,7.2c-0.1,4.7-1.2,9.6-1.9,10.4c2.8,7.6-0.6,17.5-5.5,22.1c-1.5,3.6-3.4,8.4-4.2,11
|
||||
c-0.7,2.6-6.4,5.1-9,5.5c-5.6,0.9-19.9,0.4-27-4c-3-1.8-5.5-3.2-5.3-6c0.1-2.1,0.9-8.4,1-9.7c0.1-1.3,0.1-4.2-1.9-6.4
|
||||
C41.8,91,33,84.7,27.1,74c-1.9-3.5-1.5-10.6,0.4-16.2s8.3-16.7,17-28.2c-2.8-5.1-5.7-11.1-6.8-15.3c-1.8-6.9,4.3-9.9,8.7-7.9
|
||||
C50.3,8.1,54.8,14.4,54.8,14.4z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000124159253594305469440000001827886973601835951_">
|
||||
<use xlink:href="#SVGID_00000093882312774502917520000008863851808784800921_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_00000124159253594305469440000001827886973601835951_);">
|
||||
<path style="fill:#B55E19;" d="M25.2,73c1.6-0.6,3-0.4,4.9,2.7c2.4,3.9,9.8,11.4,16.5,17.3c1.7,1.5,3.7,3.9,3.3,8.4
|
||||
c-0.2,2.6,0.1,7.2-3.1,7.7c-3.2,0.6-6.2-7.3-6.2-7.3S24,75.7,24,74.9S25.2,73,25.2,73z"/>
|
||||
<path style="fill:#B55E19;" d="M89.7,113c0,0,0.8-7.3,1.1-10.2c1.5-1.6,6.6-6.7,5.2-16.3c-0.3-2.2-0.8-4,0.1-6.2
|
||||
c1.3-3.3,2.3-14,2.3-14.7c0-1,1.5-1,1.5,0c0,0.8-0.3,6.8-0.3,6.8l1.9,2.3l1.9,23.6l-8.3,15.1L89.7,113z"/>
|
||||
<path style="fill:#B55E19;" d="M39.4,6.7c-0.2,1.7-0.5,5.2,0.6,7.6c1.7,4,3.7,7.7,4.3,8.5c0.5,0.6,1.2,0.6,1.6,0.3
|
||||
c1-0.7,4.5-2.9,5.1-3.3c0.8-0.6,2.5-0.3,1.5,1.5C51.4,23,44,34,42.7,36c-1.4,2-3.7,2.6-4.6,2S33.3,9.3,33.3,9.3L39.4,6.7z"/>
|
||||
<path style="fill:#B55E19;" d="M69.1,5.8c0.7,1.7,1.4,5,0.2,7.7c-2.2,4.9-15.1,29.1-21,39.7c-0.7,1.3-1.8,2-2.2,2.9
|
||||
c-1.6,3,2.8,5.6,4.6,2.7c1.1-1.8,0-2.6,1-4.3c1.4-2.5,7.9-15,8.9-16.5c1-1.6,2.8-3,4.8-3.6c1.8-2.2,4.6-5.6,4.6-5.6L78.1,12
|
||||
l-4.4-8L69.1,5.8z"/>
|
||||
<path style="fill:#B55E19;" d="M64.5,63.7c-0.5,0.9-1.9,1.5-2.4,2.4c-1.4,2.6,2.8,4.6,4.2,2.4c0.7-1.2,0.3-2.3,0.8-3.3
|
||||
s9-16.9,9.2-17.9c0.3-1-0.7-1.6-1.3-0.9C74.3,47.3,65,62.8,64.5,63.7z"/>
|
||||
<path style="fill:#B55E19;" d="M80.5,73.1c-0.4,0.7-1.3,0.9-1.8,1.8c-1.3,2.5,3.1,4.8,4.3,2.2c0.4-0.9,0-1.7,0.3-2.5
|
||||
c0.4-0.8,4.1-10.6,6.6-16.8c0.4-1.1-0.7-1.7-1.3-0.6C86.7,61,80.5,73.1,80.5,73.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
65
Linphone/data/emoji/emojiSvgs/1faf5.svg
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_2_00000072270158875804069490000012580625440359467709_"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 128 128"
|
||||
style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<path style="fill:#FFCA28;" d="M80,97.3c-1.7,7.6-6.2,12.3-13.5,12.6c0.4,3.2-3.3,10.4-16.7,10.4c-3.2,0-11.3-0.1-19.1-6.9
|
||||
C26,109.3,14.5,100.3,10,90c-2.1-4.9-3.7-9.4-2.3-13c2.5-6.6,8.4-5,7.1-13.9c-0.5-3.5,0.6-10.6,7.8-13.1c2.7-0.9,6.1-4.2,5.4-9
|
||||
s2.2-11.8,11.8-14.2c10.8-2.8,6.5-12,15.8-16.6c9.8-5,17.9-1.7,22.2,5.4c1.6,2.6,3.1,5,3.7,11.2c7.6,9.1,13.5,22.3,22.7,26.7
|
||||
c2.7,1.3,8.9,2.4,12,10.5c1.6,4.1,3.2,8.6,3.8,10.2c2,5.5-0.4,13.3-5.5,16.3c-6.5,3.8-13.5,9.2-16.3,12.1
|
||||
C97.3,103.4,86.9,111.3,80,97.3z"/>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M80,97.3c-1.7,7.6-6.2,12.3-13.5,12.6c0.4,3.2-3.3,10.4-16.7,10.4c-3.2,0-11.3-0.1-19.1-6.9
|
||||
C26,109.3,14.5,100.3,10,90c-2.1-4.9-3.7-9.4-2.3-13c2.5-6.6,8.4-5,7.1-13.9c-0.5-3.5,0.6-10.6,7.8-13.1c2.7-0.9,6.1-4.2,5.4-9
|
||||
s2.2-11.8,11.8-14.2c10.8-2.8,6.5-12,15.8-16.6c9.8-5,17.9-1.7,22.2,5.4c1.6,2.6,3.1,5,3.7,11.2c7.6,9.1,13.5,22.3,22.7,26.7
|
||||
c2.7,1.3,8.9,2.4,12,10.5c1.6,4.1,3.2,8.6,3.8,10.2c2,5.5-0.4,13.3-5.5,16.3c-6.5,3.8-13.5,9.2-16.3,12.1
|
||||
C97.3,103.4,86.9,111.3,80,97.3z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000060735560097370283170000000082404634594780842_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_00000060735560097370283170000000082404634594780842_);">
|
||||
<path style="fill:#FAA700;" d="M79.5,25.9c-0.6-3.2-3.9-15.1-14.4-15.7c-2.9-0.2-10.9,0.6-14.4,9.6c-1.1,2.8-1.6,7.8-10.3,9.8
|
||||
c-4.2,1-10.3,3.2-9.5,12c0.4,4-0.7,9.4-7.4,11.4c-2.1,0.6-7.2,3.8-5.9,10.5c0.9,4.9-0.2,8.3-4.3,11.1c-1.2,0.9-4.3,4.5-2.2,10.6
|
||||
c2.8,8.2,16.9,27.3,31.5,28.9c4.4,0.5,9.4-5.6,5.3-10.8c-1.2-1.5,0.7-3.5,2.9-1.9s7.6,3.2,13.4-3.3c2.5-2.8,4.1-5.8,0.4-11.6
|
||||
c-1.9-3-3.1-6.3-0.9-4.9c4.7,3,9.3,1.5,13.8-3.9c4-4.6,5.9-5.9,3-14.3c-1.1-3.1-10.4-14.2-10.4-14.2l10.6-23.6l1.7-0.2l30.7,30.1
|
||||
c0,0-0.2,3.2-4.6,1.4s-11.1-4.4-14.2-9s-7.9-10.6-8.5-11.6c-0.9-1.4-2.9-1-2,1.1c7.5,19,2.8,23.2,4.4,26.7
|
||||
c0.7,1.6,2.9-0.2,4.6-4.1c0.9-2.1,4.7-1.8,2,8.9c-0.6,2.4-3.2,5.5-3.7,6.2c-1.3,1.8-1,4.6,1.2,2.8c2.8-2.2,7.1-4.9,10.3-5.6
|
||||
c3.2-0.7,4.6,0.9,5.5,2.1s4.8,5.4,5.6,6.2c0.8,0.9,2.8,2.7,0.8,5.6c-1.4,1.9-17.1,19.8-17.1,19.8l-40.3,16.8h-22L5.5,91.1L3,72.4
|
||||
l22.8-45L58.2,4.5l19.2,1.7l5,16.6L79.5,25.9z"/>
|
||||
<path style="fill:#FAA700;" d="M71.5,19.5c-7.5,0-12.2,3.3-15.8,8.6c-0.7,1-2.7,0.5-2-1.3c3.1-8.2,10-11.9,18.3-9.9
|
||||
C73.5,17.3,73.6,19.5,71.5,19.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_00000019653605689884674110000008513767694685607826_" d="M80,97.3c-1.7,7.6-6.2,12.3-13.5,12.6
|
||||
c0.4,3.2-3.3,10.4-16.7,10.4c-3.2,0-11.3-0.1-19.1-6.9C26,109.3,14.5,100.3,10,90c-2.1-4.9-3.7-9.4-2.3-13
|
||||
c2.5-6.6,8.4-5,7.1-13.9c-0.5-3.5,0.6-10.6,7.8-13.1c2.7-0.9,6.1-4.2,5.4-9s2.2-11.8,11.8-14.2c10.8-2.8,6.5-12,15.8-16.6
|
||||
c9.8-5,17.9-1.7,22.2,5.4c1.6,2.6,3.1,5,3.7,11.2c7.6,9.1,13.5,22.3,22.7,26.7c2.7,1.3,8.9,2.4,12,10.5c1.6,4.1,3.2,8.6,3.8,10.2
|
||||
c2,5.5-0.4,13.3-5.5,16.3c-6.5,3.8-13.5,9.2-16.3,12.1C97.3,103.4,86.9,111.3,80,97.3z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000180356263846920664810000006122165984388409773_">
|
||||
<use xlink:href="#SVGID_00000019653605689884674110000008513767694685607826_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_00000180356263846920664810000006122165984388409773_);">
|
||||
<path style="fill:#B55E19;" d="M96.1,104.3c0.8-1,3.8-4.3,5.9-7.5s5.9-5.5,8.2-6.8c3.3-2,9-7.4,7.1-14.8c-0.6-2.3-3.3-9.8-3.7-11
|
||||
c-0.7-2-2.6-5.5-7.4-7.8c-2.3-1.1-6.4-4.1-7.1-4.8s-1.3-2-0.4-3.1c0.9-1.2,2.9-0.4,2.9-0.4l17,9.1l6.6,24.4l-5.1,10
|
||||
c0,0-22.4,13.7-23.2,14.1S95.3,105.3,96.1,104.3z"/>
|
||||
<path style="fill:#B55E19;" d="M24.8,108.3c17.2,13.1,32,9,34,7.7c2.4-1.5,4.2-2.8,4.6-6c-11-2.6-13.5-2.6-28.3-20.5
|
||||
c-3-3.6-4.5-2.2-6.1-4.2c-0.9-1.1,0.6-2.9,1.1-3.5c1.1-1.3,2.8-2,3.9-0.8c1.7,1.8-0.2,1.8,3.4,5.6c14.5,15.8,15,18.8,27.9,20.6
|
||||
c3,0.4,10.8-3.2,11.7-12.3c-8.6-2.6-14.9-9.8-28.4-24.2c-1.7-1.8-3.2-0.8-4.1-2.2c-1.2-1.8,0.9-3.4,2-4.2
|
||||
c1.1-0.7,2.6-1.6,3.7-0.4c1.1,1.3,0.4,1.5,2,3.4c12.2,14.9,17.1,21.4,22.6,22.3c1.7,0.3,3.7,1,7.8-4.3c3.2-4.2,3.9-6.9,3.1-10.8
|
||||
c-0.7-3.4-0.9-7.1-17.1-22.8c-5,0.2-13.6-7.6-16.2-18.5c-0.3-1.4,1-1.5,1.5-0.6c5.9,10.8,15.3,7.4,18,5.9
|
||||
c3-1.6,10.3-6.9,6.4-20.4c-0.2-0.8,0-1.6,0.9-1.8c2.7-0.6,6.5,6.1,2.4,10.3c0.5,2.9,1.9,17.7-7.1,23.8
|
||||
c8.6,10.5,12.4,15.5,12.8,17c1-6.4,5.7-8,6.4-8.2c0.9-0.2,1.7,0.3,1,1.1s-4.5,3.8-4.8,10.3c-0.1,1.7,1.2,1.4,1.7,0.9
|
||||
c2-1.9,6.3-4.3,10.2-3.9c1.3,0.2,1.8,1.4,0.2,2c-2.4,0.8-6.2,1.4-9.7,5.8c-1.5,1.8-7.1,10.3-7.6,11.1c-2.5,3.9-2.6,10.8,0,15.1
|
||||
c1.2,2.1,0,3.1,0,3.1l-22.5,17.8l-26.5-0.2l-14.8-16.7L24.8,108.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
82
Linphone/data/emoji/emojiSvgs/1faf6.svg
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_2_00000002344984249768726400000016594488769929148057_"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 128 128"
|
||||
style="enable-background:new 0 0 128 128;" xml:space="preserve">
|
||||
<path style="fill:#FFCA28;" d="M116.6,45.3c-1.1-2-3-5.6-6.8-8.1c-2.2-1.4-5-3.7-6.2-4.8c-1.2-1.1-11.5-9.4-15.3-11
|
||||
s-6.8-1.8-9.4-0.5c-2.7,1.4-11.3,5.6-12.5,6.2s-2.5,1.9-2.5,3.8c0-1.9-1.3-3.2-2.5-3.8c-1.2-0.7-9.8-4.8-12.5-6.2
|
||||
c-2.5-1.3-5.6-1.1-9.4,0.5c-3.8,1.7-14.1,10-15.3,11c-1.2,1.1-4.1,3.4-6.2,4.8c-3.8,2.5-5.7,6.1-6.8,8.1S3,58,3,58v44
|
||||
c0,0,12-12.2,15.9-14.9c3.8-2.6,6.1-1,8-0.6c7.7,1.6,13-0.7,18.5-0.9c6.8-0.2,10.9,3.3,12.8,5.2c1.2,1.3,4.5,2.2,5.9-1
|
||||
c1.4,3.2,4.6,2.2,5.9,1c1.9-2,6-5.5,12.8-5.2c5.5,0.2,10.8,2.5,18.5,0.9c1.8-0.4,4.1-2.1,8,0.6c3.8,2.7,15.9,14.9,15.9,14.9V58.1
|
||||
C124.8,58.1,117.7,47.3,116.6,45.3z M80.9,70.5c-8.4,3.6-17.1,7.8-17.1,15.5c0-7.7-8.7-11.9-17.1-15.5s-10.2-10.6-9.9-14.2
|
||||
C37.5,43.8,49.4,45,50.2,45c1.3,0.1,3,0.9,4,2.4c0.9,1.5,3.7,4.6,5.1,5.1c3.5,1.5,4.6-0.7,4.6-0.7s1.1,2.2,4.6,0.7
|
||||
c1.4-0.6,4.1-3.6,5.1-5.1c0.9-1.5,2.7-2.3,4-2.4c0.8-0.1,12.7-1.2,13.4,11.3C91.1,59.9,89.3,67,80.9,70.5z"/>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M116.6,45.3c-1.1-2-3-5.6-6.8-8.1c-2.2-1.4-5-3.7-6.2-4.8c-1.2-1.1-11.5-9.4-15.3-11s-6.8-1.8-9.4-0.5
|
||||
c-2.7,1.4-11.3,5.6-12.5,6.2s-2.5,1.9-2.5,3.8c0-1.9-1.3-3.2-2.5-3.8c-1.2-0.7-9.8-4.8-12.5-6.2c-2.5-1.3-5.6-1.1-9.4,0.5
|
||||
c-3.8,1.7-14.1,10-15.3,11c-1.2,1.1-4.1,3.4-6.2,4.8c-3.8,2.5-5.7,6.1-6.8,8.1S3,58,3,58v44c0,0,12-12.2,15.9-14.9
|
||||
c3.8-2.6,6.1-1,8-0.6c7.7,1.6,13-0.7,18.5-0.9c6.8-0.2,10.9,3.3,12.8,5.2c1.2,1.3,4.5,2.2,5.9-1c1.4,3.2,4.6,2.2,5.9,1
|
||||
c1.9-2,6-5.5,12.8-5.2c5.5,0.2,10.8,2.5,18.5,0.9c1.8-0.4,4.1-2.1,8,0.6c3.8,2.7,15.9,14.9,15.9,14.9V58.1
|
||||
C124.8,58.1,117.7,47.3,116.6,45.3z M80.9,70.5c-8.4,3.6-17.1,7.8-17.1,15.5c0-7.7-8.7-11.9-17.1-15.5s-10.2-10.6-9.9-14.2
|
||||
C37.5,43.8,49.4,45,50.2,45c1.3,0.1,3,0.9,4,2.4c0.9,1.5,3.7,4.6,5.1,5.1c3.5,1.5,4.6-0.7,4.6-0.7s1.1,2.2,4.6,0.7
|
||||
c1.4-0.6,4.1-3.6,5.1-5.1c0.9-1.5,2.7-2.3,4-2.4c0.8-0.1,12.7-1.2,13.4,11.3C91.1,59.9,89.3,67,80.9,70.5z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000153695163382332671250000012821661505530782609_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_00000153695163382332671250000012821661505530782609_);">
|
||||
<path style="fill:#FAA700;" d="M57.3,89.5c-0.2,1.7-6.2,2.2-6.2,2.2l-49.4,14L1.9,91c3.5-3.1,12-10,13.5-10.9s8-4.1,13.7-1.3
|
||||
c1.5,0.7,4.7,2,9.4,1.5C45.6,79.4,58.2,81.8,57.3,89.5z"/>
|
||||
<path style="fill:#FAA700;" d="M55.6,70.7l8.2,10.6v5.2c0,0-0.9,0-1.1-0.9c-1.1-5.9-8-10-12.2-11.8L55.6,70.7z"/>
|
||||
<path style="fill:#FAA700;" d="M64.9,23.8l-0.1,13.9c0,0-1,1.1-1.6,1c-0.5-0.1-1.2-2.5-1.9-3.2s-8.6-4.7-11.1-6
|
||||
c-2-1.1-5-0.9-6.1-0.6c-1.2,0.3-9.3,3.7-10.6,4.5s-2.2-0.7-1.1-1.6c0.6-0.5,7.2-5.9,8.1-6.6c0.9-0.6,0.2-2.1-1.1-1.2
|
||||
c-4.5,3-18.4,13.7-20,14.9c-2.3,1.7-4,3.8-5.1,5.9c-0.5,1.1-8.2,13.1-11.8,17.7l-1.3-5.9L12.5,37c0,0,30.2-20.7,30.4-20.7
|
||||
C43,16.3,64.9,23.8,64.9,23.8z"/>
|
||||
<path style="fill:#FAA700;" d="M70.3,89.5c0.2,1.7,6.2,2.2,6.2,2.2l49.4,14L125.6,91c-3.5-3.1-12-10-13.5-10.9s-8-4.1-13.7-1.3
|
||||
c-1.5,0.7-4.7,2-9.4,1.5C81.9,79.4,69.3,81.8,70.3,89.5z"/>
|
||||
<path style="fill:#FAA700;" d="M71.9,70.7l-8.2,10.6l0.1,5.2c0,0,0.8,0,1-0.9c1.1-5.9,8-10,12.2-11.8L71.9,70.7z"/>
|
||||
<path style="fill:#FAA700;" d="M62.6,23.8l0.1,13.9c0,0,1,1.1,1.6,1c0.5-0.1,1.2-2.5,1.9-3.2c0.7-0.7,8.6-4.7,11.1-6
|
||||
c2-1.1,5-0.9,6.1-0.6c1.2,0.3,11.7,5.2,13,6s2.2-0.8,1.2-1.7c-0.6-0.5-7.1-6.3-7.9-6.9s-0.1-1.8,1.1-1c4.4,3,15.8,12.4,17.4,13.6
|
||||
c2.3,1.7,4,3.8,5.1,5.9c0.5,1.1,8.2,13.1,11.8,17.7l1.3-5.9L115.1,37c0,0-30.2-20.7-30.4-20.7S62.6,23.8,62.6,23.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_00000037666799337021748690000016561099789092855727_" d="M116.6,45.3c-1.1-2-3-5.6-6.8-8.1
|
||||
c-2.2-1.4-5-3.7-6.2-4.8c-1.2-1.1-11.5-9.4-15.3-11s-6.8-1.8-9.4-0.5c-2.7,1.4-11.3,5.6-12.5,6.2s-2.5,1.9-2.5,3.8
|
||||
c0-1.9-1.3-3.2-2.5-3.8c-1.2-0.7-9.8-4.8-12.5-6.2c-2.5-1.3-5.6-1.1-9.4,0.5c-3.8,1.7-14.1,10-15.3,11c-1.2,1.1-4.1,3.4-6.2,4.8
|
||||
c-3.8,2.5-5.7,6.1-6.8,8.1S3,58,3,58v44c0,0,12-12.2,15.9-14.9c3.8-2.6,6.1-1,8-0.6c7.7,1.6,13-0.7,18.5-0.9
|
||||
c6.8-0.2,10.9,3.3,12.8,5.2c1.2,1.3,4.5,2.2,5.9-1c1.4,3.2,4.6,2.2,5.9,1c1.9-2,6-5.5,12.8-5.2c5.5,0.2,10.8,2.5,18.5,0.9
|
||||
c1.8-0.4,4.1-2.1,8,0.6c3.8,2.7,15.9,14.9,15.9,14.9V58.1C124.8,58.1,117.7,47.3,116.6,45.3z M80.9,70.5
|
||||
c-8.4,3.6-17.1,7.8-17.1,15.5c0-7.7-8.7-11.9-17.1-15.5s-10.2-10.6-9.9-14.2C37.5,43.8,49.4,45,50.2,45c1.3,0.1,3,0.9,4,2.4
|
||||
c0.9,1.5,3.7,4.6,5.1,5.1c3.5,1.5,4.6-0.7,4.6-0.7s1.1,2.2,4.6,0.7c1.4-0.6,4.1-3.6,5.1-5.1c0.9-1.5,2.7-2.3,4-2.4
|
||||
c0.8-0.1,12.7-1.2,13.4,11.3C91.1,59.9,89.3,67,80.9,70.5z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000170974636243860359990000004490655489780876201_">
|
||||
<use xlink:href="#SVGID_00000037666799337021748690000016561099789092855727_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g style="clip-path:url(#SVGID_00000170974636243860359990000004490655489780876201_);">
|
||||
<path style="fill:#B55E19;" d="M20.7,83.5c-0.3-0.3,0.1-0.8,0.5-0.5c1.4,0.9,5.4,2.1,10.2,2c7.6-0.2,11.6-1.9,15.2-1.6
|
||||
c3.6,0.3,7.7,1.6,11.2,5.5c2.3,2.7,4.8,1.7,5.3,0c0.1-0.5,0.7-0.4,0.7-0.4v2.4c0,0-0.9,2-2.7,2.1c-4.2,0.1-6.3-1.8-7.8-3.9
|
||||
c-1.6-2.1-18.9,0.7-28.5-2.9C23.3,85.5,21.8,84.6,20.7,83.5z"/>
|
||||
<path style="fill:#B55E19;" d="M61.9,79.4c-0.4,0.4-0.8,0.8-1.7,0c-3.8-3.7-8-4.6-14.4-7.4c-6.1-2.7-11.6-7.9-11.6-15.7
|
||||
c0-5.6,3.2-14.2,14.1-14c3.5,0.1,5.7,1.8,6.8,3.6c1.1,1.7,3,3.9,3.6,4.5c1.1,1,3.8,1.8,4.3-0.5c0.2-1.2-0.5-8.2-0.6-9.4
|
||||
s-1.1-3.7-3.2-4.8c-2.2-1.2-8.2-4.3-9.4-4.9c-1.2-0.6-4.1-0.9-6.6,0C40,32,28.2,38.2,26,39.3c-0.4,0.2-0.6-0.2-0.3-0.5
|
||||
s2.4-2.6,4.8-4s11.2-6.3,12.5-7c1.2-0.7,4.6-1,6.5,0c2.1,1.1,8.6,4.2,11.3,5.7c0.7,0.4,1.6,1,1.8,1.4s0.5,0.1,0.5,0s0.1-4,0.8-4
|
||||
c0,0.7,0,1.3,0,1.3v42.2L61.9,79.4z"/>
|
||||
<path style="fill:#B55E19;" d="M107,83.5c0.3-0.3-0.1-0.8-0.5-0.5c-1.4,0.9-5.4,2.1-10.2,2c-7.6-0.2-11.6-1.9-15.2-1.6
|
||||
s-7.7,1.6-11.2,5.5c-2.3,2.7-4.8,1.7-5.3,0c-0.1-0.5-0.7-0.4-0.7-0.4v2.4c0,0,0.9,2,2.7,2.1c4.2,0.1,6.3-1.8,7.8-3.9
|
||||
c1.6-2.1,18.9,0.7,28.5-2.9C104.3,85.5,105.9,84.6,107,83.5z"/>
|
||||
<path style="fill:#B55E19;" d="M65.8,79.4c0.4,0.4,0.8,0.8,1.7,0c3.8-3.7,8-4.6,14.4-7.4c6.1-2.7,11.6-7.9,11.6-15.7
|
||||
c0-5.6-3.2-14.2-14.1-14c-3.5,0.1-5.7,1.8-6.8,3.6c-1.1,1.7-3,3.9-3.6,4.5c-1.1,1-3.8,1.8-4.3-0.5c-0.2-1.2,0.5-8.2,0.6-9.4
|
||||
s1.1-3.7,3.2-4.8c2.2-1.2,8.2-4.3,9.4-4.9c1.2-0.6,4.1-0.9,6.6,0c3.2,1.2,15,7.4,17.2,8.5c0.4,0.2,0.6-0.2,0.3-0.5
|
||||
s-2.4-2.6-4.8-4s-11.2-6.3-12.5-7s-4.6-1-6.5,0c-2.1,1.1-8.6,4.2-11.3,5.7c-0.7,0.4-1.6,1-1.8,1.4c-0.2,0.4-0.5,0.1-0.5,0
|
||||
s-0.1-4-0.8-4c-0.1,0.9-0.1,1.7-0.1,1.7l0.1,41.8L65.8,79.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.8 KiB |
|
|
@ -361,23 +361,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Error</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +389,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -652,29 +629,29 @@
|
|||
<location filename="../../core/App.cpp" line="654"/>
|
||||
<source>configuration_error_detail</source>
|
||||
<extracomment>not reachable</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>no accessible</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="926"/>
|
||||
<source>application_description</source>
|
||||
<extracomment>"A free and open source SIP video-phone."</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Programari de videotrucada SIP lliure i de codi obert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="928"/>
|
||||
<source>command_line_arg_order</source>
|
||||
<extracomment>"Send an order to the application towards a command line"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Enviar una comanda a l'aplicació via l'intèrpret de comandes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="932"/>
|
||||
<source>command_line_option_show_help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Mostra'm l'ajut</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="937"/>
|
||||
<source>command_line_option_show_app_version</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Mostra la versió de l'aplicatiu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="945"/>
|
||||
|
|
@ -726,6 +703,36 @@
|
|||
<source>mark_all_read_action</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="447"/>
|
||||
<source>info_popup_error_checking_update</source>
|
||||
<translation>Ha succeït un error mentre es mirava d'actualitzar. Si et plau, prova-ho més tard o posa't en contacte amb l'equip de suport.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="454"/>
|
||||
<source>info_popup_new_version_download_label</source>
|
||||
<translation>Descarrega'l!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="457"/>
|
||||
<source>info_popup_new_version_available_title</source>
|
||||
<translation>Nova versió a l'abast!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="459"/>
|
||||
<source>info_popup_new_version_available_message</source>
|
||||
<translation>Una nova versió del Linphone (1%) és accessible a l'1%</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="465"/>
|
||||
<source>info_popup_version_up_to_date_title</source>
|
||||
<translation>Actualitzat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="467"/>
|
||||
<source>info_popup_version_up_to_date_message</source>
|
||||
<translation>Actualitzat, disposes de la darrera versió</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AuthenticationDialog</name>
|
||||
|
|
@ -891,31 +898,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,7 +1120,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -2484,6 +2466,11 @@ Error</extracomment>
|
|||
<extracomment>Creation de la conversation en cours …</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="46"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Error</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatSettingsLayout</name>
|
||||
|
|
@ -4323,11 +4310,6 @@ Error</extracomment>
|
|||
<extracomment>"Erreur dans le code de validation"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation>Error</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ManageParticipants</name>
|
||||
|
|
|
|||
|
|
@ -145,6 +145,16 @@
|
|||
<extracomment>"Unable to add account."</extracomment>
|
||||
<translation>Nelze přidat účet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountManager.cpp" line="144"/>
|
||||
<source>assistant_account_login_outbound_proxy_uri_error</source>
|
||||
<translation>URI odchozího proxy serveru je neplatné. Ujistěte se, že odpovídá následujícímu formátu: sip:host>:<port>;transport=<transport> (:<port> je volitelný)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountManager.cpp" line="133"/>
|
||||
<source>assistant_account_login_registrar_uri_error</source>
|
||||
<translation>Registrátor uri je neplatný. Ujistěte se, že odpovídá následujícímu formátu: sip:host>:<port>;transport=<transport> (:<port> je volitelný)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountModel</name>
|
||||
|
|
@ -164,7 +174,7 @@
|
|||
<location filename="../../model/account/AccountModel.cpp" line="309"/>
|
||||
<source>set_outbound_proxy_uri_failed_error_message</source>
|
||||
<extracomment>Unable to set outbound proxy uri, failed creating address from %1</extracomment>
|
||||
<translation>Nelze nastavit odchozí proxy URI, selhalo vytvoření adresy z %1</translation>
|
||||
<translation>Nelze nastavit odchozí proxy URI z adresy %1. Ujistěte se, že odpovídá následujícímu formátu: sip:host>:<port>;transport=<transport> (:<port> je volitelný)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountModel.cpp" line="418"/>
|
||||
|
|
@ -304,6 +314,21 @@
|
|||
<extracomment>"No information"</extracomment>
|
||||
<translation>Žádné informace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="127"/>
|
||||
<source>copied</source>
|
||||
<translation>Zkopírováno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="129"/>
|
||||
<source>account_settings_sip_address_copied_message</source>
|
||||
<translation>Vaše SIP adresa byla zkopírována do schránky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="133"/>
|
||||
<source>account_settings_sip_address_copied_error_message</source>
|
||||
<translation>Chyba při kopírování vaší SIP adresy</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountSettingsPage</name>
|
||||
|
|
@ -361,23 +386,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation>Nastavení účtu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation>Registrační uri je neplatná. Ujistěte se, že odpovídá následujícímu formátu: sip:<host>:<port>;transport=<transport> (:<port> je volitelný)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation>Uri odchozího proxy serveru je neplatné. Ujistěte se, že odpovídá následujícímu formátu: sip:<host>:<port>;transport=<transport> (:<port> je volitelný)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +414,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation>URI hlasových zpráv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation>Transport</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -476,6 +478,16 @@
|
|||
<extracomment>"URL du serveur d’échange de clés de chiffrement"</extracomment>
|
||||
<translation>URL adresa Lime serveru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="68"/>
|
||||
<source>mwi_server_address_tooltip</source>
|
||||
<translation>Adresa serveru MWI, který odesílá oznámení SIP pro zobrazení nových indikátorů hlasové pošty</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="90"/>
|
||||
<source>voicemail_address_tooltip</source>
|
||||
<translation>SIP adresa vytočená po kliknutí na tlačítko hlasové schránky</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AddParticipantsForm</name>
|
||||
|
|
@ -730,7 +742,37 @@
|
|||
<message>
|
||||
<location filename="../../core/App.cpp" line="452"/>
|
||||
<source>info_popup_new_version_download_label</source>
|
||||
<translation>Žádný token nenalezen</translation>
|
||||
<translation>Stáhněte si ji!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="447"/>
|
||||
<source>info_popup_error_checking_update</source>
|
||||
<translation>Při pokusu o kontrolu aktualizací došlo k chybě. Zkuste to prosím znovu později nebo kontaktujte tým podpory.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="457"/>
|
||||
<source>info_popup_new_version_available_title</source>
|
||||
<translation>Nová verze k dispozici!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="459"/>
|
||||
<source>info_popup_new_version_available_message</source>
|
||||
<translation>Nová verze Linphone (%1) je k dispozici na %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="465"/>
|
||||
<source>info_popup_version_up_to_date_title</source>
|
||||
<translation>Aktuální</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="467"/>
|
||||
<source>info_popup_version_up_to_date_message</source>
|
||||
<translation>Vaše verze je aktuální</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/App.cpp" line="1402"/>
|
||||
<source>check_for_update</source>
|
||||
<translation>Zkontrolovat aktualizace</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -897,31 +939,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation>Číslo nebo SIP adresa je vyžadována</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation>Nelze nastavit přesměrování hovoru, vypršel časový limit požadavku</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation>Vypnutí přesměrování hovoru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation>Zapnutí přesměrování hovoru na:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation>Zapnuto přesměrování hovoru na: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation>Přesměrování hovoru vypnuto</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1144,7 +1161,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation>Prodleva serveru</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -1925,7 +1942,7 @@
|
|||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="45"/>
|
||||
<source>settings_contacts_carddav_popup_synchronization_error_message</source>
|
||||
<extracomment>"Erreur de synchronisation!"</extracomment>
|
||||
<translation>Chyba synchronizace!</translation>
|
||||
<translation>Chyba synchronizace: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="62"/>
|
||||
|
|
@ -2179,6 +2196,11 @@
|
|||
<extracomment>"Delete"</extracomment>
|
||||
<translation>Smazat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="408"/>
|
||||
<source>chat_message_send_again</source>
|
||||
<translation>Znovu odeslat</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatMessageContentCore</name>
|
||||
|
|
@ -2199,6 +2221,11 @@
|
|||
<source>info_popup_error_titile</source>
|
||||
<translation>Chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="105"/>
|
||||
<source>download_file_default_error</source>
|
||||
<translation>Chyba při stahování souboru %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatMessageContentList</name>
|
||||
|
|
@ -2254,6 +2281,36 @@ Error</extracomment>
|
|||
</context>
|
||||
<context>
|
||||
<name>ChatMessageContentModel</name>
|
||||
<message>
|
||||
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="95"/>
|
||||
<source>download_file_server_error</source>
|
||||
<translation>Chyba při pokusu o stažení obsahu: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="105"/>
|
||||
<source>download_file_error_no_safe_file_path</source>
|
||||
<translation>Nelze vytvořit bezpečné umístění souboru: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="119"/>
|
||||
<source>download_file_error_null_name</source>
|
||||
<translation>Název obsahu je prázdný, nelze jej stáhnout!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="127"/>
|
||||
<source>download_file_error_unable_to_download</source>
|
||||
<translation>Nelze stáhnout soubor položky %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="80"/>
|
||||
<source>download_error_object_doesnt_exist</source>
|
||||
<translation>Vnitřní chyba: objekt zprávy spojený s tímto obsahem již neexistuje!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="114"/>
|
||||
<source>download_file_error_file_transfer_unavailable</source>
|
||||
<translation>Tento soubor již byl stažen a není už na serveru. Váš partner vám jej musí znovu poslat, pokud jej chcete získat</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatMessageCore</name>
|
||||
|
|
@ -2495,6 +2552,26 @@ proto nezveřejňujte žádné citlivé informace!</translation>
|
|||
<extracomment>Creation de la conversation en cours …</extracomment>
|
||||
<translation>Probíhá vytváření chatu…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="46"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="355"/>
|
||||
<source>group_chat_error_no_participant</source>
|
||||
<translation>Vyberte prosím alespoň jednoho účastníka</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="48"/>
|
||||
<source>info_popup_chatroom_creation_failed</source>
|
||||
<translation>Vytvoření chatovací místnosti se nezdařilo!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="42"/>
|
||||
<source>loading_popup_chatroom_creation_pending_message</source>
|
||||
<translation>Chatovací místnost se vytváří...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatSettingsLayout</name>
|
||||
|
|
@ -3453,6 +3530,11 @@ proto nezveřejňujte žádné citlivé informace!</translation>
|
|||
<extracomment>"Le téléversement des traces a échoué. Vous pouvez partager les fichiers de trace directement depuis le répertoire suivant : %1"</extracomment>
|
||||
<translation>Nahrávání záznamů se nezdařilo. Soubory záznamů můžete sdílet přímo z následující složky: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/DebugSettingsLayout.qml" line="148"/>
|
||||
<source>settings_debug_qt_version_title</source>
|
||||
<translation>Verze Qt</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DecoratedTextField</name>
|
||||
|
|
@ -3802,6 +3884,11 @@ Expirace : %1</translation>
|
|||
<extracomment>"Dépannage"</extracomment>
|
||||
<translation>Řešení potíží</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Help/HelpPage.qml" line="110"/>
|
||||
<source>help_check_for_update_button_label</source>
|
||||
<translation>Zkontrolovat aktualizace</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LdapSettingsLayout</name>
|
||||
|
|
@ -4337,9 +4424,14 @@ Expirace : %1</translation>
|
|||
<translation>Chyba v ověřovacím kódu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation>Chyba</translation>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="207"/>
|
||||
<source>oidc_connection_waiting_message</source>
|
||||
<translation>Žádný token nenalezen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="220"/>
|
||||
<source>cancel</source>
|
||||
<translation>Zrušit</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -5150,6 +5242,11 @@ Expirace : %1</translation>
|
|||
<extracomment>"Audio uniquement"</extracomment>
|
||||
<translation>Pouze zvuk</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../tool/LinphoneEnums.cpp" line="125"/>
|
||||
<source>message_state_idle</source>
|
||||
<translation>nečinný</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RegisterCheckingPage</name>
|
||||
|
|
|
|||
|
|
@ -361,23 +361,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +389,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -891,31 +868,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,7 +1090,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -4318,11 +4270,6 @@ Error</extracomment>
|
|||
<extracomment>"Erreur dans le code de validation"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ManageParticipants</name>
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@
|
|||
<location filename="../../model/account/AccountModel.cpp" line="309"/>
|
||||
<source>set_outbound_proxy_uri_failed_error_message</source>
|
||||
<extracomment>Unable to set outbound proxy uri, failed creating address from %1</extracomment>
|
||||
<translation>Ezin da irteerako proxy uri-a ezarri, huts egin du %1 (e)tik helbidea sortzean</translation>
|
||||
<translation type="unfinished">Ezin da irteerako proxy uri-a ezarri, huts egin du %1 (e)tik helbidea sortzean</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountModel.cpp" line="418"/>
|
||||
|
|
@ -304,6 +304,11 @@
|
|||
<extracomment>"No information"</extracomment>
|
||||
<translation>Ez dago informaziorik</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="127"/>
|
||||
<source>copied</source>
|
||||
<translation>Kopiatuta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountSettingsPage</name>
|
||||
|
|
@ -361,23 +366,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation>Kontuaren ezarpenak</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Errorea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +394,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation>Ahots-postontziaren URIa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation>Garraiatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -891,31 +873,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,8 +1095,8 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<translation>Zerbitzariaren denbora-muga</translation>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished">Zerbitzariaren denbora-muga</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -1918,7 +1875,7 @@
|
|||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="45"/>
|
||||
<source>settings_contacts_carddav_popup_synchronization_error_message</source>
|
||||
<extracomment>"Erreur de synchronisation!"</extracomment>
|
||||
<translation>Sinkronizazio-errorea!</translation>
|
||||
<translation type="unfinished">Sinkronizazio-errorea!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="62"/>
|
||||
|
|
@ -2484,6 +2441,11 @@ Error</extracomment>
|
|||
<extracomment>Creation de la conversation en cours …</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="46"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Errorea</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatSettingsLayout</name>
|
||||
|
|
@ -4324,9 +4286,14 @@ Error</extracomment>
|
|||
<translation>Errorea baliozkotze kodean</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation>Errorea</translation>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="207"/>
|
||||
<source>oidc_connection_waiting_message</source>
|
||||
<translation>Ez da tokenik aurkitu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="220"/>
|
||||
<source>cancel</source>
|
||||
<translation>Utzi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -6667,7 +6634,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
|
|||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="926"/>
|
||||
<source>Italy</source>
|
||||
<translation>Italia</translation>
|
||||
<translation type="unfinished">Italia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="929"/>
|
||||
|
|
|
|||
|
|
@ -361,23 +361,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="33"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="36"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="46"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +389,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="121"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="128"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -891,31 +868,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="46"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="57"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="60"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="34"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,7 +1090,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -4332,11 +4284,6 @@ Error</extracomment>
|
|||
<extracomment>"Erreur dans le code de validation"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ManageParticipants</name>
|
||||
|
|
|
|||
|
|
@ -361,23 +361,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +389,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -891,31 +868,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,7 +1090,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -4318,11 +4270,6 @@ Error</extracomment>
|
|||
<extracomment>"Erreur dans le code de validation"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ManageParticipants</name>
|
||||
|
|
|
|||
|
|
@ -361,23 +361,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +389,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -891,31 +868,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,7 +1090,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -4318,11 +4270,6 @@ Error</extracomment>
|
|||
<extracomment>"Erreur dans le code de validation"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ManageParticipants</name>
|
||||
|
|
|
|||
|
|
@ -361,23 +361,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +389,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -891,31 +868,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,7 +1090,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -4318,11 +4270,6 @@ Error</extracomment>
|
|||
<extracomment>"Erreur dans le code de validation"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ManageParticipants</name>
|
||||
|
|
|
|||
7571
Linphone/data/languages/pl.ts
Normal file
|
|
@ -304,6 +304,11 @@
|
|||
<extracomment>"No information"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="127"/>
|
||||
<source>copied</source>
|
||||
<translation>Copiado</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountSettingsPage</name>
|
||||
|
|
@ -361,23 +366,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation>Parâmetros de conta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Erro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +394,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation>URI Correio de voz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation>Transporte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -891,31 +873,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,7 +1095,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -2484,6 +2441,11 @@ Error</extracomment>
|
|||
<extracomment>Creation de la conversation en cours …</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="46"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Erro</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatSettingsLayout</name>
|
||||
|
|
@ -4324,9 +4286,9 @@ Error</extracomment>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation>Erro</translation>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="220"/>
|
||||
<source>cancel</source>
|
||||
<translation>Cancelar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@
|
|||
<location filename="../../model/account/AccountManager.cpp" line="109"/>
|
||||
<source>assistant_account_login_proxy_address_error</source>
|
||||
<extracomment>"Unable to create proxy address. Please check the domain name."</extracomment>
|
||||
<translation>Impossível criar endereço do proxy. Por favor verifique o nome do domínio.</translation>
|
||||
<translation>Impossível criar endereço do proxy. Por favor, verifique o nome do domínio.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountManager.cpp" line="122"/>
|
||||
|
|
@ -145,6 +145,16 @@
|
|||
<extracomment>"Unable to add account."</extracomment>
|
||||
<translation>Impossível adicionar conta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountManager.cpp" line="133"/>
|
||||
<source>assistant_account_login_registrar_uri_error</source>
|
||||
<translation>Registrar url ié nválida. Por favor, certifique-se de que ela segue o formato: sip:host>:<port>;transport=<transport> (:<port> é opcional)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountManager.cpp" line="144"/>
|
||||
<source>assistant_account_login_outbound_proxy_uri_error</source>
|
||||
<translation>Url do proxy de saída inválida. Por favor, certifique-se de que ela segue o formato: sip:host>:<port>;transport=<transport> (:<port> é opcional)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountModel</name>
|
||||
|
|
@ -164,7 +174,7 @@
|
|||
<location filename="../../model/account/AccountModel.cpp" line="309"/>
|
||||
<source>set_outbound_proxy_uri_failed_error_message</source>
|
||||
<extracomment>Unable to set outbound proxy uri, failed creating address from %1</extracomment>
|
||||
<translation>Não foi possível definir URI do proxy de saída, falha ao criar endereço de %1</translation>
|
||||
<translation type="unfinished">Não foi possível definir URI do proxy de saída, falha ao criar endereço de %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountModel.cpp" line="418"/>
|
||||
|
|
@ -304,6 +314,21 @@
|
|||
<extracomment>"No information"</extracomment>
|
||||
<translation>Sem informação</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="127"/>
|
||||
<source>copied</source>
|
||||
<translation>Copiado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="133"/>
|
||||
<source>account_settings_sip_address_copied_error_message</source>
|
||||
<translation>Erro copiando seu endereço SIP</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="129"/>
|
||||
<source>account_settings_sip_address_copied_message</source>
|
||||
<translation>O seu endereço SIP foi copiado para a área de transferência</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountSettingsPage</name>
|
||||
|
|
@ -361,23 +386,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation>Configurações de conta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation>O URI do proxy de saída está inválido. Por favor, certifique-se que ele está no seguinte formato: sip:<host>:<porta>;transport=<transporte> (:<porta> é opcional)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Erro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +414,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation>URI do correio de voz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation>Transporte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -891,31 +893,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation>Um número ou endereço SIP é exigido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation>Não foi possível definir encaminhamento de chamada, tempo de requisição esgotado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation>Desabilitando encaminhamento de chamada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation>Habilitando encaminhamento de chamada para:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation>Encaminhamento de chamada ativado para: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation>Encaminhamento de chamada desativado</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1138,8 +1115,8 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<translation>Tempo esgotado do servidor</translation>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished">Tempo esgotado do servidor</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -1918,7 +1895,7 @@
|
|||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="45"/>
|
||||
<source>settings_contacts_carddav_popup_synchronization_error_message</source>
|
||||
<extracomment>"Erreur de synchronisation!"</extracomment>
|
||||
<translation>Erro de sincronização!</translation>
|
||||
<translation type="unfinished">Erro de sincronização!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="62"/>
|
||||
|
|
@ -2486,6 +2463,11 @@ Apenas seu correspondente pode descriptografá-las.</translation>
|
|||
<extracomment>Creation de la conversation en cours …</extracomment>
|
||||
<translation>Criando conversa…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="46"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Erro</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatSettingsLayout</name>
|
||||
|
|
@ -4326,9 +4308,9 @@ Apenas seu correspondente pode descriptografá-las.</translation>
|
|||
<translation>Erro no código de validação</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation>Erro</translation>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="220"/>
|
||||
<source>cancel</source>
|
||||
<translation>Cancelar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -5612,7 +5594,7 @@ Para habilitá-las em um projeto comercial, por favor, entre em contato conosco.
|
|||
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="638"/>
|
||||
<source>forward_to_title</source>
|
||||
<extracomment>Forward to…</extracomment>
|
||||
<translation>Encaminhar para…</translation>
|
||||
<translation type="unfinished">Encaminhar para…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="672"/>
|
||||
|
|
@ -6669,7 +6651,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
|
|||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="926"/>
|
||||
<source>Italy</source>
|
||||
<translation>Itália</translation>
|
||||
<translation type="unfinished">Itália</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="929"/>
|
||||
|
|
@ -7317,9 +7299,9 @@ Failed to create 1-1 conversation with %1 !</extracomment>
|
|||
<location filename="../../view/Control/Tool/Helper/utils.js" line="494"/>
|
||||
<source>formatMonths</source>
|
||||
<extracomment>'%1 month'</extracomment>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
<translation>
|
||||
<numerusform>um mês</numerusform>
|
||||
<numerusform>%1 meses</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
|
|
|
|||
|
|
@ -304,6 +304,11 @@
|
|||
<extracomment>"No information"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="127"/>
|
||||
<source>copied</source>
|
||||
<translation>Скопированный</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountSettingsPage</name>
|
||||
|
|
@ -361,23 +366,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation>Настройки учётной записи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Ошибка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +394,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation>URI голосовой почты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation>Транспорт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -892,31 +874,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1139,8 +1096,8 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<translation>Тайм-аут сервера</translation>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished">Тайм-аут сервера</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -1920,7 +1877,7 @@
|
|||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="45"/>
|
||||
<source>settings_contacts_carddav_popup_synchronization_error_message</source>
|
||||
<extracomment>"Erreur de synchronisation!"</extracomment>
|
||||
<translation>Ошибка синхронизации!</translation>
|
||||
<translation type="unfinished">Ошибка синхронизации!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="62"/>
|
||||
|
|
@ -2488,6 +2445,11 @@ Error</extracomment>
|
|||
<extracomment>Creation de la conversation en cours …</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="46"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Ошибка</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatSettingsLayout</name>
|
||||
|
|
@ -4328,9 +4290,9 @@ Error</extracomment>
|
|||
<translation>Ошибка в коде проверки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation>Ошибка</translation>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="220"/>
|
||||
<source>cancel</source>
|
||||
<translation>Отмена</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -6682,7 +6644,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
|
|||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="926"/>
|
||||
<source>Italy</source>
|
||||
<translation>Италия</translation>
|
||||
<translation type="unfinished">Италия</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="929"/>
|
||||
|
|
|
|||
|
|
@ -361,23 +361,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +389,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -892,31 +869,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1139,7 +1091,7 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
@ -4322,11 +4274,6 @@ Error</extracomment>
|
|||
<extracomment>"Erreur dans le code de validation"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ManageParticipants</name>
|
||||
|
|
|
|||
|
|
@ -304,6 +304,11 @@
|
|||
<extracomment>"No information"</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="127"/>
|
||||
<source>copied</source>
|
||||
<translation>Скопійовано</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountSettingsPage</name>
|
||||
|
|
@ -361,23 +366,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation>Налаштування облікового запису</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Помилка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +394,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation>URI голосової пошти</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation>Транспорт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -892,31 +874,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1139,8 +1096,8 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<translation>Час очікування сервера</translation>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished">Час очікування сервера</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -1920,7 +1877,7 @@
|
|||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="45"/>
|
||||
<source>settings_contacts_carddav_popup_synchronization_error_message</source>
|
||||
<extracomment>"Erreur de synchronisation!"</extracomment>
|
||||
<translation>Помилка синхронізації!</translation>
|
||||
<translation type="unfinished">Помилка синхронізації!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="62"/>
|
||||
|
|
@ -2488,6 +2445,11 @@ Error</extracomment>
|
|||
<extracomment>Creation de la conversation en cours …</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="46"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>Помилка</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatSettingsLayout</name>
|
||||
|
|
@ -4328,9 +4290,9 @@ Error</extracomment>
|
|||
<translation>Помилка в коді перевірки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation>Помилка</translation>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="220"/>
|
||||
<source>cancel</source>
|
||||
<translation>Скасувати</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -6682,7 +6644,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
|
|||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="926"/>
|
||||
<source>Italy</source>
|
||||
<translation>Італія</translation>
|
||||
<translation type="unfinished">Італія</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="929"/>
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@
|
|||
<location filename="../../model/account/AccountModel.cpp" line="309"/>
|
||||
<source>set_outbound_proxy_uri_failed_error_message</source>
|
||||
<extracomment>Unable to set outbound proxy uri, failed creating address from %1</extracomment>
|
||||
<translation>无法设置出站代理 URI,无法从 %1 创建地址</translation>
|
||||
<translation type="unfinished">无法设置出站代理 URI,无法从 %1 创建地址</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../model/account/AccountModel.cpp" line="418"/>
|
||||
|
|
@ -304,6 +304,11 @@
|
|||
<extracomment>"No information"</extracomment>
|
||||
<translation>无信息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml" line="127"/>
|
||||
<source>copied</source>
|
||||
<translation>已复制</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AccountSettingsPage</name>
|
||||
|
|
@ -361,23 +366,6 @@
|
|||
<source>settings_account_title</source>
|
||||
<translation>账户设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="32"/>
|
||||
<source>info_popup_invalid_registrar_uri_message</source>
|
||||
<extracomment>Registrar uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="34"/>
|
||||
<source>info_popup_invalid_outbound_proxy_message</source>
|
||||
<extracomment>Outbound proxy uri is invalid. Please make sure it matches the following format : sip:<host>:<port>;transport=<transport> (:<port> is optional)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="35"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="45"/>
|
||||
<source>information_popup_success_title</source>
|
||||
|
|
@ -406,12 +394,6 @@
|
|||
<extracomment>"URI de messagerie vocale"</extracomment>
|
||||
<translation>语音邮箱服务器URI</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="120"/>
|
||||
<source>account_settings_transport_title</source>
|
||||
<extracomment>"Transport"</extracomment>
|
||||
<translation>传输</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="127"/>
|
||||
<source>account_settings_registrar_uri_title</source>
|
||||
|
|
@ -728,7 +710,7 @@
|
|||
<message>
|
||||
<location filename="../../core/App.cpp" line="452"/>
|
||||
<source>info_popup_new_version_download_label</source>
|
||||
<translation> </translation>
|
||||
<translation type="unfinished"> </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -895,31 +877,6 @@
|
|||
<source>settings_call_forward_address_cannot_be_empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="45"/>
|
||||
<source>settings_call_forward_address_timeout</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="56"/>
|
||||
<source>settings_call_forward_address_progress_disabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="59"/>
|
||||
<source>settings_call_forward_address_progress_enabling</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="32"/>
|
||||
<source>settings_call_forward_activation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CallForwardSettingsLayout.qml" line="33"/>
|
||||
<source>settings_call_forward_deactivation_success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CallHistoryLayout</name>
|
||||
|
|
@ -1142,8 +1099,8 @@
|
|||
<message>
|
||||
<location filename="../../model/call/CallModel.cpp" line="388"/>
|
||||
<source>call_error_server_timeout_toast</source>
|
||||
<extracomment>"Server tiemout"</extracomment>
|
||||
<translation>服务器连接超时</translation>
|
||||
<extracomment>"Server timeout"</extracomment>
|
||||
<translation type="unfinished">服务器连接超时</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -1921,7 +1878,7 @@
|
|||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="45"/>
|
||||
<source>settings_contacts_carddav_popup_synchronization_error_message</source>
|
||||
<extracomment>"Erreur de synchronisation!"</extracomment>
|
||||
<translation>同步错误!</translation>
|
||||
<translation type="unfinished">同步错误!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Layout/Settings/CarddavSettingsLayout.qml" line="62"/>
|
||||
|
|
@ -2485,6 +2442,11 @@ Error</extracomment>
|
|||
<extracomment>Creation de la conversation en cours …</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="46"/>
|
||||
<source>info_popup_error_title</source>
|
||||
<translation>错误</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatSettingsLayout</name>
|
||||
|
|
@ -4325,9 +4287,14 @@ Error</extracomment>
|
|||
<translation>验证码错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
|
||||
<source>information_popup_error_title</source>
|
||||
<translation>错误</translation>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="207"/>
|
||||
<source>oidc_connection_waiting_message</source>
|
||||
<translation> </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="220"/>
|
||||
<source>cancel</source>
|
||||
<translation>取消</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -6657,7 +6624,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
|
|||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="926"/>
|
||||
<source>Italy</source>
|
||||
<translation>意大利</translation>
|
||||
<translation type="unfinished">意大利</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../tool/Utils.cpp" line="929"/>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include "core/App.hpp"
|
||||
#include "core/logger/QtLogger.hpp"
|
||||
#include "core/path/Paths.hpp"
|
||||
|
||||
#include <QLocale>
|
||||
#include <QSurfaceFormat>
|
||||
#include <QTranslator>
|
||||
|
|
@ -22,6 +24,7 @@ FILE *gStream = NULL;
|
|||
#define ACCESSBILITY_WORKAROUND
|
||||
#include <QAccessible>
|
||||
#include <QAccessibleEvent>
|
||||
|
||||
void DummyUpdateHandler(QAccessibleEvent *event) {
|
||||
}
|
||||
void DummyRootObjectHandler(QObject *) {
|
||||
|
|
@ -39,6 +42,7 @@ void cleanStream() {
|
|||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
/*
|
||||
#if defined _WIN32
|
||||
// log in console only if launched from console
|
||||
|
|
@ -48,6 +52,7 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
#endif
|
||||
*/
|
||||
|
||||
// Useful to share camera on Fullscreen (other context) or multiscreens
|
||||
lDebug() << "[Main] Setting ShareOpenGLContexts";
|
||||
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
|
||||
|
|
@ -63,6 +68,7 @@ int main(int argc, char *argv[]) {
|
|||
setlocale(LC_CTYPE, ".UTF8");
|
||||
lDebug() << "[Main] Creating application";
|
||||
auto app = QSharedPointer<App>::create(argc, argv);
|
||||
|
||||
#ifdef ACCESSBILITY_WORKAROUND
|
||||
QAccessible::installUpdateHandler(DummyUpdateHandler);
|
||||
QAccessible::installRootObjectHandler(DummyRootObjectHandler);
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
#include "core/path/Paths.hpp"
|
||||
#include "model/core/CoreModel.hpp"
|
||||
#include "model/setting/SettingsModel.hpp"
|
||||
#include "model/tool/ToolModel.hpp"
|
||||
#include "tool/Utils.hpp"
|
||||
|
||||
|
|
@ -96,17 +97,10 @@ bool AccountManager::login(QString username,
|
|||
}
|
||||
|
||||
if (!displayName.isEmpty()) identity->setDisplayName(Utils::appStringToCoreString(displayName));
|
||||
if (!registrarUri.isEmpty()) {
|
||||
auto linRegistrarUri = ToolModel::interpretUrl(registrarUri);
|
||||
params->setServerAddress(linRegistrarUri);
|
||||
}
|
||||
if (!outboundProxyAddress.isEmpty()) {
|
||||
auto linOutboundProxyAddress = ToolModel::interpretUrl(outboundProxyAddress);
|
||||
if (linOutboundProxyAddress) params->setRoutesAddresses({linOutboundProxyAddress});
|
||||
}
|
||||
|
||||
if (!domain.isEmpty()) {
|
||||
identity->setDomain(Utils::appStringToCoreString(domain));
|
||||
if (QString::compare(domain, "sip.linphone.org")) {
|
||||
if (QString::compare(domain, SettingsModel::getInstance()->getDefaultDomain())) {
|
||||
params->setLimeServerUrl("");
|
||||
auto computedServerAddress =
|
||||
factory->createAddress(Utils::appStringToCoreString(QStringLiteral("sip:%1").arg(domain)));
|
||||
|
|
@ -130,6 +124,28 @@ bool AccountManager::login(QString username,
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!registrarUri.isEmpty()) {
|
||||
auto linRegistrarUri = factory->createAddress(Utils::appStringToCoreString(registrarUri));
|
||||
if (linRegistrarUri) params->setServerAddress(linRegistrarUri);
|
||||
else {
|
||||
//: Registrar uri is invalid. Please make sure it matches the following format :
|
||||
//: sip:host>:<port>;transport=<transport> (:<port> is optional)
|
||||
*errorMessage = tr("assistant_account_login_registrar_uri_error");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!outboundProxyAddress.isEmpty()) {
|
||||
auto linOutboundProxyAddress = factory->createAddress(Utils::appStringToCoreString(outboundProxyAddress));
|
||||
if (linOutboundProxyAddress) params->setRoutesAddresses({linOutboundProxyAddress});
|
||||
else {
|
||||
//: Outbound proxy uri is invalid. Please make sure it matches the following format :
|
||||
//: sip:host>:<port>;transport=<transport> (:<port> is optional)
|
||||
*errorMessage = tr("assistant_account_login_outbound_proxy_uri_error");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (account->setParams(params)) {
|
||||
//: "Unable to configure account settings."
|
||||
*errorMessage = tr("assistant_account_login_params_configuration_error");
|
||||
|
|
@ -169,6 +185,7 @@ bool AccountManager::login(QString username,
|
|||
}
|
||||
emit registrationStateChanged(state, account->getError(), errorMessage);
|
||||
});
|
||||
|
||||
auto status = core->addAccount(account);
|
||||
if (status == -1) {
|
||||
//: "Unable to add account."
|
||||
|
|
@ -340,10 +357,11 @@ void AccountManager::linkNewAccountUsingCode(const QString &code,
|
|||
const std::string &errorMessage, const std::shared_ptr<const linphone::Dictionary> ¶meterErrors) {
|
||||
if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkEmailUsingCode) {
|
||||
lInfo() << "[AccountManager] error linking email to account" << errorMessage;
|
||||
emit linkingNewAccountWithCodeFailed(Utils::coreStringToAppString(errorMessage));
|
||||
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkPhoneNumberUsingCode) {
|
||||
lInfo() << "[AccountManager] error linking phone number to account" << errorMessage;
|
||||
emit linkingNewAccountWithCodeFailed(Utils::coreStringToAppString(errorMessage));
|
||||
}
|
||||
emit linkingNewAccountWithCodeFailed(Utils::coreStringToAppString(errorMessage));
|
||||
});
|
||||
if (registerType == RegisterType::Email)
|
||||
mAccountManagerServicesModel->linkEmailToAccountUsingCode(sipIdentityAddress,
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ void AccountModel::setPictureUri(QString uri) {
|
|||
// Hack because Account doesn't provide callbacks on updated data
|
||||
// emit pictureUriChanged(uri);
|
||||
auto core = CoreModel::getInstance()->getCore();
|
||||
emit CoreModel::getInstance() -> defaultAccountChanged(core, core->getDefaultAccount());
|
||||
emit CoreModel::getInstance()->defaultAccountChanged(core, core->getDefaultAccount());
|
||||
}
|
||||
|
||||
void AccountModel::onDefaultAccountChanged() {
|
||||
|
|
@ -182,7 +182,7 @@ void AccountModel::setDisplayName(QString displayName) {
|
|||
// Hack because Account doesn't provide callbacks on updated data
|
||||
// emit displayNameChanged(displayName);
|
||||
auto core = CoreModel::getInstance()->getCore();
|
||||
emit CoreModel::getInstance() -> defaultAccountChanged(core, core->getDefaultAccount());
|
||||
emit CoreModel::getInstance()->defaultAccountChanged(core, core->getDefaultAccount());
|
||||
}
|
||||
|
||||
void AccountModel::setDialPlan(int index) {
|
||||
|
|
@ -302,9 +302,11 @@ QString AccountModel::getOutboundProxyUri() const {
|
|||
}
|
||||
|
||||
void AccountModel::setOutboundProxyUri(QString value) {
|
||||
auto linOutboundProxyAddress = ToolModel::interpretUrl(value);
|
||||
auto linOutboundProxyAddress = linphone::Factory::get()->createAddress(Utils::appStringToCoreString(value));
|
||||
if (!linOutboundProxyAddress) {
|
||||
//: Unable to set outbound proxy uri, failed creating address from %1
|
||||
//: Unable to set outbound proxy uri from address %1.
|
||||
//: Please make sure it matches the following format :
|
||||
//: sip:host>:<port>;transport=<transport> (:<port> is optional)
|
||||
emit setValueFailed(tr("set_outbound_proxy_uri_failed_error_message").arg(value));
|
||||
return;
|
||||
} else {
|
||||
|
|
@ -526,6 +528,11 @@ void AccountModel::setPresence(LinphoneEnums::Presence presence,
|
|||
QString presenceNote) {
|
||||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||
|
||||
if (!mMonitor->getParams()->publishEnabled()) {
|
||||
lDebug() << log().arg("cannot set presence as publish is disabled in account params, return");
|
||||
return;
|
||||
}
|
||||
|
||||
lDebug() << log().arg("presence set request to: " + LinphoneEnums::toString(presence) + " | user initiated? " +
|
||||
(userInitiated ? "true" : "false") + " | reset to auto? " + (resetToAuto ? "true" : "false"));
|
||||
|
||||
|
|
@ -561,16 +568,8 @@ void AccountModel::setPresence(LinphoneEnums::Presence presence,
|
|||
core->getConfig()->sync();
|
||||
}
|
||||
|
||||
if (!presenceNote.isEmpty()) {
|
||||
core->getConfig()->setString(accountSection, "presence_note", Utils::appStringToCoreString(presenceNote));
|
||||
core->getConfig()->sync();
|
||||
}
|
||||
|
||||
if (!mMonitor->getParams()->publishEnabled()) {
|
||||
auto params = mMonitor->getParams()->clone();
|
||||
params->enablePublish(true);
|
||||
mMonitor->setParams(params);
|
||||
}
|
||||
core->getConfig()->setString(accountSection, "presence_note", Utils::appStringToCoreString(presenceNote));
|
||||
core->getConfig()->sync();
|
||||
|
||||
auto presenceModel = ToolModel::appPresenceToCorePresenceModel(presence, presenceNote);
|
||||
core->setPresenceModel(presenceModel); // No api (yet) at the account level
|
||||
|
|
|
|||
|
|
@ -102,6 +102,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
|||
lWarning() << log().arg("Timeout reached for OpenID connection.");
|
||||
dynamic_cast<OAuthHttpServerReplyHandler *>(mOidc.replyHandler())->close();
|
||||
CoreModel::getInstance()->getCore()->abortAuthentication(mAuthInfo);
|
||||
emit timeoutTimerStopped();
|
||||
//: Timeout: Not authenticated
|
||||
emit statusChanged(tr("oidc_authentication_timeout_message"));
|
||||
emit finished();
|
||||
|
|
@ -120,14 +121,14 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
|||
connect(&mOidc, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](QAbstractOAuth::Status status) {
|
||||
switch (status) {
|
||||
case QAbstractOAuth::Status::Granted: {
|
||||
mTimeout.stop();
|
||||
stopTimeoutTimer();
|
||||
//: Authentication granted
|
||||
emit statusChanged(tr("oidc_authentication_granted_message"));
|
||||
emit authenticated();
|
||||
break;
|
||||
}
|
||||
case QAbstractOAuth::Status::NotAuthenticated: {
|
||||
mTimeout.stop();
|
||||
stopTimeoutTimer();
|
||||
//: Not authenticated
|
||||
emit statusChanged(tr("oidc_authentication_not_authenticated_message"));
|
||||
emit finished();
|
||||
|
|
@ -149,7 +150,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
|||
});
|
||||
|
||||
connect(&mOidc, &QOAuth2AuthorizationCodeFlow::requestFailed, [=](QAbstractOAuth::Error error) {
|
||||
mTimeout.stop();
|
||||
stopTimeoutTimer();
|
||||
|
||||
const QMetaObject metaObject = QAbstractOAuth::staticMetaObject;
|
||||
int index = metaObject.indexOfEnumerator("Error");
|
||||
|
|
@ -183,12 +184,16 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
|||
});
|
||||
|
||||
connect(&mOidc, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser, [this](const QUrl &url) {
|
||||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||
qDebug() << "Browser authentication url : " << url;
|
||||
//: Requesting authorization from browser
|
||||
emit statusChanged(tr("oidc_authentication_request_auth_message"));
|
||||
mTimeout.start();
|
||||
emit timeoutTimerStarted();
|
||||
QDesktopServices::openUrl(url);
|
||||
});
|
||||
mTimeout.start();
|
||||
emit timeoutTimerStarted();
|
||||
|
||||
connect(&mOidc, &QOAuth2AuthorizationCodeFlow::finished, [this](QNetworkReply *reply) {
|
||||
connect(reply, &QNetworkReply::errorOccurred,
|
||||
|
|
@ -261,6 +266,29 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
|||
connect(reply, &QNetworkReply::finished, this, &OIDCModel::openIdConfigReceived);
|
||||
}
|
||||
|
||||
void OIDCModel::forceTimeout() {
|
||||
lWarning() << log().arg("Froce timeout for OpenID connection.");
|
||||
stopTimeoutTimer();
|
||||
dynamic_cast<OAuthHttpServerReplyHandler *>(mOidc.replyHandler())->close();
|
||||
CoreModel::getInstance()->getCore()->abortAuthentication(mAuthInfo);
|
||||
//: Timeout: Not authenticated
|
||||
emit statusChanged(tr("oidc_authentication_timeout_message"));
|
||||
emit finished();
|
||||
}
|
||||
|
||||
bool OIDCModel::isTimerRunning() const {
|
||||
return mTimeout.isActive();
|
||||
}
|
||||
|
||||
int OIDCModel::getRemainingTimeBeforeTimeOut() {
|
||||
return mTimeout.remainingTime();
|
||||
}
|
||||
|
||||
void OIDCModel::stopTimeoutTimer() {
|
||||
mTimeout.stop();
|
||||
emit timeoutTimerStopped();
|
||||
}
|
||||
|
||||
void OIDCModel::openIdConfigReceived() {
|
||||
auto reply = dynamic_cast<QNetworkReply *>(sender());
|
||||
auto document = QJsonDocument::fromJson(reply->readAll());
|
||||
|
|
|
|||
|
|
@ -36,12 +36,18 @@ public:
|
|||
|
||||
void openIdConfigReceived();
|
||||
void setBearers();
|
||||
void forceTimeout();
|
||||
bool isTimerRunning() const;
|
||||
int getRemainingTimeBeforeTimeOut();
|
||||
void stopTimeoutTimer();
|
||||
|
||||
signals:
|
||||
void authenticated();
|
||||
void requestFailed(const QString &error);
|
||||
void statusChanged(const QString &status);
|
||||
void finished();
|
||||
void timeoutTimerStarted();
|
||||
void timeoutTimerStopped();
|
||||
|
||||
private:
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ void CallModel::accept(bool withVideo) {
|
|||
activateLocalVideo(params, withVideo);
|
||||
mMonitor->acceptWithParams(params);
|
||||
emit localVideoEnabledChanged(withVideo);
|
||||
emit cameraEnabledChanged(params->cameraEnabled());
|
||||
emit cameraEnabledChanged(withVideo && params->cameraEnabled());
|
||||
}
|
||||
|
||||
void CallModel::decline() {
|
||||
|
|
@ -300,6 +300,7 @@ void CallModel::changeConferenceVideoLayout(LinphoneEnums::ConferenceLayout layo
|
|||
auto params = coreManager->getCore()->createCallParams(mMonitor);
|
||||
params->setConferenceVideoLayout(LinphoneEnums::toLinphone(layout));
|
||||
params->enableVideo(layout != LinphoneEnums::ConferenceLayout::AudioOnly);
|
||||
params->enableCamera(layout != LinphoneEnums::ConferenceLayout::AudioOnly);
|
||||
if (!params->videoEnabled() && params->screenSharingEnabled()) {
|
||||
params->enableScreenSharing(false); // Deactivate screensharing if going to audio only.
|
||||
}
|
||||
|
|
@ -408,7 +409,7 @@ void CallModel::updateCallErrorFromReason(linphone::Reason reason) {
|
|||
error = tr("call_error_temporarily_unavailable_toast");
|
||||
break;
|
||||
case linphone::Reason::ServerTimeout:
|
||||
//: "Server tiemout"
|
||||
//: "Server timeout"
|
||||
error = tr("call_error_server_timeout_toast");
|
||||
break;
|
||||
default:
|
||||
|
|
@ -459,9 +460,11 @@ void CallModel::onStateChanged(const std::shared_ptr<linphone::Call> &call,
|
|||
auto videoDirection = params->getVideoDirection();
|
||||
auto remoteVideoDirection = call->getRemoteParams()->getVideoDirection();
|
||||
lInfo() << log().arg("Camera enabled changed") << params->cameraEnabled();
|
||||
emit cameraEnabledChanged(params->cameraEnabled());
|
||||
emit localVideoEnabledChanged(videoDirection == linphone::MediaDirection::SendOnly ||
|
||||
videoDirection == linphone::MediaDirection::SendRecv);
|
||||
emit cameraEnabledChanged((videoDirection == linphone::MediaDirection::SendOnly ||
|
||||
videoDirection == linphone::MediaDirection::SendRecv) &&
|
||||
params->cameraEnabled());
|
||||
emit remoteVideoEnabledChanged(remoteVideoDirection == linphone::MediaDirection::SendOnly ||
|
||||
remoteVideoDirection == linphone::MediaDirection::SendRecv);
|
||||
updateConferenceVideoLayout();
|
||||
|
|
|
|||
|
|
@ -44,6 +44,15 @@ ChatMessageModel::ChatMessageModel(const std::shared_ptr<linphone::ChatMessage>
|
|||
mEphemeralTimer.stop();
|
||||
deleteMessageFromChatRoom(false);
|
||||
});
|
||||
// We need to force this signal sending because there is no callback to know when a message has been read
|
||||
connect(CoreModel::getInstance().get(), &CoreModel::chatRoomRead, this,
|
||||
[this](const std::shared_ptr<linphone::Core> &core, const std::shared_ptr<linphone::ChatRoom> &chatRoom) {
|
||||
if (chatRoom == mMonitor->getChatRoom()) {
|
||||
if (mMonitor->isRead()) {
|
||||
emit messageRead(mMonitor);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ChatMessageModel::~ChatMessageModel() {
|
||||
|
|
@ -91,8 +100,8 @@ bool ChatMessageModel::isRead() const {
|
|||
|
||||
void ChatMessageModel::markAsRead() {
|
||||
mMonitor->markAsRead();
|
||||
emit messageRead();
|
||||
emit CoreModel::getInstance() -> messageReadInChatRoom(mMonitor->getChatRoom());
|
||||
emit messageRead(mMonitor);
|
||||
emit CoreModel::getInstance()->messageReadInChatRoom(mMonitor->getChatRoom());
|
||||
}
|
||||
|
||||
void ChatMessageModel::deleteMessageFromChatRoom(bool deletedByUser) {
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public:
|
|||
|
||||
signals:
|
||||
void messageDeleted(bool deletedByUser);
|
||||
void messageRead();
|
||||
void messageRead(const std::shared_ptr<linphone::ChatMessage> &chatMessage);
|
||||
|
||||
void msgStateChanged(const std::shared_ptr<linphone::ChatMessage> &message, linphone::ChatMessage::State state);
|
||||
void newMessageReaction(const std::shared_ptr<linphone::ChatMessage> &message,
|
||||
|
|
@ -102,6 +102,7 @@ signals:
|
|||
private:
|
||||
linphone::ChatMessage::State mMessageState;
|
||||
QTimer mEphemeralTimer;
|
||||
std::weak_ptr<linphone::ChatRoom> mChatRoom;
|
||||
|
||||
DECLARE_ABSTRACT_OBJECT
|
||||
|
||||
|
|
|
|||