fix #LINQT-1672 connection when another softphone is using the same sip address (try to let the OS choose the port to listen to)

fix empty root ca path : try to create file if doesn't exist

fix #LINQT-1671 loading indicator call history

remove clang from nightly

fix #LINQT-1667 add time before closing window when call ends
This commit is contained in:
gaelle 2025-03-03 10:37:18 +01:00
parent f5c939d671
commit e620af3f3e
8 changed files with 35 additions and 30 deletions

View file

@ -34,7 +34,7 @@ ubuntu2004-makefile-gcc:
ubuntu2004-ninja-clang: ubuntu2004-ninja-clang:
rules: rules:
- !reference [.rules-merge-request-manual, rules] - !reference [.rules-merge-request-manual, rules]
- if: $NIGHTLY_MASTER && $LINUX_NINJA - if: $NIGHTLY_MASTER == null
variables: variables:
CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON
CMAKE_GENERATOR: Ninja CMAKE_GENERATOR: Ninja
@ -46,7 +46,7 @@ ubuntu2004-ninja-clang:
ubuntu2004-ninja-clang-small: ubuntu2004-ninja-clang-small:
rules: rules:
- !reference [.rules-merge-request-manual, rules] - !reference [.rules-merge-request-manual, rules]
- if: $NIGHTLY_MASTER && $LINUX_NINJA - if: $NIGHTLY_MASTER == null
variables: variables:
CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO -DENABLE_PQCRYPTO=OFF CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO -DENABLE_PQCRYPTO=OFF
extends: ubuntu2004-ninja-clang extends: ubuntu2004-ninja-clang

View file

@ -162,6 +162,10 @@ static inline QString getAppRootCaFilePath() {
QString rootca = getAppPackageDataDirPath() + Constants::PathRootCa; QString rootca = getAppPackageDataDirPath() + Constants::PathRootCa;
if (Paths::filePathExists(rootca)) { // Packaged if (Paths::filePathExists(rootca)) { // Packaged
return rootca; return rootca;
} else {
QFile rootCaFile(rootca);
if (rootCaFile.open(QIODevice::ReadWrite))
return rootca;
} }
return ""; return "";
} }

View file

@ -90,6 +90,17 @@ void CoreModel::start() {
config->setInt("video", "capture", 1); config->setInt("video", "capture", 1);
config->setInt("video", "display", 1); config->setInt("video", "display", 1);
} }
// TODO : set the real transport type when sdk will be updated
// for now, we need to let the OS choose the port to listen on
// so that the user can be connected to linphone and another softphone
// at the same time (otherwise it tries to listen on the same port as
// the other software)
auto transports = mCore->getTransports();
transports->setTcpPort(-2);
transports->setUdpPort(-2);
transports->setTlsPort(-2);
mCore->setTransports(transports);
mCore->enableVideoPreview(false); // SDK doesn't write the state in configuration if not ready. mCore->enableVideoPreview(false); // SDK doesn't write the state in configuration if not ready.
config->setInt("video", "show_local", 0); // So : write ourself to turn off camera before starting the core. config->setInt("video", "show_local", 0); // So : write ourself to turn off camera before starting the core.
QString userAgent = ToolModel::computeUserAgent(config); QString userAgent = ToolModel::computeUserAgent(config);

View file

@ -65,7 +65,7 @@ SettingsModel::SettingsModel() {
QObject::connect(CoreModel::getInstance().get(), &CoreModel::defaultAccountChanged, this, QObject::connect(CoreModel::getInstance().get(), &CoreModel::defaultAccountChanged, this,
[this](const std::shared_ptr<linphone::Core> &core, const std::shared_ptr<linphone::Account> account) { [this](const std::shared_ptr<linphone::Core> &core, const std::shared_ptr<linphone::Account> account) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
setDisableMeetingsFeature(!account->getParams()->getAudioVideoConferenceFactoryAddress()); setDisableMeetingsFeature(account && !account->getParams()->getAudioVideoConferenceFactoryAddress());
}); });
auto defaultAccount = core->getDefaultAccount(); auto defaultAccount = core->getDefaultAccount();
setDisableMeetingsFeature(defaultAccount && !defaultAccount->getParams()->getAudioVideoConferenceFactoryAddress()); setDisableMeetingsFeature(defaultAccount && !defaultAccount->getParams()->getAudioVideoConferenceFactoryAddress());

View file

