mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-17 11:28:07 +00:00
parent
4a43f00e31
commit
ea680e4e77
68 changed files with 3020 additions and 2732 deletions
80
.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml
Normal file
80
.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
|
||||
job-archlinux-latest-makefile-gcc:
|
||||
|
||||
tags: [ "docker-archlinux-latest" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latest
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-archlinux-latest-makefile-clang:
|
||||
|
||||
tags: [ "docker-archlinux-latest" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latest
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
#################################################
|
||||
# Ninja
|
||||
#################################################
|
||||
|
||||
|
||||
job-archlinux-latest-ninja-gcc:
|
||||
|
||||
tags: [ "docker-archlinux-latest" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latest
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-archlinux-latest-ninja-gcc-novideo:
|
||||
|
||||
tags: [ "docker-archlinux-latest" ]
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-archlinux-latest-ninja-gcc
|
||||
|
||||
|
||||
job-archlinux-latest-ninja-clang:
|
||||
|
||||
tags: [ "docker-archlinux-latest" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latest
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-archlinux-latest-ninja-clang-novideo:
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-archlinux-latest-ninja-clang
|
||||
|
||||
|
||||
80
.gitlab-ci-files/job-linux-desktop-centos7.yml
Normal file
80
.gitlab-ci-files/job-linux-desktop-centos7.yml
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
job-centos7-makefile-gcc:
|
||||
|
||||
tags: [ "docker-centos7" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-centos7-makefile-clang:
|
||||
|
||||
tags: [ "docker-centos7" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
#################################################
|
||||
# Ninja
|
||||
#################################################
|
||||
|
||||
|
||||
job-centos7-ninja-gcc:
|
||||
|
||||
tags: [ "docker-centos7" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-centos7-ninja-gcc-novideo:
|
||||
|
||||
tags: [ "docker-centos7" ]
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-centos7-ninja-gcc
|
||||
|
||||
|
||||
job-centos7-ninja-clang:
|
||||
|
||||
tags: [ "docker-centos7" ]
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
CMAKE_OPTIONS: -DENABLE_LIME=ON
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-centos7-ninja-clang-novideo:
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-centos7-ninja-clang
|
||||
|
||||
|
||||
100
.gitlab-ci-files/job-linux-desktop-debian10.yml
Normal file
100
.gitlab-ci-files/job-linux-desktop-debian10.yml
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
#################################################
|
||||
# Makefile
|
||||
#################################################
|
||||
|
||||
|
||||
job-debian10-makefile-gcc:
|
||||
|
||||
tags: [ "docker-debian10" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-debian10-makefile-clang:
|
||||
|
||||
tags: [ "docker-debian10" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
#################################################
|
||||
# Ninja
|
||||
#################################################
|
||||
|
||||
|
||||
job-debian10-ninja-gcc:
|
||||
|
||||
tags: [ "docker-debian10" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-debian10-ninja-gcc-novideo:
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-debian10-ninja-gcc
|
||||
|
||||
|
||||
job-debian10-ninja-gcc-smallsdk:
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO
|
||||
extends: job-debian10-ninja-gcc
|
||||
|
||||
|
||||
job-debian10-ninja-clang:
|
||||
|
||||
tags: [ "docker-debian10" ]
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:10
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_DOC=ON
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-debian10-ninja-clang-novideo:
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-debian10-ninja-clang
|
||||
|
||||
#################################################
|
||||
# TESTS
|
||||
#################################################
|
||||
|
||||
|
||||
57
.gitlab-ci-files/job-linux-desktop-debian8.yml
Normal file
57
.gitlab-ci-files/job-linux-desktop-debian8.yml
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#################################################
|
||||
# Makefile
|
||||
#################################################
|
||||
|
||||
|
||||
job-debian8-makefile-gcc:
|
||||
|
||||
tags: [ "docker-debian8" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:8
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
LBC_NODEBUG_OPTIONS: -- -j$MAKEFILE_JOBS
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-debian8-makefile-clang:
|
||||
|
||||
tags: [ "docker-debian8" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:8
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
LBC_NODEBUG_OPTIONS: -- -j$MAKEFILE_JOBS
|
||||
extends: .job-linux-desktop
|
||||
|
||||
#################################################
|
||||
# Ninja
|
||||
#################################################
|
||||
|
||||
#job-debian8-ninja-gcc:
|
||||
#
|
||||
# tags: [ "docker-debian8" ]
|
||||
# image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:8
|
||||
# variables:
|
||||
# CMAKE_GENERATOR: Ninja
|
||||
# CC: gcc
|
||||
# CXX: g++
|
||||
# extends: .job-linux-desktop
|
||||
|
||||
|
||||
#job-debian8-ninja-clang:
|
||||
#
|
||||
# tags: [ "docker-debian8" ]
|
||||
# image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:8
|
||||
# variables:
|
||||
# CMAKE_GENERATOR: Ninja
|
||||
# CC: clang
|
||||
# CXX: clang++
|
||||
# extends: .job-linux-desktop
|
||||
87
.gitlab-ci-files/job-linux-desktop-debian9.yml
Normal file
87
.gitlab-ci-files/job-linux-desktop-debian9.yml
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
|
||||
job-debian9-makefile-gcc:
|
||||
|
||||
tags: [ "docker-debian9" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:9
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-debian9-makefile-clang:
|
||||
|
||||
tags: [ "docker-debian9" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:9
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
#################################################
|
||||
# Ninja
|
||||
#################################################
|
||||
|
||||
|
||||
job-debian9-ninja-gcc:
|
||||
|
||||
tags: [ "docker-debian9" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:9
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-debian9-ninja-gcc-novideo:
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-debian9-ninja-gcc
|
||||
|
||||
|
||||
job-debian9-ninja-gcc-smallsdk:
|
||||
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO
|
||||
extends: job-debian9-ninja-gcc
|
||||
|
||||
|
||||
job-debian9-ninja-clang:
|
||||
|
||||
tags: [ "docker-debian9" ]
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:9
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_DOC=ON
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-debian9-ninja-clang-novideo:
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-debian9-ninja-clang
|
||||
|
||||
82
.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml
Normal file
82
.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
#################################################
|
||||
# Makefile
|
||||
#################################################
|
||||
|
||||
|
||||
job-ubuntu-rolling-makefile-gcc:
|
||||
|
||||
tags: [ "docker-ubuntu-rolling" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rolling
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-ubuntu-rolling-makefile-clang:
|
||||
|
||||
tags: [ "docker-ubuntu-rolling" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rolling
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
#################################################
|
||||
# Ninja
|
||||
#################################################
|
||||
|
||||
|
||||
job-ubuntu-rolling-ninja-gcc:
|
||||
|
||||
tags: [ "docker-ubuntu-rolling" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rolling
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-ubuntu-rolling-ninja-gcc-novideo:
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-ubuntu-rolling-ninja-gcc
|
||||
|
||||
|
||||
job-ubuntu-rolling-ninja-clang:
|
||||
tags: [ "docker-ubuntu-rolling" ]
|
||||
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rolling
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
extends: .job-linux-desktop
|
||||
|
||||
|
||||
job-ubuntu-rolling-ninja-clang-novideo:
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-ubuntu-rolling-ninja-clang
|
||||
|
||||
43
.gitlab-ci-files/job-linux-desktop.yml
Normal file
43
.gitlab-ci-files/job-linux-desktop.yml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#################################################
|
||||
# BUILD
|
||||
#################################################
|
||||
|
||||
.job-linux-desktop:
|
||||
|
||||
stage: build
|
||||
extends: .linux-prepare
|
||||
|
||||
script:
|
||||
- export CC=$CC
|
||||
- export CXX=$CXX
|
||||
- mkdir -p build-desktop/OUTPUT
|
||||
- export
|
||||
- echo $CMAKE_GENERATOR
|
||||
- echo $DEFAULT_LINUX_CMAKE_OPTIONS
|
||||
- echo $CMAKE_OPTIONS
|
||||
- echo $CMAKE_SANITIZER_OPTIONS
|
||||
# SDK Building
|
||||
- mkdir -p linphone-sdk/build-sdk
|
||||
- cd linphone-sdk/build-sdk
|
||||
- cmake .. -G "$CMAKE_GENERATOR" -DLINPHONESDK_PLATFORM=Desktop $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS
|
||||
- cmake --build . --target sdk $LBC_NODEBUG_OPTIONS
|
||||
- cd ../../submodules/externals/minizip
|
||||
# Minizip submodule Building
|
||||
- mkdir -p build-minizip
|
||||
- cd build-minizip
|
||||
- cmake .. -G "$CMAKE_GENERATOR" $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH="../../../linphone-sdk/build-sdk/linphone-sdk/desktop"
|
||||
- cmake --build . --target all $LBC_NODEBUG_OPTIONS
|
||||
- cmake --build . --target install
|
||||
# Desktop Building
|
||||
- cd ../../../../build-desktop
|
||||
- cmake .. -G "$CMAKE_GENERATOR" $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH="linphone-sdk/build-sdk/linphone-sdk/desktop;submodules/externals/minizip/build-minizip/OUTPUT"
|
||||
- cmake --build . --target all -- $ADDITIONAL_BUILD_OPTIONS
|
||||
- cmake --build . --target install -- $ADDITIONAL_BUILD_OPTIONS
|
||||
|
||||
artifacts:
|
||||
paths:
|
||||
- build-desktop/OUTPUT
|
||||
- linphone-sdk/build-sdk/linphone-sdk/desktop
|
||||
- submodules/externals/minizip/build-minizip/OUTPUT
|
||||
expire_in: 1 week
|
||||
|
||||
34
.gitlab-ci-files/job-linux-prepare.yml
Normal file
34
.gitlab-ci-files/job-linux-prepare.yml
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
.linux-prepare:
|
||||
|
||||
cache:
|
||||
key: $CI_JOB_NAME
|
||||
paths:
|
||||
- ccache/
|
||||
|
||||
extends: .job-prepare
|
||||
|
||||
before_script:
|
||||
##
|
||||
## If a TUNNEL_USER_KEY is defined then start ssh-agent and add the key
|
||||
##
|
||||
- if ! [ -z ${TUNNEL_USER_KEY+x} ]; then eval $(ssh-agent -s); fi
|
||||
- if ! [ -z ${TUNNEL_USER_KEY+x} ]; then echo "$TUNNEL_USER_KEY" | tr -d '\r' | ssh-add - > /dev/null; fi
|
||||
- if ! [ -z ${TUNNEL_USER_KEY+x} ]; then mkdir -p ~/.ssh && chmod 700 ~/.ssh; fi
|
||||
- if ! [ -z ${TUNNEL_USER_KEY+x} ]; then echo -e "Host gitlab.linphone.org\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config; fi
|
||||
|
||||
##
|
||||
## Then configure ccache
|
||||
##
|
||||
- mkdir -p ccache
|
||||
- echo "max_size = $CCACHE_SIZE" > ccache/ccache.conf
|
||||
- echo $CCACHE_SIZE
|
||||
- echo ${PWD}/ccache
|
||||
- export CCACHE_BASEDIR=${PWD}
|
||||
- export CCACHE_DIR=${PWD}/ccache
|
||||
- ccache -s
|
||||
|
||||
after_script:
|
||||
- if ! [ -z ${TUNNEL_USER_KEY+x} ]; then rm -rf ~/.ssh || true; fi
|
||||
- export CCACHE_DIR=${PWD}/ccache
|
||||
- ccache -s
|
||||
|
||||
105
.gitlab-ci-files/job-macosx-desktop.yml
Normal file
105
.gitlab-ci-files/job-macosx-desktop.yml
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
|
||||
.job-macosx-desktop:
|
||||
|
||||
stage: build
|
||||
|
||||
tags: [ "macosx" ]
|
||||
|
||||
script:
|
||||
- ccache -s
|
||||
- export Qt5_DIR=/usr/local/opt/qt/lib/cmake
|
||||
- export PATH=$PATH:/usr/local/opt/qt/bin
|
||||
- if [ -d "build-desktop" ]; then rm -rf build-desktop; fi;
|
||||
- mkdir -p build-desktop/OUTPUT
|
||||
- cd linphone-sdk
|
||||
#SDK Building
|
||||
- if [ -d "build-sdk" ]; then rm -rf build-sdk; fi;
|
||||
- mkdir -p build-sdk
|
||||
- cd build-sdk
|
||||
- echo $CMAKE_GENERATOR
|
||||
- echo $DEFAULT_MACOS_CMAKE_OPTIONS
|
||||
- echo $CMAKE_OPTIONS
|
||||
- echo $ADDITIONAL_BUILD_OPTIONS
|
||||
- cmake .. -G "$CMAKE_GENERATOR" -DLINPHONESDK_PLATFORM=Desktop $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS
|
||||
- cmake --build . $LBC_NODEBUG_OPTIONS
|
||||
- cd ../../submodules/externals/minizip
|
||||
# Minizip submodule Building
|
||||
- if [ -d "build-minizip" ]; then rm -rf build-minizip; fi;
|
||||
- mkdir -p build-minizip
|
||||
- cd build-minizip
|
||||
- cmake .. -G "$CMAKE_GENERATOR" $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH="../../../linphone-sdk/build-sdk/linphone-sdk/desktop"
|
||||
- cmake --build . --target all $LBC_NODEBUG_OPTIONS
|
||||
- cmake --build . --target install
|
||||
# Desktop Building
|
||||
- cd ../../../../build-desktop
|
||||
- cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH="linphone-sdk/build-sdk/linphone-sdk/desktop;submodules/externals/minizip/build-minizip/OUTPUT"
|
||||
- cmake --build . --target all -- $ADDITIONAL_BUILD_OPTIONS
|
||||
# - codesign --verbose -s "$MACOS_SIGNING_IDENTITY" WORK/desktop/Build/linphone_package/Linphone-*.dmg
|
||||
# - cmake --build . --target install -- $ADDITIONAL_BUILD_OPTIONS
|
||||
- ccache -s
|
||||
|
||||
artifacts:
|
||||
paths:
|
||||
- build-desktop/OUTPUT
|
||||
- linphone-sdk/build-sdk/linphone-sdk/desktop
|
||||
- submodules/externals/minizip/build-minizip/OUTPUT
|
||||
expire_in: 1 week
|
||||
|
||||
|
||||
|
||||
#################################################
|
||||
# Makefile
|
||||
#################################################
|
||||
|
||||
|
||||
job-macosx-makefile:
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_GENERATOR: Unix Makefiles
|
||||
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
|
||||
extends: .job-macosx-desktop
|
||||
|
||||
|
||||
#################################################
|
||||
# Ninja
|
||||
#################################################
|
||||
|
||||
|
||||
job-macosx-ninja:
|
||||
|
||||
variables:
|
||||
CMAKE_GENERATOR: Ninja
|
||||
CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON
|
||||
extends: .job-macosx-desktop
|
||||
|
||||
|
||||
job-macosx-ninja-novideo:
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
extends: job-macosx-ninja
|
||||
|
||||
|
||||
#################################################
|
||||
# XCode
|
||||
#################################################
|
||||
|
||||
|
||||
job-macosx-xcode:
|
||||
extends: .job-macosx-desktop
|
||||
variables:
|
||||
XCODE_OPTIONS: -DLINPHONESDK_MACOS_BASE_URL=$MACOS_SNAPSHOTS_URL
|
||||
CMAKE_GENERATOR: Xcode
|
||||
ADDITIONAL_BUILD_OPTIONS: -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=$MAX_NUMBER_TASK
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
- $DEPLOY_RUN_MACOSX
|
||||
|
||||
174
.gitlab-ci-files/job-windows-desktop.yml
Normal file
174
.gitlab-ci-files/job-windows-desktop.yml
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
#################################################
|
||||
# BUILD
|
||||
#################################################
|
||||
|
||||
|
||||
|
||||
#################################################
|
||||
# VS2015
|
||||
#################################################
|
||||
#Wedo not need vs2015 anymore
|
||||
|
||||
#job-windows-vs2015:
|
||||
#
|
||||
# extends: .job-prepare
|
||||
# stage: build
|
||||
# tags: [ "windows" ]
|
||||
# except:
|
||||
# refs:
|
||||
# - feature/peioMergeCi
|
||||
#
|
||||
# except:
|
||||
# variables:
|
||||
# - $DEPLOY_RUN_ANDROID
|
||||
# - $DEPLOY_RUN_IOS
|
||||
# variables:
|
||||
# CMAKE_OPTIONS: -DENABLE_LIME_X3DH=NO
|
||||
#
|
||||
# script:
|
||||
# - mkdir build-desktop
|
||||
# - cd build-desktop
|
||||
# - cmake .. -G "Visual Studio 14 2015" -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=Release %DEFAULT_CMAKE_OPTIONS% %CMAKE_OPTIONS%
|
||||
# - cmake --build . --target sdk --config Release -- /maxcpucount
|
||||
|
||||
#job-windows-vs2015-novideo:
|
||||
#
|
||||
# only:
|
||||
# - schedules
|
||||
# except:
|
||||
# variables:
|
||||
# - $DEPLOY_RUN_ANDROID
|
||||
# - $FAST_LINUX_TESTS
|
||||
# variables:
|
||||
# CMAKE_OPTIONS: -DENABLE_VIDEO=NO
|
||||
# extends: job-windows-vs2015
|
||||
|
||||
.job-windows-vs2017:
|
||||
extends: .job-prepare
|
||||
stage: build
|
||||
tags: [ "windows" ]
|
||||
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_LIME_X3DH=NO -DENABLE_UNIT_TESTS=ON
|
||||
|
||||
script:
|
||||
- SET Qt5_DIR=C:\Qt\5.12.6\msvc2017\lib\cmake
|
||||
- IF EXIST build-desktop RMDIR /S /Q build-desktop
|
||||
- mkdir build-desktop
|
||||
- cd build-desktop
|
||||
- mkdir OUTPUT
|
||||
#SDK Building
|
||||
- cd ../linphone-sdk
|
||||
#handling the case of previous job cancellation
|
||||
- IF EXIST build-sdkdesktop RMDIR /S /Q build-sdkdesktop
|
||||
- mkdir build-sdk
|
||||
- cd build-sdk
|
||||
#we launch the msvc-cl wrapper located in python scripts folder
|
||||
#this wrapper relays only needed calls to the real compiler
|
||||
#cache stats display
|
||||
- C:\PROGRA~1\Python37\Scripts\cl -s
|
||||
- cmake .. -G "Visual Studio 15 2017" -DLINPHONESDK_PLATFORM=Desktop -DENABLE_CSHARP_WRAPPER=YES -DCMAKE_BUILD_TYPE=Release %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS%
|
||||
- cmake --build . --target sdk --config Release %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
|
||||
- cd ../../submodules/externals/minizip
|
||||
# Minizip submodule Building
|
||||
- IF EXIST build-minizip RMDIR /S /Q build-minizip
|
||||
- mkdir build-minizip
|
||||
- cd build-minizip
|
||||
- cmake .. -G "Visual Studio 15 2017" -DCMAKE_BUILD_TYPE=Release %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS% -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH="../../../linphone-sdk/build-sdk/linphone-sdk/desktop"
|
||||
- cmake --build . --target all_build --config Release %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
|
||||
- cmake --build . --target install --config Release %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
|
||||
# Desktop Building
|
||||
- cd ../../../../build-desktop
|
||||
- cmake .. -G "Visual Studio 15 2017" -DENABLE_CSHARP_WRAPPER=YES -DCMAKE_BUILD_TYPE=Release %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS% -DCMAKE_INSTALL_PREFIX=OUTPUT -DCMAKE_PREFIX_PATH="linphone-sdk/build-sdk/linphone-sdk/desktop;submodules/externals/minizip/build-minizip/OUTPUT"
|
||||
- cmake --build . --target all_build --config Release -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
|
||||
- cmake --build . --target install --config Release -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
|
||||
- C:\PROGRA~1\Python37\Scripts\cl -s
|
||||
|
||||
artifacts:
|
||||
paths:
|
||||
- build-desktop\OUTPUT
|
||||
- linphone-sdk\build-sdk\linphone-sdk\desktop
|
||||
- submodules\externals\minizip\build-minizip\OUTPUT
|
||||
expire_in: 1 week
|
||||
|
||||
.job-windows-vs2017-scheduled:
|
||||
extends: .job-windows-vs2017
|
||||
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
- $NIGHTLY_RELEASE
|
||||
- $PACKAGE_RUN_WINDOWS
|
||||
before_script:
|
||||
#cache disabled on scheduled builds since we dot not need the fastest build
|
||||
- set "CLCACHE_DISABLE=1"
|
||||
|
||||
|
||||
job-windows-vs2017:
|
||||
extends: .job-windows-vs2017
|
||||
except:
|
||||
refs:
|
||||
- schedules
|
||||
|
||||
job-windows-vs2017-scheduled:
|
||||
extends: .job-windows-vs2017-scheduled
|
||||
|
||||
job-windows-vs2017-novideo:
|
||||
extends: .job-windows-vs2017-scheduled
|
||||
variables:
|
||||
CMAKE_OPTIONS: -DENABLE_LIME_X3DH=NO -DENABLE_VIDEO=NO
|
||||
|
||||
#################################################
|
||||
# PACKAGE
|
||||
#################################################
|
||||
|
||||
#Remove . when packaging process is ready to use
|
||||
.job-windows-vs2017-package:
|
||||
stage: package
|
||||
tags: [ "windows" ]
|
||||
dependencies:
|
||||
- job-windows-vs2017-scheduled
|
||||
only:
|
||||
variables:
|
||||
- $NIGHTLY_MASTER
|
||||
- $PACKAGE_RUN_WINDOWS
|
||||
|
||||
script:
|
||||
- cd build-desktop/OUTPUT
|
||||
- IF EXIST deploy RMDIR /S /Q deploy
|
||||
- mkdir deploy
|
||||
- copy bin\linphone.exe deploy /Y
|
||||
- xcopy ..\..\linphone-sdk\build-sdk\linphone-sdk\desktop\bin\*.dll deploy /C /Y
|
||||
- xcopy ..\..\submodules\externals\minizip\build-minizip\OUTPUT\bin\*.dll deploy /C /Y
|
||||
|
||||
|
||||
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"
|
||||
- cd build-desktop
|
||||
- chdir > chdir_sdk.temp
|
||||
- set /p OUTPUT_SDK_BUILD=<chdir_sdk.temp
|
||||
- cd ..\cmake\Windows\wrapper\
|
||||
- chdir > chdir_wrapper.temp
|
||||
- set /p OUTPUT_WRAPPER_BUILD=<chdir_wrapper.temp
|
||||
- msbuild -t:restore CsWrapper.csproj
|
||||
- msbuild CsWrapper.csproj /p:MDILCompile=true /p:Platform="x86" /t:build /p:Configuration=Release /p:OutputSdkBuild=%OUTPUT_SDK_BUILD%
|
||||
- cd ..\nuget
|
||||
- git describe > describe.temp
|
||||
- set /p DESCRIBE=<describe.temp
|
||||
- msbuild NuGetLinphoneSDK.vcxproj /p:VersionNumber=%DESCRIBE% /p:OutputSdkBuild=%OUTPUT_SDK_BUILD% /p:OutputWrapperBuild=%OUTPUT_WRAPPER_BUILD%
|
||||
|
||||
after_script:
|
||||
- mkdir "%CI_PROJECT_DIR%/results/windows-nugget"
|
||||
- dir
|
||||
- cd cmake/Windows/nuget/
|
||||
- copy /B *.nupkg "%CI_PROJECT_DIR%/results/windows-nugget"
|
||||
artifacts:
|
||||
paths:
|
||||
- results/*
|
||||
when: always
|
||||
expire_in: 1 week
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -6,27 +6,54 @@ variables:
|
|||
GIT_SUBMODULE_STRATEGY: recursive
|
||||
MAKEFILE_JOBS: 5
|
||||
CCACHE_SIZE: 2G
|
||||
DEFAULT_LINUX_CMAKE_OPTIONS: -DENABLE_NON_FREE_CODECS=YES -DENABLE_OPENH264=YES
|
||||
DEFAULT_MACOS_CMAKE_OPTIONS: -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DENABLE_UPDATE_CHECK=YES
|
||||
DEFAULT_WINDOWS_CMAKE_OPTIONS: -DENABLE_NON_FREE_CODECS=YES -DENABLE_OPENH264=YES -DENABLE_UPDATE_CHECK=YES
|
||||
#this option is used to speedup submodule building times, when we don't need to trace debug (like SDK where it is already tested in its project)
|
||||
LBC_NODEBUG_OPTIONS : --parallel $MAKEFILE_JOBS
|
||||
DEFAULT_LINUX_CMAKE_OPTIONS : -DENABLE_TOOLS=OFF
|
||||
DEFAULT_MACOS_CMAKE_OPTIONS : -DENABLE_TOOLS=OFF
|
||||
DEFAULT_WINDOWS_CMAKE_OPTIONS : -DENABLE_TOOLS=OFF
|
||||
|
||||
|
||||
# DEFAULT_LINUX_CMAKE_OPTIONS: -DENABLE_NON_FREE_CODECS=YES -DENABLE_OPENH264=YES
|
||||
# DEFAULT_MACOS_CMAKE_OPTIONS: -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DENABLE_UPDATE_CHECK=YES
|
||||
# DEFAULT_WINDOWS_CMAKE_OPTIONS: -DENABLE_NON_FREE_CODECS=YES -DENABLE_OPENH264=YES -DENABLE_UPDATE_CHECK=YES
|
||||
|
||||
#activated by default, if there is a problem, see the default
|
||||
#build options in CMakeBuilder
|
||||
#CMAKE_OPTIONS: -DENABLE_LIME_X3DH=YES
|
||||
|
||||
|
||||
#################################################
|
||||
# Platforms to test
|
||||
# Platforms to test
|
||||
#################################################
|
||||
|
||||
.job-prepare:
|
||||
variables:
|
||||
ALL_JOB_VARIABLE: ""
|
||||
|
||||
include:
|
||||
- '.gitlab-ci-files/job-linux.yml'
|
||||
- '.gitlab-ci-files/job-linux-archlinux.yml'
|
||||
- '.gitlab-ci-files/job-linux-centos7.yml'
|
||||
- '.gitlab-ci-files/job-linux-debian8.yml'
|
||||
- '.gitlab-ci-files/job-linux-debian9.yml'
|
||||
- '.gitlab-ci-files/job-linux-ubuntu.yml'
|
||||
- '.gitlab-ci-files/job-macosx.yml'
|
||||
- '.gitlab-ci-files/job-windows.yml'
|
||||
- '.gitlab-ci-files/job-linux-prepare.yml'
|
||||
- '.gitlab-ci-files/job-linux-desktop.yml'
|
||||
- '.gitlab-ci-files/job-linux-desktop-debian8.yml'
|
||||
- '.gitlab-ci-files/job-linux-desktop-debian9.yml'
|
||||
## - '.gitlab-ci-files/job-linux-desktop-debian10.yml'
|
||||
- '.gitlab-ci-files/job-linux-desktop-ubuntu-rolling.yml'
|
||||
- '.gitlab-ci-files/job-linux-desktop-archlinux-latest.yml'
|
||||
- '.gitlab-ci-files/job-linux-desktop-centos7.yml'
|
||||
- '.gitlab-ci-files/job-windows-desktop.yml'
|
||||
- '.gitlab-ci-files/job-macosx-desktop.yml'
|
||||
|
||||
|
||||
# - '.gitlab-ci-files/job-linux.yml'
|
||||
# - '.gitlab-ci-files/job-linux-archlinux.yml'
|
||||
# - '.gitlab-ci-files/job-linux-centos7.yml'
|
||||
# - '.gitlab-ci-files/job-linux-debian8.yml'
|
||||
# - '.gitlab-ci-files/job-linux-debian9.yml'
|
||||
|
||||
# - '.gitlab-ci-files/job-macosx.yml'
|
||||
# - '.gitlab-ci-files/job-windows.yml'
|
||||
|
||||
|
||||
stages:
|
||||
- build
|
||||
- package
|
||||
- deploy
|
||||
# - deploy
|
||||
|
|
|
|||
4
.gitmodules
vendored
4
.gitmodules
vendored
|
|
@ -1,6 +1,6 @@
|
|||
[submodule "submodules/externals/minizip"]
|
||||
path = submodules/externals/minizip
|
||||
url = https://gitlab.linphone.org/BC/public/external/minizip.git
|
||||
url = ../../public/external/minizip.git
|
||||
[submodule "linphone-sdk"]
|
||||
path = linphone-sdk
|
||||
url = https://gitlab.linphone.org/BC/public/linphone-sdk.git
|
||||
url = ../../public/linphone-sdk.git
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
################################################################################
|
||||
# CMakeLists.txt
|
||||
# Copyright (C) 2017-2018 Belledonne Communications, Grenoble France
|
||||
# Copyright (C) 2017-2020 Belledonne Communications, Grenoble France
|
||||
#
|
||||
################################################################################
|
||||
#
|
||||
|
|
@ -97,19 +97,19 @@ set(QT5_PACKAGES_OPTIONAL TextToSpeech)
|
|||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
|
||||
if (LINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS)
|
||||
include("${EP_linphone_CONFIG_DIR}/wrappers/cpp/LinphoneCxxConfig.cmake")
|
||||
include("${EP_bctoolbox_CONFIG_DIR}/BcToolboxConfig.cmake")
|
||||
include("${EP_belcard_CONFIG_DIR}/BelcardConfig.cmake")
|
||||
include("${EP_ms2_CONFIG_DIR}/Mediastreamer2Config.cmake")
|
||||
else ()
|
||||
find_package(LinphoneCxx REQUIRED)
|
||||
find_package(BcToolbox REQUIRED)
|
||||
find_package(Belcard REQUIRED)
|
||||
find_package(Mediastreamer2 REQUIRED)
|
||||
endif ()
|
||||
find_package(LinphoneCxx CONFIG REQUIRED)
|
||||
find_package(Linphone CONFIG REQUIRED)
|
||||
find_package(bctoolbox CONFIG REQUIRED)
|
||||
find_package(belcard CONFIG REQUIRED)
|
||||
find_package(Mediastreamer2 CONFIG REQUIRED)
|
||||
find_package(ortp CONFIG REQUIRED)
|
||||
|
||||
find_package(Minizip REQUIRED)
|
||||
|
||||
message("INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} FRAMEWORK_PATH=${CMAKE_FRAMEWORK_PATH}")
|
||||
message("LINPHONE : ${LINPHONE_INCLUDE_DIRS} => ${LINPHONE_LIBRARIES}")
|
||||
message("LINPHONECXX : ${LINPHONECXX_INCLUDE_DIRS} => ${LINPHONECXX_LIBRARIES}")
|
||||
|
||||
set(SOURCES
|
||||
src/app/App.cpp
|
||||
src/app/AppController.cpp
|
||||
|
|
@ -162,6 +162,7 @@ set(SOURCES
|
|||
src/components/timeline/TimelineModel.cpp
|
||||
src/components/url-handlers/UrlHandlers.cpp
|
||||
src/utils/LinphoneUtils.cpp
|
||||
src/utils/MediastreamerUtils.cpp
|
||||
src/utils/QExifImageHeader.cpp
|
||||
src/utils/Utils.cpp
|
||||
)
|
||||
|
|
@ -221,6 +222,7 @@ set(HEADERS
|
|||
src/components/timeline/TimelineModel.hpp
|
||||
src/components/url-handlers/UrlHandlers.hpp
|
||||
src/utils/LinphoneUtils.hpp
|
||||
src/utils/MediastreamerUtils.hpp
|
||||
src/utils/QExifImageHeader.hpp
|
||||
src/utils/Utils.hpp
|
||||
)
|
||||
|
|
@ -288,7 +290,6 @@ endfunction ()
|
|||
# Force absolute paths.
|
||||
PREPEND(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/")
|
||||
PREPEND(HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/")
|
||||
PREPEND(QRC_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/")
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Compute QML files list.
|
||||
|
|
@ -319,7 +320,7 @@ if (NOT WIN32)
|
|||
check_qml DEPENDS ${QML_SOURCES}
|
||||
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/check_qml_syntax"
|
||||
)
|
||||
endif ()
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/tools/private/pre-commit"
|
||||
|
|
@ -343,23 +344,26 @@ find_package(Qt5 COMPONENTS ${QT5_PACKAGES} REQUIRED)
|
|||
find_package(Qt5 COMPONENTS ${QT5_PACKAGES_OPTIONAL} QUIET)
|
||||
|
||||
if (CMAKE_INSTALL_RPATH)
|
||||
#Retrieve lib path from a know QT executable
|
||||
get_target_property(LUPDATE_PATH Qt5::lupdate LOCATION)
|
||||
get_filename_component(LUPDATE_PATH "${LUPDATE_PATH}" DIRECTORY)
|
||||
get_filename_component(QT_PATH "${LUPDATE_PATH}/../lib" ABSOLUTE)
|
||||
list(APPEND CMAKE_INSTALL_RPATH "${QT_PATH}")
|
||||
endif ()
|
||||
|
||||
# Add languages support.
|
||||
add_subdirectory(${LANGUAGES_DIRECTORY})
|
||||
list(APPEND QRC_RESOURCES "${CMAKE_CURRENT_BINARY_DIR}/${LANGUAGES_DIRECTORY}/${I18N_FILENAME}")
|
||||
|
||||
# Add qrc. (images, qml, translations...)
|
||||
qt5_add_resources(RESOURCES ${QRC_RESOURCES})
|
||||
list(APPEND SOURCES "${CMAKE_CURRENT_BINARY_DIR}/${LANGUAGES_DIRECTORY}/${I18N_FILENAME}")
|
||||
|
||||
# Build.
|
||||
add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${RESOURCES} ${QML_SOURCES})
|
||||
#add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${RESOURCES} ${QML_SOURCES})
|
||||
add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${QML_SOURCES} ${QRC_RESOURCES})
|
||||
set_property(TARGET ${APP_LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
#Turn on automatic resources compilation by cmake
|
||||
#Instead of excplicitely calling qt5_add_resources
|
||||
set_property(TARGET ${APP_LIBRARY} PROPERTY AUTORCC ON)
|
||||
|
||||
bc_git_version(${TARGET_NAME} ${PROJECT_VERSION})
|
||||
add_dependencies(${APP_LIBRARY} ${TARGET_NAME}-git-version)
|
||||
add_dependencies(${APP_LIBRARY} update_translations)
|
||||
|
|
@ -370,13 +374,9 @@ else ()
|
|||
add_executable(${TARGET_NAME} $<TARGET_OBJECTS:${APP_LIBRARY}> ${MAIN_FILE})
|
||||
endif ()
|
||||
|
||||
if (NOT WIN32)
|
||||
add_dependencies(update_translations check_qml)
|
||||
endif ()
|
||||
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "${EXECUTABLE_NAME}")
|
||||
|
||||
set(INCLUDED_DIRECTORIES "${LINPHONECXX_INCLUDE_DIRS}" "${BELCARD_INCLUDE_DIRS}" "${BCTOOLBOX_INCLUDE_DIRS}" "${MEDIASTREAMER2_INCLUDE_DIRS}" "${MINIZIP_INCLUDE_DIRS}")
|
||||
set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MINIZIP_LIBRARIES})
|
||||
set(INCLUDED_DIRECTORIES "${LINPHONECXX_INCLUDE_DIRS}" "${LINPHONE_INCLUDE_DIRS}" "${BELCARD_INCLUDE_DIRS}" "${BCTOOLBOX_INCLUDE_DIRS}" "${MEDIASTREAMER2_INCLUDE_DIRS}" "${MINIZIP_INCLUDE_DIRS}")
|
||||
set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${MINIZIP_LIBRARIES} ${OPUS_LIBRARIES})
|
||||
|
||||
foreach (package ${QT5_PACKAGES})
|
||||
list(APPEND INCLUDED_DIRECTORIES "${Qt5${package}_INCLUDE_DIRS}")
|
||||
|
|
@ -402,6 +402,7 @@ endforeach ()
|
|||
|
||||
if (APPLE)
|
||||
list(APPEND LIBRARIES "-framework Cocoa -framework IOKit")
|
||||
# -framework linphone") #This doesn't work yet
|
||||
endif ()
|
||||
|
||||
target_include_directories(${APP_LIBRARY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
|
||||
|
|
@ -409,6 +410,7 @@ target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES}
|
|||
|
||||
target_link_libraries(${TARGET_NAME} ${LIBRARIES})
|
||||
|
||||
|
||||
foreach (target ${TARGET_NAME})
|
||||
install(TARGETS ${target}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,12 @@ Linphone is a free VoIP and video softphone based on the SIP protocol.
|
|||
|
||||
## Getting started
|
||||
|
||||
Installing dependencies:
|
||||
|
||||
apt-get install libqt53dcore5:amd64 libqt53dextras5:amd64 libqt53dinput5:amd64 libqt53dlogic5:amd64 libqt53dquick5:amd64 libqt53dquickextras5:amd64 libqt53dquickinput5:amd64 libqt53dquickrender5:amd64 libqt53drender5:amd64 libqt5concurrent5:amd64 libqt5core5a:amd64 libqt5dbus5:amd64 libqt5designer5:amd64 libqt5designercomponents5:amd64 libqt5gui5:amd64 libqt5help5:amd64 libqt5multimedia5:amd64 libqt5multimedia5-plugins:amd64 libqt5multimediawidgets5:amd64 libqt5network5:amd64 libqt5opengl5:amd64 libqt5opengl5-dev:amd64 libqt5positioning5:amd64 libqt5printsupport5:amd64 libqt5qml5:amd64 libqt5quick5:amd64 libqt5quickcontrols2-5:amd64 libqt5quickparticles5:amd64 libqt5quicktemplates2-5:amd64 libqt5quicktest5:amd64 libqt5quickwidgets5:amd64 libqt5script5:amd64 libqt5scripttools5:amd64 libqt5sensors5:amd64 libqt5serialport5:amd64 libqt5sql5:amd64 libqt5sql5-sqlite:amd64 libqt5svg5:amd64 libqt5svg5-dev:amd64 libqt5test5:amd64 libqt5webchannel5:amd64 libqt5webengine-data libqt5webenginecore5:amd64 libqt5webenginewidgets5:amd64 libqt5webkit5:amd64 libqt5widgets5:amd64 libqt5x11extras5:amd64 libqt5xml5:amd64 libqt5xmlpatterns5:amd64 qt5-default:amd64 qt5-doc qt5-gtk-platformtheme:amd64 qt5-qmake:amd64 qt5-qmltooling-plugins:amd64
|
||||
|
||||
|
||||
|
||||
Here are the general instructions to build linphone for desktop. The specific instructions for each build platform is described just below.
|
||||
|
||||
1. Install some build tools: `CMake`, `Python` and `Qt5` (_5.9 or newer_). `C++11` support is required!
|
||||
|
|
@ -68,7 +74,7 @@ Before you install packages with Brew, you may have to change directories permis
|
|||
|
||||
3. Open a Windows command line (cmd.exe) in the current directory and run:
|
||||
|
||||
python prepare.py -G "Visual Studio 14 2015" -DENABLE_DOC=OFF
|
||||
python prepare.py -G "Visual Studio 15 2017" -DENABLE_DOC=OFF
|
||||
|
||||
4. Run the following command in the root directory of linphone-desktop:
|
||||
|
||||
|
|
|
|||
90
assets/images/warning.svg
Normal file
90
assets/images/warning.svg
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="28"
|
||||
height="28"
|
||||
viewBox="0 0 28 28"
|
||||
version="1.1"
|
||||
id="svg15"
|
||||
sodipodi:docname="chat_error.svg"
|
||||
inkscape:version="0.92.1 r">
|
||||
<metadata
|
||||
id="metadata19">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>chat_error</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1149"
|
||||
id="namedview17"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.8333333"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg15" />
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title
|
||||
id="title2">chat_error</title>
|
||||
<desc
|
||||
id="desc4">Created with Sketch.</desc>
|
||||
<defs
|
||||
id="defs6" />
|
||||
<g
|
||||
id="Symbols"
|
||||
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1"
|
||||
transform="translate(2,2)">
|
||||
<g
|
||||
id="chat_error">
|
||||
<g
|
||||
id="Group-3">
|
||||
<circle
|
||||
id="Oval"
|
||||
cx="12"
|
||||
cy="12"
|
||||
r="12"
|
||||
class="color-error-style-fill"
|
||||
style="fill:#FF0000" />
|
||||
<g
|
||||
id="Group-2"
|
||||
transform="translate(10,4.6)"
|
||||
style="fill:#ffffff;stroke:#ffffff">
|
||||
<polygon
|
||||
id="Path-1067"
|
||||
transform="rotate(-180,2,4.880676)"
|
||||
points="2,1.7763568e-15 0.5,9.7613525 3.5,9.7613525 "
|
||||
style="stroke-width:0.80000001;stroke-linejoin:round" />
|
||||
<circle
|
||||
id="Oval-24"
|
||||
cx="2.0000005"
|
||||
cy="13.4"
|
||||
r="1.4"
|
||||
style="stroke-width:0.5" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
|
|
@ -11,40 +11,75 @@ set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM true)
|
|||
|
||||
# Build languages resource file.
|
||||
set(TS_FILES)
|
||||
set(I18N_CONTENT "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n <qresource prefix=\"/\">\n")
|
||||
foreach (lang ${LANGUAGES})
|
||||
list(APPEND TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.ts")
|
||||
set(QM_FILES)
|
||||
set(QM_FILES_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
set(I18N_CONTENT "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n <qresource>\n")
|
||||
foreach (lang ${LANGUAGES})
|
||||
# Note: the below `languages/` path is not the same as the `${LANGUAGES_DIRECTORY}` value.
|
||||
# It's the symbolic path used by the linphone binary in the qrc model.
|
||||
# This path is used in `app.cpp`.
|
||||
set(I18N_CONTENT "${I18N_CONTENT} <file alias=\"languages/${lang}\">${lang}.qm</file>\n")
|
||||
endforeach ()
|
||||
|
||||
list(APPEND TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.ts")
|
||||
list(APPEND TARGET_TS_FILES "${CMAKE_CURRENT_BINARY_DIR}/${lang}.ts")
|
||||
list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/${lang}.qm")
|
||||
endforeach()
|
||||
|
||||
set(I18N_CONTENT "${I18N_CONTENT} </qresource>\n</RCC>\n")
|
||||
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${I18N_FILENAME}" "${I18N_CONTENT}")
|
||||
|
||||
# Create `qm` files from `ts` files.
|
||||
qt5_create_translation(QM_FILES ${TS_FILES} ${SOURCES} ${HEADERS} ${QML_SOURCES} OPTIONS -no-obsolete)
|
||||
#Files or directories to inspect for translations references
|
||||
set(TRANSLATION_SOURCES)
|
||||
list(APPEND TRANSLATION_SOURCES "${PROJECT_SOURCE_DIR}/src")
|
||||
list(APPEND TRANSLATION_SOURCES "${PROJECT_SOURCE_DIR}/ui")
|
||||
|
||||
# Workaround: Create empty files for some cmake versions. Otherwise, the qm rules can't be used.
|
||||
foreach (qm ${QM_FILES})
|
||||
if (NOT EXISTS "${qm}")
|
||||
file(GENERATE OUTPUT "${qm}" CONTENT "")
|
||||
endif ()
|
||||
endforeach ()
|
||||
if (WIN32)
|
||||
foreach (lang ${LANGUAGES})
|
||||
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.ts" content)
|
||||
set(cleanedContent)
|
||||
string(REPLACE "\r" "" cleanedContent "${content}")
|
||||
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.ts" "${cleanedContent}")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Update translations.
|
||||
set(LUPDATE_OPTIONS "-no-obsolete")
|
||||
set(LRELEASE_OPTIONS "")
|
||||
|
||||
#Clean existing generated file to force re-creation
|
||||
file(REMOVE ${QM_FILES})
|
||||
file(REMOVE ${TARGET_TS_FILES})
|
||||
|
||||
add_custom_command(OUTPUT ${TARGET_TS_FILES}
|
||||
COMMAND ${Qt5_LUPDATE_EXECUTABLE}
|
||||
ARGS ${LUPDATE_OPTIONS} ${TRANSLATION_SOURCES} -ts ${TS_FILES}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${TS_FILES} ${CMAKE_CURRENT_BINARY_DIR}
|
||||
VERBATIM
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT "Updating translation source files (ts)..."
|
||||
)
|
||||
|
||||
add_custom_command(OUTPUT ${QM_FILES}
|
||||
COMMAND ${Qt5_LRELEASE_EXECUTABLE}
|
||||
ARGS ${TARGET_TS_FILES} ${LRELEASE_OPTIONS}
|
||||
DEPENDS ${TARGET_TS_FILES}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
VERBATIM
|
||||
COMMENT "Creating compiled translation files (qm)..."
|
||||
)
|
||||
|
||||
#The dependency on custom_command Output is important
|
||||
add_custom_target(update_translations
|
||||
COMMAND ${CMAKE_COMMAND} "-DLANGUAGES=\"${LANGUAGES}\"" -P "${CMAKE_CURRENT_SOURCE_DIR}/clean_translations.cmake"
|
||||
DEPENDS ${QM_FILES}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
)
|
||||
|
||||
# Remove `*.qm` when `clean` is called.
|
||||
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${QM_FILES}")
|
||||
|
||||
# Command to just remove `.qm` files.
|
||||
add_custom_target(remove_qm_files
|
||||
COMMAND ${CMAKE_COMMAND} -E remove ${QM_FILES}
|
||||
)
|
||||
# Workaround: Create empty files for some cmake versions. Otherwise, the qm rules can't be used.
|
||||
# foreach (qm ${QM_FILES})
|
||||
# if (NOT EXISTS "${qm}")
|
||||
# file(GENERATE OUTPUT "${qm}" CONTENT "")
|
||||
# endif()
|
||||
# endforeach()
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
# ==============================================================================
|
||||
# assets/languages/clean_translations.cmake
|
||||
# ==============================================================================
|
||||
|
||||
if (WIN32)
|
||||
foreach (lang ${LANGUAGES})
|
||||
file(READ "${lang}.ts" content)
|
||||
set(cleanedContent)
|
||||
string(REPLACE "\r" "" cleanedContent "${content}")
|
||||
file(WRITE "${lang}.ts" "${cleanedContent}")
|
||||
endforeach ()
|
||||
endif ()
|
||||
|
|
@ -615,6 +615,10 @@ Server URL ist nicht konfiguriert.</translation>
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation>Möchten Sie die Änderungen an diesem Kontakt verwerfen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@ Server URL ist nicht konfiguriert.</translation>
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>Möchten Sie diese Historie wirklich löschen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -958,6 +974,10 @@ Server URL ist nicht konfiguriert.</translation>
|
|||
<source>smartSearchBarTooltip</source>
|
||||
<translation>Verwenden das intelligente Suchfeld um Audio- und Videocalls zu starten, Nachrichten zu senden oder Kontakt hinzuzufügen. Geben Sie die SIP-Adresse oder Username Ihres Kontaktes ein.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1152,6 +1172,22 @@ Server URL ist nicht konfiguriert.</translation>
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1255,6 +1291,10 @@ Server URL ist nicht konfiguriert.</translation>
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
|
|
@ -615,6 +615,10 @@ Server url not configured.</translation>
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation>Are you sure you want to cancel the contact modification?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation>Show conversation</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@ Server url not configured.</translation>
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>Are you sure you want to clean this history?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation>Edit contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation>Add contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation>Delete history</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -963,6 +979,10 @@ Click here: <a href="%1">%1</a>
|
|||
calls, send a message or add a new contact. Just enter
|
||||
your friend's SIP address or username.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation>Start conference call</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1157,6 +1177,22 @@ your friend's SIP address or username.</translation>
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation>Show audio codecs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation>Playback gain</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation>Capture gain</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation>Capture level</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation>Audio call in progress: some settings are not available.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1260,6 +1296,10 @@ your friend's SIP address or username.</translation>
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation>Call pause enabled</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation>Encrytion is mandatory</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -615,6 +615,10 @@ Url du serveur non configurée.</translation>
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation>Êtes-vous sûr de vouloir annuler l'édition du contact ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation>Allez à la conversation</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@ Url du serveur non configurée.</translation>
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>Êtes-vous sûr de vouloir supprimer cet historique ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation>Editer le contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation>Ajouter le contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation>Supprimer l'historique</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -961,6 +977,10 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<source>smartSearchBarTooltip</source>
|
||||
<translation>Utilisez la barre de recherche intelligente pour lancer des appels audio et vidéo, envoyer un message ou ajouter un contact. Entrez simplement l'adresse SIP ou le nom d'utilisateur de votre contact.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation>Démarrer une conférence</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1155,6 +1175,22 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation>Afficher les codecs audio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation>Gain de lecture</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation>Gain de capture</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation>Niveau micro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation>Appel en cours: certains paramètres sont inaccessibles</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1258,6 +1294,10 @@ Cliquez ici : <a href="%1">%1</a>
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation>Autoriser la mise en pause</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation>Chiffrement obligatoire</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
|
|
@ -615,6 +615,10 @@
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>履歴をクリアしてよろしいですか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -958,6 +974,10 @@
|
|||
<source>smartSearchBarTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1152,6 +1172,22 @@
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1255,6 +1291,10 @@
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
|
|
@ -615,6 +615,10 @@ Nesukonfigūruotas serverio url.</translation>
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@ Nesukonfigūruotas serverio url.</translation>
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>Ar tikrai norite išvalyti šią istoriją?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -963,6 +979,10 @@ Spustelėkite čia: <a href="%1">%1</a>
|
|||
garso ir vaizdo skambučius, siųsti žinutę ar pridėti naują kontaktą.
|
||||
Tiesiog, įveskite savo draugo SIP adresą ar naudotojo vardą.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1157,6 +1177,22 @@ Tiesiog, įveskite savo draugo SIP adresą ar naudotojo vardą.</translation>
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation>Rodyti garso kodekus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1260,6 +1296,10 @@ Tiesiog, įveskite savo draugo SIP adresą ar naudotojo vardą.</translation>
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
|
|
@ -615,6 +615,10 @@ URL do servidor não configurado.</translation>
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation>Tem certeza de que deseja cancelar a modificação do contato?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@ URL do servidor não configurado.</translation>
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>Tem certeza de que deseja limpar este histórico?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -963,6 +979,10 @@ Click aqui: <a href="%1">%1</a>
|
|||
enviar uma mensagem ou adicionar um novo contato. Basta entrar
|
||||
o endereço SIP ou nome de usuário do seu amigo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1157,6 +1177,22 @@ o endereço SIP ou nome de usuário do seu amigo.</translation>
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation>Mostrar codecs de áudio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1260,6 +1296,10 @@ o endereço SIP ou nome de usuário do seu amigo.</translation>
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation>Habilitada pausa na chamada.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
|
|
@ -615,6 +615,10 @@
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation>Вы уверены, что хотите отменить изменение контакта?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>Вы уверены, что хотите очистить эту историю?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -961,6 +977,10 @@
|
|||
<source>smartSearchBarTooltip</source>
|
||||
<translation>Используйте умную поисковую строку, чтобы сразу начать аудио или видео вызов, отправить сообщение или добавить новый контакт. Просто введите SIP адрес или имя пользователя вашего контакта.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1155,6 +1175,22 @@
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation>Показать Аудио кодаки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1258,6 +1294,10 @@
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation>Вызов поставлен на паузу</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
|
|
@ -615,6 +615,10 @@ Serverwebbadressen är inte konfigurerad.</translation>
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation>Är du säker på att du vill avbryta kontaktändringen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@ Serverwebbadressen är inte konfigurerad.</translation>
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>Är du säker på att du vill rensa den här historiken?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -961,6 +977,10 @@ Klicka här: <a href="%1">%1</a>
|
|||
<source>smartSearchBarTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1155,6 +1175,22 @@ Klicka här: <a href="%1">%1</a>
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation>Visa ljudkodek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1258,6 +1294,10 @@ Klicka här: <a href="%1">%1</a>
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation>Samtals paus aktiverad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
|
|
@ -615,6 +615,10 @@ Sunucu url'si yapılandırılmadı.</translation>
|
|||
<source>abortEditDescriptionText</source>
|
||||
<translation>Kişi düzenlemesini iptal etmek istediğinize emin misiniz?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipShowConversation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Contacts</name>
|
||||
|
|
@ -657,6 +661,18 @@ Sunucu url'si yapılandırılmadı.</translation>
|
|||
<source>removeAllEntriesDescription</source>
|
||||
<translation>Bu geçmişi temizlemek istediğinize emin misiniz?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -963,6 +979,10 @@ Buraya tıklayın: <a href="%1">%1</a>
|
|||
eklemek için akıllı arama çubuğunu kullanın. Yalnızca
|
||||
arkadaşınızın SIP adresini veya kullanıcı adını girin.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newConferenceButton</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindowMenuBar</name>
|
||||
|
|
@ -1157,6 +1177,22 @@ arkadaşınızın SIP adresini veya kullanıcı adını girin.</translation>
|
|||
<source>showAudioCodecsLabel</source>
|
||||
<translation>Ses çözücüleri göster</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>playbackGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>captureGainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioTestLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioSettingsInCallWarning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -1260,6 +1296,10 @@ arkadaşınızın SIP adresini veya kullanıcı adını girin.</translation>
|
|||
<source>callPauseEnabledLabel</source>
|
||||
<translation>Çağrı duraklatma etkin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionMandatoryLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
|
|
|
|||
|
|
@ -23,6 +23,6 @@
|
|||
lcb_define_target("linphoneqt" "linphone" "ms2plugins")
|
||||
|
||||
|
||||
if (NOT WIN32 AND NOT APPLE)
|
||||
lcb_blacklist_dependencies("turbo-jpeg") # turbo-jpeg is already provided by Qt5 so do not build it.
|
||||
endif ()
|
||||
#if (NOT WIN32 AND NOT APPLE)
|
||||
# lcb_blacklist_dependencies("turbojpeg") # turbo-jpeg is already provided by Qt5 so do not build it.
|
||||
#endif ()
|
||||
|
|
|
|||
13
create_appimage.sh
Executable file
13
create_appimage.sh
Executable file
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
|
||||
APP_NAME="linphone"
|
||||
|
||||
BIN_SOURCE_DIR="OUTPUT/desktop"
|
||||
|
||||
WORK_DIR="OUTPUT/AppDir/usr"
|
||||
|
||||
mkdir -p "${WORK_DIR}"
|
||||
|
||||
cp -rfv "${BIN_SOURCE_DIR}"/* "${WORK_DIR}"
|
||||
|
||||
./AppImage/linuxdeployqt-continuous-x86_64.AppImage "${WORK_DIR}/bin/${APP_NAME}" -appimage -bundle-non-qt-libs -verbose=2
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 44380577a36e41c5e9226328dac64e7b27c4d0fc
|
||||
Subproject commit b3dbedd109f9d4357f5b73410a132c11c2660b58
|
||||
|
|
@ -199,6 +199,7 @@
|
|||
<file>assets/images/video_call_hovered.svg</file>
|
||||
<file>assets/images/video_call_normal.svg</file>
|
||||
<file>assets/images/video_call_pressed.svg</file>
|
||||
<file>assets/images/warning.svg</file>
|
||||
<file>ui/modules/Common/Animations/BusyIndicator.qml</file>
|
||||
<file>ui/modules/Common/Constants/Constants.qml</file>
|
||||
<file>ui/modules/Common/Dialog/ConfirmDialog.qml</file>
|
||||
|
|
|
|||
|
|
@ -202,7 +202,7 @@ void Logger::init (const shared_ptr<linphone::Config> &config) {
|
|||
{
|
||||
shared_ptr<linphone::LoggingService> loggingService = mInstance->mLoggingService = linphone::LoggingService::get();
|
||||
loggingService->setLogLevel(linphone::LogLevel::Message);
|
||||
loggingService->setListener(make_shared<LinphoneLogger>(mInstance));
|
||||
loggingService->addListener(make_shared<LinphoneLogger>(mInstance));
|
||||
}
|
||||
|
||||
linphone::Core::setLogCollectionPath(Utils::appStringToCoreString(folder));
|
||||
|
|
|
|||
|
|
@ -28,7 +28,10 @@ int main (int argc, char *argv[]) {
|
|||
AppController controller(argc, argv);
|
||||
App *app = controller.getApp();
|
||||
if (app->isSecondary())
|
||||
return EXIT_SUCCESS;
|
||||
{
|
||||
qInfo() << QStringLiteral("Running secondary app success. Kill it now.");
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
qInfo() << QStringLiteral("Running app...");
|
||||
|
||||
|
|
|
|||
|
|
@ -108,15 +108,23 @@ static inline QDir getAppPackageDir () {
|
|||
QDir dir(QCoreApplication::applicationDirPath());
|
||||
if (dir.dirName() == QLatin1String("MacOS")) {
|
||||
dir.cdUp();
|
||||
dir.cd("Resources");
|
||||
if (!dir.cd("Resources"))
|
||||
{
|
||||
dir.mkdir("Resources");
|
||||
dir.cd("Resources");
|
||||
}
|
||||
} else
|
||||
dir.cdUp();
|
||||
return dir;
|
||||
}
|
||||
|
||||
static inline QString getAppPackageDataDirPath () {
|
||||
static inline QString getAppPackageDataDirPath() {
|
||||
QDir dir = getAppPackageDir();
|
||||
dir.cd("share");
|
||||
if (!dir.cd("share"))
|
||||
{
|
||||
dir.mkdir("share");
|
||||
dir.cd("share");
|
||||
}
|
||||
return dir.absolutePath();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#include <QtCore/QCryptographicHash>
|
||||
#include <QtNetwork/QLocalServer>
|
||||
#include <QtNetwork/QLocalSocket>
|
||||
#include <QProcess>
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
#include <signal.h>
|
||||
|
|
@ -167,8 +168,10 @@ void SingleApplicationPrivate::startPrimary (bool resetMemory) {
|
|||
if (resetMemory) {
|
||||
inst->primary = true;
|
||||
inst->secondary = 0;
|
||||
inst->primaryId = q_ptr->applicationPid();
|
||||
} else {
|
||||
inst->primary = true;
|
||||
inst->primaryId = q_ptr->applicationPid();
|
||||
}
|
||||
|
||||
memory->unlock();
|
||||
|
|
@ -344,10 +347,10 @@ SingleApplication::SingleApplication (int &argc, char *argv[], bool allowSeconda
|
|||
// Attempt to attach to the memory segment
|
||||
if (d->memory->attach()) {
|
||||
d->memory->lock();
|
||||
|
||||
|
||||
InstancesInfo *inst = static_cast<InstancesInfo *>(d->memory->data());
|
||||
|
||||
if (!inst->primary) {
|
||||
if (!inst->primary || !Utils::processExists(inst->primaryId)) { // Check if there is not a primary instance and if there is, is it still running?
|
||||
d->startPrimary(false);
|
||||
d->memory->unlock();
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@
|
|||
struct InstancesInfo {
|
||||
bool primary;
|
||||
quint32 secondary;
|
||||
quint64 primaryId;
|
||||
};
|
||||
|
||||
class SingleApplicationPrivate : public QObject {
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ AssistantModel::AssistantModel (QObject *parent) : QObject(parent) {
|
|||
mAccountCreator = core->createAccountCreator(
|
||||
core->getConfig()->getString("assistant", "xmlrpc_url", DefaultXmlrpcUri)
|
||||
);
|
||||
mAccountCreator->setListener(mHandlers);
|
||||
mAccountCreator->addListener(mHandlers);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
#include "components/settings/AccountSettingsModel.hpp"
|
||||
#include "components/settings/SettingsModel.hpp"
|
||||
#include "utils/LinphoneUtils.hpp"
|
||||
#include "utils/MediastreamerUtils.hpp"
|
||||
#include "utils/Utils.hpp"
|
||||
|
||||
#include "CallModel.hpp"
|
||||
|
|
@ -469,11 +470,11 @@ float CallModel::getQuality () const {
|
|||
// -----------------------------------------------------------------------------
|
||||
|
||||
float CallModel::getSpeakerVu () const {
|
||||
return LinphoneUtils::computeVu(mCall->getPlayVolume());
|
||||
return MediastreamerUtils::computeVu(mCall->getPlayVolume());
|
||||
}
|
||||
|
||||
float CallModel::getMicroVu () const {
|
||||
return LinphoneUtils::computeVu(mCall->getRecordVolume());
|
||||
return MediastreamerUtils::computeVu(mCall->getRecordVolume());
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -409,7 +409,7 @@ void ChatModel::removeAllEntries () {
|
|||
|
||||
void ChatModel::sendMessage (const QString &message) {
|
||||
shared_ptr<linphone::ChatMessage> _message = mChatRoom->createMessage(Utils::appStringToCoreString(message));
|
||||
_message->setListener(mMessageHandlers);
|
||||
_message->addListener(mMessageHandlers);
|
||||
|
||||
insertMessageAtEnd(_message);
|
||||
mChatRoom->sendChatMessage(_message);
|
||||
|
|
@ -435,7 +435,7 @@ void ChatModel::resendMessage (int id) {
|
|||
case MessageStatusFileTransferError:
|
||||
case MessageStatusNotDelivered: {
|
||||
shared_ptr<linphone::ChatMessage> message = static_pointer_cast<linphone::ChatMessage>(entry.second);
|
||||
message->setListener(mMessageHandlers);
|
||||
message->addListener(mMessageHandlers);
|
||||
message->resend();
|
||||
|
||||
break;
|
||||
|
|
@ -473,7 +473,7 @@ void ChatModel::sendFileMessage (const QString &path) {
|
|||
|
||||
shared_ptr<linphone::ChatMessage> message = mChatRoom->createFileTransferMessage(content);
|
||||
message->setFileTransferFilepath(Utils::appStringToCoreString(path));
|
||||
message->setListener(mMessageHandlers);
|
||||
message->addListener(mMessageHandlers);
|
||||
|
||||
createThumbnail(message);
|
||||
|
||||
|
|
@ -518,7 +518,7 @@ void ChatModel::downloadFile (int id) {
|
|||
}
|
||||
|
||||
message->setFileTransferFilepath(Utils::appStringToCoreString(safeFilePath));
|
||||
message->setListener(mMessageHandlers);
|
||||
message->addListener(mMessageHandlers);
|
||||
|
||||
if (!message->downloadFile())
|
||||
qWarning() << QStringLiteral("Unable to download file of entry %1.").arg(id);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "components/core/CoreManager.hpp"
|
||||
#include "components/settings/SettingsModel.hpp"
|
||||
#include "utils/LinphoneUtils.hpp"
|
||||
#include "utils/MediastreamerUtils.hpp"
|
||||
#include "utils/Utils.hpp"
|
||||
|
||||
#include "ConferenceModel.hpp"
|
||||
|
|
@ -128,7 +129,7 @@ bool ConferenceModel::getRecording () const {
|
|||
// -----------------------------------------------------------------------------
|
||||
|
||||
float ConferenceModel::getMicroVu () const {
|
||||
return LinphoneUtils::computeVu(
|
||||
return MediastreamerUtils::computeVu(
|
||||
CoreManager::getInstance()->getCore()->getConferenceLocalInputVolume()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,6 +125,11 @@ void CoreHandlers::onCallStatsUpdated (
|
|||
call->getData<CallModel>("call-model").updateStats(stats);
|
||||
}
|
||||
|
||||
void CoreHandlers::onCallCreated(const shared_ptr<linphone::Core> &,
|
||||
const shared_ptr<linphone::Call> &call) {
|
||||
emit callCreated(call);
|
||||
}
|
||||
|
||||
void CoreHandlers::onGlobalStateChanged (
|
||||
const shared_ptr<linphone::Core> &,
|
||||
linphone::GlobalState gstate,
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ signals:
|
|||
void callStateChanged (const std::shared_ptr<linphone::Call> &call, linphone::Call::State state);
|
||||
void callTransferFailed (const std::shared_ptr<linphone::Call> &call);
|
||||
void callTransferSucceeded (const std::shared_ptr<linphone::Call> &call);
|
||||
void callCreated(const std::shared_ptr<linphone::Call> & call);
|
||||
void coreStarted ();
|
||||
void isComposingChanged (const std::shared_ptr<linphone::ChatRoom> &chatRoom);
|
||||
void logsUploadStateChanged (linphone::Core::LogCollectionUploadState state, const std::string &info);
|
||||
|
|
@ -87,6 +88,11 @@ private:
|
|||
const std::shared_ptr<const linphone::CallStats> &stats
|
||||
) override;
|
||||
|
||||
void onCallCreated(
|
||||
const std::shared_ptr<linphone::Core> & lc,
|
||||
const std::shared_ptr<linphone::Call> & call
|
||||
) override;
|
||||
|
||||
void onGlobalStateChanged (
|
||||
const std::shared_ptr<linphone::Core> &core,
|
||||
linphone::GlobalState gstate,
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ void AbstractEventCountNotifier::internalnotifyEventCount () {
|
|||
n = n > 99 ? 99 : n;
|
||||
|
||||
notifyEventCount(CoreManager::getInstance()->getSettingsModel()->getChatEnabled() ? n : 0);
|
||||
emit eventCountChanged(mUnreadMessageCount);
|
||||
emit eventCountChanged(n);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -17,534 +17,587 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* Created on: February 2, 2017
|
||||
* Author: Ronan Abhamon
|
||||
* Author: Ronan Abhamon
|
||||
*/
|
||||
|
||||
#ifndef SETTINGS_MODEL_H_
|
||||
#define SETTINGS_MODEL_H_
|
||||
|
||||
#include <linphone++/linphone.hh>
|
||||
#include <utils/MediastreamerUtils.hpp>
|
||||
#include <QObject>
|
||||
|
||||
#include "components/core/CoreHandlers.hpp"
|
||||
|
||||
// =============================================================================
|
||||
|
||||
class SettingsModel : public QObject {
|
||||
Q_OBJECT;
|
||||
Q_OBJECT;
|
||||
|
||||
// ===========================================================================
|
||||
// PROPERTIES.
|
||||
// ===========================================================================
|
||||
// ===========================================================================
|
||||
// PROPERTIES.
|
||||
// ===========================================================================
|
||||
|
||||
// Assistant. ----------------------------------------------------------------
|
||||
// Assistant. ----------------------------------------------------------------
|
||||
|
||||
Q_PROPERTY(bool createAppSipAccountEnabled READ getCreateAppSipAccountEnabled WRITE setCreateAppSipAccountEnabled NOTIFY createAppSipAccountEnabledChanged);
|
||||
Q_PROPERTY(bool fetchRemoteConfigurationEnabled READ getFetchRemoteConfigurationEnabled WRITE setFetchRemoteConfigurationEnabled NOTIFY fetchRemoteConfigurationEnabledChanged);
|
||||
Q_PROPERTY(bool useAppSipAccountEnabled READ getUseAppSipAccountEnabled WRITE setUseAppSipAccountEnabled NOTIFY useAppSipAccountEnabledChanged);
|
||||
Q_PROPERTY(bool useOtherSipAccountEnabled READ getUseOtherSipAccountEnabled WRITE setUseOtherSipAccountEnabled NOTIFY useOtherSipAccountEnabledChanged);
|
||||
Q_PROPERTY(bool createAppSipAccountEnabled READ getCreateAppSipAccountEnabled WRITE setCreateAppSipAccountEnabled NOTIFY createAppSipAccountEnabledChanged);
|
||||
Q_PROPERTY(bool fetchRemoteConfigurationEnabled READ getFetchRemoteConfigurationEnabled WRITE setFetchRemoteConfigurationEnabled NOTIFY fetchRemoteConfigurationEnabledChanged);
|
||||
Q_PROPERTY(bool useAppSipAccountEnabled READ getUseAppSipAccountEnabled WRITE setUseAppSipAccountEnabled NOTIFY useAppSipAccountEnabledChanged);
|
||||
Q_PROPERTY(bool useOtherSipAccountEnabled READ getUseOtherSipAccountEnabled WRITE setUseOtherSipAccountEnabled NOTIFY useOtherSipAccountEnabledChanged);
|
||||
|
||||
Q_PROPERTY(bool assistantSupportsPhoneNumbers READ getAssistantSupportsPhoneNumbers WRITE setAssistantSupportsPhoneNumbers NOTIFY assistantSupportsPhoneNumbersChanged);
|
||||
Q_PROPERTY(bool assistantSupportsPhoneNumbers READ getAssistantSupportsPhoneNumbers WRITE setAssistantSupportsPhoneNumbers NOTIFY assistantSupportsPhoneNumbersChanged);
|
||||
|
||||
// Audio. --------------------------------------------------------------------
|
||||
// Audio. --------------------------------------------------------------------
|
||||
|
||||
Q_PROPERTY(QStringList captureDevices READ getCaptureDevices CONSTANT);
|
||||
Q_PROPERTY(QStringList playbackDevices READ getPlaybackDevices CONSTANT);
|
||||
Q_PROPERTY(bool captureGraphRunning READ getCaptureGraphRunning NOTIFY captureGraphRunningChanged);
|
||||
|
||||
Q_PROPERTY(QString captureDevice READ getCaptureDevice WRITE setCaptureDevice NOTIFY captureDeviceChanged);
|
||||
Q_PROPERTY(QString playbackDevice READ getPlaybackDevice WRITE setPlaybackDevice NOTIFY playbackDeviceChanged);
|
||||
Q_PROPERTY(QString ringerDevice READ getRingerDevice WRITE setRingerDevice NOTIFY ringerDeviceChanged);
|
||||
Q_PROPERTY(QStringList captureDevices READ getCaptureDevices NOTIFY captureDevicesChanged);
|
||||
Q_PROPERTY(QStringList playbackDevices READ getPlaybackDevices NOTIFY playbackDevicesChanged);
|
||||
|
||||
Q_PROPERTY(QString ringPath READ getRingPath WRITE setRingPath NOTIFY ringPathChanged);
|
||||
Q_PROPERTY(float playbackGain READ getPlaybackGain WRITE setPlaybackGain NOTIFY playbackGainChanged);
|
||||
Q_PROPERTY(float captureGain READ getCaptureGain WRITE setCaptureGain NOTIFY captureGainChanged);
|
||||
|
||||
Q_PROPERTY(bool echoCancellationEnabled READ getEchoCancellationEnabled WRITE setEchoCancellationEnabled NOTIFY echoCancellationEnabledChanged);
|
||||
Q_PROPERTY(QString captureDevice READ getCaptureDevice WRITE setCaptureDevice NOTIFY captureDeviceChanged);
|
||||
Q_PROPERTY(QString playbackDevice READ getPlaybackDevice WRITE setPlaybackDevice NOTIFY playbackDeviceChanged);
|
||||
Q_PROPERTY(QString ringerDevice READ getRingerDevice WRITE setRingerDevice NOTIFY ringerDeviceChanged);
|
||||
|
||||
Q_PROPERTY(bool showAudioCodecs READ getShowAudioCodecs WRITE setShowAudioCodecs NOTIFY showAudioCodecsChanged);
|
||||
Q_PROPERTY(QString ringPath READ getRingPath WRITE setRingPath NOTIFY ringPathChanged);
|
||||
|
||||
// Video. --------------------------------------------------------------------
|
||||
Q_PROPERTY(bool echoCancellationEnabled READ getEchoCancellationEnabled WRITE setEchoCancellationEnabled NOTIFY echoCancellationEnabledChanged);
|
||||
|
||||
Q_PROPERTY(QStringList videoDevices READ getVideoDevices CONSTANT);
|
||||
Q_PROPERTY(bool showAudioCodecs READ getShowAudioCodecs WRITE setShowAudioCodecs NOTIFY showAudioCodecsChanged);
|
||||
|
||||
Q_PROPERTY(QString videoDevice READ getVideoDevice WRITE setVideoDevice NOTIFY videoDeviceChanged);
|
||||
// Video. --------------------------------------------------------------------
|
||||
|
||||
Q_PROPERTY(QString videoPreset READ getVideoPreset WRITE setVideoPreset NOTIFY videoPresetChanged);
|
||||
Q_PROPERTY(int videoFramerate READ getVideoFramerate WRITE setVideoFramerate NOTIFY videoFramerateChanged);
|
||||
Q_PROPERTY(QStringList videoDevices READ getVideoDevices NOTIFY videoDevicesChanged);
|
||||
|
||||
Q_PROPERTY(QVariantList supportedVideoDefinitions READ getSupportedVideoDefinitions CONSTANT);
|
||||
Q_PROPERTY(QString videoDevice READ getVideoDevice WRITE setVideoDevice NOTIFY videoDeviceChanged);
|
||||
|
||||
Q_PROPERTY(QVariantMap videoDefinition READ getVideoDefinition WRITE setVideoDefinition NOTIFY videoDefinitionChanged);
|
||||
Q_PROPERTY(QString videoPreset READ getVideoPreset WRITE setVideoPreset NOTIFY videoPresetChanged);
|
||||
Q_PROPERTY(int videoFramerate READ getVideoFramerate WRITE setVideoFramerate NOTIFY videoFramerateChanged);
|
||||
|
||||
Q_PROPERTY(bool videoSupported READ getVideoSupported CONSTANT);
|
||||
Q_PROPERTY(QVariantList supportedVideoDefinitions READ getSupportedVideoDefinitions CONSTANT);
|
||||
|
||||
Q_PROPERTY(bool showVideoCodecs READ getShowVideoCodecs WRITE setShowVideoCodecs NOTIFY showVideoCodecsChanged);
|
||||
Q_PROPERTY(QVariantMap videoDefinition READ getVideoDefinition WRITE setVideoDefinition NOTIFY videoDefinitionChanged);
|
||||
|
||||
// Chat & calls. -------------------------------------------------------------
|
||||
Q_PROPERTY(bool videoSupported READ getVideoSupported CONSTANT);
|
||||
|
||||
Q_PROPERTY(bool autoAnswerStatus READ getAutoAnswerStatus WRITE setAutoAnswerStatus NOTIFY autoAnswerStatusChanged);
|
||||
Q_PROPERTY(bool autoAnswerVideoStatus READ getAutoAnswerVideoStatus WRITE setAutoAnswerVideoStatus NOTIFY autoAnswerVideoStatusChanged);
|
||||
Q_PROPERTY(int autoAnswerDelay READ getAutoAnswerDelay WRITE setAutoAnswerDelay NOTIFY autoAnswerDelayChanged);
|
||||
Q_PROPERTY(bool showVideoCodecs READ getShowVideoCodecs WRITE setShowVideoCodecs NOTIFY showVideoCodecsChanged);
|
||||
|
||||
Q_PROPERTY(bool showTelKeypadAutomatically READ getShowTelKeypadAutomatically WRITE setShowTelKeypadAutomatically NOTIFY showTelKeypadAutomaticallyChanged);
|
||||
// Chat & calls. -------------------------------------------------------------
|
||||
|
||||
Q_PROPERTY(bool keepCallsWindowInBackground READ getKeepCallsWindowInBackground WRITE setKeepCallsWindowInBackground NOTIFY keepCallsWindowInBackgroundChanged);
|
||||
Q_PROPERTY(bool autoAnswerStatus READ getAutoAnswerStatus WRITE setAutoAnswerStatus NOTIFY autoAnswerStatusChanged);
|
||||
Q_PROPERTY(bool autoAnswerVideoStatus READ getAutoAnswerVideoStatus WRITE setAutoAnswerVideoStatus NOTIFY autoAnswerVideoStatusChanged);
|
||||
Q_PROPERTY(int autoAnswerDelay READ getAutoAnswerDelay WRITE setAutoAnswerDelay NOTIFY autoAnswerDelayChanged);
|
||||
|
||||
Q_PROPERTY(bool outgoingCallsEnabled READ getOutgoingCallsEnabled WRITE setOutgoingCallsEnabled NOTIFY outgoingCallsEnabledChanged);
|
||||
Q_PROPERTY(bool showTelKeypadAutomatically READ getShowTelKeypadAutomatically WRITE setShowTelKeypadAutomatically NOTIFY showTelKeypadAutomaticallyChanged);
|
||||
|
||||
Q_PROPERTY(bool callRecorderEnabled READ getCallRecorderEnabled WRITE setCallRecorderEnabled NOTIFY callRecorderEnabledChanged);
|
||||
Q_PROPERTY(bool automaticallyRecordCalls READ getAutomaticallyRecordCalls WRITE setAutomaticallyRecordCalls NOTIFY automaticallyRecordCallsChanged);
|
||||
Q_PROPERTY(bool keepCallsWindowInBackground READ getKeepCallsWindowInBackground WRITE setKeepCallsWindowInBackground NOTIFY keepCallsWindowInBackgroundChanged);
|
||||
|
||||
Q_PROPERTY(bool callPauseEnabled READ getCallPauseEnabled WRITE setCallPauseEnabled NOTIFY callPauseEnabledChanged);
|
||||
Q_PROPERTY(bool muteMicrophoneEnabled READ getMuteMicrophoneEnabled WRITE setMuteMicrophoneEnabled NOTIFY muteMicrophoneEnabledChanged);
|
||||
Q_PROPERTY(bool outgoingCallsEnabled READ getOutgoingCallsEnabled WRITE setOutgoingCallsEnabled NOTIFY outgoingCallsEnabledChanged);
|
||||
|
||||
Q_PROPERTY(bool chatEnabled READ getChatEnabled WRITE setChatEnabled NOTIFY chatEnabledChanged);
|
||||
Q_PROPERTY(bool callRecorderEnabled READ getCallRecorderEnabled WRITE setCallRecorderEnabled NOTIFY callRecorderEnabledChanged);
|
||||
Q_PROPERTY(bool automaticallyRecordCalls READ getAutomaticallyRecordCalls WRITE setAutomaticallyRecordCalls NOTIFY automaticallyRecordCallsChanged);
|
||||
|
||||
Q_PROPERTY(bool conferenceEnabled READ getConferenceEnabled WRITE setConferenceEnabled NOTIFY conferenceEnabledChanged);
|
||||
Q_PROPERTY(bool callPauseEnabled READ getCallPauseEnabled WRITE setCallPauseEnabled NOTIFY callPauseEnabledChanged);
|
||||
Q_PROPERTY(bool muteMicrophoneEnabled READ getMuteMicrophoneEnabled WRITE setMuteMicrophoneEnabled NOTIFY muteMicrophoneEnabledChanged);
|
||||
|
||||
Q_PROPERTY(bool chatNotificationSoundEnabled READ getChatNotificationSoundEnabled WRITE setChatNotificationSoundEnabled NOTIFY chatNotificationSoundEnabledChanged);
|
||||
Q_PROPERTY(QString chatNotificationSoundPath READ getChatNotificationSoundPath WRITE setChatNotificationSoundPath NOTIFY chatNotificationSoundPathChanged);
|
||||
Q_PROPERTY(bool chatEnabled READ getChatEnabled WRITE setChatEnabled NOTIFY chatEnabledChanged);
|
||||
|
||||
Q_PROPERTY(QString fileTransferUrl READ getFileTransferUrl WRITE setFileTransferUrl NOTIFY fileTransferUrlChanged);
|
||||
Q_PROPERTY(bool conferenceEnabled READ getConferenceEnabled WRITE setConferenceEnabled NOTIFY conferenceEnabledChanged);
|
||||
|
||||
Q_PROPERTY(bool limeIsSupported READ getLimeIsSupported CONSTANT);
|
||||
Q_PROPERTY(QVariantList supportedMediaEncryptions READ getSupportedMediaEncryptions CONSTANT);
|
||||
Q_PROPERTY(bool chatNotificationSoundEnabled READ getChatNotificationSoundEnabled WRITE setChatNotificationSoundEnabled NOTIFY chatNotificationSoundEnabledChanged);
|
||||
Q_PROPERTY(QString chatNotificationSoundPath READ getChatNotificationSoundPath WRITE setChatNotificationSoundPath NOTIFY chatNotificationSoundPathChanged);
|
||||
|
||||
Q_PROPERTY(MediaEncryption mediaEncryption READ getMediaEncryption WRITE setMediaEncryption NOTIFY mediaEncryptionChanged);
|
||||
Q_PROPERTY(LimeState limeState READ getLimeState WRITE setLimeState NOTIFY limeStateChanged);
|
||||
Q_PROPERTY(QString fileTransferUrl READ getFileTransferUrl WRITE setFileTransferUrl NOTIFY fileTransferUrlChanged);
|
||||
|
||||
Q_PROPERTY(bool contactsEnabled READ getContactsEnabled WRITE setContactsEnabled NOTIFY contactsEnabledChanged);
|
||||
Q_PROPERTY(bool limeIsSupported READ getLimeIsSupported CONSTANT);
|
||||
Q_PROPERTY(QVariantList supportedMediaEncryptions READ getSupportedMediaEncryptions CONSTANT);
|
||||
|
||||
// Network. ------------------------------------------------------------------
|
||||
Q_PROPERTY(MediaEncryption mediaEncryption READ getMediaEncryption WRITE setMediaEncryption NOTIFY mediaEncryptionChanged);
|
||||
Q_PROPERTY(bool mediaEncryptionMandatory READ mandatoryMediaEncryptionEnabled WRITE enableMandatoryMediaEncryption NOTIFY mediaEncryptionChanged);
|
||||
|
||||
Q_PROPERTY(bool showNetworkSettings READ getShowNetworkSettings WRITE setShowNetworkSettings NOTIFY showNetworkSettingsChanged);
|
||||
Q_PROPERTY(LimeState limeState READ getLimeState WRITE setLimeState NOTIFY limeStateChanged);
|
||||
|
||||
Q_PROPERTY(bool useSipInfoForDtmfs READ getUseSipInfoForDtmfs WRITE setUseSipInfoForDtmfs NOTIFY dtmfsProtocolChanged);
|
||||
Q_PROPERTY(bool useRfc2833ForDtmfs READ getUseRfc2833ForDtmfs WRITE setUseRfc2833ForDtmfs NOTIFY dtmfsProtocolChanged);
|
||||
Q_PROPERTY(bool contactsEnabled READ getContactsEnabled WRITE setContactsEnabled NOTIFY contactsEnabledChanged);
|
||||
|
||||
Q_PROPERTY(bool ipv6Enabled READ getIpv6Enabled WRITE setIpv6Enabled NOTIFY ipv6EnabledChanged);
|
||||
// Network. ------------------------------------------------------------------
|
||||
|
||||
Q_PROPERTY(int downloadBandwidth READ getDownloadBandwidth WRITE setDownloadBandwidth NOTIFY downloadBandWidthChanged);
|
||||
Q_PROPERTY(int uploadBandwidth READ getUploadBandwidth WRITE setUploadBandwidth NOTIFY uploadBandWidthChanged);
|
||||
Q_PROPERTY(bool showNetworkSettings READ getShowNetworkSettings WRITE setShowNetworkSettings NOTIFY showNetworkSettingsChanged);
|
||||
|
||||
Q_PROPERTY(
|
||||
bool adaptiveRateControlEnabled
|
||||
READ getAdaptiveRateControlEnabled
|
||||
WRITE setAdaptiveRateControlEnabled
|
||||
NOTIFY adaptiveRateControlEnabledChanged
|
||||
);
|
||||
Q_PROPERTY(bool useSipInfoForDtmfs READ getUseSipInfoForDtmfs WRITE setUseSipInfoForDtmfs NOTIFY dtmfsProtocolChanged);
|
||||
Q_PROPERTY(bool useRfc2833ForDtmfs READ getUseRfc2833ForDtmfs WRITE setUseRfc2833ForDtmfs NOTIFY dtmfsProtocolChanged);
|
||||
|
||||
Q_PROPERTY(int tcpPort READ getTcpPort WRITE setTcpPort NOTIFY tcpPortChanged);
|
||||
Q_PROPERTY(int udpPort READ getUdpPort WRITE setUdpPort NOTIFY udpPortChanged);
|
||||
Q_PROPERTY(bool ipv6Enabled READ getIpv6Enabled WRITE setIpv6Enabled NOTIFY ipv6EnabledChanged);
|
||||
|
||||
Q_PROPERTY(QList<int> audioPortRange READ getAudioPortRange WRITE setAudioPortRange NOTIFY audioPortRangeChanged);
|
||||
Q_PROPERTY(QList<int> videoPortRange READ getVideoPortRange WRITE setVideoPortRange NOTIFY videoPortRangeChanged);
|
||||
Q_PROPERTY(int downloadBandwidth READ getDownloadBandwidth WRITE setDownloadBandwidth NOTIFY downloadBandWidthChanged);
|
||||
Q_PROPERTY(int uploadBandwidth READ getUploadBandwidth WRITE setUploadBandwidth NOTIFY uploadBandWidthChanged);
|
||||
|
||||
Q_PROPERTY(bool iceEnabled READ getIceEnabled WRITE setIceEnabled NOTIFY iceEnabledChanged);
|
||||
Q_PROPERTY(bool turnEnabled READ getTurnEnabled WRITE setTurnEnabled NOTIFY turnEnabledChanged);
|
||||
Q_PROPERTY(
|
||||
bool adaptiveRateControlEnabled
|
||||
READ getAdaptiveRateControlEnabled
|
||||
WRITE setAdaptiveRateControlEnabled
|
||||
NOTIFY adaptiveRateControlEnabledChanged
|
||||
);
|
||||
|
||||
Q_PROPERTY(QString stunServer READ getStunServer WRITE setStunServer NOTIFY stunServerChanged);
|
||||
Q_PROPERTY(int tcpPort READ getTcpPort WRITE setTcpPort NOTIFY tcpPortChanged);
|
||||
Q_PROPERTY(int udpPort READ getUdpPort WRITE setUdpPort NOTIFY udpPortChanged);
|
||||
|
||||
Q_PROPERTY(QString turnUser READ getTurnUser WRITE setTurnUser NOTIFY turnUserChanged);
|
||||
Q_PROPERTY(QString turnPassword READ getTurnPassword WRITE setTurnPassword NOTIFY turnPasswordChanged);
|
||||
Q_PROPERTY(QList<int> audioPortRange READ getAudioPortRange WRITE setAudioPortRange NOTIFY audioPortRangeChanged);
|
||||
Q_PROPERTY(QList<int> videoPortRange READ getVideoPortRange WRITE setVideoPortRange NOTIFY videoPortRangeChanged);
|
||||
|
||||
Q_PROPERTY(int dscpSip READ getDscpSip WRITE setDscpSip NOTIFY dscpSipChanged);
|
||||
Q_PROPERTY(int dscpAudio READ getDscpAudio WRITE setDscpAudio NOTIFY dscpAudioChanged);
|
||||
Q_PROPERTY(int dscpVideo READ getDscpVideo WRITE setDscpVideo NOTIFY dscpVideoChanged);
|
||||
Q_PROPERTY(bool iceEnabled READ getIceEnabled WRITE setIceEnabled NOTIFY iceEnabledChanged);
|
||||
Q_PROPERTY(bool turnEnabled READ getTurnEnabled WRITE setTurnEnabled NOTIFY turnEnabledChanged);
|
||||
|
||||
Q_PROPERTY(bool rlsUriEnabled READ getRlsUriEnabled WRITE setRlsUriEnabled NOTIFY rlsUriEnabledChanged);
|
||||
Q_PROPERTY(QString stunServer READ getStunServer WRITE setStunServer NOTIFY stunServerChanged);
|
||||
|
||||
// UI. -----------------------------------------------------------------------
|
||||
Q_PROPERTY(QString turnUser READ getTurnUser WRITE setTurnUser NOTIFY turnUserChanged);
|
||||
Q_PROPERTY(QString turnPassword READ getTurnPassword WRITE setTurnPassword NOTIFY turnPasswordChanged);
|
||||
|
||||
Q_PROPERTY(QString remoteProvisioning READ getRemoteProvisioning WRITE setRemoteProvisioning NOTIFY remoteProvisioningChanged);
|
||||
Q_PROPERTY(int dscpSip READ getDscpSip WRITE setDscpSip NOTIFY dscpSipChanged);
|
||||
Q_PROPERTY(int dscpAudio READ getDscpAudio WRITE setDscpAudio NOTIFY dscpAudioChanged);
|
||||
Q_PROPERTY(int dscpVideo READ getDscpVideo WRITE setDscpVideo NOTIFY dscpVideoChanged);
|
||||
|
||||
Q_PROPERTY(QString savedScreenshotsFolder READ getSavedScreenshotsFolder WRITE setSavedScreenshotsFolder NOTIFY savedScreenshotsFolderChanged);
|
||||
Q_PROPERTY(QString savedCallsFolder READ getSavedCallsFolder WRITE setSavedCallsFolder NOTIFY savedCallsFolderChanged);
|
||||
Q_PROPERTY(QString downloadFolder READ getDownloadFolder WRITE setDownloadFolder NOTIFY downloadFolderChanged);
|
||||
Q_PROPERTY(bool rlsUriEnabled READ getRlsUriEnabled WRITE setRlsUriEnabled NOTIFY rlsUriEnabledChanged);
|
||||
|
||||
Q_PROPERTY(bool exitOnClose READ getExitOnClose WRITE setExitOnClose NOTIFY exitOnCloseChanged);
|
||||
// UI. -----------------------------------------------------------------------
|
||||
|
||||
// Advanced. -----------------------------------------------------------------
|
||||
Q_PROPERTY(QString remoteProvisioning READ getRemoteProvisioning WRITE setRemoteProvisioning NOTIFY remoteProvisioningChanged);
|
||||
|
||||
Q_PROPERTY(QString logsFolder READ getLogsFolder WRITE setLogsFolder NOTIFY logsFolderChanged);
|
||||
Q_PROPERTY(QString logsUploadUrl READ getLogsUploadUrl WRITE setLogsUploadUrl NOTIFY logsUploadUrlChanged);
|
||||
Q_PROPERTY(bool logsEnabled READ getLogsEnabled WRITE setLogsEnabled NOTIFY logsEnabledChanged);
|
||||
Q_PROPERTY(QString logsEmail READ getLogsEmail WRITE setLogsEmail NOTIFY logsEmailChanged);
|
||||
Q_PROPERTY(QString savedScreenshotsFolder READ getSavedScreenshotsFolder WRITE setSavedScreenshotsFolder NOTIFY savedScreenshotsFolderChanged);
|
||||
Q_PROPERTY(QString savedCallsFolder READ getSavedCallsFolder WRITE setSavedCallsFolder NOTIFY savedCallsFolderChanged);
|
||||
Q_PROPERTY(QString downloadFolder READ getDownloadFolder WRITE setDownloadFolder NOTIFY downloadFolderChanged);
|
||||
|
||||
Q_PROPERTY(bool developerSettingsEnabled READ getDeveloperSettingsEnabled WRITE setDeveloperSettingsEnabled NOTIFY developerSettingsEnabledChanged);
|
||||
Q_PROPERTY(bool exitOnClose READ getExitOnClose WRITE setExitOnClose NOTIFY exitOnCloseChanged);
|
||||
|
||||
// Advanced. -----------------------------------------------------------------
|
||||
|
||||
Q_PROPERTY(QString logsFolder READ getLogsFolder WRITE setLogsFolder NOTIFY logsFolderChanged);
|
||||
Q_PROPERTY(QString logsUploadUrl READ getLogsUploadUrl WRITE setLogsUploadUrl NOTIFY logsUploadUrlChanged);
|
||||
Q_PROPERTY(bool logsEnabled READ getLogsEnabled WRITE setLogsEnabled NOTIFY logsEnabledChanged);
|
||||
Q_PROPERTY(QString logsEmail READ getLogsEmail WRITE setLogsEmail NOTIFY logsEmailChanged);
|
||||
|
||||
Q_PROPERTY(bool developerSettingsEnabled READ getDeveloperSettingsEnabled WRITE setDeveloperSettingsEnabled NOTIFY developerSettingsEnabledChanged);
|
||||
|
||||
Q_PROPERTY(bool isInCall READ getIsInCall NOTIFY isInCallChanged);
|
||||
|
||||
public:
|
||||
enum MediaEncryption {
|
||||
MediaEncryptionNone = int(linphone::MediaEncryption::None),
|
||||
MediaEncryptionDtls = int(linphone::MediaEncryption::DTLS),
|
||||
MediaEncryptionSrtp = int(linphone::MediaEncryption::SRTP),
|
||||
MediaEncryptionZrtp = int(linphone::MediaEncryption::ZRTP)
|
||||
};
|
||||
Q_ENUM(MediaEncryption);
|
||||
enum MediaEncryption {
|
||||
MediaEncryptionNone = int(linphone::MediaEncryption::None),
|
||||
MediaEncryptionDtls = int(linphone::MediaEncryption::DTLS),
|
||||
MediaEncryptionSrtp = int(linphone::MediaEncryption::SRTP),
|
||||
MediaEncryptionZrtp = int(linphone::MediaEncryption::ZRTP)
|
||||
};
|
||||
Q_ENUM(MediaEncryption);
|
||||
|
||||
enum LimeState {
|
||||
LimeStateDisabled = int(linphone::LimeState::Disabled),
|
||||
LimeStateMandatory = int(linphone::LimeState::Mandatory),
|
||||
LimeStatePreferred = int(linphone::LimeState::Preferred)
|
||||
};
|
||||
Q_ENUM(LimeState);
|
||||
enum LimeState {
|
||||
LimeStateDisabled = int(linphone::LimeState::Disabled),
|
||||
LimeStateMandatory = int(linphone::LimeState::Mandatory),
|
||||
LimeStatePreferred = int(linphone::LimeState::Preferred)
|
||||
};
|
||||
Q_ENUM(LimeState);
|
||||
|
||||
SettingsModel (QObject *parent = Q_NULLPTR);
|
||||
SettingsModel (QObject *parent = Q_NULLPTR);
|
||||
|
||||
// ===========================================================================
|
||||
// METHODS.
|
||||
// ===========================================================================
|
||||
// ===========================================================================
|
||||
// METHODS.
|
||||
// ===========================================================================
|
||||
|
||||
// Assistant. ----------------------------------------------------------------
|
||||
Q_INVOKABLE void onSettingsTabChanged(int idx);
|
||||
Q_INVOKABLE void settingsWindowClosing(void);
|
||||
|
||||
bool getCreateAppSipAccountEnabled () const;
|
||||
void setCreateAppSipAccountEnabled (bool status);
|
||||
// Assistant. ----------------------------------------------------------------
|
||||
|
||||
bool getFetchRemoteConfigurationEnabled () const;
|
||||
void setFetchRemoteConfigurationEnabled (bool status);
|
||||
bool getCreateAppSipAccountEnabled () const;
|
||||
void setCreateAppSipAccountEnabled (bool status);
|
||||
|
||||
bool getUseAppSipAccountEnabled () const;
|
||||
void setUseAppSipAccountEnabled (bool status);
|
||||
bool getFetchRemoteConfigurationEnabled () const;
|
||||
void setFetchRemoteConfigurationEnabled (bool status);
|
||||
|
||||
bool getUseOtherSipAccountEnabled () const;
|
||||
void setUseOtherSipAccountEnabled (bool status);
|
||||
bool getUseAppSipAccountEnabled () const;
|
||||
void setUseAppSipAccountEnabled (bool status);
|
||||
|
||||
bool getAssistantSupportsPhoneNumbers () const;
|
||||
void setAssistantSupportsPhoneNumbers (bool status);
|
||||
bool getUseOtherSipAccountEnabled () const;
|
||||
void setUseOtherSipAccountEnabled (bool status);
|
||||
|
||||
// Audio. --------------------------------------------------------------------
|
||||
bool getAssistantSupportsPhoneNumbers () const;
|
||||
void setAssistantSupportsPhoneNumbers (bool status);
|
||||
|
||||
QStringList getCaptureDevices () const;
|
||||
QStringList getPlaybackDevices () const;
|
||||
// Audio. --------------------------------------------------------------------
|
||||
|
||||
QString getCaptureDevice () const;
|
||||
void setCaptureDevice (const QString &device);
|
||||
void createCaptureGraph();
|
||||
bool getCaptureGraphRunning();
|
||||
void accessAudioSettings();
|
||||
void closeAudioSettings();
|
||||
|
||||
QString getPlaybackDevice () const;
|
||||
void setPlaybackDevice (const QString &device);
|
||||
Q_INVOKABLE float getMicVolume();
|
||||
|
||||
QString getRingerDevice () const;
|
||||
void setRingerDevice (const QString &device);
|
||||
float getPlaybackGain() const;
|
||||
void setPlaybackGain(float gain);
|
||||
|
||||
QString getRingPath () const;
|
||||
void setRingPath (const QString &path);
|
||||
float getCaptureGain() const;
|
||||
void setCaptureGain(float gain);
|
||||
|
||||
bool getEchoCancellationEnabled () const;
|
||||
void setEchoCancellationEnabled (bool status);
|
||||
QStringList getCaptureDevices () const;
|
||||
QStringList getPlaybackDevices () const;
|
||||
|
||||
bool getShowAudioCodecs () const;
|
||||
void setShowAudioCodecs (bool status);
|
||||
QString getCaptureDevice () const;
|
||||
void setCaptureDevice (const QString &device);
|
||||
|
||||
// Video. --------------------------------------------------------------------
|
||||
QString getPlaybackDevice () const;
|
||||
void setPlaybackDevice (const QString &device);
|
||||
|
||||
QStringList getVideoDevices () const;
|
||||
QString getRingerDevice () const;
|
||||
void setRingerDevice (const QString &device);
|
||||
|
||||
QString getVideoDevice () const;
|
||||
void setVideoDevice (const QString &device);
|
||||
QString getRingPath () const;
|
||||
void setRingPath (const QString &path);
|
||||
|
||||
QString getVideoPreset () const;
|
||||
void setVideoPreset (const QString &preset);
|
||||
bool getEchoCancellationEnabled () const;
|
||||
void setEchoCancellationEnabled (bool status);
|
||||
|
||||
int getVideoFramerate () const;
|
||||
void setVideoFramerate (int framerate);
|
||||
bool getShowAudioCodecs () const;
|
||||
void setShowAudioCodecs (bool status);
|
||||
|
||||
QVariantList getSupportedVideoDefinitions () const;
|
||||
// Video. --------------------------------------------------------------------
|
||||
|
||||
QVariantMap getVideoDefinition () const;
|
||||
void setVideoDefinition (const QVariantMap &definition);
|
||||
//Called from qml when accessing audio settings panel
|
||||
Q_INVOKABLE void accessVideoSettings();
|
||||
|
||||
bool getVideoSupported () const;
|
||||
QStringList getVideoDevices () const;
|
||||
|
||||
bool getShowVideoCodecs () const;
|
||||
void setShowVideoCodecs (bool status);
|
||||
QString getVideoDevice () const;
|
||||
void setVideoDevice (const QString &device);
|
||||
|
||||
// Chat & calls. -------------------------------------------------------------
|
||||
QString getVideoPreset () const;
|
||||
void setVideoPreset (const QString &preset);
|
||||
|
||||
bool getAutoAnswerStatus () const;
|
||||
void setAutoAnswerStatus (bool status);
|
||||
int getVideoFramerate () const;
|
||||
void setVideoFramerate (int framerate);
|
||||
|
||||
bool getAutoAnswerVideoStatus () const;
|
||||
void setAutoAnswerVideoStatus (bool status);
|
||||
QVariantList getSupportedVideoDefinitions () const;
|
||||
|
||||
int getAutoAnswerDelay () const;
|
||||
void setAutoAnswerDelay (int delay);
|
||||
QVariantMap getVideoDefinition () const;
|
||||
void setVideoDefinition (const QVariantMap &definition);
|
||||
|
||||
bool getShowTelKeypadAutomatically () const;
|
||||
void setShowTelKeypadAutomatically (bool status);
|
||||
bool getVideoSupported () const;
|
||||
|
||||
bool getKeepCallsWindowInBackground () const;
|
||||
void setKeepCallsWindowInBackground (bool status);
|
||||
bool getShowVideoCodecs () const;
|
||||
void setShowVideoCodecs (bool status);
|
||||
|
||||
bool getOutgoingCallsEnabled () const;
|
||||
void setOutgoingCallsEnabled (bool status);
|
||||
// Chat & calls. -------------------------------------------------------------
|
||||
|
||||
bool getCallRecorderEnabled () const;
|
||||
void setCallRecorderEnabled (bool status);
|
||||
bool getAutoAnswerStatus () const;
|
||||
void setAutoAnswerStatus (bool status);
|
||||
|
||||
bool getAutomaticallyRecordCalls () const;
|
||||
void setAutomaticallyRecordCalls (bool status);
|
||||
bool getAutoAnswerVideoStatus () const;
|
||||
void setAutoAnswerVideoStatus (bool status);
|
||||
|
||||
bool getCallPauseEnabled () const;
|
||||
void setCallPauseEnabled (bool status);
|
||||
int getAutoAnswerDelay () const;
|
||||
void setAutoAnswerDelay (int delay);
|
||||
|
||||
bool getMuteMicrophoneEnabled () const;
|
||||
void setMuteMicrophoneEnabled (bool status);
|
||||
bool getShowTelKeypadAutomatically () const;
|
||||
void setShowTelKeypadAutomatically (bool status);
|
||||
|
||||
bool getChatEnabled () const;
|
||||
void setChatEnabled (bool status);
|
||||
bool getKeepCallsWindowInBackground () const;
|
||||
void setKeepCallsWindowInBackground (bool status);
|
||||
|
||||
bool getConferenceEnabled () const;
|
||||
void setConferenceEnabled (bool status);
|
||||
bool getOutgoingCallsEnabled () const;
|
||||
void setOutgoingCallsEnabled (bool status);
|
||||
|
||||
bool getChatNotificationSoundEnabled () const;
|
||||
void setChatNotificationSoundEnabled (bool status);
|
||||
bool getCallRecorderEnabled () const;
|
||||
void setCallRecorderEnabled (bool status);
|
||||
|
||||
QString getChatNotificationSoundPath () const;
|
||||
void setChatNotificationSoundPath (const QString &path);
|
||||
bool getAutomaticallyRecordCalls () const;
|
||||
void setAutomaticallyRecordCalls (bool status);
|
||||
|
||||
QString getFileTransferUrl () const;
|
||||
void setFileTransferUrl (const QString &url);
|
||||
bool getCallPauseEnabled () const;
|
||||
void setCallPauseEnabled (bool status);
|
||||
|
||||
bool getLimeIsSupported () const;
|
||||
QVariantList getSupportedMediaEncryptions () const;
|
||||
bool getMuteMicrophoneEnabled () const;
|
||||
void setMuteMicrophoneEnabled (bool status);
|
||||
|
||||
MediaEncryption getMediaEncryption () const;
|
||||
void setMediaEncryption (MediaEncryption encryption);
|
||||
bool getChatEnabled () const;
|
||||
void setChatEnabled (bool status);
|
||||
|
||||
LimeState getLimeState () const;
|
||||
void setLimeState (LimeState state);
|
||||
bool getConferenceEnabled () const;
|
||||
void setConferenceEnabled (bool status);
|
||||
|
||||
bool getContactsEnabled () const;
|
||||
void setContactsEnabled (bool status);
|
||||
bool getChatNotificationSoundEnabled () const;
|
||||
void setChatNotificationSoundEnabled (bool status);
|
||||
|
||||
// Network. ------------------------------------------------------------------
|
||||
QString getChatNotificationSoundPath () const;
|
||||
void setChatNotificationSoundPath (const QString &path);
|
||||
|
||||
bool getShowNetworkSettings () const;
|
||||
void setShowNetworkSettings (bool status);
|
||||
QString getFileTransferUrl () const;
|
||||
void setFileTransferUrl (const QString &url);
|
||||
|
||||
bool getUseSipInfoForDtmfs () const;
|
||||
void setUseSipInfoForDtmfs (bool status);
|
||||
bool getLimeIsSupported () const;
|
||||
QVariantList getSupportedMediaEncryptions () const;
|
||||
|
||||
bool getUseRfc2833ForDtmfs () const;
|
||||
void setUseRfc2833ForDtmfs (bool status);
|
||||
MediaEncryption getMediaEncryption () const;
|
||||
void setMediaEncryption (MediaEncryption encryption);
|
||||
|
||||
bool getIpv6Enabled () const;
|
||||
void setIpv6Enabled (bool status);
|
||||
bool mandatoryMediaEncryptionEnabled () const;
|
||||
void enableMandatoryMediaEncryption(bool mandatory);
|
||||
|
||||
int getDownloadBandwidth () const;
|
||||
void setDownloadBandwidth (int bandwidth);
|
||||
LimeState getLimeState () const;
|
||||
void setLimeState (LimeState state);
|
||||
|
||||
int getUploadBandwidth () const;
|
||||
void setUploadBandwidth (int bandwidth);
|
||||
bool getContactsEnabled () const;
|
||||
void setContactsEnabled (bool status);
|
||||
|
||||
bool getAdaptiveRateControlEnabled () const;
|
||||
void setAdaptiveRateControlEnabled (bool status);
|
||||
// Network. ------------------------------------------------------------------
|
||||
|
||||
int getTcpPort () const;
|
||||
void setTcpPort (int port);
|
||||
bool getShowNetworkSettings () const;
|
||||
void setShowNetworkSettings (bool status);
|
||||
|
||||
int getUdpPort () const;
|
||||
void setUdpPort (int port);
|
||||
bool getUseSipInfoForDtmfs () const;
|
||||
void setUseSipInfoForDtmfs (bool status);
|
||||
|
||||
QList<int> getAudioPortRange () const;
|
||||
void setAudioPortRange (const QList<int> &range);
|
||||
bool getUseRfc2833ForDtmfs () const;
|
||||
void setUseRfc2833ForDtmfs (bool status);
|
||||
|
||||
QList<int> getVideoPortRange () const;
|
||||
void setVideoPortRange (const QList<int> &range);
|
||||
bool getIpv6Enabled () const;
|
||||
void setIpv6Enabled (bool status);
|
||||
|
||||
bool getIceEnabled () const;
|
||||
void setIceEnabled (bool status);
|
||||
int getDownloadBandwidth () const;
|
||||
void setDownloadBandwidth (int bandwidth);
|
||||
|
||||
bool getTurnEnabled () const;
|
||||
void setTurnEnabled (bool status);
|
||||
int getUploadBandwidth () const;
|
||||
void setUploadBandwidth (int bandwidth);
|
||||
|
||||
QString getStunServer () const;
|
||||
void setStunServer (const QString &stunServer);
|
||||
bool getAdaptiveRateControlEnabled () const;
|
||||
void setAdaptiveRateControlEnabled (bool status);
|
||||
|
||||
QString getTurnUser () const;
|
||||
void setTurnUser (const QString &user);
|
||||
int getTcpPort () const;
|
||||
void setTcpPort (int port);
|
||||
|
||||
QString getTurnPassword () const;
|
||||
void setTurnPassword (const QString &password);
|
||||
int getUdpPort () const;
|
||||
void setUdpPort (int port);
|
||||
|
||||
int getDscpSip () const;
|
||||
void setDscpSip (int dscp);
|
||||
QList<int> getAudioPortRange () const;
|
||||
void setAudioPortRange (const QList<int> &range);
|
||||
|
||||
int getDscpAudio () const;
|
||||
void setDscpAudio (int dscp);
|
||||
QList<int> getVideoPortRange () const;
|
||||
void setVideoPortRange (const QList<int> &range);
|
||||
|
||||
int getDscpVideo () const;
|
||||
void setDscpVideo (int dscp);
|
||||
bool getIceEnabled () const;
|
||||
void setIceEnabled (bool status);
|
||||
|
||||
bool getRlsUriEnabled () const;
|
||||
void setRlsUriEnabled (bool status);
|
||||
bool getTurnEnabled () const;
|
||||
void setTurnEnabled (bool status);
|
||||
|
||||
void configureRlsUri ();
|
||||
void configureRlsUri (const std::shared_ptr<const linphone::ProxyConfig> &proxyConfig);
|
||||
QString getStunServer () const;
|
||||
void setStunServer (const QString &stunServer);
|
||||
|
||||
// UI. -----------------------------------------------------------------------
|
||||
QString getTurnUser () const;
|
||||
void setTurnUser (const QString &user);
|
||||
|
||||
QString getSavedScreenshotsFolder () const;
|
||||
void setSavedScreenshotsFolder (const QString &folder);
|
||||
QString getTurnPassword () const;
|
||||
void setTurnPassword (const QString &password);
|
||||
|
||||
QString getSavedCallsFolder () const;
|
||||
void setSavedCallsFolder (const QString &folder);
|
||||
int getDscpSip () const;
|
||||
void setDscpSip (int dscp);
|
||||
|
||||
QString getDownloadFolder () const;
|
||||
void setDownloadFolder (const QString &folder);
|
||||
int getDscpAudio () const;
|
||||
void setDscpAudio (int dscp);
|
||||
|
||||
QString getRemoteProvisioning () const;
|
||||
void setRemoteProvisioning (const QString &remoteProvisioning);
|
||||
int getDscpVideo () const;
|
||||
void setDscpVideo (int dscp);
|
||||
|
||||
bool getExitOnClose () const;
|
||||
void setExitOnClose (bool value);
|
||||
bool getRlsUriEnabled () const;
|
||||
void setRlsUriEnabled (bool status);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
void configureRlsUri ();
|
||||
void configureRlsUri (const std::shared_ptr<const linphone::ProxyConfig> &proxyConfig);
|
||||
|
||||
QString getLogsFolder () const;
|
||||
void setLogsFolder (const QString &folder);
|
||||
// UI. -----------------------------------------------------------------------
|
||||
|
||||
QString getLogsUploadUrl () const;
|
||||
void setLogsUploadUrl (const QString &url);
|
||||
QString getSavedScreenshotsFolder () const;
|
||||
void setSavedScreenshotsFolder (const QString &folder);
|
||||
|
||||
bool getLogsEnabled () const;
|
||||
void setLogsEnabled (bool status);
|
||||
QString getSavedCallsFolder () const;
|
||||
void setSavedCallsFolder (const QString &folder);
|
||||
|
||||
QString getLogsEmail () const;
|
||||
void setLogsEmail (const QString &email);
|
||||
QString getDownloadFolder () const;
|
||||
void setDownloadFolder (const QString &folder);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
QString getRemoteProvisioning () const;
|
||||
void setRemoteProvisioning (const QString &remoteProvisioning);
|
||||
|
||||
static QString getLogsFolder (const std::shared_ptr<linphone::Config> &config);
|
||||
static bool getLogsEnabled (const std::shared_ptr<linphone::Config> &config);
|
||||
bool getExitOnClose () const;
|
||||
void setExitOnClose (bool value);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool getDeveloperSettingsEnabled () const;
|
||||
void setDeveloperSettingsEnabled (bool status);
|
||||
QString getLogsFolder () const;
|
||||
void setLogsFolder (const QString &folder);
|
||||
|
||||
static const std::string UiSection;
|
||||
QString getLogsUploadUrl () const;
|
||||
void setLogsUploadUrl (const QString &url);
|
||||
|
||||
// ===========================================================================
|
||||
// SIGNALS.
|
||||
// ===========================================================================
|
||||
bool getLogsEnabled () const;
|
||||
void setLogsEnabled (bool status);
|
||||
|
||||
QString getLogsEmail () const;
|
||||
void setLogsEmail (const QString &email);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
static QString getLogsFolder (const std::shared_ptr<linphone::Config> &config);
|
||||
static bool getLogsEnabled (const std::shared_ptr<linphone::Config> &config);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool getDeveloperSettingsEnabled () const;
|
||||
void setDeveloperSettingsEnabled (bool status);
|
||||
|
||||
void handleCallCreated(const std::shared_ptr<linphone::Call> &call);
|
||||
void handleCallStateChanged(const std::shared_ptr<linphone::Call> &call, linphone::Call::State state);
|
||||
|
||||
bool getIsInCall() const;
|
||||
|
||||
static const std::string UiSection;
|
||||
|
||||
// ===========================================================================
|
||||
// SIGNALS.
|
||||
// ===========================================================================
|
||||
|
||||
signals:
|
||||
// Assistant. ----------------------------------------------------------------
|
||||
// Assistant. ----------------------------------------------------------------
|
||||
|
||||
void createAppSipAccountEnabledChanged (bool status);
|
||||
void fetchRemoteConfigurationEnabledChanged (bool status);
|
||||
void useAppSipAccountEnabledChanged (bool status);
|
||||
void useOtherSipAccountEnabledChanged (bool status);
|
||||
void createAppSipAccountEnabledChanged (bool status);
|
||||
void fetchRemoteConfigurationEnabledChanged (bool status);
|
||||
void useAppSipAccountEnabledChanged (bool status);
|
||||
void useOtherSipAccountEnabledChanged (bool status);
|
||||
|
||||
void assistantSupportsPhoneNumbersChanged (bool status);
|
||||
void assistantSupportsPhoneNumbersChanged (bool status);
|
||||
|
||||
// Audio. --------------------------------------------------------------------
|
||||
// Audio. --------------------------------------------------------------------
|
||||
|
||||
void captureDeviceChanged (const QString &device);
|
||||
void playbackDeviceChanged (const QString &device);
|
||||
void ringerDeviceChanged (const QString &device);
|
||||
void captureGraphRunningChanged(bool running);
|
||||
|
||||
void ringPathChanged (const QString &path);
|
||||
void playbackGainChanged(float gain);
|
||||
void captureGainChanged(float gain);
|
||||
|
||||
void echoCancellationEnabledChanged (bool status);
|
||||
void captureDevicesChanged (const QStringList &devices);
|
||||
void playbackDevicesChanged (const QStringList &devices);
|
||||
|
||||
void showAudioCodecsChanged (bool status);
|
||||
void captureDeviceChanged (const QString &device);
|
||||
void playbackDeviceChanged (const QString &device);
|
||||
void ringerDeviceChanged (const QString &device);
|
||||
|
||||
// Video. --------------------------------------------------------------------
|
||||
void ringPathChanged (const QString &path);
|
||||
|
||||
void videoDeviceChanged (const QString &device);
|
||||
void echoCancellationEnabledChanged (bool status);
|
||||
|
||||
void videoPresetChanged (const QString &preset);
|
||||
void videoFramerateChanged (int framerate);
|
||||
void showAudioCodecsChanged (bool status);
|
||||
|
||||
void videoDefinitionChanged (const QVariantMap &definition);
|
||||
// Video. --------------------------------------------------------------------
|
||||
|
||||
void showVideoCodecsChanged (bool status);
|
||||
void videoDevicesChanged (const QStringList &devices);
|
||||
void videoDeviceChanged (const QString &device);
|
||||
|
||||
// Chat & calls. -------------------------------------------------------------
|
||||
void videoPresetChanged (const QString &preset);
|
||||
void videoFramerateChanged (int framerate);
|
||||
|
||||
void autoAnswerStatusChanged (bool status);
|
||||
void autoAnswerVideoStatusChanged (bool status);
|
||||
void autoAnswerDelayChanged (int delay);
|
||||
void videoDefinitionChanged (const QVariantMap &definition);
|
||||
|
||||
void showTelKeypadAutomaticallyChanged (bool status);
|
||||
void showVideoCodecsChanged (bool status);
|
||||
|
||||
void keepCallsWindowInBackgroundChanged (bool status);
|
||||
// Chat & calls. -------------------------------------------------------------
|
||||
|
||||
void outgoingCallsEnabledChanged (bool status);
|
||||
void autoAnswerStatusChanged (bool status);
|
||||
void autoAnswerVideoStatusChanged (bool status);
|
||||
void autoAnswerDelayChanged (int delay);
|
||||
|
||||
void callRecorderEnabledChanged (bool status);
|
||||
void automaticallyRecordCallsChanged (bool status);
|
||||
void showTelKeypadAutomaticallyChanged (bool status);
|
||||
|
||||
void callPauseEnabledChanged (bool status);
|
||||
void muteMicrophoneEnabledChanged (bool status);
|
||||
void keepCallsWindowInBackgroundChanged (bool status);
|
||||
|
||||
void chatEnabledChanged (bool status);
|
||||
void outgoingCallsEnabledChanged (bool status);
|
||||
|
||||
void conferenceEnabledChanged (bool status);
|
||||
void callRecorderEnabledChanged (bool status);
|
||||
void automaticallyRecordCallsChanged (bool status);
|
||||
|
||||
void chatNotificationSoundEnabledChanged (bool status);
|
||||
void chatNotificationSoundPathChanged (const QString &path);
|
||||
void callPauseEnabledChanged (bool status);
|
||||
void muteMicrophoneEnabledChanged (bool status);
|
||||
|
||||
void fileTransferUrlChanged (const QString &url);
|
||||
void chatEnabledChanged (bool status);
|
||||
|
||||
void mediaEncryptionChanged (MediaEncryption encryption);
|
||||
void limeStateChanged (LimeState state);
|
||||
void conferenceEnabledChanged (bool status);
|
||||
|
||||
void contactsEnabledChanged (bool status);
|
||||
void chatNotificationSoundEnabledChanged (bool status);
|
||||
void chatNotificationSoundPathChanged (const QString &path);
|
||||
|
||||
// Network. ------------------------------------------------------------------
|
||||
void fileTransferUrlChanged (const QString &url);
|
||||
|
||||
void showNetworkSettingsChanged (bool status);
|
||||
void mediaEncryptionChanged (MediaEncryption encryption);
|
||||
void limeStateChanged (LimeState state);
|
||||
|
||||
void dtmfsProtocolChanged ();
|
||||
void contactsEnabledChanged (bool status);
|
||||
|
||||
void ipv6EnabledChanged (bool status);
|
||||
// Network. ------------------------------------------------------------------
|
||||
|
||||
void downloadBandWidthChanged (int bandwidth);
|
||||
void uploadBandWidthChanged (int bandwidth);
|
||||
void showNetworkSettingsChanged (bool status);
|
||||
|
||||
bool adaptiveRateControlEnabledChanged (bool status);
|
||||
void dtmfsProtocolChanged ();
|
||||
|
||||
void tcpPortChanged (int port);
|
||||
void udpPortChanged (int port);
|
||||
void ipv6EnabledChanged (bool status);
|
||||
|
||||
void audioPortRangeChanged (int a, int b);
|
||||
void videoPortRangeChanged (int a, int b);
|
||||
void downloadBandWidthChanged (int bandwidth);
|
||||
void uploadBandWidthChanged (int bandwidth);
|
||||
|
||||
void iceEnabledChanged (bool status);
|
||||
void turnEnabledChanged (bool status);
|
||||
bool adaptiveRateControlEnabledChanged (bool status);
|
||||
|
||||
void stunServerChanged (const QString &server);
|
||||
void tcpPortChanged (int port);
|
||||
void udpPortChanged (int port);
|
||||
|
||||
void turnUserChanged (const QString &user);
|
||||
void turnPasswordChanged (const QString &password);
|
||||
void audioPortRangeChanged (int a, int b);
|
||||
void videoPortRangeChanged (int a, int b);
|
||||
|
||||
void dscpSipChanged (int dscp);
|
||||
void dscpAudioChanged (int dscp);
|
||||
void dscpVideoChanged (int dscp);
|
||||
void iceEnabledChanged (bool status);
|
||||
void turnEnabledChanged (bool status);
|
||||
|
||||
void rlsUriEnabledChanged (bool status);
|
||||
void stunServerChanged (const QString &server);
|
||||
|
||||
// UI. -----------------------------------------------------------------------
|
||||
void turnUserChanged (const QString &user);
|
||||
void turnPasswordChanged (const QString &password);
|
||||
|
||||
void savedScreenshotsFolderChanged (const QString &folder);
|
||||
void savedCallsFolderChanged (const QString &folder);
|
||||
void downloadFolderChanged (const QString &folder);
|
||||
void dscpSipChanged (int dscp);
|
||||
void dscpAudioChanged (int dscp);
|
||||
void dscpVideoChanged (int dscp);
|
||||
|
||||
void remoteProvisioningChanged (const QString &remoteProvisioning);
|
||||
void remoteProvisioningNotChanged (const QString &remoteProvisioning);
|
||||
void rlsUriEnabledChanged (bool status);
|
||||
|
||||
void exitOnCloseChanged (bool value);
|
||||
// UI. -----------------------------------------------------------------------
|
||||
|
||||
// Advanced. -----------------------------------------------------------------
|
||||
void savedScreenshotsFolderChanged (const QString &folder);
|
||||
void savedCallsFolderChanged (const QString &folder);
|
||||
void downloadFolderChanged (const QString &folder);
|
||||
|
||||
void logsFolderChanged (const QString &folder);
|
||||
void logsUploadUrlChanged (const QString &url);
|
||||
void logsEnabledChanged (bool status);
|
||||
void logsEmailChanged (const QString &email);
|
||||
void remoteProvisioningChanged (const QString &remoteProvisioning);
|
||||
void remoteProvisioningNotChanged (const QString &remoteProvisioning);
|
||||
|
||||
bool developerSettingsEnabledChanged (bool status);
|
||||
void exitOnCloseChanged (bool value);
|
||||
|
||||
// Advanced. -----------------------------------------------------------------
|
||||
|
||||
void logsFolderChanged (const QString &folder);
|
||||
void logsUploadUrlChanged (const QString &url);
|
||||
void logsEnabledChanged (bool status);
|
||||
void logsEmailChanged (const QString &email);
|
||||
|
||||
bool developerSettingsEnabledChanged (bool status);
|
||||
|
||||
bool isInCallChanged(bool);
|
||||
|
||||
private:
|
||||
std::shared_ptr<linphone::Config> mConfig;
|
||||
int mCurrentSettingsTab = 0;
|
||||
MediastreamerUtils::SimpleCaptureGraph *mSimpleCaptureGraph = nullptr;
|
||||
|
||||
std::shared_ptr<linphone::Config> mConfig;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(std::shared_ptr<const linphone::VideoDefinition>);
|
||||
|
|
|
|||
|
|
@ -451,6 +451,14 @@ void SipAddressesModel::addOrUpdateSipAddress (SipAddressEntry &sipAddressEntry,
|
|||
].timestamp = callLog->getStatus() == linphone::Call::Status::Success
|
||||
? QDateTime::fromMSecsSinceEpoch((callLog->getStartDate() + callLog->getDuration()) * 1000)
|
||||
: QDateTime::fromMSecsSinceEpoch(callLog->getStartDate() * 1000);
|
||||
|
||||
if (callLog->getStatus() == linphone::Call::Status::Missed) {
|
||||
for (auto &observer : mObservers.values(QString::fromStdString((callLog->getRemoteAddress()->asStringUriOnly())))) {
|
||||
if (observer->getLocalAddress() == QString::fromStdString(callLog->getLocalAddress()->asStringUriOnly())) {
|
||||
observer->setUnreadMessageCount(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SipAddressesModel::addOrUpdateSipAddress (SipAddressEntry &sipAddressEntry, const shared_ptr<linphone::ChatMessage> &message) {
|
||||
|
|
@ -561,18 +569,17 @@ void SipAddressesModel::initSipAddressesFromCalls () {
|
|||
const QString localAddress(Utils::coreStringToAppString(callLog->getLocalAddress()->asStringUriOnly()));
|
||||
|
||||
switch (callLog->getStatus()) {
|
||||
case linphone::Call::Status::Aborted:
|
||||
case linphone::Call::Status::EarlyAborted:
|
||||
return; // Ignore aborted calls.
|
||||
case linphone::Call::Status::Aborted:
|
||||
case linphone::Call::Status::EarlyAborted:
|
||||
return; // Ignore aborted calls.
|
||||
case linphone::Call::Status::AcceptedElsewhere:
|
||||
case linphone::Call::Status::DeclinedElsewhere:
|
||||
return; // Ignore accepted calls on other device.
|
||||
case linphone::Call::Status::Success:
|
||||
case linphone::Call::Status::Declined:
|
||||
|
||||
case linphone::Call::Status::AcceptedElsewhere:
|
||||
case linphone::Call::Status::DeclinedElsewhere:
|
||||
return; // Ignore accepted calls on other device.
|
||||
|
||||
case linphone::Call::Status::Success:
|
||||
case linphone::Call::Status::Missed:
|
||||
case linphone::Call::Status::Declined:
|
||||
break;
|
||||
case linphone::Call::Status::Missed:
|
||||
break;
|
||||
}
|
||||
|
||||
ConferenceId conferenceId{ peerAddress, localAddress };
|
||||
|
|
@ -617,9 +624,10 @@ void SipAddressesModel::updateObservers (const QString &sipAddress, const Presen
|
|||
}
|
||||
|
||||
void SipAddressesModel::updateObservers (const QString &peerAddress, const QString &localAddress, int messageCount) {
|
||||
for (auto &observer : mObservers.values(peerAddress))
|
||||
if (observer->getLocalAddress() == localAddress) {
|
||||
observer->setUnreadMessageCount(messageCount);
|
||||
return;
|
||||
}
|
||||
for (auto &observer : mObservers.values(peerAddress)) {
|
||||
if (observer->getLocalAddress() == localAddress) {
|
||||
observer->setUnreadMessageCount(messageCount);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,6 +114,9 @@ private:
|
|||
void addOrUpdateSipAddress (SipAddressEntry &sipAddressEntry, const std::shared_ptr<linphone::Call> &call);
|
||||
void addOrUpdateSipAddress (SipAddressEntry &sipAddressEntry, const std::shared_ptr<linphone::ChatMessage> &message);
|
||||
|
||||
|
||||
//NMN TODO bind to missedCall event and implement void addOrUpdateSipAddress
|
||||
|
||||
template<class T>
|
||||
void addOrUpdateSipAddress (const QString &sipAddress, T data);
|
||||
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ void SoundPlayer::buildInternalPlayer () {
|
|||
mInternalPlayer = coreManager->getCore()->createLocalPlayer(
|
||||
Utils::appStringToCoreString(settingsModel->getRingerDevice()), "", nullptr
|
||||
);
|
||||
mInternalPlayer->setListener(mHandlers);
|
||||
mInternalPlayer->addListener(mHandlers);
|
||||
|
||||
QObject::connect(settingsModel, &SettingsModel::ringerDeviceChanged, this, [this] {
|
||||
rebuildInternalPlayer();
|
||||
|
|
|
|||
|
|
@ -30,17 +30,6 @@
|
|||
class QString;
|
||||
|
||||
namespace LinphoneUtils {
|
||||
inline float computeVu (float volume) {
|
||||
constexpr float VuMin = -20.f;
|
||||
constexpr float VuMax = 4.f;
|
||||
|
||||
if (volume < VuMin)
|
||||
return 0.f;
|
||||
if (volume > VuMax)
|
||||
return 1.f;
|
||||
|
||||
return (volume - VuMin) / (VuMax - VuMin);
|
||||
}
|
||||
|
||||
linphone::TransportType stringToTransportType (const QString &transport);
|
||||
|
||||
|
|
|
|||
141
src/utils/MediastreamerUtils.cpp
Normal file
141
src/utils/MediastreamerUtils.cpp
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* MediastreamerUtils.cpp
|
||||
* Copyright (C) 2017-2019 Belledonne Communications, Grenoble, France
|
||||
*
|
||||
* 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 2
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* Created on: Nov 6, 2019
|
||||
* Author: Nicolas Michon
|
||||
*/
|
||||
|
||||
#include <linphone/linphonecore.h>
|
||||
#include "mediastreamer2/msvolume.h"
|
||||
#include "mediastreamer2/mssndcard.h"
|
||||
#include "mediastreamer2/msticker.h"
|
||||
#include "components/core/CoreManager.hpp"
|
||||
#include "MediastreamerUtils.hpp"
|
||||
|
||||
using namespace MediastreamerUtils;
|
||||
|
||||
SimpleCaptureGraph::SimpleCaptureGraph(const std::string &capture, const std::string &playback)
|
||||
: captureCardId(capture), playbackCardId(playback)
|
||||
{
|
||||
LinphoneCore *ccore = CoreManager::getInstance()->getCore()->cPtr();
|
||||
msFactory = linphone_core_get_ms_factory(ccore);
|
||||
|
||||
playbackCard = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(msFactory), playbackCardId.c_str());
|
||||
captureCard = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(msFactory), captureCardId.c_str());
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
SimpleCaptureGraph::~SimpleCaptureGraph()
|
||||
{
|
||||
destroy();
|
||||
}
|
||||
|
||||
void SimpleCaptureGraph::init() {
|
||||
if (!audioCapture) {
|
||||
audioCapture = ms_snd_card_create_reader(captureCard);
|
||||
}
|
||||
if (!audioSink) {
|
||||
audioSink = ms_snd_card_create_writer(playbackCard);
|
||||
}
|
||||
if (!captureVolumeFilter) {
|
||||
captureVolumeFilter = ms_factory_create_filter(msFactory, MS_VOLUME_ID);
|
||||
}
|
||||
if (!playbackVolumeFilter) {
|
||||
playbackVolumeFilter = ms_factory_create_filter(msFactory, MS_VOLUME_ID);
|
||||
}
|
||||
|
||||
ms_filter_link(audioCapture, 0, captureVolumeFilter, 0);
|
||||
ms_filter_link(captureVolumeFilter, 0, playbackVolumeFilter, 0);
|
||||
ms_filter_link(playbackVolumeFilter, 0, audioSink, 0);
|
||||
|
||||
//Mute playback
|
||||
float muteGain = 0.0f;
|
||||
ms_filter_call_method(playbackVolumeFilter, static_cast<unsigned int>(MS_VOLUME_SET_GAIN), &muteGain);
|
||||
|
||||
ticker = ms_ticker_new();
|
||||
running = false;
|
||||
}
|
||||
|
||||
void SimpleCaptureGraph::start() {
|
||||
if (!running) {
|
||||
ms_ticker_attach(ticker, audioCapture);
|
||||
running = true;
|
||||
}
|
||||
}
|
||||
|
||||
void SimpleCaptureGraph::stop() {
|
||||
if (running) {
|
||||
ms_ticker_detach(ticker, audioCapture);
|
||||
running = false;
|
||||
}
|
||||
}
|
||||
|
||||
void SimpleCaptureGraph::destroy() {
|
||||
if (running) {
|
||||
stop();
|
||||
}
|
||||
ms_ticker_destroy(ticker);
|
||||
ms_filter_unlink(audioCapture, 0, captureVolumeFilter, 0);
|
||||
ms_filter_unlink(captureVolumeFilter, 0, playbackVolumeFilter, 0);
|
||||
ms_filter_unlink(playbackVolumeFilter, 0, audioSink, 0);
|
||||
|
||||
ms_free(audioCapture);
|
||||
ms_free(captureVolumeFilter);
|
||||
ms_free(audioSink);
|
||||
ms_free(playbackVolumeFilter);
|
||||
}
|
||||
|
||||
float SimpleCaptureGraph::getCaptureGain() {
|
||||
float gain = 0.0f;
|
||||
|
||||
if (isRunning() && audioCapture) {
|
||||
ms_filter_call_method(audioCapture, MS_AUDIO_CAPTURE_GET_VOLUME_GAIN, &gain);
|
||||
}
|
||||
return gain;
|
||||
}
|
||||
|
||||
void SimpleCaptureGraph::setCaptureGain(float gain) {
|
||||
if (isRunning() && audioCapture) {
|
||||
ms_filter_call_method(audioCapture, MS_AUDIO_CAPTURE_SET_VOLUME_GAIN, &gain);
|
||||
}
|
||||
}
|
||||
|
||||
float SimpleCaptureGraph::getPlaybackGain() {
|
||||
float gain = 0.0f;
|
||||
if (isRunning() && audioSink) {
|
||||
ms_filter_call_method(audioSink, MS_AUDIO_PLAYBACK_GET_VOLUME_GAIN, &gain);
|
||||
}
|
||||
return gain;
|
||||
}
|
||||
|
||||
void SimpleCaptureGraph::setPlaybackGain(float gain) {
|
||||
if (isRunning() && audioSink) {
|
||||
ms_filter_call_method(audioSink, MS_AUDIO_PLAYBACK_SET_VOLUME_GAIN, &gain);
|
||||
}
|
||||
}
|
||||
|
||||
float SimpleCaptureGraph::getCaptureVolume() {
|
||||
float vol = 0;
|
||||
|
||||
if (captureVolumeFilter) {
|
||||
ms_filter_call_method(captureVolumeFilter, MS_VOLUME_GET, &vol);
|
||||
vol = MediastreamerUtils::dbToLinear(vol);
|
||||
}
|
||||
return vol;
|
||||
}
|
||||
102
src/utils/MediastreamerUtils.hpp
Normal file
102
src/utils/MediastreamerUtils.hpp
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* MediastreamerUtils.hpp
|
||||
* Copyright (C) 2017-2019 Belledonne Communications, Grenoble, France
|
||||
*
|
||||
* 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 2
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* Created on: Nov 6, 2019
|
||||
* Author: Nicolas Michon
|
||||
*/
|
||||
|
||||
#ifndef MEDIASTREAMER_UTILS_H_
|
||||
#define MEDIASTREAMER_UTILS_H_
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#include "mediastreamer2/mssndcard.h"
|
||||
#include "mediastreamer2/msvolume.h"
|
||||
#include "mediastreamer2/msfilter.h"
|
||||
#include "mediastreamer2/msticker.h"
|
||||
#include <linphone++/linphone.hh>
|
||||
|
||||
// =============================================================================
|
||||
|
||||
namespace MediastreamerUtils {
|
||||
|
||||
inline float computeVu (float volume) {
|
||||
constexpr float VuMin = -20.f;
|
||||
constexpr float VuMax = 4.f;
|
||||
|
||||
if (volume < VuMin)
|
||||
return 0.f;
|
||||
if (volume > VuMax)
|
||||
return 1.f;
|
||||
|
||||
return (volume - VuMin) / (VuMax - VuMin);
|
||||
}
|
||||
|
||||
inline float dbToLinear(float volume) {
|
||||
return static_cast<float>(pow(10, volume / 10));
|
||||
}
|
||||
|
||||
inline float linearToDb(float volume) {
|
||||
if (volume == 0.0f) {
|
||||
return MS_VOLUME_DB_LOWEST;
|
||||
}
|
||||
return static_cast<float>(10 * log10(volume));
|
||||
}
|
||||
|
||||
//Simple mediastreamer audio capture graph
|
||||
//Used to get current microphone volume in audio settings
|
||||
class SimpleCaptureGraph {
|
||||
public:
|
||||
SimpleCaptureGraph(const std::string &captureCardId, const std::string &playbackCardId);
|
||||
~SimpleCaptureGraph();
|
||||
|
||||
void start();
|
||||
void stop();
|
||||
|
||||
float getCaptureVolume();
|
||||
|
||||
float getCaptureGain();
|
||||
float getPlaybackGain();
|
||||
void setCaptureGain(float volume);
|
||||
void setPlaybackGain(float volume);
|
||||
|
||||
bool isRunning() const {
|
||||
return running;
|
||||
}
|
||||
protected:
|
||||
void init();
|
||||
void destroy();
|
||||
|
||||
bool running = false;
|
||||
|
||||
std::string captureCardId;
|
||||
std::string playbackCardId;
|
||||
|
||||
MSFilter *audioSink = nullptr;
|
||||
MSFilter *audioCapture = nullptr;
|
||||
MSFilter *captureVolumeFilter = nullptr;
|
||||
MSFilter *playbackVolumeFilter = nullptr;
|
||||
MSTicker *ticker = nullptr;
|
||||
MSSndCard *playbackCard = nullptr;
|
||||
MSSndCard *captureCard = nullptr;
|
||||
MSFactory *msFactory = nullptr;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // ifndef MEDIASTREAMER_UTILS_H_
|
||||
|
|
@ -69,3 +69,54 @@ QString Utils::getSafeFilePath (const QString &filePath, bool *soFarSoGood) {
|
|||
|
||||
return QString("");
|
||||
}
|
||||
// Data to retrieve WIN32 process
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
struct EnumData {
|
||||
DWORD dwProcessId;
|
||||
HWND hWnd;
|
||||
};
|
||||
// Application-defined callback for EnumWindows
|
||||
BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam) {
|
||||
// Retrieve storage location for communication data
|
||||
EnumData& ed = *(EnumData*)lParam;
|
||||
DWORD dwProcessId = 0x0;
|
||||
// Query process ID for hWnd
|
||||
GetWindowThreadProcessId(hWnd, &dwProcessId);
|
||||
// Apply filter - if you want to implement additional restrictions,
|
||||
// this is the place to do so.
|
||||
if (ed.dwProcessId == dwProcessId) {
|
||||
// Found a window matching the process ID
|
||||
ed.hWnd = hWnd;
|
||||
// Report success
|
||||
SetLastError(ERROR_SUCCESS);
|
||||
// Stop enumeration
|
||||
return FALSE;
|
||||
}
|
||||
// Continue enumeration
|
||||
return TRUE;
|
||||
}
|
||||
// Main entry
|
||||
HWND FindWindowFromProcessId(DWORD dwProcessId) {
|
||||
EnumData ed = { dwProcessId };
|
||||
if (!EnumWindows(EnumProc, (LPARAM)&ed) &&
|
||||
(GetLastError() == ERROR_SUCCESS)) {
|
||||
return ed.hWnd;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Helper method for convenience
|
||||
HWND FindWindowFromProcess(HANDLE hProcess) {
|
||||
return FindWindowFromProcessId(GetProcessId(hProcess));
|
||||
}
|
||||
#endif
|
||||
|
||||
bool Utils::processExists(const quint64& p_processId)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return FindWindowFromProcessId(p_processId) != NULL;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
|
@ -56,6 +56,9 @@ namespace Utils {
|
|||
// Otherwise returns a safe path with a unique number before the extension.
|
||||
QString getSafeFilePath (const QString &filePath, bool *soFarSoGood = nullptr);
|
||||
|
||||
// Test if the process exists
|
||||
bool processExists(const quint64& p_processId);
|
||||
|
||||
// Connect once to a member function.
|
||||
template<typename Func1, typename Func2>
|
||||
static inline QMetaObject::Connection connectOnce (
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ Item {
|
|||
property bool useStates: true
|
||||
property int iconSize // Optional.
|
||||
readonly property alias hovered: button.hovered
|
||||
property alias text: button.text
|
||||
|
||||
// If `useStates` = true, the used icons are:
|
||||
// `icon`_pressed, `icon`_hovered and `icon`_normal.
|
||||
|
|
@ -51,7 +52,7 @@ Item {
|
|||
// ---------------------------------------------------------------------------
|
||||
|
||||
height: iconSize || parent.iconSize || parent.height
|
||||
width: iconSize || parent.iconSize || parent.height
|
||||
width: iconSize || parent.iconSize || parent.width
|
||||
|
||||
Button {
|
||||
id: button
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import QtQuick 2.7
|
|||
Item {
|
||||
property alias updating: actionButton.updating
|
||||
property alias useStates: actionButton.useStates
|
||||
property alias text: actionButton.text
|
||||
property bool enabled: true
|
||||
property int iconSize // Optionnal.
|
||||
property string icon
|
||||
|
|
@ -16,7 +17,7 @@ Item {
|
|||
// ---------------------------------------------------------------------------
|
||||
|
||||
height: iconSize || parent.iconSize || parent.height
|
||||
width: iconSize || parent.iconSize || parent.height
|
||||
width: iconSize || parent.iconSize || parent.width
|
||||
|
||||
ActionButton {
|
||||
id: actionButton
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.2
|
||||
import QtQuick 2.7 as Core
|
||||
import QtQuick.Controls 2.2 as Core
|
||||
|
||||
import Common 1.0
|
||||
import Common.Styles 1.0
|
||||
|
|
@ -7,7 +7,7 @@ import Utils 1.0
|
|||
|
||||
// =============================================================================
|
||||
|
||||
ToolTip {
|
||||
Core.ToolTip {
|
||||
id: tooltip
|
||||
|
||||
property var _edge: 'left'
|
||||
|
|
@ -78,7 +78,7 @@ ToolTip {
|
|||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
background: Item {
|
||||
background: Core.Item {
|
||||
id: container
|
||||
|
||||
layer {
|
||||
|
|
@ -86,7 +86,7 @@ ToolTip {
|
|||
effect: PopupShadow {}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Core.Rectangle {
|
||||
anchors {
|
||||
fill: parent
|
||||
margins: TooltipStyle.margins
|
||||
|
|
@ -97,10 +97,10 @@ ToolTip {
|
|||
|
||||
// Do not use `Icon` component to access to `implicitHeight`
|
||||
// and `implicitWidth`.
|
||||
Image {
|
||||
Core.Image {
|
||||
id: icon
|
||||
|
||||
fillMode: Image.PreserveAspectFit
|
||||
fillMode: Core.Image.PreserveAspectFit
|
||||
height: TooltipStyle.arrowSize
|
||||
source: _edge
|
||||
? Utils.resolveImageUri('tooltip_arrow_' + _edge)
|
||||
|
|
@ -111,11 +111,11 @@ ToolTip {
|
|||
width: TooltipStyle.arrowSize
|
||||
z: Constants.zMax
|
||||
|
||||
onStatusChanged: status === Image.Ready && _setArrowPosition()
|
||||
onStatusChanged: status === Core.Image.Ready && _setArrowPosition()
|
||||
}
|
||||
}
|
||||
|
||||
contentItem: Text {
|
||||
contentItem: Core.Text {
|
||||
id: text
|
||||
|
||||
color: TooltipStyle.color
|
||||
|
|
|
|||
|
|
@ -81,6 +81,8 @@ PopupShadow 1.0 Popup/PopupShadow.qml
|
|||
|
||||
TooltipArea 1.0 Tooltip/TooltipArea.qml
|
||||
|
||||
ToolTip 1.0 Tooltip/Tooltip.qml
|
||||
|
||||
ScrollableListView 1.0 View/ScrollableListView.qml
|
||||
|
||||
ApplicationWindow 1.0 Window/ApplicationWindow.qml
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ Window {
|
|||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// `{}` is a workaround to avoid `TypeError: Cannot read property...`.
|
||||
// `{}` is a workaround to avoid `TypeError: Cannot read property...` when calls list is empty
|
||||
readonly property var call: calls.selectedCall || ({
|
||||
callError: '',
|
||||
isOutgoing: true,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.7
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import Common 1.0
|
||||
|
|
@ -67,10 +68,17 @@ DialogPlus {
|
|||
}
|
||||
|
||||
Slider {
|
||||
id: playbackSlider
|
||||
width: parent.width
|
||||
|
||||
Component.onCompleted: value = call.speakerVolumeGain
|
||||
onPositionChanged: call.speakerVolumeGain = position
|
||||
|
||||
ToolTip {
|
||||
parent: playbackSlider.handle
|
||||
visible: playbackSlider.pressed
|
||||
text: (playbackSlider.value * 100).toFixed(0) + " %"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -103,10 +111,17 @@ DialogPlus {
|
|||
}
|
||||
|
||||
Slider {
|
||||
id: captureSlider
|
||||
width: parent.width
|
||||
|
||||
Component.onCompleted: value = call.microVolumeGain
|
||||
onPositionChanged: call.microVolumeGain = position
|
||||
|
||||
ToolTip {
|
||||
parent: captureSlider.handle
|
||||
visible: captureSlider.pressed
|
||||
text: "+ " + (captureSlider.value * 100).toFixed(0) + " %"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,6 +129,10 @@ ColumnLayout {
|
|||
icon: 'history'
|
||||
|
||||
onClicked: sipAddressesMenu.open()
|
||||
|
||||
TooltipArea {
|
||||
text: qsTr('tooltipShowConversation')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,10 @@ function getEditIcon () {
|
|||
return conversation._sipAddressObserver.contact ? 'contact_edit' : 'contact_add'
|
||||
}
|
||||
|
||||
function getEditTooltipText() {
|
||||
return conversation._sipAddressObserver.contact ? qsTr('tooltipContactEdit') : qsTr('tooltipContactAdd')
|
||||
}
|
||||
|
||||
function getUsername () {
|
||||
return LinphoneUtils.getContactUsername(conversation._sipAddressObserver)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,6 +100,9 @@ ColumnLayout {
|
|||
onClicked: window.setView('ContactEdit', {
|
||||
sipAddress: conversation.peerAddress
|
||||
})
|
||||
TooltipArea {
|
||||
text: Logic.getEditTooltipText()
|
||||
}
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
|
|
@ -107,6 +110,10 @@ ColumnLayout {
|
|||
iconSize: ConversationStyle.bar.actions.edit.iconSize
|
||||
|
||||
onClicked: Logic.removeAllEntries()
|
||||
|
||||
TooltipArea {
|
||||
text: qsTr('cleanHistory')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,6 +81,13 @@ DialogPlus {
|
|||
itemIcon: Logic.getItemIcon(flattenedModel)
|
||||
width: parent.width
|
||||
|
||||
ActionButton {
|
||||
icon: 'options'
|
||||
iconSize: 30
|
||||
anchors.fill: parent
|
||||
//TODO handle click and jump to proxy config settings
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
container.currentIndex = index
|
||||
AccountSettingsModel.setDefaultProxyConfig(flattenedModel.proxyConfig)
|
||||
|
|
|
|||
|
|
@ -180,6 +180,10 @@ ApplicationWindow {
|
|||
visible: SettingsModel.conferenceEnabled
|
||||
|
||||
onClicked: Logic.openConferenceManager()
|
||||
|
||||
TooltipArea {
|
||||
text: qsTr('newConferenceButton')
|
||||
}
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick 2.7 as Core
|
||||
import QtQuick.Controls 2.7 as Core
|
||||
import QtQuick.Layouts 1.10 as Core
|
||||
|
||||
import Common 1.0
|
||||
import Linphone 1.0
|
||||
|
|
@ -9,7 +11,7 @@ import App.Styles 1.0
|
|||
// =============================================================================
|
||||
|
||||
TabContainer {
|
||||
Column {
|
||||
Core.Column {
|
||||
spacing: SettingsWindowStyle.forms.spacing
|
||||
width: parent.width
|
||||
|
||||
|
|
@ -21,6 +23,28 @@ TabContainer {
|
|||
title: qsTr('audioTitle')
|
||||
width: parent.width
|
||||
|
||||
//Warning if in call
|
||||
FormLine {
|
||||
visible: SettingsModel.isInCall
|
||||
|
||||
FormGroup {
|
||||
Core.RowLayout {
|
||||
spacing: SettingsAudioStyle.warningMessage.iconSize
|
||||
Icon {
|
||||
icon: 'warning'
|
||||
iconSize: SettingsAudioStyle.warningMessage.iconSize
|
||||
anchors {
|
||||
rightMargin: SettingsAudioStyle.warningMessage.iconSize
|
||||
leftMargin: SettingsAudioStyle.warningMessage.iconSize
|
||||
}
|
||||
}
|
||||
Core.Text {
|
||||
text: qsTr('audioSettingsInCallWarning')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('playbackDeviceLabel')
|
||||
|
|
@ -36,6 +60,28 @@ TabContainer {
|
|||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('playbackGainLabel')
|
||||
enabled: !SettingsModel.isInCall
|
||||
|
||||
Slider {
|
||||
id: playbackSlider
|
||||
width: parent.width
|
||||
enabled: !SettingsModel.isInCall
|
||||
|
||||
Core.Component.onCompleted: value = SettingsModel.playbackGain
|
||||
onPositionChanged: SettingsModel.playbackGain = position
|
||||
|
||||
Core.ToolTip {
|
||||
parent: playbackSlider.handle
|
||||
visible: playbackSlider.pressed
|
||||
text: (playbackSlider.value * 100).toFixed(0) + " %"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('captureDeviceLabel')
|
||||
|
|
@ -51,11 +97,83 @@ TabContainer {
|
|||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('captureGainLabel')
|
||||
|
||||
Slider {
|
||||
id: captureSlider
|
||||
width: parent.width
|
||||
enabled: !SettingsModel.isInCall
|
||||
|
||||
Core.Component.onCompleted: value = SettingsModel.captureGain
|
||||
onPositionChanged: SettingsModel.captureGain = position
|
||||
|
||||
Core.ToolTip {
|
||||
parent: captureSlider.handle
|
||||
visible: captureSlider.pressed
|
||||
text: (captureSlider.value * 100).toFixed(0) + " %"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
id: audioTestRow
|
||||
label: qsTr('audioTestLabel')
|
||||
visible: !SettingsModel.isInCall
|
||||
|
||||
Core.Slider {
|
||||
id: audioTestSlider
|
||||
|
||||
enabled: false
|
||||
width: parent.width
|
||||
anchors {
|
||||
leftMargin: SettingsAudioStyle.ringPlayer.leftMargin
|
||||
}
|
||||
|
||||
background: Core.Rectangle {
|
||||
x: audioTestSlider.leftPadding
|
||||
y: audioTestSlider.topPadding + audioTestSlider.availableHeight / 2 - height / 2
|
||||
implicitWidth: 200
|
||||
implicitHeight: 8
|
||||
width: audioTestSlider.availableWidth
|
||||
height: implicitHeight
|
||||
radius: 2
|
||||
color: "#bdbebf"
|
||||
|
||||
Core.Rectangle {
|
||||
width: audioTestSlider.visualPosition * parent.width
|
||||
height: parent.height
|
||||
color: audioTestSlider.value > 0.8 ? "#ff0000" : "#21be2b"
|
||||
radius: 2
|
||||
}
|
||||
}
|
||||
|
||||
//Empty slider handle
|
||||
handle: Core.Text {
|
||||
text: ''
|
||||
visible: false
|
||||
}
|
||||
|
||||
Core.Timer {
|
||||
interval: 50
|
||||
repeat: true
|
||||
running: SettingsModel.captureGraphRunning
|
||||
|
||||
onTriggered: parent.value = SettingsModel.getMicVolume()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('ringerDeviceLabel')
|
||||
|
||||
ComboBox {
|
||||
enabled: !SettingsModel.isInCall
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.ringerDevice
|
||||
})
|
||||
|
|
@ -108,7 +226,7 @@ TabContainer {
|
|||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
Core.Loader {
|
||||
id: ringPlayer
|
||||
|
||||
active: window.visible
|
||||
|
|
|
|||
|
|
@ -55,6 +55,17 @@ TabContainer {
|
|||
}
|
||||
}
|
||||
}
|
||||
FormGroup {
|
||||
label: qsTr('encryptionMandatoryLabel')
|
||||
|
||||
Switch {
|
||||
id: encryptionMandatory
|
||||
|
||||
checked: SettingsModel.mediaEncryptionMandatory
|
||||
|
||||
onClicked: SettingsModel.mediaEncryptionMandatory = !checked
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ ApplicationWindow {
|
|||
|
||||
title: qsTr('settingsTitle')
|
||||
|
||||
onClosing: SettingsModel.settingsWindowClosing()
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Shortcut {
|
||||
|
|
@ -48,16 +50,21 @@ ApplicationWindow {
|
|||
TabBar {
|
||||
id: tabBar
|
||||
|
||||
onCurrentIndexChanged: SettingsModel.onSettingsTabChanged(currentIndex)
|
||||
|
||||
TabButton {
|
||||
iconName: 'settings_sip_accounts'
|
||||
text: qsTr('sipAccountsTab')
|
||||
width: implicitWidth
|
||||
}
|
||||
//onClicked: SettingsModel.settingsButtonClicked("sip")
|
||||
}
|
||||
|
||||
TabButton {
|
||||
iconName: 'settings_audio'
|
||||
text: qsTr('audioTab')
|
||||
width: implicitWidth
|
||||
//onClicked: SettingsModel.accessAudioSettings()
|
||||
//onClicked: SettingsModel.settingsButtonClicked("audio")
|
||||
}
|
||||
|
||||
TabButton {
|
||||
|
|
@ -65,12 +72,15 @@ ApplicationWindow {
|
|||
iconName: 'settings_video'
|
||||
text: qsTr('videoTab')
|
||||
width: implicitWidth
|
||||
//onClicked: SettingsModel.accessVideoSettings()
|
||||
//onClicked: SettingsModel.settingsButtonClicked("video")
|
||||
}
|
||||
|
||||
TabButton {
|
||||
iconName: 'settings_call'
|
||||
text: qsTr('callsAndChatTab')
|
||||
width: implicitWidth
|
||||
//onClicked: SettingsModel.settingsButtonClicked("call")
|
||||
}
|
||||
|
||||
TabButton {
|
||||
|
|
@ -78,18 +88,21 @@ ApplicationWindow {
|
|||
iconName: 'settings_network'
|
||||
text: qsTr('networkTab')
|
||||
width: implicitWidth
|
||||
//onClicked: SettingsModel.settingsButtonClicked("network")
|
||||
}
|
||||
|
||||
TabButton {
|
||||
iconName: 'settings_advanced'
|
||||
text: qsTr('uiTab')
|
||||
width: implicitWidth
|
||||
//onClicked: SettingsModel.settingsButtonClicked("ui")
|
||||
}
|
||||
|
||||
TabButton {
|
||||
iconName: 'settings_advanced'
|
||||
text: qsTr('uiAdvanced')
|
||||
width: implicitWidth
|
||||
//onClicked: SettingsModel.settingsButtonClicked("advanced")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,4 +7,7 @@ QtObject {
|
|||
property QtObject ringPlayer: QtObject {
|
||||
property int leftMargin: 10
|
||||
}
|
||||
property QtObject warningMessage: QtObject {
|
||||
property int iconSize: 20
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue