Fix search addresses (log error, repeaters and unshown secure icons)

This commit is contained in:
Julien Wadel 2021-12-02 22:52:34 +01:00
parent 220eb45e59
commit a84e2b8326
4 changed files with 78 additions and 83 deletions

View file

@ -88,12 +88,6 @@ SearchBox {
colorSet: SettingsModel.getShowStartChatButton() ? SipAddressesViewStyle.chat : SipAddressesViewStyle.history,
secure: 1,
visible: SettingsModel.secureChatEnabled && AccountSettingsModel.conferenceURI != '',
secureIconVisibleHandler : function(entry) {
if(entry)
return UtilsCpp.hasCapability(entry.sipAddress ? entry.sipAddress : entry, LinphoneEnums.FriendCapabilityLimeX3Dh);
else
return false;
},
handler: function (entry) {
searchBox.closeMenu()
searchBox.launchSecureChat(entry.sipAddress)

View file

@ -127,7 +127,7 @@ ScrollableListView {
})
Icon{
visible: modelData.secure>0 &&
(sipAddressesView.actions[index].secureIconVisibleHandler ? sipAddressesView.actions[index].secureIconVisibleHandler($sipAddress) : true)
(sipAddressesView.actions[index].secureIconVisibleHandler ? sipAddressesView.actions[index].secureIconVisibleHandler({sipAddres:$sipAddress}) : true)
icon:modelData.secure === 2?'secure_level_2':'secure_level_1'
iconSize:15
anchors.right:parent.right
@ -297,7 +297,7 @@ ScrollableListView {
}
Icon{
visible: modelData.secure>0 &&
(sipAddressesView.actions[index].secureIconVisibleHandler ? sipAddressesView.actions[index].secureIconVisibleHandler($sipAddress) : true)
(sipAddressesView.actions[index].secureIconVisibleHandler ? sipAddressesView.actions[index].secureIconVisibleHandler({sipAddres:$sipAddress}) : true)
icon:modelData.secure === 2?'secure_level_2':'secure_level_1'
iconSize:15
anchors.right:parent.right

View file

@ -14,17 +14,17 @@ import Common.Styles 1.0
ScrollableListView {
id: sipAddressesView
// ---------------------------------------------------------------------------
// Contains a list of: {
// icon: 'string',
// handler: function () { ... }
// }
property var actions: []
property string genSipAddress
// Optional parameters.
property string headerButtonDescription
property string headerButtonIcon
@ -35,23 +35,23 @@ ScrollableListView {
property bool showSwitch : false
property bool showSeparator : true
property bool isSelectable : true
property var switchHandler : function(checked, index){
}
readonly property string interpretableSipAddress: SipAddressesModel.interpretSipAddress(
genSipAddress, false
)
// ---------------------------------------------------------------------------
signal entryClicked (var entry, var index)
// ---------------------------------------------------------------------------
// Header.
// ---------------------------------------------------------------------------
header: MouseArea {
height: {
var height = headerButton.visible ? SipAddressesViewStyle.header.button.height : 0
@ -61,46 +61,46 @@ ScrollableListView {
return height
}
width: parent.width
// Workaround to handle mouse.
// Without it, the mouse can be given to items list when mouse is hover header.
hoverEnabled: true
cursorShape: Qt.ArrowCursor
Column {
anchors.fill: parent
spacing: 0
// -----------------------------------------------------------------------
// Default contact.
// -----------------------------------------------------------------------
Loader {
id: defaultContact
height: SipAddressesViewStyle.entry.height
width: parent.width
visible: sipAddressesView.interpretableSipAddress.length > 0
sourceComponent: Rectangle {
anchors.fill: parent
color: SipAddressesViewStyle.entry.color.normal
RowLayout {
anchors {
fill: parent
rightMargin: SipAddressesViewStyle.entry.rightMargin
}
spacing: 0
Contact {
id: contact
Layout.fillHeight: true
Layout.fillWidth: true
entry: ({
sipAddress: sipAddressesView.interpretableSipAddress,
isOneToOne:true,
@ -108,28 +108,28 @@ ScrollableListView {
securityLevel:1
})
}
ActionBar {
id: defaultContactActionBar
iconSize: SipAddressesViewStyle.entry.iconSize
Repeater {
model: sipAddressesView.actions
ActionButton {
isCustom: true
backgroundRadius: 90
colorSet: modelData.colorSet
visible: sipAddressesView.actions[index].visible
onClicked: sipAddressesView.actions[index].handler({
sipAddress: sipAddressesView.interpretableSipAddress
})
visible: modelData.visible
onClicked: modelData.handler({
sipAddress: sipAddressesView.interpretableSipAddress
})
Icon{
visible: modelData.secure>0 &&
(sipAddressesView.actions[index].secureIconVisibleHandler ? sipAddressesView.actions[index].secureIconVisibleHandler({ sipAddress : sipAddressesView.interpretableSipAddress}) : true)
(modelData.secureIconVisibleHandler ? modelData.secureIconVisibleHandler({ sipAddress : sipAddressesView.interpretableSipAddress}) : true)
icon: 'secure_on'
iconSize:15
anchors.right:parent.right
@ -142,155 +142,155 @@ ScrollableListView {
}
}
}
// -----------------------------------------------------------------------
// Header button.
// -----------------------------------------------------------------------
MouseArea {
id: headerButton
height: SipAddressesViewStyle.header.button.height
width: parent.width
visible: sipAddressesView.showHeader && !!sipAddressesView.headerButtonAction
onClicked: sipAddressesView.headerButtonAction(sipAddressesView.interpretableSipAddress)
Rectangle {
anchors.fill: parent
color: parent.pressed
? SipAddressesViewStyle.header.color.pressed
: SipAddressesViewStyle.header.color.normal
Text {
anchors {
left: parent.left
leftMargin: SipAddressesViewStyle.header.leftMargin
verticalCenter: parent.verticalCenter
}
font {
bold: true
pointSize: SipAddressesViewStyle.header.text.pointSize
}
color: headerButton.pressed
? SipAddressesViewStyle.header.text.color.pressed
: SipAddressesViewStyle.header.text.color.normal
text: sipAddressesView.headerButtonDescription
}
Icon {
anchors {
right: parent.right
rightMargin: SipAddressesViewStyle.header.rightMargin
verticalCenter: parent.verticalCenter
}
icon: sipAddressesView.headerButtonIcon
iconSize: SipAddressesViewStyle.header.iconSize
overwriteColor: sipAddressesView.headerButtonOverwriteColor
visible: icon.length > 0
}
}
}
}
}
// ---------------------------------------------------------------------------
// Entries.
// ---------------------------------------------------------------------------
delegate: Rectangle {
id: sipAddressEntry
property var entry: modelData
color: SipAddressesViewStyle.entry.color.normal
height: SipAddressesViewStyle.entry.height
width: parent ? parent.width : 0
Rectangle {
id: indicator
anchors.left: parent.left
color: 'transparent'
height: parent.height
width: SipAddressesViewStyle.entry.indicator.width
}
MouseArea {
id: mouseArea
anchors.fill: parent
cursorShape: Qt.ArrowCursor
RowLayout {
anchors {
fill: parent
rightMargin: SipAddressesViewStyle.entry.rightMargin
}
spacing: 0
// ---------------------------------------------------------------------
// Contact or address info.
// ---------------------------------------------------------------------
Contact {
Layout.fillHeight: true
Layout.fillWidth: true
showContactAddress: sipAddressesView.showContactAddress
entry: modelData
MouseArea {
anchors.fill: parent
onClicked: sipAddressesView.entryClicked(modelData, index)
}
}
// ---------------------------------------------------------------------
// Actions
// ---------------------------------------------------------------------
ActionBar {
iconSize: SipAddressesViewStyle.entry.iconSize
Switch{
anchors.verticalCenter: parent.verticalCenter
width:50
//Layout.preferredWidth: 50
indicatorStyle: SwitchStyle.aux
visible: sipAddressesView.showSwitch
enabled:true
checked: false
onClicked: {
//checked = !checked
switchHandler(!checked, index)
}
}
Repeater {
model: sipAddressesView.actions
ActionButton {
isCustom: true
backgroundRadius: 90
colorSet: modelData.colorSet
tooltipText:modelData.tooltipText?modelData.tooltipText:''
visible: sipAddressesView.actions[index].visible
visible: modelData.visible
onClicked: {
sipAddressesView.actions[index].handler(sipAddressEntry.entry)
modelData.handler(sipAddressEntry.entry)
}
Icon{
visible: modelData.secure>0 &&
(sipAddressesView.actions[index].secureIconVisibleHandler ? sipAddressesView.actions[index].secureIconVisibleHandler(sipAddressEntry.entry) : true)
(modelData.secureIconVisibleHandler ? modelData.secureIconVisibleHandler(sipAddressEntry.entry) : true)
icon: 'secure_on'
iconSize:15
anchors.right:parent.right
@ -299,10 +299,11 @@ ScrollableListView {
}
}
}
}
}
}
// Separator.
Rectangle {
color: SipAddressesViewStyle.entry.separator.color
@ -310,17 +311,17 @@ ScrollableListView {
width: parent.width
visible: sipAddressesView.showSeparator
}
// -------------------------------------------------------------------------
states: State {
when: mouseArea.containsMouse && sipAddressesView.isSelectable
PropertyChanges {
color: SipAddressesViewStyle.entry.color.hovered
target: sipAddressEntry
}
PropertyChanges {
color: SipAddressesViewStyle.entry.indicator.color
target: indicator

View file

@ -90,7 +90,7 @@ DialogPlus {
secure: chatRoomModel.haveEncryption,
visible: true,
secureIconVisibleHandler : function(entry) {
return chatRoomModel.haveEncryption && UtilsCpp.hasCapability(entry.sipAddress, LinphoneEnums.FriendCapabilityLimeX3Dh);
return entry.sipAddress && chatRoomModel && chatRoomModel.haveEncryption && UtilsCpp.hasCapability(entry.sipAddress, LinphoneEnums.FriendCapabilityLimeX3Dh);
},
handler: function (entry) {
selectedParticipants.addAddress(entry.sipAddress)