@ -116,6 +116,7 @@ Control.Button {
} }
component ButtonImage: EffectImage { component ButtonImage: EffectImage {
asynchronous: mainItem.asynchronous
imageSource: mainItem.icon.source imageSource: mainItem.icon.source
imageWidth: mainItem.icon.width imageWidth: mainItem.icon.width
imageHeight: mainItem.icon.height imageHeight: mainItem.icon.height

View file

@ -23,10 +23,12 @@ ListView {
loading = false loading = false
// contentY = 0 // contentY = 0
} }
onSearchTextChanged: loading = true
model: CallHistoryProxy { model: CallHistoryProxy {
id: callHistoryProxy id: callHistoryProxy
Component.onCompleted: {
loading = true
}
filterText: mainItem.searchText filterText: mainItem.searchText
onFilterTextChanged: maxDisplayItems = initialDisplayItems onFilterTextChanged: maxDisplayItems = initialDisplayItems
initialDisplayItems: Math.max( initialDisplayItems: Math.max(
@ -106,14 +108,22 @@ ListView {
currentIndex = -1 currentIndex = -1
} }
BusyIndicator {
anchors.horizontalCenter: mainItem.horizontalCenter
visible: mainItem.loading
height: visible ? mainItem.busyIndicatorSize : 0
width: mainItem.busyIndicatorSize
indicatorHeight: mainItem.busyIndicatorSize
indicatorWidth: mainItem.busyIndicatorSize
indicatorColor: DefaultStyle.main1_500_main
}
// Qt bug: sometimes, containsMouse may not be send and update on each MouseArea. // Qt bug: sometimes, containsMouse may not be send and update on each MouseArea.
// So we need to use this variable to switch off all hovered items. // So we need to use this variable to switch off all hovered items.
property int lastMouseContainsIndex: -1 property int lastMouseContainsIndex: -1
delegate: FocusScope { delegate: FocusScope {
width: mainItem.width width: mainItem.width
height: 56 * DefaultStyle.dp height: 56 * DefaultStyle.dp
visible: !!modelData
RowLayout { RowLayout {
z: 1 z: 1
anchors.fill: parent anchors.fill: parent
@ -130,6 +140,7 @@ ListView {
height: 45 * DefaultStyle.dp height: 45 * DefaultStyle.dp
isConference: modelData.core.isConference isConference: modelData.core.isConference
shadowEnabled: false shadowEnabled: false
asynchronous: false
} }
ColumnLayout { ColumnLayout {
Layout.fillHeight: true Layout.fillHeight: true
@ -195,6 +206,7 @@ ListView {
icon.source: AppIcons.phone icon.source: AppIcons.phone
focus: true focus: true
activeFocusOnTab: false activeFocusOnTab: false
asynchronous: false
onClicked: { onClicked: {
if (modelData.core.isConference) { if (modelData.core.isConference) {
var callsWindow = UtilsCpp.getCallsWindow() var callsWindow = UtilsCpp.getCallsWindow()

View file

@ -236,18 +236,6 @@ AbstractMainPage {
searchBar: searchBar searchBar: searchBar
Control.ScrollBar.vertical: scrollbar Control.ScrollBar.vertical: scrollbar
BusyIndicator {
anchors.horizontalCenter: historyListView.horizontalCenter
visible: historyListView.loading
&& historyListView.count === 0
&& searchBar.text.length === 0
height: visible ? historyListView.busyIndicatorSize : 0
width: historyListView.busyIndicatorSize
indicatorHeight: historyListView.busyIndicatorSize
indicatorWidth: historyListView.busyIndicatorSize
indicatorColor: DefaultStyle.main1_500_main
}
Connections { Connections {
target: mainItem target: mainItem
function onListViewUpdated() { function onListViewUpdated() {
@ -630,17 +618,6 @@ ConferenceInfoGui{
searchText: mainItem.selectedRowHistoryGui ? mainItem.selectedRowHistoryGui.core.remoteAddress : "" searchText: mainItem.selectedRowHistoryGui ? mainItem.selectedRowHistoryGui.core.remoteAddress : ""
busyIndicatorSize: 40 * DefaultStyle.dp busyIndicatorSize: 40 * DefaultStyle.dp
BusyIndicator {
anchors.horizontalCenter: detailListView.horizontalCenter
visible: detailListView.loading
&& detailListView.count === 0
height: visible ? detailListView.busyIndicatorSize : 0
width: detailListView.busyIndicatorSize
indicatorHeight: detailListView.busyIndicatorSize
indicatorWidth: detailListView.busyIndicatorSize
indicatorColor: DefaultStyle.main1_500_main
}
delegate: Item { delegate: Item {
width: detailListView.width width: detailListView.width
height: 56 * DefaultStyle.dp height: 56 * DefaultStyle.dp

View file

@ -175,7 +175,7 @@ AbstractWindow {
Timer { Timer {
id: autoCloseWindow id: autoCloseWindow
interval: mainWindow.callTerminatedByUser ? 1000 : 2000 interval: mainWindow.callTerminatedByUser ? 1500 : 2500
onTriggered: { onTriggered: {
UtilsCpp.closeCallsWindow() UtilsCpp.closeCallsWindow()
} }