mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-05-06 20:23:08 +00:00
Languages + fix
This commit is contained in:
parent
464a750d16
commit
9eac0c77b2
24 changed files with 1648 additions and 1063 deletions
|
|
@ -450,6 +450,14 @@ Server URL not configured.</translation>
|
|||
<source>isComposing</source>
|
||||
<translation>%1 is typing...</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>chatTyping</source>
|
||||
<extracomment>'%1 is typing...' indicate that someone is composing in chat</extracomment>
|
||||
<translation>
|
||||
<numerusform>%1 is typing...</numerusform>
|
||||
<numerusform>%1 are typing...</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cli</name>
|
||||
|
|
@ -693,6 +701,27 @@ Server URL not configured.</translation>
|
|||
<source>cleanHistory</source>
|
||||
<translation>Delete history</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conversationMenuGroupInformations</source>
|
||||
<extracomment>'Group informations' : Item menu to get information about the chat room</extracomment>
|
||||
<translation>Group informations</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conversationMenuDevices</source>
|
||||
<extracomment>"Conversation's devices" : Item menu to get all participant devices of the chat room</extracomment>
|
||||
<translation>Conversation's devices</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conversationMenuEphemeral</source>
|
||||
<extracomment>'Ephemeral messages' : Item menu to enable ephemeral mode</extracomment>
|
||||
<translation>Ephemeral messages</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>adminStatus</source>
|
||||
<extracomment>'Admin' : Admin(istrator)</extracomment>
|
||||
<translation>Admin</translation>
|
||||
<extra-Context>One word title for describing the current admin status</extra-Context>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -798,6 +827,76 @@ Server URL not configured.</translation>
|
|||
<translation>Send a file</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EphemeralChatRoom</name>
|
||||
<message>
|
||||
<source>ephemeralTitle</source>
|
||||
<extracomment>"Ephemeral messages" : Popup title for ephemerals</extracomment>
|
||||
<translation>Ephemeral messages</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ephemeralText</source>
|
||||
<extracomment>'New messages will be deleted on both ends once it has been read by your contact. Select a timeout.'</extracomment>
|
||||
<translation>New messages will be deleted on both ends once it has been read by your contact. Select a timeout.</translation>
|
||||
<extra-Context>Explanation for ephemerals</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>ephemeralNotInConference!</source>
|
||||
<extracomment>'
|
||||
Ephemeral message is only supported in conference based chat room!'</extracomment>
|
||||
<translation>Ephemeral message is only supported in conference based chat room!</translation>
|
||||
<extra-Context>Warning about not being in conference based chat room.</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>disabled</source>
|
||||
<extracomment>'Disabled'</extracomment>
|
||||
<translation>Disabled</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>nMinute</source>
|
||||
<extracomment>'%1 minute'</extracomment>
|
||||
<translation>
|
||||
<numerusform>%1 minute</numerusform>
|
||||
<numerusform>%1 minutes</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>nHour</source>
|
||||
<extracomment>'%1 hour'</extracomment>
|
||||
<translation>
|
||||
<numerusform>%1 hour</numerusform>
|
||||
<numerusform>%1 hours</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>nDay</source>
|
||||
<extracomment>'%1 day'
|
||||
----------
|
||||
'%1 days'</extracomment>
|
||||
<translation>
|
||||
<numerusform>%1 day</numerusform>
|
||||
<numerusform>%1 days</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>nWeek</source>
|
||||
<extracomment>'%1 week'</extracomment>
|
||||
<translation>
|
||||
<numerusform>%1 week</numerusform>
|
||||
<numerusform>%1 weeks</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cancelButton</source>
|
||||
<extracomment>'cancel' : button text for cancelling operation</extracomment>
|
||||
<translation>CANCEL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>startButton</source>
|
||||
<extracomment>'start' : button text to start ephemeral mode</extracomment>
|
||||
<translation>START</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Event</name>
|
||||
<message>
|
||||
|
|
@ -860,15 +959,15 @@ Server URL not configured.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>tooltipContactEdit</source>
|
||||
<translation type="unfinished">Edit contact</translation>
|
||||
<translation>Edit contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>tooltipContactAdd</source>
|
||||
<translation type="unfinished">Add contact</translation>
|
||||
<translation>Add contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cleanHistory</source>
|
||||
<translation type="unfinished">Delete history</translation>
|
||||
<translation>Delete history</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -956,6 +1055,76 @@ Server URL not configured.</translation>
|
|||
<translation>Stop recording.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InfoChatRoom</name>
|
||||
<message>
|
||||
<source>quitGroupButton</source>
|
||||
<extracomment>'Exit group' : Button label</extracomment>
|
||||
<translation>Exit group</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ok</source>
|
||||
<extracomment>'OK' : Button label</extracomment>
|
||||
<translation>OK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>addParticipantPlaceholder</source>
|
||||
<extracomment>'Add Participants' : Placeholder in a search bar for adding participant to the chat room</extracomment>
|
||||
<translation>Add Participants</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>addParticipantTooltip</source>
|
||||
<extracomment>'Search participants in your contact list in order to invite them into the chat room.'</extracomment>
|
||||
<translation>Search participants in your contact list in order to invite them into the chat room.</translation>
|
||||
<extra-Tooltip>Explanation for inviting the selected participants into chat room</extra-Tooltip>
|
||||
</message>
|
||||
<message>
|
||||
<source>participantList</source>
|
||||
<extracomment>'Participant list'</extracomment>
|
||||
<translation>Participant list</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>adminStatus</source>
|
||||
<extracomment>'Admin' : Admin(istrator)</extracomment>
|
||||
<translation>Admin</translation>
|
||||
<extra-one>word for admin status</extra-one>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InfoEncryption</name>
|
||||
<message>
|
||||
<source>cancelButton</source>
|
||||
<extracomment>'CANCEL' : button text for cancelling operation</extracomment>
|
||||
<translation>CANCEL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>callButton</source>
|
||||
<extracomment>'CALL' : Button that lead to a call</extracomment>
|
||||
<translation>CALL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>okButton</source>
|
||||
<extracomment>'OK' : Button that validate the popup to be redirected to the device list</extracomment>
|
||||
<translation>OK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>infoEncryptionTitle</source>
|
||||
<extracomment>'End-to-end encrypted' Popup title about encryption information.</extracomment>
|
||||
<translation>End-to-end encrypted</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionExplanation</source>
|
||||
<extracomment>"Instant messages are end-to-end encrypted in secured conversations. It is possible to upgrade the security level of a conversation by authentificating participants."</extracomment>
|
||||
<translation>Instant messages are end-to-end encrypted in secured conversations. It is possible to upgrade the security level of a conversation by authentificating participants.</translation>
|
||||
<extra-Context>Explanation of Encryption</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionProcessExplanation</source>
|
||||
<extracomment>"To do so, call the contact and follow the authentification process."</extracomment>
|
||||
<translation>To do so, call the contact and follow the authentification process.</translation>
|
||||
<extra-Context>Explanation process</extra-Context>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteFriends</name>
|
||||
<message>
|
||||
|
|
@ -1000,10 +1169,6 @@ Click here: <a href="%1">%1</a>
|
|||
<source>mainSearchBarPlaceholder</source>
|
||||
<translation>Search contact, start a call or a chat...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>homeEntry</source>
|
||||
<translation>HOME</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>contactsEntry</source>
|
||||
<translation>CONTACTS</translation>
|
||||
|
|
@ -1076,6 +1241,40 @@ Click here: <a href="%1">%1</a>
|
|||
<source>menuPlayMe</source>
|
||||
<translation>Play me!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>menuDeliveryStatus</source>
|
||||
<extracomment>'Delivery status' : Item menu that lead to IMDN of a message</extracomment>
|
||||
<translation>Delivery status</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>menuDelete</source>
|
||||
<extracomment>'Delete' : Item menu to delete a message</extracomment>
|
||||
<translation>Delete</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>deliveryDelivered</source>
|
||||
<extracomment>'Send to %1 - %2' Little message to indicate the state of a message</extracomment>
|
||||
<translation>Send to %1 - %2</translation>
|
||||
<extra-Context>%1 is someone, %2 is a date/time. The state is that the message has been sent but not received.</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>deliveryDeliveredToUser</source>
|
||||
<extracomment>'Retrieved by %1 - %2' Little message to indicate the state of a message</extracomment>
|
||||
<translation>Retrieved by %1 - %2</translation>
|
||||
<extra-Context>%1 is someone, %2 is a date/time. The state is that the message has been retrieved</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>deliveryDisplayed</source>
|
||||
<extracomment>'Read by %1 - %2' Little message to indicate the state of a message</extracomment>
|
||||
<translation>Read by %1 - %2</translation>
|
||||
<extra-Context>%1 is someone, %2 is a date/time. The state that the message has been read.</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>deliveryNotDelivered</source>
|
||||
<extracomment>"%1 have nothing received" Little message to indicate the state of a message</extracomment>
|
||||
<translation>%1 have nothing received</translation>
|
||||
<extra-Context>%1 is someone. The state is that the message hasn't been delivered.</extra-Context>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MultimediaParameters</name>
|
||||
|
|
@ -1084,6 +1283,67 @@ Click here: <a href="%1">%1</a>
|
|||
<translation>OK</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewChatRoom</name>
|
||||
<message>
|
||||
<source>cancelButton</source>
|
||||
<extracomment>'Cancel' : Cancel button</extracomment>
|
||||
<translation>CANCEL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>startButton</source>
|
||||
<extracomment>'Launch' : Start button</extracomment>
|
||||
<translation>LAUNCH</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newChatRoomTitle</source>
|
||||
<extracomment>'Start a chat room' : Title of a popup about creation of a chat room</extracomment>
|
||||
<translation>Start a chat room</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>askEncryption</source>
|
||||
<extracomment>'Would you like to encrypt your chat?' : Ask about setting the chat room as secured.</extracomment>
|
||||
<translation>Would you like to encrypt your chat?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>subjectLabel</source>
|
||||
<extracomment>'Subject' : Label of a text field about the subject of the chat room</extracomment>
|
||||
<translation>Subject</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>subjectTooltip</source>
|
||||
<extracomment>'Current subject of the Chat Room. It cannot be empty'</extracomment>
|
||||
<translation>Current subject of the Chat Room. It cannot be empty.</translation>
|
||||
<extra-Tooltip>Explanation about the subject of the chat room</extra-Tooltip>
|
||||
</message>
|
||||
<message>
|
||||
<source>participantSelectionPlaceholder</source>
|
||||
<extracomment>'Select participants' : Placeholder for a search on participant to add them in selection.</extracomment>
|
||||
<translation>Select participants</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>participantSelectionTooltip</source>
|
||||
<extracomment>'Search in your contacts or add a custom one to the chat room.'</extracomment>
|
||||
<translation>Search in your contacts or add a custom one to the chat room.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>adminStatus</source>
|
||||
<extracomment>'Admin' : Admin(istrator)</extracomment>
|
||||
<translation>Admin</translation>
|
||||
<extra-one>word for admin status</extra-one>
|
||||
</message>
|
||||
<message>
|
||||
<source>removeParticipantSelection</source>
|
||||
<extracomment>'Remove this participant from the selection' : Explanation abo^ut removing participant from a selection</extracomment>
|
||||
<translation>Remove this participant from the selection</translation>
|
||||
<extra-Tooltip>This is a tooltip</extra-Tooltip>
|
||||
</message>
|
||||
<message>
|
||||
<source>requiredField</source>
|
||||
<extracomment>'Required' : Word relative to a star to explain that it is a requirement (Field form)</extracomment>
|
||||
<translation>Required</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Notifier</name>
|
||||
<message>
|
||||
|
|
@ -1133,6 +1393,15 @@ Click here: <a href="%1">%1</a>
|
|||
<translation>Delivered</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ParticipantsView</name>
|
||||
<message>
|
||||
<source>participantsAdminHeader</source>
|
||||
<extracomment>'(Admin)' : One word for Admin(istrator)</extracomment>
|
||||
<translation>(Admin)</translation>
|
||||
<extra-Context>Little Header in one word for a column in participant</extra-Context>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Presence</name>
|
||||
<message>
|
||||
|
|
@ -1207,6 +1476,11 @@ Click here: <a href="%1">%1</a>
|
|||
<source>contactsTitle</source>
|
||||
<translation>Address Book Connector</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>noPlugin</source>
|
||||
<extracomment>'No Plugins to load' : Text in combobox</extracomment>
|
||||
<translation>No Plugins to load</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsAudio</name>
|
||||
|
|
@ -2018,8 +2292,54 @@ Click here: <a href="%1">%1</a>
|
|||
<context>
|
||||
<name>Timeline</name>
|
||||
<message>
|
||||
<source>timelineTitle</source>
|
||||
<translation>Previously</translation>
|
||||
<source>timelineFilter</source>
|
||||
<extracomment>A title for filtering mode.</extracomment>
|
||||
<translation>Filter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterAll</source>
|
||||
<extracomment>'All' The mode for timelines filtering.</extracomment>
|
||||
<translation>All</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterCustom</source>
|
||||
<extracomment>'Custom' The mode for timelines filtering.</extracomment>
|
||||
<translation>Custom</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterSimpleRooms</source>
|
||||
<extracomment>'Simple rooms' : Filter item</extracomment>
|
||||
<translation>Simple rooms</translation>
|
||||
<extra-Mode>Selecting it will show all simple romms</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterSecureRooms</source>
|
||||
<extracomment>'Secure rooms' : Filter item</extracomment>
|
||||
<translation>Secure rooms</translation>
|
||||
<extra-Mode>Selecting it will show all secure rooms</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterChatGroups</source>
|
||||
<extracomment>'Chat groups' : Filter item</extracomment>
|
||||
<translation>Chat groups</translation>
|
||||
<extra-Mode>Selecting it will show all chat groups (with more than one participant)</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterSecureChatGroups</source>
|
||||
<extracomment>'Secure Chat Groups' : Filter item</extracomment>
|
||||
<translation>Secure Chat Groups</translation>
|
||||
<extra-Mode>Selecting it will show all secure chat groups (with more than one participant)</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterEphemerals</source>
|
||||
<extracomment>'Ephemerals' : Filter item</extracomment>
|
||||
<translation>Ephemerals</translation>
|
||||
<extra-Mode>Selecting it will show all chat rooms where the ephemeral mode has been enabled.</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineSearchPlaceholderText</source>
|
||||
<extracomment>'Search in the list' : ths is a placeholder when searching something in the timeline list</extracomment>
|
||||
<translation>Search in the list</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
|||
|
|
@ -92,6 +92,22 @@
|
|||
<source>about</source>
|
||||
<translation>Acerca De</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>commandLineOptionFetchConfig</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>commandLineOptionFetchConfigArg</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>commandLineOptionCall</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>commandLineOptionCallArg</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AssistantAbstractView</name>
|
||||
|
|
@ -434,6 +450,14 @@ URL del servidor no configurada.</translation>
|
|||
<source>isComposing</source>
|
||||
<translation>%1 está escribiendo...</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>chatTyping</source>
|
||||
<extracomment>'%1 is typing...' indicate that someone is composing in chat</extracomment>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cli</name>
|
||||
|
|
@ -473,6 +497,10 @@ URL del servidor no configurada.</translation>
|
|||
<source>joinConferenceAsFunctionDescription</source>
|
||||
<translation>Únase a la conferencia organizada por la dirección de sip-como con la dirección de sip-guest. Si no está conectado a un proxy-config, consulte join-conference.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>byeFunctionDescription</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CodecsViewer</name>
|
||||
|
|
@ -673,6 +701,27 @@ URL del servidor no configurada.</translation>
|
|||
<source>cleanHistory</source>
|
||||
<translation>Eliminar historial</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conversationMenuGroupInformations</source>
|
||||
<extracomment>'Group informations' : Item menu to get information about the chat room</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conversationMenuDevices</source>
|
||||
<extracomment>"Conversation's devices" : Item menu to get all participant devices of the chat room</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conversationMenuEphemeral</source>
|
||||
<extracomment>'Ephemeral messages' : Item menu to enable ephemeral mode</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>adminStatus</source>
|
||||
<extracomment>'Admin' : Admin(istrator)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>One word title for describing the current admin status</extra-Context>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CreateAppSipAccount</name>
|
||||
|
|
@ -778,6 +827,76 @@ URL del servidor no configurada.</translation>
|
|||
<translation>Enviar un archivo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EphemeralChatRoom</name>
|
||||
<message>
|
||||
<source>ephemeralTitle</source>
|
||||
<extracomment>"Ephemeral messages" : Popup title for ephemerals</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ephemeralText</source>
|
||||
<extracomment>'New messages will be deleted on both ends once it has been read by your contact. Select a timeout.'</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>Explanation for ephemerals</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>ephemeralNotInConference!</source>
|
||||
<extracomment>'
|
||||
Ephemeral message is only supported in conference based chat room!'</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>Warning about not being in conference based chat room.</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>disabled</source>
|
||||
<extracomment>'Disabled'</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>nMinute</source>
|
||||
<extracomment>'%1 minute'</extracomment>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>nHour</source>
|
||||
<extracomment>'%1 hour'</extracomment>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>nDay</source>
|
||||
<extracomment>'%1 day'
|
||||
----------
|
||||
'%1 days'</extracomment>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>nWeek</source>
|
||||
<extracomment>'%1 week'</extracomment>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>cancelButton</source>
|
||||
<extracomment>'cancel' : button text for cancelling operation</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>startButton</source>
|
||||
<extracomment>'start' : button text to start ephemeral mode</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Event</name>
|
||||
<message>
|
||||
|
|
@ -936,6 +1055,76 @@ URL del servidor no configurada.</translation>
|
|||
<translation>Parar grabación.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InfoChatRoom</name>
|
||||
<message>
|
||||
<source>quitGroupButton</source>
|
||||
<extracomment>'Exit group' : Button label</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ok</source>
|
||||
<extracomment>'OK' : Button label</extracomment>
|
||||
<translation type="unfinished">OK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>addParticipantPlaceholder</source>
|
||||
<extracomment>'Add Participants' : Placeholder in a search bar for adding participant to the chat room</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>addParticipantTooltip</source>
|
||||
<extracomment>'Search participants in your contact list in order to invite them into the chat room.'</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Tooltip>Explanation for inviting the selected participants into chat room</extra-Tooltip>
|
||||
</message>
|
||||
<message>
|
||||
<source>participantList</source>
|
||||
<extracomment>'Participant list'</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>adminStatus</source>
|
||||
<extracomment>'Admin' : Admin(istrator)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-one>word for admin status</extra-one>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InfoEncryption</name>
|
||||
<message>
|
||||
<source>cancelButton</source>
|
||||
<extracomment>'CANCEL' : button text for cancelling operation</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>callButton</source>
|
||||
<extracomment>'CALL' : Button that lead to a call</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>okButton</source>
|
||||
<extracomment>'OK' : Button that validate the popup to be redirected to the device list</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>infoEncryptionTitle</source>
|
||||
<extracomment>'End-to-end encrypted' Popup title about encryption information.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionExplanation</source>
|
||||
<extracomment>"Instant messages are end-to-end encrypted in secured conversations. It is possible to upgrade the security level of a conversation by authentificating participants."</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>Explanation of Encryption</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>encryptionProcessExplanation</source>
|
||||
<extracomment>"To do so, call the contact and follow the authentification process."</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>Explanation process</extra-Context>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteFriends</name>
|
||||
<message>
|
||||
|
|
@ -980,10 +1169,6 @@ Haga clic aquí: <a href="%1">%1 </a>
|
|||
<source>mainSearchBarPlaceholder</source>
|
||||
<translation>Buscar contacto, empezar una llamada o un chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>homeEntry</source>
|
||||
<translation>INICIO</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>contactsEntry</source>
|
||||
<translation>CONTACTOS</translation>
|
||||
|
|
@ -1056,6 +1241,40 @@ Haga clic aquí: <a href="%1">%1 </a>
|
|||
<source>menuPlayMe</source>
|
||||
<translation>¡Reprodúceme!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>menuDeliveryStatus</source>
|
||||
<extracomment>'Delivery status' : Item menu that lead to IMDN of a message</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>menuDelete</source>
|
||||
<extracomment>'Delete' : Item menu to delete a message</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>deliveryDelivered</source>
|
||||
<extracomment>'Send to %1 - %2' Little message to indicate the state of a message</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>%1 is someone, %2 is a date/time. The state is that the message has been sent but not received.</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>deliveryDeliveredToUser</source>
|
||||
<extracomment>'Retrieved by %1 - %2' Little message to indicate the state of a message</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>%1 is someone, %2 is a date/time. The state is that the message has been retrieved</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>deliveryDisplayed</source>
|
||||
<extracomment>'Read by %1 - %2' Little message to indicate the state of a message</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>%1 is someone, %2 is a date/time. The state that the message has been read.</extra-Context>
|
||||
</message>
|
||||
<message>
|
||||
<source>deliveryNotDelivered</source>
|
||||
<extracomment>"%1 have nothing received" Little message to indicate the state of a message</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>%1 is someone. The state is that the message hasn't been delivered.</extra-Context>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MultimediaParameters</name>
|
||||
|
|
@ -1064,6 +1283,67 @@ Haga clic aquí: <a href="%1">%1 </a>
|
|||
<translation>OK</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewChatRoom</name>
|
||||
<message>
|
||||
<source>cancelButton</source>
|
||||
<extracomment>'Cancel' : Cancel button</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>startButton</source>
|
||||
<extracomment>'Launch' : Start button</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>newChatRoomTitle</source>
|
||||
<extracomment>'Start a chat room' : Title of a popup about creation of a chat room</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>askEncryption</source>
|
||||
<extracomment>'Would you like to encrypt your chat?' : Ask about setting the chat room as secured.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>subjectLabel</source>
|
||||
<extracomment>'Subject' : Label of a text field about the subject of the chat room</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>subjectTooltip</source>
|
||||
<extracomment>'Current subject of the Chat Room. It cannot be empty'</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Tooltip>Explanation about the subject of the chat room</extra-Tooltip>
|
||||
</message>
|
||||
<message>
|
||||
<source>participantSelectionPlaceholder</source>
|
||||
<extracomment>'Select participants' : Placeholder for a search on participant to add them in selection.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>participantSelectionTooltip</source>
|
||||
<extracomment>'Search in your contacts or add a custom one to the chat room.'</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>adminStatus</source>
|
||||
<extracomment>'Admin' : Admin(istrator)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-one>word for admin status</extra-one>
|
||||
</message>
|
||||
<message>
|
||||
<source>removeParticipantSelection</source>
|
||||
<extracomment>'Remove this participant from the selection' : Explanation abo^ut removing participant from a selection</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Tooltip>This is a tooltip</extra-Tooltip>
|
||||
</message>
|
||||
<message>
|
||||
<source>requiredField</source>
|
||||
<extracomment>'Required' : Word relative to a star to explain that it is a requirement (Field form)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Notifier</name>
|
||||
<message>
|
||||
|
|
@ -1113,6 +1393,15 @@ Haga clic aquí: <a href="%1">%1 </a>
|
|||
<translation>Enviado</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ParticipantsView</name>
|
||||
<message>
|
||||
<source>participantsAdminHeader</source>
|
||||
<extracomment>'(Admin)' : One word for Admin(istrator)</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Context>Little Header in one word for a column in participant</extra-Context>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Presence</name>
|
||||
<message>
|
||||
|
|
@ -1187,6 +1476,11 @@ Haga clic aquí: <a href="%1">%1 </a>
|
|||
<source>contactsTitle</source>
|
||||
<translation type="unfinished">Contactos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>noPlugin</source>
|
||||
<extracomment>'No Plugins to load' : Text in combobox</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsAudio</name>
|
||||
|
|
@ -1366,6 +1660,172 @@ Haga clic aquí: <a href="%1">%1 </a>
|
|||
<translation>El cifrado es obligatorio</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsLdap</name>
|
||||
<message>
|
||||
<source>newServer</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsLdapEdit</name>
|
||||
<message>
|
||||
<source>cancel</source>
|
||||
<translation type="unfinished">CANCELAR</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>confirm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>displayNameLabel</source>
|
||||
<translation type="unfinished">Nombre mostrado (opcional)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>displayNameTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>connectionTitle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>serverLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>serverTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>bindDNLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>bindDNTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>passwordLabel</source>
|
||||
<translation type="unfinished">Contraseña</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>useTLSLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>useTLSTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>useSalLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>useSalTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>verifyTLSLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>AutoMode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offMode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>onMode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>verifyTLSTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>searchTitle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>baseObjectLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>baseObjectPlaceholder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>baseObjectTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>filterLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>filterTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>maxResultsLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>maxResultsTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>timeoutLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>timeoutTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>parsingTitle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>nameAttributesLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>nameAttributesTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sipAttributesLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sipAttributesTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>domainLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>domainTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>miscLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>debugLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>debugTooltip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsNetwork</name>
|
||||
<message>
|
||||
|
|
@ -1809,8 +2269,54 @@ Haga clic aquí: <a href="%1">%1 </a>
|
|||
<context>
|
||||
<name>Timeline</name>
|
||||
<message>
|
||||
<source>timelineTitle</source>
|
||||
<translation>Previamente</translation>
|
||||
<source>timelineFilter</source>
|
||||
<extracomment>A title for filtering mode.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterAll</source>
|
||||
<extracomment>'All' The mode for timelines filtering.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterCustom</source>
|
||||
<extracomment>'Custom' The mode for timelines filtering.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterSimpleRooms</source>
|
||||
<extracomment>'Simple rooms' : Filter item</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Mode>Selecting it will show all simple romms</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterSecureRooms</source>
|
||||
<extracomment>'Secure rooms' : Filter item</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Mode>Selecting it will show all secure rooms</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterChatGroups</source>
|
||||
<extracomment>'Chat groups' : Filter item</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Mode>Selecting it will show all chat groups (with more than one participant)</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterSecureChatGroups</source>
|
||||
<extracomment>'Secure Chat Groups' : Filter item</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Mode>Selecting it will show all secure chat groups (with more than one participant)</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineFilterEphemerals</source>
|
||||
<extracomment>'Ephemerals' : Filter item</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
<extra-Mode>Selecting it will show all chat rooms where the ephemeral mode has been enabled.</extra-Mode>
|
||||
</message>
|
||||
<message>
|
||||
<source>timelineSearchPlaceholderText</source>
|
||||
<extracomment>'Search in the list' : ths is a placeholder when searching something in the timeline list</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -386,6 +386,10 @@ QString ChatMessageModel::getFromDisplayName() const{
|
|||
return Utils::getDisplayName(mChatMessage->getFromAddress());
|
||||
}
|
||||
|
||||
QString ChatMessageModel::getFromSipAddress() const{
|
||||
return Utils::cleanSipAddress(Utils::coreStringToAppString(mChatMessage->getFromAddress()->asStringUriOnly()));
|
||||
}
|
||||
|
||||
QString ChatMessageModel::getToDisplayName() const{
|
||||
return Utils::getDisplayName(mChatMessage->getToAddress());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -135,6 +135,7 @@ public:
|
|||
|
||||
|
||||
Q_PROPERTY(QString fromDisplayName READ getFromDisplayName CONSTANT)
|
||||
Q_PROPERTY(QString fromSipAddress READ getFromSipAddress CONSTANT)
|
||||
Q_PROPERTY(QString toDisplayName READ getToDisplayName CONSTANT)
|
||||
Q_PROPERTY(ContactModel * contactModel READ getContactModel CONSTANT)
|
||||
|
||||
|
|
@ -159,6 +160,7 @@ public:
|
|||
//----------------------------------------------------------------------------
|
||||
|
||||
QString getFromDisplayName() const;
|
||||
QString getFromSipAddress() const;
|
||||
QString getToDisplayName() const;
|
||||
ContactModel * getContactModel() const;
|
||||
bool isEphemeral() const;
|
||||
|
|
|
|||
|
|
@ -654,19 +654,21 @@ void ChatRoomModel::onIsComposingReceived(const std::shared_ptr<linphone::ChatRo
|
|||
}else
|
||||
mComposers[remoteAddress] = Utils::getDisplayName(remoteAddress);
|
||||
emit isRemoteComposingChanged();
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message){
|
||||
setUnreadMessagesCount(chatRoom->getUnreadMessagesCount());
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onNewEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
|
||||
if( eventLog->getType() == linphone::EventLog::Type::ConferenceCallEnd ){
|
||||
setMissedCallsCount(mMissedCallsCount+1);
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}else if( eventLog->getType() == linphone::EventLog::Type::ConferenceCreated ){
|
||||
emit fullPeerAddressChanged();
|
||||
}
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onChatMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) {
|
||||
|
|
@ -688,6 +690,7 @@ void ChatRoomModel::onChatMessageSending(const std::shared_ptr<linphone::ChatRoo
|
|||
}
|
||||
|
||||
void ChatRoomModel::onChatMessageSent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onParticipantAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
|
||||
|
|
@ -695,6 +698,7 @@ void ChatRoomModel::onParticipantAdded(const std::shared_ptr<linphone::ChatRoom>
|
|||
auto e = std::find(events.begin(), events.end(), eventLog);
|
||||
if( e != events.end() )
|
||||
insertNotice(*e);
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit participantAdded(chatRoom, eventLog);
|
||||
emit fullPeerAddressChanged();
|
||||
}
|
||||
|
|
@ -704,16 +708,19 @@ void ChatRoomModel::onParticipantRemoved(const std::shared_ptr<linphone::ChatRoo
|
|||
auto e = std::find(events.begin(), events.end(), eventLog);
|
||||
if( e != events.end() )
|
||||
insertNotice(*e);
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit participantRemoved(chatRoom, eventLog);
|
||||
emit fullPeerAddressChanged();
|
||||
}
|
||||
|
||||
void ChatRoomModel::onParticipantAdminStatusChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit participantAdminStatusChanged(chatRoom, eventLog);
|
||||
emit isMeAdminChanged(); // It is not the case all the time but calling getters is not a heavy request
|
||||
}
|
||||
|
||||
void ChatRoomModel::onStateChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, linphone::ChatRoom::State newState){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit stateChanged(getState());
|
||||
}
|
||||
|
||||
|
|
@ -722,21 +729,26 @@ void ChatRoomModel::onSecurityEvent(const std::shared_ptr<linphone::ChatRoom> &
|
|||
auto e = std::find(events.begin(), events.end(), eventLog);
|
||||
if( e != events.end() )
|
||||
insertNotice(*e);
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit securityLevelChanged((int)chatRoom->getSecurityLevel());
|
||||
}
|
||||
void ChatRoomModel::onSubjectChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) {
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit subjectChanged(getSubject());
|
||||
emit usernameChanged();
|
||||
}
|
||||
|
||||
void ChatRoomModel::onUndecryptableMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onParticipantDeviceAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit participantDeviceAdded(chatRoom, eventLog);
|
||||
}
|
||||
|
||||
void ChatRoomModel::onParticipantDeviceRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit participantDeviceRemoved(chatRoom, eventLog);
|
||||
}
|
||||
|
||||
|
|
@ -752,6 +764,7 @@ void ChatRoomModel::onConferenceJoined(const std::shared_ptr<linphone::ChatRoom>
|
|||
insertNotice(*e);
|
||||
}
|
||||
setUnreadMessagesCount(mChatRoom->getUnreadMessagesCount()); // Update message count. In the case of joining conference, the conference id was not valid thus, the missing count was not about the chat room but a global one.
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit usernameChanged();
|
||||
emit conferenceJoined(chatRoom, eventLog);
|
||||
emit hasBeenLeftChanged();
|
||||
|
|
@ -769,6 +782,7 @@ void ChatRoomModel::onConferenceLeft(const std::shared_ptr<linphone::ChatRoom> &
|
|||
if(e != events.end() )
|
||||
insertNotice(*e);
|
||||
}
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit conferenceLeft(chatRoom, eventLog);
|
||||
emit hasBeenLeftChanged();
|
||||
}
|
||||
|
|
@ -779,18 +793,23 @@ void ChatRoomModel::onEphemeralEvent(const std::shared_ptr<linphone::ChatRoom> &
|
|||
auto e = std::find(events.begin(), events.end(), eventLog);
|
||||
if(e != events.end() )
|
||||
insertNotice(*e);
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onEphemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onConferenceAddressGeneration(const std::shared_ptr<linphone::ChatRoom> & chatRoom){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
}
|
||||
|
||||
void ChatRoomModel::onParticipantRegistrationSubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress){
|
||||
setLastUpdateTime(QDateTime::fromMSecsSinceEpoch(chatRoom->getLastUpdateTime()));
|
||||
emit participantRegistrationSubscriptionRequested(chatRoom, participantAddress);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ void TimelineListModel::update(){
|
|||
|
||||
void TimelineListModel::selectAll(const bool& selected){
|
||||
for(auto it = mTimelines.begin() ; it != mTimelines.end() ; ++it)
|
||||
(*it)->mSelected = selected;
|
||||
(*it)->setSelected(selected);
|
||||
}
|
||||
int TimelineListModel::rowCount (const QModelIndex &) const {
|
||||
return mTimelines.count();
|
||||
|
|
@ -275,6 +275,7 @@ void TimelineListModel::updateTimelines () {
|
|||
}
|
||||
|
||||
void TimelineListModel::add (std::shared_ptr<TimelineModel> timeline){
|
||||
connect(timeline->getChatRoomModel(), &ChatRoomModel::lastUpdateTimeChanged, this, &TimelineListModel::updated);
|
||||
int row = mTimelines.count();
|
||||
beginInsertRows(QModelIndex(), row, row);
|
||||
mTimelines << timeline;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ Item {
|
|||
property alias text: button.text
|
||||
property bool enabled: true
|
||||
property bool showBorder : false
|
||||
|
||||
property alias capitalization : button.capitalization
|
||||
|
||||
signal clicked
|
||||
|
||||
|
|
@ -72,6 +74,7 @@ Item {
|
|||
|
||||
Button {
|
||||
id: button
|
||||
property int capitalization
|
||||
|
||||
background: Rectangle {
|
||||
color: _getBackgroundColor()
|
||||
|
|
@ -85,6 +88,7 @@ Item {
|
|||
font {
|
||||
bold: true
|
||||
pointSize: AbstractTextButtonStyle.text.pointSize
|
||||
capitalization: button.capitalization
|
||||
}
|
||||
wrapMode: Text.WordWrap
|
||||
//elide: Text.ElideRight
|
||||
|
|
|
|||
|
|
@ -36,7 +36,9 @@ MouseArea {
|
|||
delay: tooltipArea.delay
|
||||
parent: tooltipParent
|
||||
visible: _visible || force
|
||||
width: tooltipParent.width>TooltipStyle.minWidth?tooltipParent.width:TooltipStyle.minWidth
|
||||
width: Math.min(tooltip.implicitWidth, Math.max(tooltipParent.width, TooltipStyle.minWidth))
|
||||
|
||||
//tooltipParent.width>TooltipStyle.minWidth?tooltipParent.width:TooltipStyle.minWidth
|
||||
|
||||
timeout: -1
|
||||
|
||||
|
|
|
|||
|
|
@ -200,84 +200,9 @@ Rectangle {
|
|||
leftPadding: ChatStyle.composingText.leftPadding
|
||||
visible: composers.length > 0 && SettingsModel.chatEnabled
|
||||
wrapMode: Text.Wrap
|
||||
|
||||
text:(composers.length==0?'':(composers.length>1 ? '%1 are typing...' : '%1 is typing...').arg(container.proxyModel.getDisplayNameComposers()))
|
||||
//: '%1 is typing...' indicate that someone is composing in chat
|
||||
text:(composers.length==0?'': qsTr('chatTyping','',composers.length).arg(container.proxyModel.getDisplayNameComposers()))
|
||||
}
|
||||
|
||||
|
||||
/* GridView{
|
||||
height: visible ? ChatStyle.composingText.height*container.proxyModel.composers.length : 0
|
||||
width:parent.width
|
||||
cellWidth: parent.width; cellHeight: ChatStyle.composingText.height
|
||||
|
||||
property var composersLength : container.proxyModel.composers.length
|
||||
onComposersLengthChanged:{
|
||||
model.clear()
|
||||
console.log(container.proxyModel.composers)
|
||||
for(var j = 0 ; j < container.proxyModel.composers.length ; ++j) {
|
||||
console.log(container.proxyModel.composers[j])
|
||||
model.append({text:container.proxyModel.composers[j]})
|
||||
}
|
||||
}
|
||||
model: ListModel{}
|
||||
delegate:Rectangle{
|
||||
height:ChatStyle.composingText.height
|
||||
width:parent.width
|
||||
color:"red"
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
/*
|
||||
Column{
|
||||
height: 100 *container.proxyModel.composers.length
|
||||
width:parent.width
|
||||
onHeightChanged: {
|
||||
composerRepeater.model = []
|
||||
composerRepeater.model = container.proxyModel.composers
|
||||
}
|
||||
Repeater{
|
||||
id:composerRepeater
|
||||
model:["toto"]
|
||||
Rectangle{
|
||||
height:100
|
||||
width:parent.width
|
||||
color:"red"
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
/*
|
||||
Column{
|
||||
height: visible ? ChatStyle.composingText.height*container.proxyModel.composers.length : 0
|
||||
width:parent.width
|
||||
visible:SettingsModel.chatEnabled
|
||||
onHeightChanged: {
|
||||
composers.clear()
|
||||
composerRepeater.model = []
|
||||
composerRepeater.model = container.proxyModel.composers
|
||||
}
|
||||
Repeater{
|
||||
id:composerRepeater
|
||||
model:ListModel{
|
||||
id:composers
|
||||
}
|
||||
onModelChanged: console.log(container.proxyModel.composers.length)
|
||||
|
||||
Text {
|
||||
color: ChatStyle.composingText.color
|
||||
font.pointSize: ChatStyle.composingText.pointSize
|
||||
height: visible ? ChatStyle.composingText.height : 0
|
||||
|
||||
leftPadding: ChatStyle.composingText.leftPadding
|
||||
visible: text.length > 0 && SettingsModel.chatEnabled
|
||||
|
||||
text: modelData + ' ' +'is typing...'
|
||||
Component.onCompleted: console.log(text + "=>" +width+"/"+height+" : "+visible)
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -9,63 +9,69 @@ import LinphoneUtils 1.0
|
|||
// =============================================================================
|
||||
|
||||
RowLayout {
|
||||
implicitHeight: message.height
|
||||
spacing: 0
|
||||
|
||||
Item {
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.preferredHeight: ChatStyle.entry.lineHeight
|
||||
Layout.preferredWidth: ChatStyle.entry.metaWidth
|
||||
|
||||
Avatar {
|
||||
anchors.centerIn: parent
|
||||
height: ChatStyle.entry.message.incoming.avatarSize
|
||||
image: $chatEntry.contactModel? $chatEntry.contactModel.vcard.avatar : '' //chat.sipAddressObserver.contact ? chat.sipAddressObserver.contact.vcard.avatar : ''
|
||||
username: $chatEntry.fromDisplayName
|
||||
|
||||
width: ChatStyle.entry.message.incoming.avatarSize
|
||||
|
||||
// The avatar is only visible for the first message of a incoming messages sequence.
|
||||
visible: {
|
||||
if (index <= 0) {
|
||||
return true // 1. First message, so visible.
|
||||
}
|
||||
|
||||
var previousEntry = proxyModel.data(proxyModel.index(index - 1, 0))
|
||||
if (!previousEntry) {
|
||||
return true
|
||||
}
|
||||
|
||||
// 2. Previous entry is a call event. => Visible.
|
||||
// 3. I have sent a message before my contact. => Visible.
|
||||
// 4. One hour between two incoming messages. => Visible.
|
||||
return previousEntry.type !== ChatRoomModel.MessageEntry ||
|
||||
previousEntry.isOutgoing ||
|
||||
$chatEntry.timestamp.getTime() - previousEntry.timestamp.getTime() > 3600
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Message {
|
||||
id: message
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
// Not a style. Workaround to avoid a 0 width.
|
||||
// Arbitrary value.
|
||||
Layout.minimumWidth: 1
|
||||
|
||||
backgroundColor: ChatStyle.entry.message.incoming.backgroundColor
|
||||
color: ChatStyle.entry.message.incoming.text.color
|
||||
pointSize: ChatStyle.entry.message.incoming.text.pointSize
|
||||
|
||||
ActionButton {
|
||||
height: ChatStyle.entry.lineHeight
|
||||
icon: 'delete'
|
||||
iconSize: ChatStyle.entry.deleteIconSize
|
||||
visible: isHoverEntry()
|
||||
|
||||
onClicked: removeEntry()
|
||||
}
|
||||
}
|
||||
id:mainRow
|
||||
implicitHeight: message.height
|
||||
spacing: 0
|
||||
|
||||
Item {
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.preferredHeight: ChatStyle.entry.lineHeight
|
||||
Layout.preferredWidth: ChatStyle.entry.metaWidth
|
||||
|
||||
Avatar {
|
||||
id:avatar
|
||||
anchors.centerIn: parent
|
||||
height: ChatStyle.entry.message.incoming.avatarSize
|
||||
image: $chatEntry.contactModel? $chatEntry.contactModel.vcard.avatar : '' //chat.sipAddressObserver.contact ? chat.sipAddressObserver.contact.vcard.avatar : ''
|
||||
username: $chatEntry.fromDisplayName
|
||||
|
||||
width: ChatStyle.entry.message.incoming.avatarSize
|
||||
|
||||
// The avatar is only visible for the first message of a incoming messages sequence.
|
||||
visible: {
|
||||
if (index <= 0) {
|
||||
return true // 1. First message, so visible.
|
||||
}
|
||||
|
||||
var previousEntry = proxyModel.data(proxyModel.index(index - 1, 0))
|
||||
if (!previousEntry) {
|
||||
return true
|
||||
}
|
||||
|
||||
// 2. Previous entry is a call event. => Visible.
|
||||
// 3. I have sent a message before my contact. => Visible.
|
||||
// 4. One hour between two incoming messages. => Visible.
|
||||
return previousEntry.type !== ChatRoomModel.MessageEntry ||
|
||||
previousEntry.isOutgoing ||
|
||||
$chatEntry.timestamp.getTime() - previousEntry.timestamp.getTime() > 3600
|
||||
}
|
||||
TooltipArea{
|
||||
text:avatar.username+'\n'+$chatEntry.fromSipAddress
|
||||
tooltipParent:mainRow
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Message {
|
||||
id: message
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
// Not a style. Workaround to avoid a 0 width.
|
||||
// Arbitrary value.
|
||||
Layout.minimumWidth: 1
|
||||
|
||||
backgroundColor: ChatStyle.entry.message.incoming.backgroundColor
|
||||
color: ChatStyle.entry.message.incoming.text.color
|
||||
pointSize: ChatStyle.entry.message.incoming.text.pointSize
|
||||
|
||||
ActionButton {
|
||||
height: ChatStyle.entry.lineHeight
|
||||
icon: 'delete'
|
||||
iconSize: ChatStyle.entry.deleteIconSize
|
||||
visible: isHoverEntry()
|
||||
|
||||
onClicked: removeEntry()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -124,7 +124,8 @@ Item {
|
|||
onTriggered: TextToSpeech.say($chatEntry.content)
|
||||
}
|
||||
MenuItem {
|
||||
text: 'Delivery Status'
|
||||
//: 'Delivery status' : Item menu that lead to IMDN of a message
|
||||
text: qsTr('menuDeliveryStatus')
|
||||
iconMenu: 'menu_imdn_info'
|
||||
iconSizeMenu: 17
|
||||
iconLayoutDirection: Qt.RightToLeft
|
||||
|
|
@ -133,7 +134,8 @@ Item {
|
|||
onTriggered: deliveryLayout.visible = !deliveryLayout.visible
|
||||
}
|
||||
MenuItem {
|
||||
text: 'Delete'
|
||||
//: 'Delete' : Item menu to delete a message
|
||||
text: qsTr('menuDelete')
|
||||
iconMenu: 'menu_delete'
|
||||
iconSizeMenu: 17
|
||||
iconLayoutDirection: Qt.RightToLeft
|
||||
|
|
@ -191,21 +193,23 @@ Item {
|
|||
}
|
||||
}*/
|
||||
model: $chatEntry.getProxyImdnStates()
|
||||
property var i18n: [
|
||||
'Envoyé à %1 - %2', // LinphoneEnums.ChatMessageStateDelivered
|
||||
'Reçu par %1 - %2', // LinphoneEnums.ChatMessageStateDeliveredToUser
|
||||
'Lu par %1 - %2' , // LinphoneEnums.ChatMessageStateDisplayed
|
||||
"%1 n'a encore rien reçu" // LinphoneEnums.ChatMessageStateNotDelivered
|
||||
]
|
||||
function getText(state){
|
||||
if(state == LinphoneEnums.ChatMessageStateDelivered)
|
||||
return i18n[0]
|
||||
//: 'Send to %1 - %2' Little message to indicate the state of a message
|
||||
//~ Context %1 is someone, %2 is a date/time. The state is that the message has been sent but not received.
|
||||
return qsTr('deliveryDelivered')
|
||||
else if(state == LinphoneEnums.ChatMessageStateDeliveredToUser)
|
||||
return i18n[1]
|
||||
//: 'Retrieved by %1 - %2' Little message to indicate the state of a message
|
||||
//~ Context %1 is someone, %2 is a date/time. The state is that the message has been retrieved
|
||||
return qsTr('deliveryDeliveredToUser')
|
||||
else if(state == LinphoneEnums.ChatMessageStateDisplayed)
|
||||
return i18n[2]
|
||||
//: 'Read by %1 - %2' Little message to indicate the state of a message
|
||||
//~ Context %1 is someone, %2 is a date/time. The state that the message has been read.
|
||||
return qsTr('deliveryDisplayed')
|
||||
else if(state == LinphoneEnums.ChatMessageStateNotDelivered)
|
||||
return i18n[3]
|
||||
//: "%1 have nothing received" Little message to indicate the state of a message
|
||||
//~ Context %1 is someone. The state is that the message hasn't been delivered.
|
||||
return qsTr('deliveryNotDelivered')
|
||||
else return ''
|
||||
}
|
||||
delegate:Text{
|
||||
|
|
|
|||
|
|
@ -90,8 +90,13 @@ Rectangle {
|
|||
Layout.leftMargin: TimelineStyle.legend.leftMargin
|
||||
color: TimelineStyle.legend.color
|
||||
font.pointSize: TimelineStyle.legend.pointSize
|
||||
//height: parent.height
|
||||
text: 'Filter : ' +(timeline.model.filterFlags == 0 || timeline.model.filterFlags == TimelineProxyModel.AllChatRooms?'All' : 'Custom')
|
||||
//: A title for filtering mode.
|
||||
text: qsTr('timelineFilter')+' : '
|
||||
+(timeline.model.filterFlags == 0 || timeline.model.filterFlags == TimelineProxyModel.AllChatRooms
|
||||
//: 'All' The mode for timelines filtering.
|
||||
? qsTr('timelineFilterAll')
|
||||
//: 'Custom' The mode for timelines filtering.
|
||||
: qsTr('timelineFilterCustom'))
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
|
|
@ -146,31 +151,41 @@ Rectangle {
|
|||
}
|
||||
CheckBoxText {
|
||||
id:simpleFilter
|
||||
text:'Simple rooms'
|
||||
//: 'Simple rooms' : Filter item
|
||||
//~ Mode Selecting it will show all simple romms
|
||||
text:qsTr('timelineFilterSimpleRooms')
|
||||
property var value : (checked?TimelineProxyModel.SimpleChatRoom:0)
|
||||
onValueChanged: timeline.model.filterFlags = filterChoices.getFilterFlags()
|
||||
}
|
||||
CheckBoxText {
|
||||
id:secureFilter
|
||||
text:'Secure rooms'
|
||||
//: 'Secure rooms' : Filter item
|
||||
//~ Mode Selecting it will show all secure rooms
|
||||
text:qsTr('timelineFilterSecureRooms')
|
||||
property var value : (checked?TimelineProxyModel.SecureChatRoom:0)
|
||||
onValueChanged: timeline.model.filterFlags = filterChoices.getFilterFlags()
|
||||
}
|
||||
CheckBoxText {
|
||||
id:groupFilter
|
||||
text:'Chat groups'
|
||||
//: 'Chat groups' : Filter item
|
||||
//~ Mode Selecting it will show all chat groups (with more than one participant)
|
||||
text:qsTr('timelineFilterChatGroups')
|
||||
property var value : (checked?TimelineProxyModel.GroupChatRoom:0)
|
||||
onValueChanged: timeline.model.filterFlags = filterChoices.getFilterFlags()
|
||||
}
|
||||
CheckBoxText {
|
||||
id:secureGroupFilter
|
||||
text:'Secure Chat Groups'
|
||||
//: 'Secure Chat Groups' : Filter item
|
||||
//~ Mode Selecting it will show all secure chat groups (with more than one participant)
|
||||
text:qsTr('timelineFilterSecureChatGroups')
|
||||
property var value : (checked?TimelineProxyModel.SecureGroupChatRoom:0)
|
||||
onValueChanged: timeline.model.filterFlags = filterChoices.getFilterFlags()
|
||||
}
|
||||
CheckBoxText {
|
||||
id:ephemeralsFilter
|
||||
text:'Ephemerals'
|
||||
//: 'Ephemerals' : Filter item
|
||||
//~ Mode Selecting it will show all chat rooms where the ephemeral mode has been enabled.
|
||||
text:qsTr('timelineFilterEphemerals')
|
||||
property var value : (checked?TimelineProxyModel.EphemeralChatRoom:0)
|
||||
onValueChanged: timeline.model.filterFlags = filterChoices.getFilterFlags()
|
||||
}
|
||||
|
|
@ -190,19 +205,20 @@ Rectangle {
|
|||
visible:false
|
||||
//color: ContactsStyle.bar.backgroundColor
|
||||
onVisibleChanged: timeline.model.filterText = (visible?searchBar.text : '')
|
||||
|
||||
TextField {
|
||||
id:searchBar
|
||||
anchors {
|
||||
|
||||
TextField {
|
||||
id:searchBar
|
||||
anchors {
|
||||
fill: parent
|
||||
margins: 7
|
||||
}
|
||||
}
|
||||
Layout.fillWidth: true
|
||||
icon: 'search'
|
||||
placeholderText: 'Search in the list'
|
||||
//: 'Search in the list' : ths is a placeholder when searching something in the timeline list
|
||||
placeholderText: qsTr('timelineSearchPlaceholderText')
|
||||
|
||||
onTextChanged: timeline.model.filterText = text
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// -------------------------------------------------------------------------
|
||||
|
|
@ -213,9 +229,6 @@ Rectangle {
|
|||
id: view
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
//anchors.left:parent.left
|
||||
//anchors.right:parent.right
|
||||
//anchors.bottom:parent.bottom
|
||||
currentIndex: -1
|
||||
|
||||
delegate: Item {
|
||||
|
|
@ -234,8 +247,6 @@ Rectangle {
|
|||
: TimelineStyle.contact.backgroundColor.b
|
||||
)
|
||||
displayUnreadMessageCount: SettingsModel.chatEnabled
|
||||
//entry: $timelineEntry
|
||||
//entry: SipAddressesModel.getSipAddressObserver(modelData.fullPeerAddress, modelData.fullLocalAddress)
|
||||
entry: modelData.chatRoomModel
|
||||
sipAddressColor: isSelected
|
||||
? TimelineStyle.contact.sipAddress.color.selected
|
||||
|
|
@ -271,7 +282,6 @@ Rectangle {
|
|||
//timeline.model.unselectAll()
|
||||
modelData.selected = true
|
||||
view.currentIndex = index;
|
||||
//timeline.entrySelected($timelineEntry.sipAddress, $timelineEntry.isSecure)
|
||||
}
|
||||
}
|
||||
Connections{
|
||||
|
|
@ -282,7 +292,6 @@ Rectangle {
|
|||
}
|
||||
}
|
||||
}
|
||||
// onCountChanged: Logic.handleCountChanged(count)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -229,7 +229,9 @@ ScrollableListView {
|
|||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
showContactAddress: sipAddressesView.showContactAddress
|
||||
statusText : showAdminStatus && modelData.adminStatus ? '(Admin)' : ''
|
||||
//: '(Admin)' : One word for Admin(istrator)
|
||||
//~ Context Little Header in one word for a column in participant
|
||||
statusText : showAdminStatus && modelData.adminStatus ? qsTr('participantsAdminHeader') : ''
|
||||
|
||||
entry: modelData
|
||||
|
||||
|
|
|
|||
|
|
@ -197,24 +197,6 @@ ColumnLayout {
|
|||
CallsListModel.launchAudioCall,
|
||||
function (sipAddress) {CallsListModel.launchChat( sipAddress,0 )},
|
||||
function (sipAddress) {CallsListModel.launchChat( sipAddress,1 )}
|
||||
/*
|
||||
function (sipAddress) {
|
||||
CallsListModel.launchSecureChat(sipAddress)
|
||||
window.setView('Conversation', {
|
||||
chatRoomModel: CallsListModel.createSecureChat("", sipAddress),
|
||||
//peerAddress: sipAddress,
|
||||
//localAddress: AccountSettingsModel.sipAddress,
|
||||
//fullPeerAddress: sipAddress,
|
||||
//fullLocalAddress: AccountSettingsModel.fullSipAddress,
|
||||
isSecure:1
|
||||
})
|
||||
|
||||
//Logic.manageAccounts()
|
||||
window.attachVirtualWindow(Qt.resolvedUrl('Dialogs/ManageChatRoom.qml'), {
|
||||
//window.setView('Dialogs/ManageChatRoom', {
|
||||
participantAddress: sipAddress
|
||||
})
|
||||
}*/
|
||||
]
|
||||
|
||||
model: handlers
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ ColumnLayout {
|
|||
|
||||
//username: Logic.getUsername()
|
||||
username: chatRoomModel?chatRoomModel.username:Logic.getUsername()
|
||||
visible: !groupChat.visible
|
||||
visible: !groupChat.visible
|
||||
}
|
||||
|
||||
Icon {
|
||||
|
|
@ -107,7 +107,9 @@ ColumnLayout {
|
|||
}
|
||||
Text{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text:'Admin'
|
||||
//: 'Admin' : Admin(istrator)
|
||||
//~ Context One word title for describing the current admin status
|
||||
text: qsTr('adminStatus')
|
||||
color:"#9FA6AB"
|
||||
font.pointSize: Units.dp * 8
|
||||
}
|
||||
|
|
@ -248,7 +250,8 @@ ColumnLayout {
|
|||
y:mainBar.height
|
||||
menuStyle : MenuStyle.aux2
|
||||
MenuItem{
|
||||
text:'Groupe informations'
|
||||
//: 'Group informations' : Item menu to get information about the chat room
|
||||
text: qsTr('conversationMenuGroupInformations')
|
||||
iconMenu: (hovered ? 'menu_infos_selected' : 'menu_infos')
|
||||
iconSizeMenu: 25
|
||||
menuItemStyle : MenuItemStyle.aux2
|
||||
|
|
@ -264,7 +267,8 @@ ColumnLayout {
|
|||
color:Colors.u.color
|
||||
}
|
||||
MenuItem{
|
||||
text:"Conversation's devices"
|
||||
//: "Conversation's devices" : Item menu to get all participant devices of the chat room
|
||||
text: qsTr('conversationMenuDevices')
|
||||
iconMenu: (hovered ? 'menu_devices_selected' : 'menu_devices' )
|
||||
iconSizeMenu: 25
|
||||
menuItemStyle : MenuItemStyle.aux2
|
||||
|
|
@ -280,7 +284,8 @@ ColumnLayout {
|
|||
color:Colors.u.color
|
||||
}
|
||||
MenuItem{
|
||||
text:'Ephemeral messages'
|
||||
//: 'Ephemeral messages' : Item menu to enable ephemeral mode
|
||||
text: qsTr('conversationMenuEphemeral')
|
||||
iconMenu: (hovered ? 'menu_ephemeral_selected' : 'menu_ephemeral')
|
||||
iconSizeMenu: 25
|
||||
menuItemStyle : MenuItemStyle.aux2
|
||||
|
|
|
|||
|
|
@ -17,17 +17,18 @@ DialogPlus {
|
|||
id:dialog
|
||||
buttons: [
|
||||
TextButtonA {
|
||||
text: 'CANCEL'
|
||||
|
||||
//: 'cancel' : button text for cancelling operation
|
||||
text: qsTr('cancelButton')
|
||||
capitalization: Font.AllUppercase
|
||||
onClicked:{
|
||||
exit(0)
|
||||
}
|
||||
},
|
||||
TextButtonB {
|
||||
text: 'START'
|
||||
//: 'start' : button text to start ephemeral mode
|
||||
text: qsTr('startButton')
|
||||
|
||||
onClicked: {
|
||||
console.log("Timer selected : " +dialog.timer)
|
||||
if(dialog.timer=== 0)
|
||||
chatRoomModel.ephemeralEnabled = false
|
||||
else {
|
||||
|
|
@ -39,8 +40,8 @@ DialogPlus {
|
|||
}
|
||||
]
|
||||
flat : true
|
||||
|
||||
title: "Ephemeral messages"
|
||||
//: "Ephemeral messages" : Popup title for ephemerals
|
||||
title: qsTr('ephemeralTitle')
|
||||
showCloseCross:false
|
||||
|
||||
property ChatRoomModel chatRoomModel
|
||||
|
|
@ -74,8 +75,12 @@ DialogPlus {
|
|||
|
||||
maximumLineCount: 4
|
||||
wrapMode: Text.Wrap
|
||||
text: 'New messages will be deleted on both ends once it has been read by your contact. Select a timeout.'
|
||||
+(!chatRoomModel.canBeEphemeral?'\nEphemeral message is only supported in conference based chat room!':'')
|
||||
//: 'New messages will be deleted on both ends once it has been read by your contact. Select a timeout.'
|
||||
//~ Context Explanation for ephemerals
|
||||
text: qsTr('ephemeralText')
|
||||
//: '\nEphemeral message is only supported in conference based chat room!'
|
||||
//~ Context Warning about not being in conference based chat room.
|
||||
+(!chatRoomModel.canBeEphemeral?'\n'+qsTr('ephemeralNotInConference!'):'')
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.pointSize: Units.dp * 11
|
||||
|
|
@ -100,22 +105,40 @@ DialogPlus {
|
|||
return 4;
|
||||
else if( chatRoomModel.ephemeralLifetime <= 604800 )
|
||||
return 5;
|
||||
model:ListModel{
|
||||
ListElement{ text:'Disabled'
|
||||
value:0}
|
||||
ListElement{ text:'1 minute'
|
||||
value:60}
|
||||
ListElement{ text:'1 heure'
|
||||
value:3600}
|
||||
ListElement{ text:'1 jour'
|
||||
value:86400}
|
||||
ListElement{ text:'3 jours'
|
||||
value:259200}
|
||||
ListElement{ text:'1 semaine'
|
||||
value:604800}
|
||||
}
|
||||
else
|
||||
return 5;
|
||||
/*
|
||||
property var fields : [
|
||||
//: 'Disabled'
|
||||
qsTr('disabled'),
|
||||
//: '%1 minute'
|
||||
qsTr('nMinute', '', 1).arg(1),
|
||||
//: '%1 hour'
|
||||
qsTr('nHour', '', 1).arg(1),
|
||||
//: '%1 day'
|
||||
qsTr('nDay', '', 1).arg(1),
|
||||
//: '%1 days'
|
||||
qsTr('nDay', '', 3).arg(3),
|
||||
//: '%1 week'
|
||||
qsTr('nWeek', '', 1).arg(1)
|
||||
]
|
||||
*/
|
||||
model:[
|
||||
//: 'Disabled'
|
||||
{text:qsTr('disabled'), value:0},
|
||||
//: '%1 minute'
|
||||
{ text:qsTr('nMinute', '', 1).arg(1), value:60},
|
||||
//: '%1 hour'
|
||||
{ text:qsTr('nHour', '', 1).arg(1), value:3600},
|
||||
//: '%1 day'
|
||||
{ text:qsTr('nDay', '', 1).arg(1), value:86400},
|
||||
//: '%1 days'
|
||||
{ text:qsTr('nDay', '', 3).arg(3), value:259200},
|
||||
//: '%1 week'
|
||||
{ text:qsTr('nWeek', '', 1).arg(1), value:604800}
|
||||
]
|
||||
|
||||
onActivated: dialog.timer = model.get(index).value
|
||||
onActivated: dialog.timer = model[index].value
|
||||
visible: chatRoomModel.canBeEphemeral
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@ DialogPlus {
|
|||
id:dialog
|
||||
buttons: [
|
||||
TextButtonA {
|
||||
text: 'QUITTER LE GROUPE'
|
||||
//: 'Exit group' : Button label
|
||||
text: qsTr('quitGroupButton')
|
||||
capitalization: Font.AllUppercase
|
||||
textButtonStyle: InfoChatRoomStyle.leaveButton
|
||||
showBorder: true
|
||||
onClicked:{
|
||||
|
|
@ -29,7 +31,9 @@ DialogPlus {
|
|||
Layout.fillWidth: true
|
||||
},
|
||||
TextButtonB {
|
||||
text: 'OK'
|
||||
//: 'OK' : Button label
|
||||
text: qsTr('ok')
|
||||
capitalization: Font.AllUppercase
|
||||
|
||||
onClicked: {
|
||||
if(!chatRoomModel.hasBeenLeft)
|
||||
|
|
@ -40,7 +44,8 @@ DialogPlus {
|
|||
]
|
||||
flat : true
|
||||
showCloseCross: true
|
||||
|
||||
//: "Group information" : Popup title.
|
||||
//~ This popup display data about the current chat room
|
||||
title: "Group information"
|
||||
|
||||
property ChatRoomModel chatRoomModel
|
||||
|
|
@ -73,8 +78,11 @@ DialogPlus {
|
|||
visible: dialog.adminMode && chatRoomModel.canHandleParticipants
|
||||
|
||||
maxMenuHeight: MainWindowStyle.searchBox.maxHeight
|
||||
placeholderText: 'Ajouter des participants'
|
||||
tooltipText: "Rechercher des participants dans votre liste de contact pour les inviter dans le groupe. L'ajout est effectif une fois le formulaire validé."
|
||||
//: 'Add Participants' : Placeholder in a search bar for adding participant to the chat room
|
||||
placeholderText: qsTr('addParticipantPlaceholder')
|
||||
//: 'Search participants in your contact list in order to invite them into the chat room.'
|
||||
//~ Tooltip Explanation for inviting the selected participants into chat room
|
||||
tooltipText: qsTr('addParticipantTooltip')
|
||||
actions:[{
|
||||
icon: 'add_participant',
|
||||
secure:0,
|
||||
|
|
@ -104,7 +112,8 @@ DialogPlus {
|
|||
Text{
|
||||
Layout.topMargin: InfoChatRoomStyle.results.title.topMargin
|
||||
Layout.leftMargin: InfoChatRoomStyle.results.title.leftMargin
|
||||
text:'Liste des participants'
|
||||
//: 'Participant list'
|
||||
text:qsTr('participantList')
|
||||
color: InfoChatRoomStyle.results.title.color
|
||||
font.pointSize:InfoChatRoomStyle.results.title.pointSize
|
||||
font.weight: InfoChatRoomStyle.results.title.weight
|
||||
|
|
@ -114,7 +123,9 @@ DialogPlus {
|
|||
Layout.rightMargin: InfoChatRoomStyle.results.header.rightMargin
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
|
||||
//Layout.topMargin: InfoChatRoomStyle.results.topMargin
|
||||
text : 'Admin'
|
||||
//: 'Admin' : Admin(istrator)
|
||||
//~ one word for admin status
|
||||
text : qsTr('adminStatus')
|
||||
|
||||
color: InfoChatRoomStyle.results.header.color
|
||||
font.pointSize: InfoChatRoomStyle.results.header.pointSize
|
||||
|
|
|
|||
|
|
@ -17,14 +17,19 @@ DialogPlus {
|
|||
id:dialog
|
||||
buttons: [
|
||||
TextButtonA {
|
||||
text: 'CANCEL'
|
||||
//visible: addressToCall != ''
|
||||
//: 'CANCEL' : button text for cancelling operation
|
||||
text: qsTr('cancelButton')
|
||||
capitalization: Font.AllUppercase
|
||||
onClicked:{
|
||||
exit(0)
|
||||
}
|
||||
},
|
||||
TextButtonB {
|
||||
text: (addressToCall != '' ? 'CALL' : 'OK')
|
||||
//: 'CALL' : Button that lead to a call
|
||||
text: (addressToCall != '' ? qsTr('callButton')
|
||||
//: 'OK' : Button that validate the popup to be redirected to the device list
|
||||
: qsTr('okButton')
|
||||
)
|
||||
textButtonStyle: InfoEncryptionStyle.okButton
|
||||
onClicked: {
|
||||
if(addressToCall != ''){
|
||||
|
|
@ -35,8 +40,8 @@ DialogPlus {
|
|||
}
|
||||
]
|
||||
flat : true
|
||||
|
||||
title: "End-to-end encrypted"
|
||||
//: 'End-to-end encrypted' Popup title about encryption information.
|
||||
title: qsTr('infoEncryptionTitle')
|
||||
showCloseCross:false
|
||||
|
||||
property int securityLevel
|
||||
|
|
@ -76,11 +81,12 @@ DialogPlus {
|
|||
color: Colors.d.color
|
||||
|
||||
wrapMode: Text.Wrap
|
||||
|
||||
text: "Instant messages are end-to-end encrypted in secured conversations. It is possible to upgrade the security level of a conversation by authentificating participants."
|
||||
//: "Instant messages are end-to-end encrypted in secured conversations. It is possible to upgrade the security level of a conversation by authentificating participants."
|
||||
//~ Context Explanation of Encryption
|
||||
text: qsTr('encryptionExplanation')
|
||||
}
|
||||
Text{
|
||||
Layout.fillWidth: true
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.leftMargin: 10
|
||||
Layout.rightMargin: 10
|
||||
|
|
@ -91,7 +97,9 @@ DialogPlus {
|
|||
color: Colors.d.color
|
||||
|
||||
wrapMode: Text.Wrap
|
||||
text :"To do so, call the contact and follow the authentification process."
|
||||
//: "To do so, call the contact and follow the authentification process."
|
||||
//~ Context Explanation process
|
||||
text: qsTr('encryptionProcessExplanation')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,142 +0,0 @@
|
|||
import QtQuick 2.7
|
||||
|
||||
import Common 1.0
|
||||
import Linphone 1.0
|
||||
import Utils 1.0
|
||||
|
||||
import App.Styles 1.0
|
||||
|
||||
|
||||
// =============================================================================
|
||||
|
||||
DialogPlus {
|
||||
property ChatRoomModel chatRoomModel
|
||||
property var participantAddress : (chatRoomModel?chatRoomModel.getParticipants(): null)
|
||||
|
||||
buttons: [
|
||||
TextButtonA {
|
||||
text: 'cancel'
|
||||
|
||||
onClicked: exit(0)
|
||||
},
|
||||
TextButtonB {
|
||||
text: 'del'
|
||||
visible:chatRoomModel
|
||||
|
||||
onClicked: {
|
||||
if(chatRoomModel){
|
||||
chatRoomModel.leaveChatRoom()
|
||||
exit(0)
|
||||
}
|
||||
}
|
||||
},
|
||||
TextButtonB {
|
||||
text: 'ok'
|
||||
|
||||
onClicked: {
|
||||
if(chatRoomModel && CallsListModel.createSecureChat(subject.text, participantAddress))
|
||||
exit(0)
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
buttonsAlignment: Qt.AlignCenter
|
||||
|
||||
height: ManageAccountsStyle.height + 30
|
||||
width: ManageAccountsStyle.width
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Form {
|
||||
anchors.fill: parent
|
||||
orientation: Qt.Vertical
|
||||
|
||||
FormLine {
|
||||
|
||||
FormGroup {
|
||||
label: 'Details'
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: 'Subject*'
|
||||
TextField {
|
||||
id:subject
|
||||
placeholderText :"Subject"
|
||||
text:(chatRoomModel?chatRoomModel.getSubject():'')
|
||||
Keys.onReturnPressed: nextItemInFocusChain().forceActiveFocus()
|
||||
error : text == ''
|
||||
TooltipArea{
|
||||
text : 'Current subject of the ChatRoom. It cannot be empty'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: 'Participants : '+participantAddress
|
||||
/*
|
||||
ScrollableListViewField {
|
||||
width: parent.width
|
||||
height: ManageAccountsStyle.accountSelector.height
|
||||
|
||||
radius: 0
|
||||
|
||||
ScrollableListView {
|
||||
id: view
|
||||
|
||||
property string textRole: 'fullSipAddress' // Used by delegate.
|
||||
|
||||
anchors.fill: parent
|
||||
model: AccountSettingsModel.accounts
|
||||
|
||||
onModelChanged: currentIndex = Utils.findIndex(AccountSettingsModel.accounts, function (account) {
|
||||
return account.sipAddress === AccountSettingsModel.sipAddress
|
||||
})
|
||||
|
||||
delegate: CommonItemDelegate {
|
||||
id: item
|
||||
container: view
|
||||
flattenedModel: modelData
|
||||
itemIcon: ''//Start with no error and let some time before getting status with the below timer
|
||||
width: parent.width
|
||||
|
||||
Timer{// This timer is used to synchronize registration state by proxy, without having to deal with change signals
|
||||
interval: 1000; running: item.visible; repeat: true
|
||||
onTriggered:itemIcon= Logic.getItemIcon(flattenedModel)
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
icon: 'options'
|
||||
iconSize: 30
|
||||
anchors.fill: parent
|
||||
visible:false
|
||||
//TODO handle click and jump to proxy config settings
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
container.currentIndex = index
|
||||
if(flattenedModel.proxyConfig)
|
||||
AccountSettingsModel.setDefaultProxyConfig(flattenedModel.proxyConfig)
|
||||
else
|
||||
AccountSettingsModel.setDefaultProxyConfig()
|
||||
}
|
||||
|
||||
MessageCounter {
|
||||
anchors.fill: parent
|
||||
count: flattenedModel.unreadMessageCount+flattenedModel.missedCallCount
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -22,13 +22,17 @@ DialogPlus {
|
|||
|
||||
buttons: [
|
||||
TextButtonA {
|
||||
text: 'CANCEL'
|
||||
//: 'Cancel' : Cancel button
|
||||
text: qsTr('cancelButton')
|
||||
capitalization: Font.AllUppercase
|
||||
|
||||
onClicked: exit(0)
|
||||
},
|
||||
TextButtonB {
|
||||
//enabled: toAddView.count >= conferenceManager.minParticipants
|
||||
text: 'LANCER'
|
||||
//: 'Launch' : Start button
|
||||
text: qsTr('startButton')
|
||||
capitalization: Font.AllUppercase
|
||||
|
||||
onClicked: {
|
||||
if(CallsListModel.createChatRoom(subject.text, secureSwitch.checked, selectedParticipants.getParticipants() ))
|
||||
|
|
@ -38,7 +42,8 @@ DialogPlus {
|
|||
]
|
||||
|
||||
buttonsAlignment: Qt.AlignRight
|
||||
title:'Lancer un chat de groupe'
|
||||
//: 'Start a chat room' : Title of a popup about creation of a chat room
|
||||
title:qsTr('newChatRoomTitle')
|
||||
|
||||
height: 500
|
||||
width: 800
|
||||
|
|
@ -70,7 +75,8 @@ DialogPlus {
|
|||
spacing:4
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
text:'Would you like to encrypt your chat?'
|
||||
//: 'Would you like to encrypt your chat?' : Ask about setting the chat room as secured.
|
||||
text:qsTr('askEncryption')
|
||||
color: Colors.g.color
|
||||
font.pointSize: Units.dp * 11
|
||||
font.weight: Font.DemiBold
|
||||
|
|
@ -94,7 +100,6 @@ DialogPlus {
|
|||
anchors.leftMargin : 5
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width:50
|
||||
//Layout.preferredWidth: 50
|
||||
enabled:true
|
||||
onClicked: checked = !checked
|
||||
indicatorStyle: SwitchStyle.aux
|
||||
|
|
@ -121,7 +126,8 @@ DialogPlus {
|
|||
spacing:10
|
||||
Text{
|
||||
textFormat: Text.RichText
|
||||
text :'Nom du groupe' +'<span style="color:red">*</span>'
|
||||
//: 'Subject' : Label of a text field about the subject of the chat room
|
||||
text :qsTr('subjectLabel') +'<span style="color:red">*</span>'
|
||||
color: Colors.g.color
|
||||
font.pointSize: Units.dp * 11
|
||||
font.weight: Font.DemiBold
|
||||
|
|
@ -130,12 +136,14 @@ DialogPlus {
|
|||
id:subject
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: 15
|
||||
placeholderText :"Nommer le groupe"
|
||||
//: 'Give a subject' : Placeholder in a form about setting a subject
|
||||
placeholderText :'Give a subject'
|
||||
text:(chatRoomModel?chatRoomModel.getSubject():'')
|
||||
Keys.onReturnPressed: nextItemInFocusChain().forceActiveFocus()
|
||||
//error : text == ''
|
||||
TooltipArea{
|
||||
text : 'Current subject of the ChatRoom. It cannot be empty'
|
||||
//: 'Current subject of the Chat Room. It cannot be empty'
|
||||
//~ Tooltip Explanation about the subject of the chat room
|
||||
text : qsTr('subjectTooltip')
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -146,10 +154,10 @@ DialogPlus {
|
|||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
//Layout.preferredHeight: 200
|
||||
spacing:20
|
||||
Text{
|
||||
text :'Contacts récents'
|
||||
//: 'Last contacts' : Header for showing last contacts
|
||||
text :'Last contacts'
|
||||
color: Colors.g.color
|
||||
font.pointSize: Units.dp * 11
|
||||
font.weight: Font.DemiBold
|
||||
|
|
@ -163,7 +171,6 @@ DialogPlus {
|
|||
id:lastContacts
|
||||
property int reloadCount : 0
|
||||
model:TimelineListModel.getLastChatRooms(5)
|
||||
//[{username:'Danyl Robertson'}, {username:'Toto harrytop'}]
|
||||
delegate :
|
||||
Item{
|
||||
Layout.fillHeight: true
|
||||
|
|
@ -184,25 +191,11 @@ DialogPlus {
|
|||
anchors.topMargin: -5
|
||||
visible: UtilsCpp.hasCapability(modelData.sipAddress, LinphoneEnums.FriendCapabilityLimeX3Dh)
|
||||
icon: 'secure_on'
|
||||
iconSize:20/*
|
||||
Rectangle{
|
||||
id:secureMask
|
||||
anchors.fill:parent
|
||||
color:'white'
|
||||
opacity: 0.5
|
||||
visible: smartSearchBar.isIgnored(modelData.sipAddress)
|
||||
Connections{// Workaround for refreshing data on events
|
||||
target:lastContacts
|
||||
onReloadCountChanged: {
|
||||
secureMask.visible=smartSearchBar.isIgnored(modelData.sipAddress)
|
||||
}
|
||||
}
|
||||
}*/
|
||||
iconSize:20
|
||||
}
|
||||
}
|
||||
Text{
|
||||
Layout.fillHeight: true
|
||||
//Layout.maximumHeight: 100
|
||||
Layout.preferredWidth: 60
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignTop
|
||||
maximumLineCount: 5
|
||||
|
|
@ -252,48 +245,6 @@ DialogPlus {
|
|||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
ScrollableListViewField {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
readOnly: toAddView.count >= conferenceManager.maxParticipants
|
||||
|
||||
SipAddressesView {
|
||||
anchors.fill: parent
|
||||
|
||||
actions: [{
|
||||
icon: 'transfer',
|
||||
handler: function (entry) {
|
||||
conferenceHelperModel.toAdd.addToConference(entry.sipAddress)
|
||||
}
|
||||
}]
|
||||
|
||||
genSipAddress: filter.text
|
||||
|
||||
model: ConferenceHelperModel {
|
||||
id: conferenceHelperModel
|
||||
}
|
||||
|
||||
onEntryClicked: actions[0].handler(entry)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
// -------------------------------------------------------------------------
|
||||
// Separator.
|
||||
// -------------------------------------------------------------------------
|
||||
/*
|
||||
Rectangle {
|
||||
Layout.fillHeight: true
|
||||
Layout.leftMargin: ConferenceManagerStyle.columns.separator.leftMargin
|
||||
Layout.preferredWidth: ConferenceManagerStyle.columns.separator.width
|
||||
Layout.rightMargin: ConferenceManagerStyle.columns.separator.rightMargin
|
||||
|
||||
color: ConferenceManagerStyle.columns.separator.color
|
||||
}
|
||||
*/
|
||||
// -------------------------------------------------------------------------
|
||||
// See and remove selected addresses.
|
||||
// -------------------------------------------------------------------------
|
||||
|
|
@ -324,8 +275,10 @@ DialogPlus {
|
|||
showHeader:false
|
||||
|
||||
maxMenuHeight: MainWindowStyle.searchBox.maxHeight
|
||||
placeholderText: 'toto'
|
||||
tooltipText: 'tooltip'
|
||||
//: 'Select participants' : Placeholder for a search on participant to add them in selection.
|
||||
placeholderText: qsTr('participantSelectionPlaceholder')
|
||||
//: 'Search in your contacts or add a custom one to the chat room.'
|
||||
tooltipText: qsTr('participantSelectionTooltip')
|
||||
actions:[{
|
||||
icon: 'add_participant',
|
||||
secure:0,
|
||||
|
|
@ -340,28 +293,16 @@ DialogPlus {
|
|||
selectedParticipants.add(entry)
|
||||
smartSearchBar.addAddressToIgnore(entry);
|
||||
++lastContacts.reloadCount
|
||||
//selectedParticipants.append({$sipAddress:entry})
|
||||
}
|
||||
//resultExceptions: selectedParticipants
|
||||
}
|
||||
|
||||
/*
|
||||
TextField {
|
||||
id: filter
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
icon: 'search'
|
||||
|
||||
onTextChanged: conferenceHelperModel.setFilter(text)
|
||||
}
|
||||
*/
|
||||
Text{
|
||||
Layout.preferredHeight: 20
|
||||
Layout.rightMargin: 65
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
|
||||
Layout.topMargin: ConferenceManagerStyle.columns.selector.spacing
|
||||
text : 'Admin'
|
||||
//: 'Admin' : Admin(istrator)
|
||||
//~ one word for admin status
|
||||
text : qsTr('adminStatus')
|
||||
|
||||
color: Colors.g.color
|
||||
font.pointSize: Units.dp * 11
|
||||
|
|
@ -390,7 +331,9 @@ DialogPlus {
|
|||
|
||||
actions: [{
|
||||
icon: 'remove_participant',
|
||||
tooltipText: 'Remove this participant from the selection',
|
||||
//: 'Remove this participant from the selection' : Explanation abo^ut removing participant from a selection
|
||||
//~ Tooltip This is a tooltip
|
||||
tooltipText: qsTr('removeParticipantSelection'),
|
||||
handler: function (entry) {
|
||||
smartSearchBar.removeAddressToIgnore(entry.sipAddress)
|
||||
selectedParticipants.remove(entry)
|
||||
|
|
@ -405,81 +348,19 @@ DialogPlus {
|
|||
chatRoomModel:null
|
||||
|
||||
}
|
||||
|
||||
onEntryClicked: actions[0].handler(entry)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
SearchBox{
|
||||
id: searchBox
|
||||
anchors.left:parent.left
|
||||
anchors.right:parent.right
|
||||
anchors.top:parent.top
|
||||
anchors.topMargin: 30
|
||||
anchors.leftMargin:15
|
||||
anchors.rightMargin: 15
|
||||
|
||||
placeholderText:'Search contact or enter SIP address'
|
||||
|
||||
entryHeight: 200
|
||||
SipAddressesView {
|
||||
id: view
|
||||
actions: [{
|
||||
icon: 'add',
|
||||
secure:0,
|
||||
handler: function (entry) {
|
||||
//searchBox.closeMenu()
|
||||
//searchBox.launchVideoCall(entry.sipAddress)
|
||||
},
|
||||
visible: true
|
||||
}]
|
||||
genSipAddress: searchBox.filter
|
||||
|
||||
model: SearchSipAddressesModel {}
|
||||
}
|
||||
|
||||
}
|
||||
ScrollableListViewField {
|
||||
anchors.top:search.bottom
|
||||
anchors.bottom:parent.bottom
|
||||
anchors.left:parent.left
|
||||
anchors.right:parent.right
|
||||
anchors.leftMargin:15
|
||||
anchors.rightMargin: 15
|
||||
anchors.topMargin: 15
|
||||
|
||||
|
||||
SipAddressesView {
|
||||
id: toAddView
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
actions: [{
|
||||
icon: 'cancel',
|
||||
handler: function (entry) {
|
||||
//model.removeFromConference(entry.sipAddress)
|
||||
}
|
||||
}]
|
||||
|
||||
//model: conferenceHelperModel.toAdd
|
||||
|
||||
//onEntryClicked: actions[0].handler(entry)
|
||||
}
|
||||
}
|
||||
}*/
|
||||
Item{
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 20
|
||||
Text{
|
||||
anchors.fill:parent
|
||||
textFormat: Text.RichText
|
||||
text : '<span style="color:red">*</span> Obligatoire'
|
||||
//: 'Required' : Word relative to a star to explain that it is a requirement (Field form)
|
||||
text : '<span style="color:red">*</span> '+qsTr('requiredField')
|
||||
//font.weight: Font.DemiBold
|
||||
color: Colors.g.color
|
||||
font.pointSize: Units.dp * 8
|
||||
|
|
|
|||
|
|
@ -271,7 +271,10 @@ ApplicationWindow {
|
|||
name: qsTr('contactsEntry')
|
||||
visible: SettingsModel.contactsEnabled
|
||||
|
||||
onSelected: setView('Contacts')
|
||||
onSelected: {
|
||||
timeline.model.unselectAll()
|
||||
setView('Contacts')
|
||||
}
|
||||
Icon{
|
||||
anchors.right:parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ DialogPlus {
|
|||
Keys.onReturnPressed: nextItemInFocusChain().forceActiveFocus()
|
||||
TooltipArea{
|
||||
text : qsTr('displayNameTooltip')//'The display name of the server to be shown in the list'
|
||||
//tooltipParent: dialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -79,6 +80,7 @@ DialogPlus {
|
|||
error : ldapData.serverFieldError
|
||||
TooltipArea{
|
||||
text : qsTr('serverTooltip')//'LDAP Server. eg: ldap:/// for a localhost server or ldap://ldap.example.org/'
|
||||
//tooltipParent: dialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -96,6 +98,7 @@ DialogPlus {
|
|||
onTextChanged: ldapData.bindDn= text
|
||||
TooltipArea{
|
||||
text : qsTr('bindDNTooltip')//'The bind DN is the credential that is used to authenticate against an LDAP.\n eg: cn=ausername,ou=people,dc=bc,dc=com'
|
||||
//tooltipParent: dialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -162,6 +165,7 @@ DialogPlus {
|
|||
onActivated: ldapData.verifyServerCertificates = index-1
|
||||
TooltipArea{
|
||||
text : qsTr('verifyTLSTooltip')//'Specify whether the tls server certificate must be verified when connecting to a LDAP server.'
|
||||
//tooltipParent: dialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -187,6 +191,7 @@ DialogPlus {
|
|||
onTextChanged: ldapData.baseObject = text
|
||||
TooltipArea{
|
||||
text : qsTr('baseObjectTooltip')//'BaseObject is a specification for LDAP Search Scopes that specifies that the Search Request should only be performed against the entry specified as the search base DN.\n\nNo entries below it will be considered.'
|
||||
//tooltipParent: dialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -206,6 +211,7 @@ DialogPlus {
|
|||
placeholderText :"(sn=%s)"
|
||||
TooltipArea{
|
||||
text : qsTr('filterTooltip')//'The search is base on this filter to search friends. Default value : (sn=%s)'
|
||||
//tooltipParent: dialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -249,6 +255,7 @@ DialogPlus {
|
|||
// -----------------------------------------------------------------------
|
||||
|
||||
Form {
|
||||
id:parsingForm
|
||||
title: qsTr('parsingTitle')//'Parsing'
|
||||
width: parent.width
|
||||
|
||||
|
|
@ -263,6 +270,7 @@ DialogPlus {
|
|||
onTextChanged: ldapData.nameAttributes = text
|
||||
TooltipArea{
|
||||
text : qsTr('nameAttributesTooltip')//'Check these attributes To build Name Friend, separated by a comma and the first is the highest priority. The default value is: sn'
|
||||
tooltipParent: nameAttributes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -278,6 +286,7 @@ DialogPlus {
|
|||
onTextChanged: ldapData.sipAttributes = text
|
||||
TooltipArea{
|
||||
text : qsTr('sipAttributesTooltip')//'Check these attributes to build the SIP username in address of Friend. Attributes are separated by a comma and the first is the highest priority. The default value is: mobile,telephoneNumber,homePhone,sn'
|
||||
tooltipParent: sipAttributes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -293,6 +302,7 @@ DialogPlus {
|
|||
onTextChanged: ldapData.sipDomain = text
|
||||
TooltipArea{
|
||||
text : qsTr('domainTooltip')//'Add the domain to the sip address(username@domain). The default value is sip.linphone.org'
|
||||
//tooltipParent: dialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -279,13 +279,14 @@ TabContainer {
|
|||
id: pluginChoice
|
||||
model:ContactsImporterPluginsManager.getPlugins()
|
||||
textRole: "pluginTitle"
|
||||
displayText: currentIndex === -1 ? 'No Plugins to load' : currentText
|
||||
//: 'No Plugins to load' : Text in combobox
|
||||
displayText: currentIndex === -1 ? qsTr('noPlugin') : currentText
|
||||
Text{// Hack, combobox show empty text when empty
|
||||
anchors.fill:parent
|
||||
visible:pluginChoice.currentIndex===-1
|
||||
verticalAlignment: Qt.AlignVCenter
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
text: 'No Plugins to load'
|
||||
text: qsTr('noPlugin')
|
||||
font {
|
||||
bold:false
|
||||
italic: true
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue