mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-10-30 07:53:33 +08:00
Compare commits
126 Commits
beta/20250
...
nightly/20
| Author | SHA1 | Date | |
|---|---|---|---|
| d7c294edd0 | |||
| 945cfe176d | |||
| fa3a153896 | |||
| e9106b2bcc | |||
| a967518d45 | |||
| 7ebed53e97 | |||
| ca05963c40 | |||
| df98c6c3fd | |||
| 05501e33e9 | |||
| 91780ae400 | |||
| 4900ca9f1b | |||
| 0f965aae28 | |||
| f8c29fc4a1 | |||
| 2e1889caf1 | |||
| 8070d1bfc2 | |||
| 4ee1a309a1 | |||
| 0333016c44 | |||
| 32b7525ee3 | |||
| 32b941ab96 | |||
| e4932abd39 | |||
| 718d1d266d | |||
| 8d55f352b4 | |||
| 2a72da564e | |||
| 88d0539085 | |||
| 4b1c299a1d | |||
| 479da3ca54 | |||
| 02140a11c4 | |||
| b5dbe23c17 | |||
| ff5f94b34a | |||
| def2e19abe | |||
| 69430c4af3 | |||
| 911fdbc9e5 | |||
| 80b3336f1b | |||
| f8bafd4154 | |||
| b8b06ccfa1 | |||
| 6cb5a8206a | |||
| ae1a2462e2 | |||
| 31581db7f5 | |||
| c323dcfe13 | |||
| 8a31aca346 | |||
| 7eeabbe1c6 | |||
| 8c0ecaf3c5 | |||
| c91bff35b6 | |||
| cb05b4afd0 | |||
| 4419f7bfbc | |||
| deaa15a36e | |||
| 6b70ffcf3e | |||
| a407fa2c47 | |||
| 3143d60760 | |||
| 73eacd5125 | |||
| fc70ddc6dc | |||
| e2e5a0c8cc | |||
| dd9ed8d57d | |||
| 7eea1484c5 | |||
| 6fac40340b | |||
| 04a1544d56 | |||
| 91fd8a0295 | |||
| bad5698e71 | |||
| 7f0a94dd48 | |||
| 81112ff1f8 | |||
| b63eb384b6 | |||
| ebcc60c570 | |||
| c12a753979 | |||
| 386b578e47 | |||
| 76417edfa4 | |||
| 960fdc0f05 | |||
| 2567d81359 | |||
| e700d8160a | |||
| 37065cb7d6 | |||
| 03efee4c14 | |||
| 04e43b07f4 | |||
| a00a191371 | |||
| 65d3befad8 | |||
| 84ac5dba02 | |||
| a149a575a7 | |||
| 407561732f | |||
| 82c2a9d9c6 | |||
| 1414e1804f | |||
| 7146f20b18 | |||
| 5ee4990534 | |||
| 0d1bdfdfdd | |||
| f3dd3b4643 | |||
| d3c76eac8d | |||
| 33da15daba | |||
| 82c876c0fa | |||
| 83765dcebf | |||
| b76570b892 | |||
| ffb9bb8748 | |||
| 416137d6dd | |||
| ffcfaffc90 | |||
| a950a3f9e7 | |||
| 3c279b292d | |||
| c19af7f97f | |||
| 0087f1b8a8 | |||
| 19f7f43912 | |||
| c818eeedce | |||
| 0f08dbcf59 | |||
| 7d3331d235 | |||
| aa375a7f89 | |||
| 9b51f26e80 | |||
| 6b0adb7005 | |||
| 217efe603b | |||
| 00febee4c7 | |||
| c88797163c | |||
| f7a771f7e1 | |||
| 03756aedd0 | |||
| 8af5a25607 | |||
| fe4c63b775 | |||
| 4ee1f1a5d3 | |||
| 37f29c9882 | |||
| 1bfacdbb76 | |||
| c5e455a9de | |||
| f489f21271 | |||
| 560f44f6f1 | |||
| d0639b4e88 | |||
| 79d3c7be03 | |||
| 5b6cc620cd | |||
| f4c997c62f | |||
| 2974cb52bd | |||
| 98e71a7c89 | |||
| 0b49077de9 | |||
| 5540001e7a | |||
| 71527afd76 | |||
| 15d62f0200 | |||
| 0024721192 | |||
| a540cbf529 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,6 +7,7 @@ doc/Doxyfile
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
### VisualStudioCode Patch ###
|
||||
# Ignore all local history of files
|
||||
|
||||
10
.gitmodules
vendored
10
.gitmodules
vendored
@ -21,9 +21,17 @@
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/md4c"]
|
||||
path = 3rdparty/md4c
|
||||
url = https://github.com/mity/md4c.git
|
||||
url = https://github.com/fsimonfc/md4c.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/tidy-html5"]
|
||||
path = 3rdparty/tidy-html5
|
||||
url = https://github.com/htacg/tidy-html5.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/zxing-cpp"]
|
||||
path = 3rdparty/zxing-cpp
|
||||
url = https://github.com/nu-book/zxing-cpp.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/hunspell"]
|
||||
path = 3rdparty/hunspell
|
||||
url = https://gitlab.savoirfairelinux.com/jami/hunspell.git
|
||||
ignore = dirty
|
||||
|
||||
1
3rdparty/hunspell
vendored
Submodule
1
3rdparty/hunspell
vendored
Submodule
Submodule 3rdparty/hunspell added at 525f9f2276
2
3rdparty/md4c
vendored
2
3rdparty/md4c
vendored
Submodule 3rdparty/md4c updated: ad8d41127b...635f296735
1
3rdparty/zxing-cpp
vendored
Submodule
1
3rdparty/zxing-cpp
vendored
Submodule
Submodule 3rdparty/zxing-cpp added at a920817b6f
@ -1,11 +1,4 @@
|
||||
# Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Albert Babí <albert.babi@savoirfairelinux.com>
|
||||
# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
|
||||
# Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
# Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
# Author: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
|
||||
# Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
|
||||
# Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
@ -83,6 +76,7 @@ list(APPEND QWINDOWKIT_OPTIONS
|
||||
QWINDOWKIT_BUILD_WIDGETS OFF
|
||||
QWINDOWKIT_INSTALL OFF
|
||||
QWINDOWKIT_BUILD_STATIC ON
|
||||
QWINDOWKIT_BUILD_QUICK ON
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
@ -100,19 +94,19 @@ if(WIN32)
|
||||
list(APPEND QWINDOWKIT_OPTIONS QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDERS OFF)
|
||||
endif()
|
||||
|
||||
# qmsetup uses the wrong package dir on some distributions
|
||||
# (including Fedora and openSUSE Leap at least)
|
||||
check_distro_needs_qmsetup_patch(DISTRO_NEEDS_QMSETUP_PATCH)
|
||||
if(DISTRO_NEEDS_QMSETUP_PATCH)
|
||||
list(APPEND QWINDOWKIT_PATCHES ${EXTRA_PATCHES_DIR}/0001-fix-fedora-fc-build.patch)
|
||||
set(qmsetup_cmake_path ${CMAKE_BINARY_DIR}/_install/lib64/cmake/qmsetup)
|
||||
# If qwindowkit can't find qmsetup via cmake's find_package function, it will install it and
|
||||
# then call find_package again. Unfortunately, even the second call to find_package sometimes
|
||||
# fails due to qmsetup having been installed in the wrong directory. The following patch
|
||||
# ensures that qmsetup is always installed in the directory where find_package looks for it.
|
||||
if(NOT WIN32)
|
||||
list(APPEND QWINDOWKIT_PATCHES ${EXTRA_PATCHES_DIR}/0001-fix-qm_install_package-function.patch)
|
||||
endif()
|
||||
|
||||
# qwindowkit (frameless window)
|
||||
add_fetch_content(
|
||||
TARGET qwindowkit
|
||||
URL https://github.com/stdware/qwindowkit.git
|
||||
BRANCH 79b1f3110754f9c21af2d7dacbd07b1a9dbaf6ef
|
||||
BRANCH 758b00cb6c2d924be3a1ea137ec366dc33a5132d
|
||||
PATCHES ${QWINDOWKIT_PATCHES}
|
||||
OPTIONS ${QWINDOWKIT_OPTIONS}
|
||||
)
|
||||
@ -261,7 +255,7 @@ set(PYTHON_EXEC ${Python3_EXECUTABLE})
|
||||
|
||||
# Versioning and build ID generation
|
||||
set(VERSION_FILE ${CMAKE_CURRENT_BINARY_DIR}/version_info.cpp)
|
||||
# Touch the file to make sure it exists at configure time as
|
||||
# Touch the file to ensure it exists at configure time as
|
||||
# we add it to the target_sources below.
|
||||
file(TOUCH ${VERSION_FILE})
|
||||
add_custom_target(
|
||||
@ -353,6 +347,7 @@ set(COMMON_SOURCES
|
||||
${APP_SRC_DIR}/conversationlistmodel.cpp
|
||||
${APP_SRC_DIR}/searchresultslistmodel.cpp
|
||||
${APP_SRC_DIR}/calloverlaymodel.cpp
|
||||
${APP_SRC_DIR}/spellcheckdictionarymanager.cpp
|
||||
${APP_SRC_DIR}/filestosendlistmodel.cpp
|
||||
${APP_SRC_DIR}/wizardviewstepmodel.cpp
|
||||
${APP_SRC_DIR}/avatarregistry.cpp
|
||||
@ -367,11 +362,13 @@ set(COMMON_SOURCES
|
||||
${APP_SRC_DIR}/currentcall.cpp
|
||||
${APP_SRC_DIR}/messageparser.cpp
|
||||
${APP_SRC_DIR}/previewengine.cpp
|
||||
${APP_SRC_DIR}/imagedownloader.cpp
|
||||
${APP_SRC_DIR}/filedownloader.cpp
|
||||
${APP_SRC_DIR}/pluginversionmanager.cpp
|
||||
${APP_SRC_DIR}/connectioninfolistmodel.cpp
|
||||
${APP_SRC_DIR}/pluginversionmanager.cpp
|
||||
)
|
||||
${APP_SRC_DIR}/linkdevicemodel.cpp
|
||||
${APP_SRC_DIR}/qrcodescannermodel.cpp
|
||||
${APP_SRC_DIR}/spellchecker.cpp)
|
||||
|
||||
set(COMMON_HEADERS
|
||||
${APP_SRC_DIR}/global.h
|
||||
@ -423,6 +420,7 @@ set(COMMON_HEADERS
|
||||
${APP_SRC_DIR}/conversationlistmodel.h
|
||||
${APP_SRC_DIR}/searchresultslistmodel.h
|
||||
${APP_SRC_DIR}/calloverlaymodel.h
|
||||
${APP_SRC_DIR}/spellcheckdictionarymanager.h
|
||||
${APP_SRC_DIR}/filestosendlistmodel.h
|
||||
${APP_SRC_DIR}/wizardviewstepmodel.h
|
||||
${APP_SRC_DIR}/avatarregistry.h
|
||||
@ -437,13 +435,15 @@ set(COMMON_HEADERS
|
||||
${APP_SRC_DIR}/currentcall.h
|
||||
${APP_SRC_DIR}/messageparser.h
|
||||
${APP_SRC_DIR}/htmlparser.h
|
||||
${APP_SRC_DIR}/imagedownloader.h
|
||||
${APP_SRC_DIR}/filedownloader.h
|
||||
${APP_SRC_DIR}/pluginversionmanager.h
|
||||
${APP_SRC_DIR}/connectioninfolistmodel.h
|
||||
${APP_SRC_DIR}/pttlistener.h
|
||||
${APP_SRC_DIR}/crashreportclient.h
|
||||
${APP_SRC_DIR}/crashreporter.h
|
||||
)
|
||||
${APP_SRC_DIR}/linkdevicemodel.h
|
||||
${APP_SRC_DIR}/qrcodescannermodel.h
|
||||
${APP_SRC_DIR}/spellchecker.h)
|
||||
|
||||
# For libavutil/avframe.
|
||||
set(LIBJAMI_CONTRIB_DIR "${DAEMON_DIR}/contrib")
|
||||
@ -471,6 +471,32 @@ if(ENABLE_CRASHREPORTS)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
# hunspell
|
||||
pkg_search_module(hunspell IMPORTED_TARGET hunspell)
|
||||
if(MSVC)
|
||||
elseif (NOT APPLE)
|
||||
set(HUNSPELL_DICT_DIR "/usr/share/hunspell/")
|
||||
else()
|
||||
set(HUNSPELL_DICT_DIR "/Library/Spelling/")
|
||||
endif()
|
||||
|
||||
if(hunspell_FOUND)
|
||||
message(STATUS "hunspell found")
|
||||
set(HUNSPELL_LIBRARIES PkgConfig::hunspell)
|
||||
else()
|
||||
message(STATUS "hunspell not found - building hunspell")
|
||||
|
||||
set(HUNSPELL_DIR ${PROJECT_SOURCE_DIR}/3rdparty/hunspell)
|
||||
|
||||
# Build using the submodule and its CMakeLists.txt
|
||||
add_subdirectory(${HUNSPELL_DIR} hunspell_build EXCLUDE_FROM_ALL)
|
||||
|
||||
set(HUNSPELL_INCLUDE_DIR ${HUNSPELL_DIR}/src)
|
||||
set(HUNSPELL_LIBRARIES hunspell::hunspell)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
set(WINDOWS_SYS_LIBS
|
||||
windowsapp.lib
|
||||
@ -533,8 +559,6 @@ elseif (NOT APPLE)
|
||||
${APP_SRC_DIR}/screencastportal.h)
|
||||
list(APPEND QT_MODULES DBus)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
pkg_check_modules(GLIB REQUIRED glib-2.0)
|
||||
if(GLIB_FOUND)
|
||||
add_definitions(${GLIB_CFLAGS_OTHER})
|
||||
@ -617,6 +641,13 @@ else() # APPLE
|
||||
endif()
|
||||
endif()
|
||||
|
||||
message(STATUS "Adding HUNSPELL_INCLUDE_DIR" ${HUNSPELL_INCLUDE_DIR})
|
||||
list(APPEND CLIENT_INCLUDE_DIRS ${HUNSPELL_INCLUDE_DIR} ${CMAKE_BINARY_DIR}/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/hunspell/src)
|
||||
|
||||
message(STATUS "Adding HUNSPELL_LIBRARIES" ${HUNSPELL_INCLUDE_DIR})
|
||||
list(APPEND CLIENT_LIBS ${HUNSPELL_LIBRARIES})
|
||||
|
||||
# Qt find package
|
||||
if(QT6_VER AND QT6_PATH)
|
||||
message(STATUS "Using custom Qt version")
|
||||
@ -685,6 +716,15 @@ list(APPEND CLIENT_LINK_DIRS ${tidy_BINARY_DIR}/Release)
|
||||
list(APPEND CLIENT_INCLUDE_DIRS ${tidy_SOURCE_DIR}/include)
|
||||
list(APPEND CLIENT_LIBS tidy-static)
|
||||
|
||||
# ZXing-cpp configuration
|
||||
set(BUILD_EXAMPLES OFF CACHE BOOL "")
|
||||
set(BUILD_BLACKBOX_TESTS OFF CACHE BOOL "")
|
||||
add_subdirectory(3rdparty/zxing-cpp EXCLUDE_FROM_ALL)
|
||||
|
||||
# Add ZXing-cpp to includes and libraries
|
||||
list(APPEND CLIENT_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zxing-cpp/core/src)
|
||||
list(APPEND CLIENT_LIBS ZXing)
|
||||
|
||||
# common executable sources
|
||||
qt_add_executable(
|
||||
${PROJECT_NAME}
|
||||
@ -696,7 +736,9 @@ qt_add_executable(
|
||||
${QML_RESOURCES_QML}
|
||||
${SFPM_OBJECTS})
|
||||
|
||||
# Make sure we can find the generated version file
|
||||
#add_dependencies(${PROJECT_NAME} hunspell)
|
||||
|
||||
# Ensure the generated version file can be found.
|
||||
add_dependencies(${PROJECT_NAME} generate_version_info)
|
||||
|
||||
foreach(MODULE ${QT_MODULES})
|
||||
@ -790,6 +832,11 @@ elseif (NOT APPLE)
|
||||
PRIVATE
|
||||
JAMI_INSTALL_PREFIX="${JAMI_DATA_PREFIX}")
|
||||
|
||||
target_compile_definitions(
|
||||
${PROJECT_NAME}
|
||||
PRIVATE
|
||||
HUNSPELL_INSTALL_DIR="${HUNSPELL_DICT_DIR}")
|
||||
|
||||
# Logos
|
||||
install(
|
||||
FILES resources/images/jami.svg
|
||||
|
||||
@ -113,7 +113,7 @@ sudo ./build.py --dependencies
|
||||
Then, you can build daemon and the client using:
|
||||
|
||||
```bash
|
||||
./build.py --install
|
||||
./build.py --install [--qt=<path/to/qt> (this needs to be the same as in the previous ./build.py --init)]
|
||||
```
|
||||
|
||||
If you use a Qt version that is not system-wide installed, you need to
|
||||
@ -189,7 +189,7 @@ Only 64-bit MSVC build can be compiled.
|
||||
|
||||
- Download [Qt (Open Source)](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5)
|
||||
|
||||
- Using the online installer, install the following Qt 6.6.1 components:
|
||||
- Using the online installer, install the following Qt 6.6.2 components:
|
||||
|
||||
- Git 2.10.2
|
||||
- MSVC 2019 64-bit
|
||||
@ -237,9 +237,14 @@ Only 64-bit MSVC build can be compiled.
|
||||
|
||||
- Using a new **Non-Elevated Command Prompt**
|
||||
|
||||
```bash
|
||||
python build.py --init --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.6.2/msvc2019_64)
|
||||
```
|
||||
|
||||
```bash
|
||||
python build.py --install --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.6.2/msvc2019_64)
|
||||
```
|
||||
> **CMake** Note: The build script does not specify what CMake generator should be used. This means CMake will search the system for the appropriate generator, which might not always select the right one if, for instance, Ninja is installed. To resolve that, the CMAKE_GENERATOR environment variable can be used, set to "Visual Studio 16 2019" or "Visual Studio 19 2022" depending on the installed Visual Studio version.
|
||||
|
||||
> **SDK** Note:
|
||||
> Jami can be build with more recent Windows SDK than the one specified in the table above. However, if your have another version than SDK 10.0.18362.0 installed, you need to identify it according to the example below. And you still need to have the required version in addition to the one you chose.
|
||||
|
||||
@ -38,7 +38,7 @@ cf [INSTALL.md](/INSTALL.md)
|
||||
|
||||
# License
|
||||
|
||||
Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
|
||||
Jami is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
|
||||
12
build.py
12
build.py
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
# build.py --- Convenience script for building and running Jami
|
||||
|
||||
# Copyright (C) 2016-2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2016-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
@ -112,7 +112,7 @@ ZYPPER_CLIENT_DEPENDENCIES = [
|
||||
'qt6-svg-devel', 'qt6-multimedia-devel', 'qt6-multimedia-imports',
|
||||
'qt6-declarative-devel', 'qt6-qmlcompiler-private-devel',
|
||||
'qt6-quickcontrols2-devel', 'qt6-shadertools-devel',
|
||||
'qrencode-devel', 'NetworkManager-devel'
|
||||
'qrencode-devel', 'NetworkManager-devel', 'hunspell-devel', 'libhunspell-devel'
|
||||
]
|
||||
|
||||
ZYPPER_QT_WEBENGINE = [
|
||||
@ -139,7 +139,7 @@ DNF_CLIENT_DEPENDENCIES = [
|
||||
'libnotify-devel',
|
||||
'qt6-qtbase-devel',
|
||||
'qt6-qtsvg-devel', 'qt6-qtmultimedia-devel', 'qt6-qtdeclarative-devel',
|
||||
'qrencode-devel', 'NetworkManager-libnm-devel'
|
||||
'qrencode-devel', 'NetworkManager-libnm-devel', 'hunspell-devel', 'libhunspell-devel'
|
||||
]
|
||||
|
||||
DNF_QT_WEBENGINE = ['qt6-qtwebengine-devel']
|
||||
@ -171,7 +171,7 @@ APT_CLIENT_DEPENDENCIES = [
|
||||
'qml6-module-qtquick-dialogs', 'qml6-module-qtquick-layouts',
|
||||
'qml6-module-qtquick-shapes', 'qml6-module-qtquick-window',
|
||||
'qml6-module-qtquick-templates', 'qml6-module-qt-labs-platform',
|
||||
'libqrencode-dev', 'libnm-dev'
|
||||
'libqrencode-dev', 'libnm-dev', 'hunspell', 'libhunspell-dev'
|
||||
]
|
||||
|
||||
APT_QT_WEBENGINE = [
|
||||
@ -194,7 +194,7 @@ PACMAN_CLIENT_DEPENDENCIES = [
|
||||
'qt6-declarative', 'qt6-5compat', 'qt6-multimedia',
|
||||
'qt6-networkauth', 'qt6-shadertools',
|
||||
'qt6-svg', 'qt6-tools',
|
||||
'qrencode', 'libnm'
|
||||
'qrencode', 'libnm', 'hunspell'
|
||||
]
|
||||
|
||||
PACMAN_QT_WEBENGINE = ['qt6-webengine']
|
||||
@ -374,7 +374,7 @@ def run_install(args):
|
||||
# Prepare the build-windows.py script call
|
||||
build_windows = 'extras/scripts/build-windows.py'
|
||||
# Initialize build environment
|
||||
execute_script([f'python {build_windows} --init'])
|
||||
execute_script([f'python {build_windows} --init --qt={args.qt}'])
|
||||
|
||||
# Construct build command with options
|
||||
build_cmd = [
|
||||
|
||||
2
daemon
2
daemon
Submodule daemon updated: 9b3b9df344...6f81476042
@ -1,7 +1,7 @@
|
||||
# Taken from:
|
||||
# https://cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
|
||||
#
|
||||
# Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
@ -17,32 +17,6 @@
|
||||
include(FetchContent)
|
||||
include(CMakeParseArguments)
|
||||
|
||||
# Helper function to check if we're on a distribution that requires us
|
||||
# to apply a patch in order for qmsetup to use the right package directory
|
||||
function(check_distro_needs_qmsetup_patch DISTRO_NEEDS_QMSETUP_PATCH)
|
||||
set(${DISTRO_NEEDS_QMSETUP_PATCH} FALSE PARENT_SCOPE)
|
||||
# Check for the existence of /etc/os-release
|
||||
if(EXISTS "/etc/os-release")
|
||||
# Read the content of the file
|
||||
file(READ "/etc/os-release" OS_RELEASE_CONTENT)
|
||||
# Check if the distribution is Fedora or Red Hat-based
|
||||
string(REGEX MATCH "ID=fedora|ID_LIKE=\"rhel fedora\"|ID_LIKE=\"rhel centos fedora\"" RED_HAT_BASED "${OS_RELEASE_CONTENT}")
|
||||
# Check if the distribution is openSUSE Leap
|
||||
string(REGEX MATCH "ID=\"opensuse-leap\"" OPENSUSE_LEAP "${OS_RELEASE_CONTENT}")
|
||||
if(RED_HAT_BASED)
|
||||
set(${DISTRO_NEEDS_QMSETUP_PATCH} TRUE PARENT_SCOPE)
|
||||
message(STATUS "Running on a Red Hat-based distribution (Fedora, RHEL, CentOS, etc.)")
|
||||
elseif(OPENSUSE_LEAP)
|
||||
set(${DISTRO_NEEDS_QMSETUP_PATCH} TRUE PARENT_SCOPE)
|
||||
message(STATUS "Running on openSUSE Leap")
|
||||
else()
|
||||
message(STATUS "Distribution is not openSUSE Leap or Red Hat-based")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Cannot determine the distribution type: /etc/os-release not found")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Helper function to add external content with patches and options.
|
||||
# Parameters:
|
||||
# TARGET: Name of the target to create
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,8 +1,4 @@
|
||||
# Copyright (C) 2015-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
|
||||
# Author: Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com>
|
||||
# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
|
||||
# Copyright (C) 2015-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
2
extras/ci/client-qt-gnulinux/Jenkinsfile
vendored
2
extras/ci/client-qt-gnulinux/Jenkinsfile
vendored
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2022-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright (C) 2015-2024 Savoir-faire Linux Inc. -->
|
||||
<!-- Copyright (C) 2015-2025 Savoir-faire Linux Inc. -->
|
||||
<component type="desktop-application">
|
||||
<id>net.jami.Jami</id>
|
||||
<metadata_license>CC-BY-SA-3.0</metadata_license>
|
||||
|
||||
8
extras/packaging/gnu-linux/Jenkinsfile
vendored
8
extras/packaging/gnu-linux/Jenkinsfile
vendored
@ -1,6 +1,4 @@
|
||||
// Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
//
|
||||
// Author: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
|
||||
// Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
//
|
||||
// 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
|
||||
@ -35,7 +33,9 @@
|
||||
def SUBMODULES = ['daemon',
|
||||
'3rdparty/SortFilterProxyModel',
|
||||
'3rdparty/md4c',
|
||||
'3rdparty/tidy-html5']
|
||||
'3rdparty/tidy-html5',
|
||||
'3rdparty/zxing-cpp',
|
||||
'3rdparty/hunspell']
|
||||
def TARGETS = [:]
|
||||
def REMOTE_HOST = env.SSH_HOST_DL_RING_CX
|
||||
def REMOTE_BASE_DIR = '/srv/repository/ring'
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
# -*- mode: makefile; -*-
|
||||
# Copyright (C) 2016-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
|
||||
# Copyright (C) 2016-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
@ -129,7 +127,9 @@ $(RELEASE_TARBALL_FILENAME): tarballs.manifest
|
||||
. \
|
||||
./3rdparty/SortFilterProxyModel \
|
||||
./3rdparty/md4c \
|
||||
./3rdparty/tidy-html5; do \
|
||||
./3rdparty/tidy-html5 \
|
||||
./3rdparty/zxing-cpp \
|
||||
./3rdparty/hunspell; do \
|
||||
(cd "$$m" && git archive --prefix "$$m/" HEAD \
|
||||
| tar xf - -C $(TMPDIR)/$(RELEASE_DIRNAME)); \
|
||||
done
|
||||
@ -168,14 +168,14 @@ DISTRIBUTIONS := \
|
||||
ubuntu_22.04 \
|
||||
ubuntu_24.04 \
|
||||
ubuntu_24.10 \
|
||||
fedora_37 \
|
||||
fedora_38 \
|
||||
ubuntu_25.04 \
|
||||
fedora_39 \
|
||||
fedora_40 \
|
||||
fedora_41 \
|
||||
fedora_42 \
|
||||
alma_9 \
|
||||
opensuse-leap_15.4 \
|
||||
opensuse-leap_15.5 \
|
||||
opensuse-leap_15.6 \
|
||||
snap
|
||||
|
||||
IS_SHELL_INTERACTIVE := $(shell [ -t 0 ] && echo yes)
|
||||
|
||||
@ -11,14 +11,6 @@ RUN apt-get update && \
|
||||
libdbus-1-dev \
|
||||
wget
|
||||
|
||||
# As of January 2024, the default compiler on Debian unstable is GCC 13.2.0, which
|
||||
# is unable to build one of Qt 6.6.1's dependencies, see:
|
||||
# https://github.com/qt/qtquick3d-assimp/commit/253f8bfa621a9fa6cd2c36291cdaa8c60c99322c
|
||||
# The linked commit above fixes the problem and is included in more recent versions of Qt.
|
||||
# For now, we use GCC 12 as a temporary workaround:
|
||||
ADD extras/packaging/gnu-linux/scripts/install-gcc-debian.sh /opt/install-gcc-debian.sh
|
||||
RUN /opt/install-gcc-debian.sh 12
|
||||
|
||||
ADD extras/packaging/gnu-linux/scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
|
||||
|
||||
COPY extras/packaging/gnu-linux/rules/debian-qt/control /tmp/builddeps/debian/control
|
||||
|
||||
@ -1,106 +0,0 @@
|
||||
FROM fedora:37
|
||||
|
||||
RUN dnf clean all
|
||||
RUN dnf update -y
|
||||
|
||||
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
|
||||
dnf install -y mock
|
||||
|
||||
RUN dnf groupinstall -y "X Software Development"
|
||||
|
||||
RUN dnf install -y \
|
||||
git \
|
||||
rpm-build \
|
||||
tar \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
nasm \
|
||||
speexdsp-devel \
|
||||
pulseaudio-libs-devel \
|
||||
libcanberra-devel \
|
||||
libcurl-devel \
|
||||
libtool \
|
||||
mesa-libgbm-devel \
|
||||
mesa-dri-drivers \
|
||||
dbus-devel \
|
||||
expat-devel \
|
||||
pcre-devel \
|
||||
yaml-cpp-devel \
|
||||
libXext-devel \
|
||||
libXfixes-devel \
|
||||
yasm \
|
||||
python2.7 \
|
||||
python3-html5lib \
|
||||
speex-devel \
|
||||
gsm-devel \
|
||||
chrpath \
|
||||
check \
|
||||
astyle \
|
||||
uuid-c++-devel \
|
||||
gettext-devel \
|
||||
gcc-c++ \
|
||||
which \
|
||||
alsa-lib-devel \
|
||||
systemd-devel \
|
||||
libuuid-devel \
|
||||
uuid-devel \
|
||||
gnutls-devel \
|
||||
nettle-devel \
|
||||
opus-devel \
|
||||
patch \
|
||||
jsoncpp-devel \
|
||||
libnatpmp-devel \
|
||||
webkitgtk4-devel \
|
||||
cryptopp-devel \
|
||||
libva-devel \
|
||||
libvdpau-devel \
|
||||
msgpack-devel \
|
||||
NetworkManager-libnm-devel \
|
||||
openssl-devel \
|
||||
clutter-devel \
|
||||
clutter-gtk-devel \
|
||||
libappindicator-gtk3-devel \
|
||||
libnotify-devel \
|
||||
libupnp-devel \
|
||||
qrencode-devel \
|
||||
libargon2-devel \
|
||||
libsndfile-devel \
|
||||
libdrm \
|
||||
gperf \
|
||||
bison \
|
||||
clang \
|
||||
clang-devel \
|
||||
llvm-devel \
|
||||
nodejs \
|
||||
flex \
|
||||
gstreamer1 gstreamer1-devel \
|
||||
gstreamer1-plugins-base-devel \
|
||||
gstreamer1-plugins-good \
|
||||
gstreamer1-plugins-bad-free-devel \
|
||||
nss-devel \
|
||||
libxcb* \
|
||||
libxkb* \
|
||||
libX11-devel \
|
||||
vulkan-devel \
|
||||
libXrender-devel \
|
||||
xcb-util-* \
|
||||
xz \
|
||||
xkeyboard-config \
|
||||
libnotify \
|
||||
wget \
|
||||
libstdc++-static \
|
||||
sqlite-devel \
|
||||
perl-generators \
|
||||
perl-English \
|
||||
libxshmfence-devel \
|
||||
ninja-build \
|
||||
clang \
|
||||
cmake \
|
||||
fmt-devel \
|
||||
pipewire-devel \
|
||||
cups-devel #Chromium for Qt
|
||||
|
||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
||||
|
||||
CMD ["/opt/build-package-rpm.sh"]
|
||||
@ -1,4 +1,4 @@
|
||||
FROM fedora:38
|
||||
FROM fedora:42
|
||||
|
||||
RUN dnf clean all
|
||||
RUN dnf update -y
|
||||
@ -6,12 +6,10 @@ RUN dnf update -y
|
||||
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
|
||||
dnf install -y mock
|
||||
|
||||
RUN dnf groupinstall -y "X Software Development"
|
||||
RUN dnf group install -y x-software-development
|
||||
|
||||
RUN dnf install -y \
|
||||
git \
|
||||
rpm-build \
|
||||
tar \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
@ -22,15 +20,11 @@ RUN dnf install -y \
|
||||
libcurl-devel \
|
||||
libtool \
|
||||
mesa-libgbm-devel \
|
||||
mesa-dri-drivers \
|
||||
dbus-devel \
|
||||
expat-devel \
|
||||
pcre-devel \
|
||||
yaml-cpp-devel \
|
||||
libXext-devel \
|
||||
libXfixes-devel \
|
||||
yasm \
|
||||
python2.7 \
|
||||
speex-devel \
|
||||
gsm-devel \
|
||||
chrpath \
|
||||
@ -38,16 +32,15 @@ RUN dnf install -y \
|
||||
astyle \
|
||||
uuid-c++-devel \
|
||||
gettext-devel \
|
||||
gcc-c++ \
|
||||
gcc14 \
|
||||
gcc14-c++ \
|
||||
which \
|
||||
alsa-lib-devel \
|
||||
systemd-devel \
|
||||
libuuid-devel \
|
||||
uuid-devel \
|
||||
gnutls-devel \
|
||||
nettle-devel \
|
||||
opus-devel \
|
||||
patch \
|
||||
jsoncpp-devel \
|
||||
libnatpmp-devel \
|
||||
webkitgtk4-devel \
|
||||
@ -65,28 +58,20 @@ RUN dnf install -y \
|
||||
qrencode-devel \
|
||||
libargon2-devel \
|
||||
libsndfile-devel \
|
||||
libdrm \
|
||||
gperf \
|
||||
bison \
|
||||
clang \
|
||||
clang-devel \
|
||||
llvm-devel \
|
||||
clang18-devel \
|
||||
llvm18-devel \
|
||||
nodejs \
|
||||
flex \
|
||||
gstreamer1 gstreamer1-devel \
|
||||
gstreamer1-plugins-base-devel \
|
||||
gstreamer1-plugins-good \
|
||||
gstreamer1-plugins-bad-free-devel \
|
||||
nss-devel \
|
||||
libxcb* \
|
||||
libxkb* \
|
||||
libX11-devel \
|
||||
vulkan-devel \
|
||||
libXrender-devel \
|
||||
xcb-util-* \
|
||||
xz \
|
||||
xkeyboard-config \
|
||||
libnotify \
|
||||
wget \
|
||||
libstdc++-static \
|
||||
sqlite-devel \
|
||||
@ -94,13 +79,19 @@ RUN dnf install -y \
|
||||
perl-English \
|
||||
libxshmfence-devel \
|
||||
ninja-build \
|
||||
clang \
|
||||
cmake \
|
||||
fmt-devel \
|
||||
python3-html5lib \
|
||||
python3.10 \
|
||||
cups-devel \
|
||||
pipewire-devel
|
||||
|
||||
# Use GCC 14 instead of GCC 15 (the default on Fedora 42)
|
||||
# because Qt 6.6.3 fails to build when using the latter.
|
||||
RUN rm /usr/bin/gcc /usr/bin/g++ /usr/bin/c++ && \
|
||||
ln -s /usr/bin/gcc-14 /usr/bin/gcc && \
|
||||
ln -s /usr/bin/g++-14 /usr/bin/g++ && \
|
||||
ln -s /usr/bin/g++-14 /usr/bin/c++
|
||||
|
||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
||||
|
||||
CMD ["/opt/build-package-rpm.sh"]
|
||||
@ -1,10 +1,9 @@
|
||||
FROM opensuse/leap:15.4
|
||||
FROM opensuse/leap:15.6
|
||||
|
||||
RUN zypper refresh
|
||||
RUN zypper --gpg-auto-import-keys refresh
|
||||
|
||||
RUN zypper --non-interactive install -y \
|
||||
dnf \
|
||||
dnf-command\(builddep\) \
|
||||
rpmdevtools \
|
||||
Mesa-dri-devel Mesa-dri \
|
||||
git \
|
||||
@ -29,11 +28,11 @@ RUN zypper --non-interactive install -y \
|
||||
speex-devel \
|
||||
libgsm-devel \
|
||||
chrpath \
|
||||
check \
|
||||
check-devel \
|
||||
astyle \
|
||||
gettext-devel \
|
||||
gettext-tools \
|
||||
which \
|
||||
alsa-lib-devel \
|
||||
alsa-devel \
|
||||
systemd-devel \
|
||||
libuuid-devel \
|
||||
uuid-devel \
|
||||
@ -44,9 +43,10 @@ RUN zypper --non-interactive install -y \
|
||||
libcryptopp-devel \
|
||||
libva-devel \
|
||||
libvdpau-devel \
|
||||
msgpack-devel \
|
||||
msgpack-c-devel \
|
||||
msgpack-cxx-devel \
|
||||
clutter-devel \
|
||||
openssl-devel \
|
||||
libopenssl-devel \
|
||||
clutter-gtk-devel \
|
||||
libnma-devel \
|
||||
libcryptopp-devel \
|
||||
@ -55,20 +55,20 @@ RUN zypper --non-interactive install -y \
|
||||
libgsm-devel \
|
||||
gtk3-devel \
|
||||
libappindicator-devel \
|
||||
sqlite-devel \
|
||||
ffmpeg-4-libavutil-devel \
|
||||
sqlite3-devel \
|
||||
gtk3-devel\
|
||||
qrencode-devel \
|
||||
python310 \
|
||||
python3-python-dateutil \
|
||||
python3-html5lib \
|
||||
libsndfile-devel \
|
||||
libdrm \
|
||||
libdrm-devel \
|
||||
gperf \
|
||||
bison \
|
||||
flex \
|
||||
ffmpeg ffmpeg-devel \
|
||||
nodejs18 \
|
||||
ffmpeg \
|
||||
ffmpeg-devel \
|
||||
nodejs20 \
|
||||
mozilla-nss-devel \
|
||||
python-xml \
|
||||
python3-six \
|
||||
@ -85,7 +85,7 @@ RUN zypper --non-interactive install -y \
|
||||
xorg-x11-devel \
|
||||
xz \
|
||||
xkeyboard-config \
|
||||
libnotify \
|
||||
libnotify-devel \
|
||||
argon2-devel \
|
||||
libxshmfence-devel \
|
||||
xproto-devel \
|
||||
@ -102,7 +102,7 @@ RUN zypper --non-interactive install -y \
|
||||
wget \
|
||||
pipewire-devel
|
||||
|
||||
# openSUSE Leap 15.4 comes with Python 3.6 by default,
|
||||
# openSUSE Leap 15.6 comes with Python 3.6 by default,
|
||||
# but we need at least 3.7 to compile Qt 6.6.1
|
||||
RUN rm /usr/bin/python3 && ln -s /usr/bin/python3.10 /usr/bin/python3
|
||||
|
||||
@ -113,10 +113,4 @@ ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-r
|
||||
|
||||
ENV CC=gcc
|
||||
ENV CXX=g++
|
||||
|
||||
# Setting this variable so that FFmpeg gets built without pipewiregrab
|
||||
# (see daemon/contrib/bootstrap and daemon/contrib/src/ffmpeg/rules.mak)
|
||||
# We rely on PipeWire for screen sharing on Wayland, but the version available on openSUSE Leap 15.4 is too old.
|
||||
ENV DISABLE_PIPEWIRE=true
|
||||
|
||||
CMD ["/opt/build-package-rpm.sh"]
|
||||
@ -36,12 +36,6 @@ RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/sna
|
||||
RUN mkdir -p /snap/snapcraft
|
||||
RUN unsquashfs -d /snap/snapcraft/current snapcraft.snap
|
||||
|
||||
# Fix Python3 installation: Make sure we use the interpreter from
|
||||
# the snapcraft snap:
|
||||
RUN unlink /snap/snapcraft/current/usr/bin/python3
|
||||
RUN ln -s /snap/snapcraft/current/usr/bin/python3.* /snap/snapcraft/current/usr/bin/python3
|
||||
RUN echo /snap/snapcraft/current/lib/python3.*/site-packages >> /snap/snapcraft/current/usr/lib/python3/dist-packages/site-packages.pth
|
||||
|
||||
# Create a snapcraft runner
|
||||
RUN mkdir -p /snap/bin
|
||||
RUN echo "#!/bin/sh" > /snap/bin/snapcraft
|
||||
|
||||
29
extras/packaging/gnu-linux/docker/Dockerfile_ubuntu_25.04
Normal file
29
extras/packaging/gnu-linux/docker/Dockerfile_ubuntu_25.04
Normal file
@ -0,0 +1,29 @@
|
||||
FROM ubuntu:25.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get clean
|
||||
RUN apt-get update && \
|
||||
apt-get install -y -o Acquire::Retries=10 \
|
||||
devscripts \
|
||||
equivs \
|
||||
python-is-python3 \
|
||||
wget
|
||||
|
||||
ADD extras/packaging/gnu-linux/scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
|
||||
|
||||
COPY extras/packaging/gnu-linux/rules/debian-qt/control /tmp/builddeps/debian/control
|
||||
RUN /opt/prebuild-package-debian.sh qt-deps
|
||||
|
||||
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
||||
RUN /opt/prebuild-package-debian.sh jami-deps
|
||||
|
||||
# Remove the libre2-dev package in order to force Qt to build using the bundled
|
||||
# version of the RE2 library. This is necessary because the system version of the
|
||||
# library on Ubuntu 25.04 (libre2-11) is not compatible with the one used in
|
||||
# Qt 6.6.1 due to an API change:
|
||||
# https://codereview.qt-project.org/c/qt/qtwebengine/+/516094
|
||||
RUN apt-get remove -y libre2-dev libre2-11
|
||||
|
||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||
CMD ["/opt/build-package-debian.sh"]
|
||||
@ -1,7 +1,5 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
|
||||
# Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,6 +1,4 @@
|
||||
;;; Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
;;;
|
||||
;;; Author: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
|
||||
;;; Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
;;;
|
||||
;;; 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
|
||||
|
||||
@ -261,7 +261,7 @@ Build-Depends: debhelper (>= 9),
|
||||
gperf,
|
||||
khronos-api,
|
||||
# libasound2-dev [linux-any],
|
||||
libavcodec-dev (>= 7:3.4.8~),
|
||||
libavcodec-dev (>= 7:3.4.8~) | libavcodec-extra-dev (>= 7:3.4.8~),
|
||||
libavformat-dev (>= 7:3.4.8~),
|
||||
libavutil-dev (>= 7:3.4.8~),
|
||||
libcap-dev [linux-any],
|
||||
|
||||
@ -30,7 +30,7 @@ Build-Depends: debhelper (>= 9),
|
||||
libspeex-dev,
|
||||
libspeexdsp-dev,
|
||||
uuid-dev,
|
||||
libavcodec-dev,
|
||||
libavcodec-dev | libavcodec-extra-dev,
|
||||
libavutil-dev,
|
||||
libavformat-dev,
|
||||
libswscale-dev,
|
||||
|
||||
@ -3,7 +3,7 @@ Upstream-Name: jami
|
||||
Upstream-Contact: Amin Bandali <bandali@gnu.org>
|
||||
Source: https://dl.jami.net/release/tarballs/
|
||||
Files: *
|
||||
Copyright: 2004-2024 Savoir-faire Linux Inc.
|
||||
Copyright: 2004-2025 Savoir-faire Linux Inc.
|
||||
License: GPL-3+
|
||||
Comment: Upstream embeds everything that is needed to build Jami inside the release tarball.
|
||||
Everything that is already in Debian has been removed.
|
||||
|
||||
@ -103,6 +103,8 @@ if [ -f /etc/os-release ]; then
|
||||
ENDTAG="ubuntu_24.04"
|
||||
elif [ "${UBUNTU_CODENAME}" = "oracular" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_24.10" ]; then
|
||||
ENDTAG="ubuntu_24.10"
|
||||
elif [ "${UBUNTU_CODENAME}" = "plucky" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_25.04" ]; then
|
||||
ENDTAG="ubuntu_25.04"
|
||||
elif [ "${ID}" = "debian" ] && \
|
||||
[ "$(command -v lsb_release)" ] && \
|
||||
[ "$(lsb_release -rs)" = "testing" ]; then
|
||||
|
||||
@ -74,7 +74,7 @@ override_dh_auto_build:
|
||||
--disable-gsm \
|
||||
--disable-speexdsp \
|
||||
--disable-natpmp \
|
||||
--enable-gnutls $(BUNDLED_PKGS) && \
|
||||
$(BUNDLED_PKGS) && \
|
||||
make list && \
|
||||
make -j$(NO_CPUS) V=1
|
||||
cd daemon && \
|
||||
|
||||
@ -1,7 +1,4 @@
|
||||
# Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
|
||||
# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
|
||||
# Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2016-2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2016-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Alexandre Viau <alexandre.viau@savoirfairelinux.com>
|
||||
# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
|
||||
@ -47,7 +47,11 @@ if [ ! -f "${qt_deb_path}" ] || [ "${FORCE_REBUILD_QT}" = "true" ]; then
|
||||
|
||||
# HACK: For now on ubuntu 24.04 there is no python3.10 package
|
||||
# So create a PyEnv environment to install the required packages
|
||||
if cat /etc/os-release | grep -Eq "24.04"; then
|
||||
# NOTE: We use this on Ubuntu 25.04 and Debian 13 ("trixie") too
|
||||
# because otherwise we get a ModuleNotFoundError when building
|
||||
# Qt 6.6.1 (specifically the chromium submodule in QtWebEngine)
|
||||
# due to the version of python used (3.13) being too recent.
|
||||
if cat /etc/os-release | grep -Eq "24.04|25.04|trixie"; then
|
||||
apt-get install git gcc make python3-pip libssl-dev curl libreadline-dev -y
|
||||
curl https://pyenv.run | bash
|
||||
export PYENV_ROOT="$HOME/.pyenv"
|
||||
|
||||
@ -1,9 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2016-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Alexandre Viau <alexandre.viau@savoirfairelinux.com>
|
||||
# Author: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
|
||||
# Copyright (C) 2016-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
@ -104,18 +101,14 @@ if [ ! -f "${RPM_PATH}" ]; then
|
||||
# Cache the built Qt RPM package.
|
||||
if [[ "${DISTRIBUTION:0:4}" == "rhel" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.el8.x86_64.rpm "${RPM_PATH}"
|
||||
elif [[ "${DISTRIBUTION}" == "fedora_36" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc36.x86_64.rpm "${RPM_PATH}"
|
||||
elif [[ "${DISTRIBUTION}" == "fedora_37" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc37.x86_64.rpm "${RPM_PATH}"
|
||||
elif [[ "${DISTRIBUTION}" == "fedora_38" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc38.x86_64.rpm "${RPM_PATH}"
|
||||
elif [[ "${DISTRIBUTION}" == "fedora_39" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc39.x86_64.rpm "${RPM_PATH}"
|
||||
elif [[ "${DISTRIBUTION}" == "fedora_40" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc40.x86_64.rpm "${RPM_PATH}"
|
||||
elif [[ "${DISTRIBUTION}" == "fedora_41" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc41.x86_64.rpm "${RPM_PATH}"
|
||||
elif [[ "${DISTRIBUTION}" == "fedora_42" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc42.x86_64.rpm "${RPM_PATH}"
|
||||
elif [[ "${DISTRIBUTION}" == "alma_9" ]]; then
|
||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.el9.x86_64.rpm "${RPM_PATH}"
|
||||
else
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
|
||||
# Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,9 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2016-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Alexandre Viau <alexandre.viau@savoirfairelinux.com>
|
||||
# Author: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
|
||||
# Copyright (C) 2016-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
@ -83,9 +80,6 @@ EOF
|
||||
find ./extras/packaging/gnu-linux/packages -type f -name '*.ddeb' -print0 | xargs -0 -I{} mv {} {}.deb
|
||||
|
||||
for package in ./extras/packaging/gnu-linux/packages/${DISTRIBUTION}*/*.deb; do
|
||||
echo "## signing: ${package} ##"
|
||||
dpkg-sig -k ${KEYID} --sign builder ${package}
|
||||
|
||||
echo "## including ${package} ##"
|
||||
package_name=$(dpkg -I ${package} | grep -m 1 Package: | awk '{print $2}')
|
||||
package_arch=$(dpkg -I ${package} | grep -m 1 Architecture: | awk '{print $2}')
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
|
||||
# Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
#
|
||||
# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
|
||||
# Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,25 +0,0 @@
|
||||
From 161d28abb6784115ad71fcb6977e112e9d5756d4 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
Date: Tue, 23 Jan 2024 15:38:34 -0500
|
||||
Subject: [PATCH] fix-fedora-fc-build
|
||||
|
||||
---
|
||||
CMakeLists.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 0fb89c8..3a6ad6d 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -65,7 +65,7 @@ if(NOT TARGET qmsetup::library)
|
||||
)
|
||||
|
||||
# Find package again
|
||||
- find_package(qmsetup REQUIRED PATHS ${_package_path})
|
||||
+ find_package(qmsetup REQUIRED PATHS ${_package_path} ${qmsetup_cmake_path})
|
||||
|
||||
# Update import path
|
||||
set(qmsetup_DIR ${_package_path} CACHE PATH "" FORCE)
|
||||
--
|
||||
2.34.1
|
||||
|
||||
32
extras/patches/0001-fix-qm_install_package-function.patch
Normal file
32
extras/patches/0001-fix-qm_install_package-function.patch
Normal file
@ -0,0 +1,32 @@
|
||||
From 56830725e641705e0113a068ee58df7029202439 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
||||
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
||||
Date: Wed, 2 Apr 2025 20:54:02 -0400
|
||||
Subject: [PATCH] fix qm_install_package function
|
||||
|
||||
---
|
||||
cmake/modules/private/InstallPackage.cmake | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/qmsetup/cmake/modules/private/InstallPackage.cmake b/qmsetup/cmake/modules/private/InstallPackage.cmake
|
||||
index 70174bc..f067de5 100644
|
||||
--- a/qmsetup/cmake/modules/private/InstallPackage.cmake
|
||||
+++ b/qmsetup/cmake/modules/private/InstallPackage.cmake
|
||||
@@ -101,6 +101,7 @@ function(qm_install_package _name)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -S ${_src_dir} -B ${_build_dir}
|
||||
${_extra_args} ${_build_type}
|
||||
+ "-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}"
|
||||
"-DCMAKE_INSTALL_PREFIX=${_install_dir}" ${FUNC_CONFIGURE_ARGS}
|
||||
OUTPUT_FILE ${_log_file}
|
||||
ERROR_FILE ${_log_file}
|
||||
@@ -150,4 +151,4 @@ function(qm_install_package _name)
|
||||
if(FUNC_RESULT_PATH)
|
||||
set(${FUNC_RESULT_PATH} ${_install_cmake_dir} PARENT_SCOPE)
|
||||
endif()
|
||||
-endfunction()
|
||||
\ No newline at end of file
|
||||
+endfunction()
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@ -211,6 +211,8 @@ def init_submodules():
|
||||
"3rdparty/SortFilterProxyModel",
|
||||
"3rdparty/md4c",
|
||||
"3rdparty/tidy-html5",
|
||||
"3rdparty/zxing-cpp",
|
||||
"3rdparty/hunspell",
|
||||
]
|
||||
if execute_cmd(["git", "submodule", "update", "--init" ] + submodules,
|
||||
False):
|
||||
@ -322,8 +324,8 @@ def deploy_runtimes(config_str, qt_dir):
|
||||
shutil.copy(os.path.join(rel_path, src), runtime_dir)
|
||||
|
||||
print("Copying libjami dependencies")
|
||||
install_file("contrib/build/openssl/libcrypto-1_1-x64.dll", daemon_dir)
|
||||
install_file("contrib/build/openssl/libssl-1_1-x64.dll", daemon_dir)
|
||||
install_file("contrib/build/openssl/libcrypto-3-x64.dll", daemon_dir)
|
||||
install_file("contrib/build/openssl/libssl-3-x64.dll", daemon_dir)
|
||||
# Ringtone files (ul,ogg,wav,opus files in the daemon ringtone dir).
|
||||
|
||||
print("Copying ringtones")
|
||||
|
||||
@ -52,7 +52,7 @@ for ARCH in "${ARCHS[@]}"; do
|
||||
# force to build every contrib
|
||||
for dir in "$DAEMON"/contrib/src/*/; do
|
||||
PKG=$(basename -- "$dir")
|
||||
if [ "$PKG" != "sdbus-cpp" ] && [ "$PKG" != "natpmp" ] &&
|
||||
if [ "$PKG" != "sdbus-cpp" ] && [ "$PKG" != "freetype" ] &&
|
||||
[ "$PKG" != "portaudio" ] && [ "$PKG" != "pthreads" ] &&
|
||||
[ "$PKG" != "lttng-ust" ] && [ "$PKG" != "openssl" ] &&
|
||||
[ "$PKG" != "media-sdk" ] && [ "$PKG" != "jack" ] &&
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2022-2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2022-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# install.sh --- build and install Jami daemon and client
|
||||
|
||||
# Copyright (C) 2016-2024 Savoir-faire Linux Inc.
|
||||
# Copyright (C) 2016-2025 Savoir-faire Linux Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
##
|
||||
## Copyright (C) 2016-2024 Savoir-faire Linux Inc.
|
||||
## Copyright (C) 2016-2025 Savoir-faire Linux Inc.
|
||||
##
|
||||
## 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
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 514 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 622 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 779 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 653 KiB |
BIN
resources/images/welcome_bg_dark.jpg
Normal file
BIN
resources/images/welcome_bg_dark.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 522 KiB |
BIN
resources/images/welcome_bg_light.jpg
Normal file
BIN
resources/images/welcome_bg_light.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 528 KiB |
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
|
||||
* Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2022-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -18,6 +17,7 @@
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtWebEngine
|
||||
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
@ -38,9 +38,12 @@ QtObject {
|
||||
readonly property bool isHidden: visibility === Window.Hidden ||
|
||||
visibility === Window.Minimized
|
||||
|
||||
// Used to store if a OngoingCallPage component is fullscreened.
|
||||
// Used to store if a CallStackView component is fullscreened.
|
||||
property bool isCallFullscreen: false
|
||||
|
||||
// Used to store if a WebEngineView component is fullscreened.
|
||||
property bool isWebFullscreen: false
|
||||
|
||||
// QWK: Provide spacing for widgets that may be occluded by the system buttons.
|
||||
property QtObject qwkSystemButtonSpacing: QtObject {
|
||||
id: qwkSystemButtonSpacing
|
||||
@ -151,9 +154,8 @@ QtObject {
|
||||
// Adds an item to the fullscreen item stack. Automatically puts
|
||||
// the main window in fullscreen mode if needed. Callbacks should be used
|
||||
// to perform component-specific tasks upon successful transitions.
|
||||
function pushFullScreenItem(item, prevParent, pushedCb, removedCb) {
|
||||
if (item === null || item === undefined
|
||||
|| priv.fullScreenItems.length >= 3) {
|
||||
function pushFullScreenItem(item, removedCb=undefined) {
|
||||
if (!item || priv.fullScreenItems.length >= 3) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -163,15 +165,13 @@ QtObject {
|
||||
// Add the item to our list and reparent it to appContainer.
|
||||
priv.fullScreenItems.push({
|
||||
"item": item,
|
||||
"prevParent": prevParent,
|
||||
"prevParent": item.parent,
|
||||
"prevAnchorsFill": item.anchors.fill,
|
||||
"removedCb": removedCb
|
||||
})
|
||||
|
||||
item.parent = appContainer
|
||||
item.anchors.fill = item.parent
|
||||
if (pushedCb) {
|
||||
pushedCb()
|
||||
}
|
||||
item.anchors.fill = appContainer
|
||||
|
||||
// Reevaluate isCallFullscreen.
|
||||
priv.fullScreenItemsChanged()
|
||||
@ -179,34 +179,37 @@ QtObject {
|
||||
|
||||
// Remove an item if specified, or by default, the top item. Automatically
|
||||
// resets the main window to windowed mode if no items remain in the stack.
|
||||
function popFullScreenItem(obj=null) {
|
||||
function popFullScreenItem(obj = undefined) {
|
||||
// Remove the item and reparent it to its original parent.
|
||||
if (obj === null) {
|
||||
obj = priv.fullScreenItems.pop()
|
||||
if (obj === undefined) {
|
||||
obj = priv.fullScreenItems.pop();
|
||||
} else {
|
||||
const index = priv.fullScreenItems.indexOf(obj);
|
||||
if (index > -1) {
|
||||
priv.fullScreenItems.splice(index, 1);
|
||||
}
|
||||
}
|
||||
if (obj !== undefined) {
|
||||
if (obj && typeof obj === 'object') {
|
||||
if (obj.item !== appWindow) {
|
||||
obj.item.anchors.fill = obj.prevAnchorsFill
|
||||
obj.item.parent = obj.prevParent
|
||||
if (obj.removedCb) {
|
||||
obj.removedCb()
|
||||
// Clear anchors first, then set parent, then reset anchors.
|
||||
obj.item.anchors.fill = undefined;
|
||||
obj.item.parent = obj.prevParent;
|
||||
obj.item.anchors.fill = obj.prevAnchorsFill;
|
||||
|
||||
// Call removed callback if it's a function.
|
||||
if (typeof obj.removedCb === 'function') {
|
||||
obj.removedCb();
|
||||
}
|
||||
}
|
||||
|
||||
// Reevaluate isCallFullscreen.
|
||||
priv.fullScreenItemsChanged()
|
||||
priv.fullScreenItemsChanged();
|
||||
}
|
||||
|
||||
// Only leave fullscreen mode if our window isn't in fullscreen
|
||||
// mode already.
|
||||
// Only leave fullscreen mode if our window isn't in fullscreen mode already.
|
||||
if (priv.fullScreenItems.length === 0 && priv.windowedVisibility !== Window.Hidden) {
|
||||
// Simply recall the last visibility state.
|
||||
visibility = priv.windowedVisibility
|
||||
visibility = priv.windowedVisibility;
|
||||
}
|
||||
}
|
||||
|
||||
@ -248,7 +251,10 @@ QtObject {
|
||||
// When fullScreenItems is changed, we can recompute isCallFullscreen.
|
||||
onFullScreenItemsChanged: {
|
||||
isCallFullscreen = fullScreenItems
|
||||
.filter(o => o.item instanceof OngoingCallPage)
|
||||
.filter(o => o.item.objectName === "callViewLoader")
|
||||
.length
|
||||
isWebFullscreen = fullScreenItems
|
||||
.filter(o => o.item instanceof WebEngineView)
|
||||
.length
|
||||
}
|
||||
|
||||
@ -259,7 +265,7 @@ QtObject {
|
||||
function onHasCallChanged() {
|
||||
if (!CallAdapter.hasCall && isCallFullscreen) {
|
||||
priv.fullScreenItems.forEach(o => {
|
||||
if (o.item instanceof OngoingCallPage) {
|
||||
if (o.item.objectName === "callViewLoader") {
|
||||
popFullScreenItem(o)
|
||||
return
|
||||
}
|
||||
|
||||
@ -1,10 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Author: Albert Babí <albert.babi@savoirfairelinux.com>
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -24,18 +19,15 @@ import QtQuick.Window
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import Qt5Compat.GraphicalEffects
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
import net.jami.Enums 1.1
|
||||
import net.jami.Helpers 1.1
|
||||
import net.jami.Constants 1.1
|
||||
|
||||
import "mainview"
|
||||
import "mainview/components"
|
||||
import "wizardview"
|
||||
import "commoncomponents"
|
||||
|
||||
import QWindowKit
|
||||
|
||||
ApplicationWindow {
|
||||
@ -45,6 +37,7 @@ ApplicationWindow {
|
||||
property bool isRTL: UtilsAdapter.isRTL
|
||||
LayoutMirroring.enabled: isRTL
|
||||
LayoutMirroring.childrenInherit: isRTL
|
||||
property var raiseWhenCalled: AppSettingsManager.getValue(Settings.RaiseWhenCalled)
|
||||
|
||||
onActiveFocusItemChanged: {
|
||||
focusOverlay.margin = -5;
|
||||
@ -68,7 +61,7 @@ ApplicationWindow {
|
||||
sourceComponent: GenericErrorsRow {
|
||||
id: genericError
|
||||
text: CurrentAccount.enabled ? JamiStrings.noNetworkConnectivity : JamiStrings.disabledAccount
|
||||
height: visible? JamiTheme.qwkTitleBarHeight : 0
|
||||
height: visible ? JamiTheme.qwkTitleBarHeight : 0
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,9 +85,11 @@ ApplicationWindow {
|
||||
appContainer: fullscreenContainer
|
||||
}
|
||||
// Used to manage dynamic view loading and unloading.
|
||||
property ViewManager viewManager: ViewManager {}
|
||||
property ViewManager viewManager: ViewManager {
|
||||
}
|
||||
// Used to manage the view stack and the current view.
|
||||
property ViewCoordinator viewCoordinator: ViewCoordinator {}
|
||||
property ViewCoordinator viewCoordinator: ViewCoordinator {
|
||||
}
|
||||
|
||||
// Used to prevent the window from being visible until the
|
||||
// window geometry has been restored and the view stack has
|
||||
@ -204,7 +199,6 @@ ApplicationWindow {
|
||||
if (useFrameless) {
|
||||
windowAgent.setup(appWindow);
|
||||
}
|
||||
|
||||
mainViewLoader.active = true;
|
||||
|
||||
// Dbus error handler for Linux.
|
||||
@ -221,10 +215,14 @@ ApplicationWindow {
|
||||
"confirmLabel": JamiStrings.send,
|
||||
"rejectLabel": JamiStrings.dontSend,
|
||||
"textHAlign": Text.AlignLeft,
|
||||
"textMaxWidth": 400,
|
||||
"textMaxWidth": 400
|
||||
});
|
||||
dlg.accepted.connect(function () {
|
||||
crashReporter.uploadLastReport();
|
||||
});
|
||||
dlg.rejected.connect(function () {
|
||||
crashReporter.clearReports();
|
||||
});
|
||||
dlg.accepted.connect(function () { crashReporter.uploadLastReport(); });
|
||||
dlg.rejected.connect(function () { crashReporter.clearReports(); });
|
||||
}
|
||||
}
|
||||
|
||||
@ -294,11 +292,31 @@ ApplicationWindow {
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UtilsAdapter
|
||||
function onRaiseWhenCalled() {
|
||||
raiseWhenCalled = AppSettingsManager.getValue(Settings.RaiseWhenCalled);
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: CallAdapter
|
||||
|
||||
function onCallStatusChanged(index, accountId, convUid) {
|
||||
//If we are starting a call with raiseWhenCalled activated
|
||||
if (raiseWhenCalled && index === Call.Status.INCOMING_RINGING) {
|
||||
appWindow.raise();
|
||||
appWindow.requestActivate();
|
||||
layoutManager.restoreApp();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: MainApplication
|
||||
|
||||
function onAboutToQuit() {
|
||||
cleanupMainView()
|
||||
cleanupMainView();
|
||||
}
|
||||
|
||||
function onCloseRequested() {
|
||||
@ -336,7 +354,7 @@ ApplicationWindow {
|
||||
});
|
||||
}
|
||||
|
||||
function presentUpdateConfirmInstallDialog(switchToBeta=false) {
|
||||
function presentUpdateConfirmInstallDialog(switchToBeta = false) {
|
||||
return viewCoordinator.presentDialog(appWindow, "commoncomponents/SimpleMessageDialog.qml", {
|
||||
"title": JamiStrings.updateDialogTitle,
|
||||
"infoText": switchToBeta ? JamiStrings.confirmBeta : JamiStrings.updateFound,
|
||||
@ -387,7 +405,7 @@ ApplicationWindow {
|
||||
presentUpdateInfoDialog(JamiStrings.updateNotFound);
|
||||
} else {
|
||||
// Show a dialog describing that an update were found, and offering to install it.
|
||||
presentUpdateConfirmInstallDialog()
|
||||
presentUpdateConfirmInstallDialog();
|
||||
}
|
||||
}
|
||||
|
||||
@ -398,4 +416,20 @@ ApplicationWindow {
|
||||
}
|
||||
|
||||
onClosing: appWindow.close()
|
||||
|
||||
// Capture the inputs to the main window while the File Dialog is open
|
||||
// This is used to mitigate modality issues on Ubuntu 22.04 systems that use wayland.
|
||||
Loader {
|
||||
active: JamiQmlUtils.openFileDialogCount > 0
|
||||
sourceComponent: Popup {
|
||||
modal: true
|
||||
visible: true
|
||||
closePolicy: Popup.NoAutoClose
|
||||
width: appWindow.width
|
||||
height: appWindow.height
|
||||
background: Rectangle {
|
||||
color: "#80808080" // Semi-transparent grey
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -49,13 +49,13 @@ QtObject {
|
||||
// right side when not in RTL and should represent the main or content-type view.
|
||||
readonly property var visibleViews: {
|
||||
if (!currentView)
|
||||
return []
|
||||
return [];
|
||||
if (isDualPane) {
|
||||
if (isInSinglePaneMode)
|
||||
return [currentView.rightPaneItem]
|
||||
return [currentView.leftPaneItem, currentView.rightPaneItem]
|
||||
return [currentView.rightPaneItem];
|
||||
return [currentView.leftPaneItem, currentView.rightPaneItem];
|
||||
}
|
||||
return [currentView]
|
||||
return [currentView];
|
||||
}
|
||||
// Aggregate this info and expose it as a single string for convenience.
|
||||
// JSON indented by 2 spaces.
|
||||
@ -64,12 +64,12 @@ QtObject {
|
||||
currentViewName: currentViewName,
|
||||
isDualPane: isDualPane,
|
||||
isInSinglePaneMode: isInSinglePaneMode,
|
||||
visibleViews: visibleViews.map(function(view) {
|
||||
return view && view.objectName || null;
|
||||
}),
|
||||
visibleViewWidths: visibleViews.map(function(view) {
|
||||
return view && view.width || null;
|
||||
}),
|
||||
visibleViews: visibleViews.map(function (view) {
|
||||
return view && view.objectName || null;
|
||||
}),
|
||||
visibleViewWidths: visibleViews.map(function (view) {
|
||||
return view && view.width || null;
|
||||
})
|
||||
};
|
||||
return JSON.stringify(info, null, 2);
|
||||
}
|
||||
@ -96,11 +96,12 @@ QtObject {
|
||||
}
|
||||
|
||||
// Create, present, and return a dialog object.
|
||||
function presentDialog(parent, path, props = {}) {
|
||||
function presentDialog(parent, path, props = {}, singleInstance = false) {
|
||||
// Open the dialog once the object is created
|
||||
return viewManager.createUniqueView(path, parent, function (obj) {
|
||||
let createFunc = singleInstance ? viewManager.createView : viewManager.createUniqueView;
|
||||
return createFunc(path, parent, function (obj, viewName) {
|
||||
const doneCb = function () {
|
||||
viewManager.destroyView(path);
|
||||
viewManager.destroyView(viewName);
|
||||
};
|
||||
if (obj.closed !== undefined) {
|
||||
obj.closed.connect(doneCb);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -59,7 +59,7 @@ QtObject {
|
||||
if (views.hasOwnProperty(viewName)) {
|
||||
// an instance of the view already exists
|
||||
if (cb !== null) {
|
||||
cb(views[viewName])
|
||||
cb(views[viewName], viewName)
|
||||
}
|
||||
return views[viewName]
|
||||
}
|
||||
@ -76,7 +76,7 @@ QtObject {
|
||||
viewName.replace(/^.*[\\\/]/, '').replace(/\.[^/.]+$/, "")
|
||||
viewPaths[friendlyName] = viewName
|
||||
if (cb !== null) {
|
||||
cb(obj)
|
||||
cb(obj , viewName)
|
||||
}
|
||||
return views[viewName]
|
||||
}
|
||||
@ -103,6 +103,7 @@ QtObject {
|
||||
function destroyView(path) {
|
||||
// The view may already have been destroyed.
|
||||
if (!views.hasOwnProperty(path)) {
|
||||
console.warn("View not found:", path, "Available views:", Object.keys(views))
|
||||
return false
|
||||
}
|
||||
views[path].destroy()
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,8 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Author: Yang Wang <yang.yang@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -25,8 +22,11 @@
|
||||
#include "systemtray.h"
|
||||
#include "lrcinstance.h"
|
||||
#include "accountlistmodel.h"
|
||||
#include "wizardviewstepmodel.h"
|
||||
#include "global.h"
|
||||
#include "api/account.h"
|
||||
|
||||
#include <QtConcurrent/QtConcurrent>
|
||||
#include <QThreadPool>
|
||||
|
||||
AccountAdapter::AccountAdapter(AppSettingsManager* settingsManager,
|
||||
SystemTray* systemTray,
|
||||
@ -114,7 +114,10 @@ AccountAdapter::createJamiAccount(const QVariantMap& settings)
|
||||
&lrcInstance_->accountModel(),
|
||||
&lrc::api::AccountModel::accountAdded,
|
||||
[this, registeredName, settings](const QString& accountId) {
|
||||
lrcInstance_->accountModel().setAvatar(accountId, settings["avatar"].toString(), true,1);
|
||||
lrcInstance_->accountModel().setAvatar(accountId,
|
||||
settings["avatar"].toString(),
|
||||
true,
|
||||
1);
|
||||
Utils::oneShotConnect(&lrcInstance_->accountModel(),
|
||||
&lrc::api::AccountModel::accountDetailsChanged,
|
||||
[this](const QString& accountId) {
|
||||
@ -162,8 +165,9 @@ AccountAdapter::createJamiAccount(const QVariantMap& settings)
|
||||
|
||||
connectFailure();
|
||||
|
||||
auto futureResult = QtConcurrent::run([this, settings] {
|
||||
QThreadPool::globalInstance()->start([this, settings] {
|
||||
lrcInstance_->accountModel().createNewAccount(lrc::api::profile::Type::JAMI,
|
||||
{},
|
||||
settings["alias"].toString(),
|
||||
settings["archivePath"].toString(),
|
||||
settings["password"].toString(),
|
||||
@ -209,14 +213,14 @@ AccountAdapter::createSIPAccount(const QVariantMap& settings)
|
||||
|
||||
connectFailure();
|
||||
|
||||
auto futureResult = QtConcurrent::run([this, settings] {
|
||||
QThreadPool::globalInstance()->start([this, settings] {
|
||||
lrcInstance_->accountModel().createNewAccount(lrc::api::profile::Type::SIP,
|
||||
{},
|
||||
settings["alias"].toString(),
|
||||
settings["archivePath"].toString(),
|
||||
"",
|
||||
"",
|
||||
settings["username"].toString(),
|
||||
{});
|
||||
settings["username"].toString());
|
||||
});
|
||||
}
|
||||
|
||||
@ -253,7 +257,7 @@ AccountAdapter::createJAMSAccount(const QVariantMap& settings)
|
||||
|
||||
connectFailure();
|
||||
|
||||
auto futureResult = QtConcurrent::run([this, settings] {
|
||||
QThreadPool::globalInstance()->start([this, settings] {
|
||||
lrcInstance_->accountModel().connectToAccountManager(settings["username"].toString(),
|
||||
settings["password"].toString(),
|
||||
settings["manager"].toString());
|
||||
@ -296,7 +300,7 @@ AccountAdapter::setCurrAccDisplayName(const QString& text)
|
||||
void
|
||||
AccountAdapter::setCurrentAccountAvatarFile(const QString& source)
|
||||
{
|
||||
auto futureResult = QtConcurrent::run([this, source]() {
|
||||
QThreadPool::globalInstance()->start([this, source]() {
|
||||
QPixmap image;
|
||||
if (!image.load(source)) {
|
||||
qWarning() << "Not a valid image file";
|
||||
@ -311,7 +315,7 @@ AccountAdapter::setCurrentAccountAvatarFile(const QString& source)
|
||||
void
|
||||
AccountAdapter::setCurrentAccountAvatarBase64(const QString& data)
|
||||
{
|
||||
auto futureResult = QtConcurrent::run([this, data]() {
|
||||
QThreadPool::globalInstance()->start([this, data]() {
|
||||
auto accountId = lrcInstance_->get_currentAccountId();
|
||||
lrcInstance_->accountModel().setAvatar(accountId, data, true, 1);
|
||||
});
|
||||
@ -342,9 +346,73 @@ AccountAdapter::exportToFile(const QString& accountId,
|
||||
void
|
||||
AccountAdapter::setArchivePasswordAsync(const QString& accountID, const QString& password)
|
||||
{
|
||||
auto futureResult = QtConcurrent::run([this, accountID, password] {
|
||||
QThreadPool::globalInstance()->start([this, accountID, password] {
|
||||
auto config = lrcInstance_->accountModel().getAccountConfig(accountID);
|
||||
config.archivePassword = password;
|
||||
lrcInstance_->accountModel().setAccountConfig(accountID, config);
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
AccountAdapter::startImportAccount()
|
||||
{
|
||||
auto wizardModel = qApp->property("WizardViewStepModel").value<WizardViewStepModel*>();
|
||||
wizardModel->set_deviceAuthState(lrc::api::account::DeviceAuthState::INIT);
|
||||
wizardModel->set_deviceLinkDetails({});
|
||||
|
||||
// This will create an account with the ARCHIVE_URL configured to start the import process.
|
||||
importAccountId_ = lrcInstance_->accountModel().createDeviceImportAccount();
|
||||
}
|
||||
|
||||
void
|
||||
AccountAdapter::provideAccountAuthentication(const QString& password)
|
||||
{
|
||||
if (importAccountId_.isEmpty()) {
|
||||
qWarning() << "No import account to provide password to";
|
||||
return;
|
||||
}
|
||||
|
||||
auto wizardModel = qApp->property("WizardViewStepModel").value<WizardViewStepModel*>();
|
||||
wizardModel->set_deviceAuthState(lrc::api::account::DeviceAuthState::IN_PROGRESS);
|
||||
|
||||
Utils::oneShotConnect(
|
||||
&lrcInstance_->accountModel(),
|
||||
&lrc::api::AccountModel::accountAdded,
|
||||
[this](const QString& accountId) {
|
||||
Q_EMIT lrcInstance_->accountListChanged();
|
||||
Q_EMIT accountAdded(accountId,
|
||||
lrcInstance_->accountModel().getAccountList().indexOf(accountId));
|
||||
},
|
||||
this,
|
||||
&AccountAdapter::accountCreationFailed);
|
||||
|
||||
connectFailure();
|
||||
|
||||
QThreadPool::globalInstance()->start([this, password] {
|
||||
lrcInstance_->accountModel().provideAccountAuthentication(importAccountId_, password);
|
||||
});
|
||||
}
|
||||
|
||||
QString
|
||||
AccountAdapter::getImportErrorMessage(QVariantMap details)
|
||||
{
|
||||
QString errorString = details.value("error").toString();
|
||||
if (!errorString.isEmpty() && errorString != "none") {
|
||||
auto error = lrc::api::account::mapLinkDeviceError(errorString.toStdString());
|
||||
return lrc::api::account::getLinkDeviceString(error);
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
void
|
||||
AccountAdapter::cancelImportAccount()
|
||||
{
|
||||
auto wizardModel = qApp->property("WizardViewStepModel").value<WizardViewStepModel*>();
|
||||
wizardModel->set_deviceAuthState(lrc::api::account::DeviceAuthState::INIT);
|
||||
wizardModel->set_deviceLinkDetails({});
|
||||
|
||||
// Remove the account if it was created
|
||||
lrcInstance_->accountModel().removeAccount(importAccountId_);
|
||||
importAccountId_.clear();
|
||||
}
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -82,6 +81,13 @@ public:
|
||||
const bool& state);
|
||||
Q_INVOKABLE QStringList getDefaultModerators(const QString& accountId);
|
||||
|
||||
// New import account / link device functions
|
||||
// import: (note: Listen for: DeviceAuthStateChanged)
|
||||
Q_INVOKABLE void startImportAccount();
|
||||
Q_INVOKABLE void provideAccountAuthentication(const QString& password = {});
|
||||
Q_INVOKABLE QString getImportErrorMessage(QVariantMap details);
|
||||
Q_INVOKABLE void cancelImportAccount();
|
||||
|
||||
Q_SIGNALS:
|
||||
// Trigger other components to reconnect account related signals.
|
||||
void accountStatusChanged(QString accountId);
|
||||
@ -99,6 +105,9 @@ private:
|
||||
|
||||
QMetaObject::Connection registeredNameSavedConnection_;
|
||||
|
||||
// The account ID of the last used import account.
|
||||
QString importAccountId_;
|
||||
|
||||
AppSettingsManager* settingsManager_;
|
||||
SystemTray* systemTray_;
|
||||
};
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -35,8 +34,12 @@ AppSettingsManager::AppSettingsManager(QObject* parent)
|
||||
{
|
||||
for (int i = 0; i < static_cast<int>(Settings::Key::COUNT__); ++i) {
|
||||
auto key = static_cast<Settings::Key>(i);
|
||||
if (!settings_->contains(Settings::toString(key)))
|
||||
setValue(key, Settings::defaultValue(key));
|
||||
auto strKey= Settings::toString(key);
|
||||
// If the setting is written in the settings file and is equal to the default value,
|
||||
// remove it from the settings file.
|
||||
// This allow us to change default values without risking to remove user settings
|
||||
if ((settings_->contains(strKey)) && (settings_->value(strKey) == Settings::defaultValue(key)))
|
||||
settings_->remove(strKey);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -64,6 +63,8 @@ extern const QString defaultDownloadPath;
|
||||
X(WindowState, QWindow::AutomaticVisibility) \
|
||||
X(EnableExperimentalSwarm, false) \
|
||||
X(LANG, "SYSTEM") \
|
||||
X(SpellLang, "NONE") \
|
||||
X(EnableSpellCheck, true) \
|
||||
X(PluginStoreEndpoint, "https://plugins.jami.net") \
|
||||
X(PositionShareDuration, 15) \
|
||||
X(PositionShareLimit, true) \
|
||||
@ -75,7 +76,8 @@ extern const QString defaultDownloadPath;
|
||||
X(PttKeys, 32) \
|
||||
X(UseFramelessWindow, USE_FRAMELESS_WINDOW_DEFAULT) \
|
||||
X(EnableCrashReporting, true) \
|
||||
X(EnableAutomaticCrashReporting, false)
|
||||
X(EnableAutomaticCrashReporting, false) \
|
||||
X(RaiseWhenCalled, false)
|
||||
#if APPSTORE
|
||||
#define KEYS COMMON_KEYS
|
||||
#else
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -77,10 +77,10 @@ struct AppVersionManager::Impl : public QObject
|
||||
auto latestVersion = latestVersionString.toULongLong();
|
||||
const QString channelStr = isBeta ? "beta" : "stable";
|
||||
const auto newVersionFound = latestVersion > currentVersion;
|
||||
qInfo().noquote() << "--------- Version info ------------"
|
||||
<< QString("\n - Current: %1 (%2)").arg(currentVersion).arg(channelStr);
|
||||
qInfo().noquote() << "--------- Version info ------------";
|
||||
qInfo().noquote() << QString("\tCurrent: \t%1 (%2)").arg(currentVersion).arg(channelStr);
|
||||
if (newVersionFound) {
|
||||
qDebug() << " - Latest: " << latestVersion;
|
||||
qInfo().noquote() << QString("\tLatest: \t%1").arg(latestVersion);
|
||||
Q_EMIT parent_.updateCheckReplyReceived(true, true);
|
||||
} else if (!quiet) {
|
||||
Q_EMIT parent_.updateCheckReplyReceived(true, false);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
|
||||
* Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
|
||||
* Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,8 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author : Edric Ladent Milaret<edric.ladent - milaret @savoirfairelinux.com>
|
||||
* Author : Andreas Traczyk<andreas.traczyk @savoirfairelinux.com>
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -348,9 +345,11 @@ AvAdapter::shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned heig
|
||||
}
|
||||
|
||||
void
|
||||
AvAdapter::shareWindow(const QString& windowProcessId, const QString& windowId)
|
||||
AvAdapter::shareWindow(const QString& windowProcessId, const QString& windowId, const int fps)
|
||||
{
|
||||
auto resource = lrcInstance_->getCurrentCallModel()->getDisplay(windowProcessId, windowId);
|
||||
auto resource = lrcInstance_->getCurrentCallModel()->getDisplay(windowProcessId,
|
||||
windowId,
|
||||
fps);
|
||||
auto callId = lrcInstance_->getCurrentCallId();
|
||||
|
||||
muteCamera_ = !isCapturing();
|
||||
@ -359,7 +358,10 @@ AvAdapter::shareWindow(const QString& windowProcessId, const QString& windowId)
|
||||
}
|
||||
|
||||
QString
|
||||
AvAdapter::getSharingResource(int screenId, const QString& windowProcessId, const QString& windowId)
|
||||
AvAdapter::getSharingResource(int screenId,
|
||||
const QString& windowProcessId,
|
||||
const QString& windowId,
|
||||
const int fps)
|
||||
{
|
||||
if (screenId == -1) {
|
||||
const auto arrangementRect = getAllScreensBoundingRect();
|
||||
@ -390,7 +392,7 @@ AvAdapter::getSharingResource(int screenId, const QString& windowProcessId, cons
|
||||
rect.height()
|
||||
* screen->devicePixelRatio());
|
||||
} else if (!windowId.isEmpty()) {
|
||||
return lrcInstance_->getCurrentCallModel()->getDisplay(windowProcessId, windowId);
|
||||
return lrcInstance_->getCurrentCallModel()->getDisplay(windowProcessId, windowId, fps);
|
||||
}
|
||||
|
||||
return "";
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*!
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -97,7 +96,9 @@ protected:
|
||||
Q_INVOKABLE void shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned height);
|
||||
|
||||
// Select window to display (all platforms except Wayland).
|
||||
Q_INVOKABLE void shareWindow(const QString& windowProcessId, const QString& windowId);
|
||||
Q_INVOKABLE void shareWindow(const QString& windowProcessId,
|
||||
const QString& windowId,
|
||||
const int fps = -1);
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
// Share a window on Wayland.
|
||||
@ -111,7 +112,8 @@ protected:
|
||||
// Returns the screensharing resource
|
||||
Q_INVOKABLE QString getSharingResource(int screenId = -2,
|
||||
const QString& windowProcessId = "",
|
||||
const QString& key = "");
|
||||
const QString& key = "",
|
||||
const int fps = -1);
|
||||
|
||||
Q_INVOKABLE void getListWindows();
|
||||
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -24,6 +22,7 @@
|
||||
#include "lrcinstance.h"
|
||||
|
||||
#include <QImage>
|
||||
#include <QRegularExpression>
|
||||
|
||||
class AsyncAvatarImageResponseRunnable : public AsyncImageResponseRunnable
|
||||
{
|
||||
@ -71,6 +70,16 @@ public:
|
||||
image = Utils::accountPhoto(lrcInstance_, imageId, requestedSize_);
|
||||
} else if (type == "contact") {
|
||||
image = Utils::contactPhoto(lrcInstance_, imageId, requestedSize_);
|
||||
} else if (type == "temporaryAccount") {
|
||||
// Check if imageId is a SHA-1 hash (jamiId or registered name)
|
||||
static const QRegularExpression sha1Pattern("^[0-9a-fA-F]{40}$");
|
||||
if (sha1Pattern.match(imageId).hasMatch()) {
|
||||
// If we only have a jamiId use default avatar
|
||||
image = Utils::fallbackAvatar("jami:" + imageId, QString(), requestedSize_);
|
||||
} else {
|
||||
// For registered usernames, use fallbackAvatar avatar with the name
|
||||
image = Utils::fallbackAvatar(QString(), imageId, requestedSize_);
|
||||
}
|
||||
} else {
|
||||
qWarning() << Q_FUNC_INFO << "Missing valid prefix in the image url";
|
||||
return;
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
* Author: Isa Nanic <isa.nanic@savoirfairelinux.com>
|
||||
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
|
||||
* Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2024 Savoir-faire Linux Inc.
|
||||
* Author: Isa Nanic <isa.nanic@savoirfairelinux.com>
|
||||
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
|
||||
* Copyright (C) 2019-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,13 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>
|
||||
* Author: Anthony Léonard <anthony.leonard@savoirfairelinux.com>
|
||||
* Author: Olivier Soldano <olivier.soldano@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Author: Isa Nanic <isa.nanic@savoirfairelinux.com>
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
|
||||
* Author: Capucine Berthet <capucine.berthet@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -257,7 +249,7 @@ CallAdapter::onCallEnded(const QString& callId)
|
||||
}
|
||||
|
||||
void
|
||||
CallAdapter::onCallStatusChanged(const QString& callId, int code)
|
||||
CallAdapter::onCallStatusChanged(const QString& accountId, const QString& callId, int code)
|
||||
{
|
||||
Q_UNUSED(code)
|
||||
|
||||
@ -476,11 +468,14 @@ CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& con
|
||||
showNotification(accountId, convInfo.uid);
|
||||
return;
|
||||
}
|
||||
if (!accountProperties.denySecondCall) {
|
||||
lrcInstance_->selectConversation(convInfo.uid, accountId);
|
||||
}
|
||||
} else {
|
||||
// finally, in this case, the conversation isn't selected yet
|
||||
// and there are no other special conditions, so just select the conversation
|
||||
lrcInstance_->selectConversation(convInfo.uid, accountId);
|
||||
}
|
||||
|
||||
// finally, in this case, the conversation isn't selected yet
|
||||
// and there are no other special conditions, so just select the conversation
|
||||
lrcInstance_->selectConversation(convInfo.uid, accountId);
|
||||
}
|
||||
|
||||
void
|
||||
@ -571,7 +566,7 @@ CallAdapter::connectCallModel(const QString& accountId)
|
||||
connect(accInfo.callModel.get(),
|
||||
&CallModel::callStatusChanged,
|
||||
this,
|
||||
QOverload<const QString&, int>::of(&CallAdapter::onCallStatusChanged),
|
||||
QOverload<const QString&, const QString&, int>::of(&CallAdapter::onCallStatusChanged),
|
||||
Qt::UniqueConnection);
|
||||
|
||||
connect(accInfo.callModel.get(),
|
||||
|
||||
@ -1,8 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -121,7 +118,7 @@ public Q_SLOTS:
|
||||
void onShowCallView(const QString& accountId, const QString& convUid);
|
||||
void onAccountChanged();
|
||||
void onCallStatusChanged(const QString& accountId, const QString& callId);
|
||||
void onCallStatusChanged(const QString& callId, int code);
|
||||
void onCallStatusChanged(const QString& accountId, const QString& callId, int code);
|
||||
void onCallAddedToConference(const QString& callId, const QString& conversationId, const QString& confId);
|
||||
void onCallStarted(const QString& callId);
|
||||
void onCallEnded(const QString& callId);
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -137,7 +135,7 @@ PendingConferenceesListModel::connectSignals()
|
||||
callsStatusChanged_ = connect(currentCallModel,
|
||||
&CallModel::callStatusChanged,
|
||||
this,
|
||||
[this](const QString&, int) {
|
||||
[this](const QString&, const QString&, int) {
|
||||
Q_EMIT dataChanged(index(0, 0),
|
||||
index(rowCount() - 1),
|
||||
{Role::CallStatus});
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Savoir-faire Linux Inc.
|
||||
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||
* Copyright (C) 2022-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Savoir-faire Linux Inc.
|
||||
* Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
|
||||
* Copyright (C) 2022-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -30,7 +28,8 @@ Item {
|
||||
enum Mode {
|
||||
Account,
|
||||
Contact,
|
||||
Conversation
|
||||
Conversation,
|
||||
TemporaryAccount
|
||||
}
|
||||
property int mode: Avatar.Mode.Account
|
||||
property alias sourceSize: image.sourceSize
|
||||
@ -47,6 +46,8 @@ Item {
|
||||
return 'contact';
|
||||
case Avatar.Mode.Conversation:
|
||||
return 'conversation';
|
||||
case Avatar.Mode.TemporaryAccount:
|
||||
return 'temporaryAccount';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -57,11 +56,11 @@ Popup {
|
||||
id: container
|
||||
|
||||
property color color: JamiTheme.secondaryBackgroundColor
|
||||
leftPadding: popupMargins
|
||||
bottomPadding: action1.visible || action2.visible ? 10 :popupMargins
|
||||
bottomPadding: action1.visible || action2.visible ? 10 : popupMargins
|
||||
|
||||
background: Rectangle {
|
||||
id: bgRect
|
||||
|
||||
radius: 5
|
||||
color: container.color
|
||||
layer.enabled: true
|
||||
@ -100,6 +99,7 @@ Popup {
|
||||
Label {
|
||||
id: titleText
|
||||
|
||||
Layout.leftMargin: popupMargins
|
||||
Layout.rightMargin: popupMargins
|
||||
Layout.bottomMargin: 20
|
||||
Layout.topMargin: closeButtonVisible ? 0 : 30
|
||||
@ -116,9 +116,9 @@ Popup {
|
||||
id: flickable
|
||||
|
||||
Layout.fillHeight: true
|
||||
|
||||
Layout.preferredHeight: Math.min(contentHeight, root.height)
|
||||
Layout.preferredWidth: contentItem.childrenRect.width
|
||||
Layout.leftMargin: popupMargins
|
||||
Layout.rightMargin: popupMargins
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
@ -127,11 +127,13 @@ Popup {
|
||||
contentItem.children: Loader {
|
||||
id: containerSubContentLoader
|
||||
}
|
||||
|
||||
ScrollBar.horizontal.visible: false
|
||||
}
|
||||
|
||||
DialogButtonBox {
|
||||
id: buttonBox
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
spacing: 1.5
|
||||
|
||||
@ -180,7 +182,7 @@ Popup {
|
||||
color: JamiTheme.transparentColor
|
||||
|
||||
// Color animation for overlay when pop up is shown.
|
||||
ColorAnimation on color {
|
||||
ColorAnimation on color {
|
||||
to: JamiTheme.popupOverlayColor
|
||||
duration: 500
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Savoir-faire Linux Inc.
|
||||
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
|
||||
* Copyright (C) 2022-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Savoir-faire Linux Inc.
|
||||
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
|
||||
* Copyright (C) 2022-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Savoir-faire Linux Inc.
|
||||
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
|
||||
* Copyright (C) 2022-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -1,8 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2021-2024 Savoir-faire Linux Inc.
|
||||
* Author: Trevor Tabah <trevor.tabah@savoirfairelinux.com>
|
||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
|
||||
* Copyright (C) 2021-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -96,7 +93,7 @@ Loader {
|
||||
bottomPadding: 6
|
||||
topPadding: 6
|
||||
leftPadding: 10
|
||||
text: UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author) + " " + JamiStrings.deletedMedia
|
||||
text: JamiStrings.deletedMedia.arg(UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author))
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
width: Math.min((2 / 3) * parent.width, implicitWidth + 18, innerContent.width - senderMargin + 18)
|
||||
|
||||
@ -129,6 +126,20 @@ Loader {
|
||||
property bool canOpen: root.transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED || isOutgoing
|
||||
property real maxMsgWidth: root.width - senderMargin - 2 * hPadding - avatarBlockWidth - buttonsLoader.width - 24 - 6 - 24
|
||||
|
||||
// Timer to update the translation bar
|
||||
Loader {
|
||||
id: timerLoader
|
||||
active: root.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING
|
||||
sourceComponent: Timer {
|
||||
interval: 1000 // Update every second
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
transferStats = MessagesAdapter.getTransferStats(transferId, root.transferStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isOutgoing: Author === CurrentAccount.uri
|
||||
showTime: root.showTime
|
||||
seq: root.seq
|
||||
@ -139,7 +150,7 @@ Loader {
|
||||
timestamp: root.timestamp
|
||||
formattedTime: root.formattedTime
|
||||
formattedDay: root.formattedTime
|
||||
extraHeight: progressBar.visible ? 18 : 0
|
||||
extraHeight: progressBar.visible ? 25 : 0
|
||||
|
||||
innerContent.children: [
|
||||
RowLayout {
|
||||
@ -215,9 +226,10 @@ Loader {
|
||||
imageColor: JamiTheme.chatviewButtonColor
|
||||
onClicked: {
|
||||
if (root.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING) {
|
||||
return MessagesAdapter.cancelFile(transferId);
|
||||
MessagesAdapter.cancelFile(transferId);
|
||||
} else {
|
||||
return MessagesAdapter.acceptFile(transferId);
|
||||
buttonsLoader.iconSource = JamiResources.connecting_black_24dp_svg;
|
||||
MessagesAdapter.acceptFile(transferId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -251,8 +263,9 @@ Loader {
|
||||
Label {
|
||||
id: transferInfo
|
||||
|
||||
width: Math.min(implicitWidth, maxMsgWidth)
|
||||
bottomPadding: 10
|
||||
rightPadding: dataTransferItem.bubble.timestampItem.width
|
||||
|
||||
text: {
|
||||
var res = "";
|
||||
if (transferStats.totalSize !== undefined) {
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Savoir-faire Linux Inc.
|
||||
* Author: Yang Wang <yang.wang@savoirfairelinux.com>
|
||||
* Copyright (C) 2020-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
@ -45,10 +44,9 @@ BaseModalDialog {
|
||||
|
||||
button2.text: JamiStrings.optionCancel
|
||||
button2Role: DialogButtonBox.RejectRole
|
||||
button2.onClicked: close();
|
||||
button2.onClicked: close()
|
||||
button1.contentColorProvider: JamiTheme.deleteRedButton
|
||||
|
||||
|
||||
BusyIndicator {
|
||||
id: busyInd
|
||||
running: false
|
||||
@ -69,7 +67,7 @@ BaseModalDialog {
|
||||
id: labelDeletion
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.maximumWidth: root.width - 4*JamiTheme.preferredMarginSize
|
||||
Layout.maximumWidth: root.width - 4 * JamiTheme.preferredMarginSize
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
color: JamiTheme.textColor
|
||||
@ -239,14 +237,14 @@ BaseModalDialog {
|
||||
|
||||
radius: 5
|
||||
|
||||
RowLayout{
|
||||
RowLayout {
|
||||
id: warningLayout
|
||||
|
||||
anchors.centerIn: parent
|
||||
anchors.margins: 15
|
||||
width: parent.width
|
||||
|
||||
Image{
|
||||
Image {
|
||||
id: warningIcon
|
||||
|
||||
Layout.fillWidth: true
|
||||
@ -262,7 +260,7 @@ BaseModalDialog {
|
||||
Layout.fillWidth: true
|
||||
Layout.margins: 15
|
||||
|
||||
text: JamiStrings.deleteAccountInfos
|
||||
text: JamiStrings.deleteAccountInfo
|
||||
|
||||
font.pointSize: JamiTheme.textFontSize
|
||||
font.kerning: true
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Savoir-faire Linux Inc.
|
||||
* Copyright (C) 2024-2025 Savoir-faire Linux Inc.
|
||||
*
|
||||
* 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
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user