diff --git a/linphone-app/assets/images/calendar_custom.svg b/linphone-app/assets/images/calendar_custom.svg
new file mode 100644
index 000000000..7edbc8f47
--- /dev/null
+++ b/linphone-app/assets/images/calendar_custom.svg
@@ -0,0 +1,69 @@
+
+
diff --git a/linphone-app/assets/languages/da.ts b/linphone-app/assets/languages/da.ts
index fcf3040a7..8daf71430 100644
--- a/linphone-app/assets/languages/da.ts
+++ b/linphone-app/assets/languages/da.ts
@@ -516,11 +516,37 @@ Server url ikke konfigureret.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
ChatDeliveries
@@ -4321,7 +4347,7 @@ Klik her: <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
@@ -4329,7 +4355,7 @@ Klik her: <a href="%1">%1</a>
formatMonths
- 'month'
+ '%1 month'
@@ -4337,7 +4363,7 @@ Klik her: <a href="%1">%1</a>
formatWeeks
- 'week'
+ '%1 week'
@@ -4345,7 +4371,7 @@ Klik her: <a href="%1">%1</a>
formatDays
- 'day'
+ '%1 day'
@@ -4353,7 +4379,7 @@ Klik her: <a href="%1">%1</a>
formatHours
- 'hour'
+ '%1 hour'
@@ -4361,7 +4387,7 @@ Klik her: <a href="%1">%1</a>
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4369,7 +4395,7 @@ Klik her: <a href="%1">%1</a>
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/de.ts b/linphone-app/assets/languages/de.ts
index 342a9242b..d9a1d0c61 100644
--- a/linphone-app/assets/languages/de.ts
+++ b/linphone-app/assets/languages/de.ts
@@ -516,11 +516,37 @@ Server URL ist nicht konfiguriert.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
ChatDeliveries
@@ -4321,7 +4347,7 @@ Klicken Sie hier: <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
@@ -4329,7 +4355,7 @@ Klicken Sie hier: <a href="%1">%1</a>
formatMonths
- 'month'
+ '%1 month'
@@ -4337,7 +4363,7 @@ Klicken Sie hier: <a href="%1">%1</a>
formatWeeks
- 'week'
+ '%1 week'
@@ -4345,7 +4371,7 @@ Klicken Sie hier: <a href="%1">%1</a>
formatDays
- 'day'
+ '%1 day'
@@ -4353,7 +4379,7 @@ Klicken Sie hier: <a href="%1">%1</a>
formatHours
- 'hour'
+ '%1 hour'
@@ -4361,7 +4387,7 @@ Klicken Sie hier: <a href="%1">%1</a>
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4369,7 +4395,7 @@ Klicken Sie hier: <a href="%1">%1</a>
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/en.ts b/linphone-app/assets/languages/en.ts
index 8fc8ad56a..277fc1dda 100644
--- a/linphone-app/assets/languages/en.ts
+++ b/linphone-app/assets/languages/en.ts
@@ -516,10 +516,36 @@ Server URL not configured.
'Join' : Action button to join the conference.
Join
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
- Duration
+ icsDescription
+ 'Description' : Title for the conference description.
+ Description
+
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+ Conference address
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+ Join
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+ Meeting invite
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+ %1 participant
+ %1 participants
+
@@ -4344,58 +4370,58 @@ Click here: <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
- year
- years
+ %1 year
+ %1 years
formatMonths
- 'month'
+ '%1 month'
- month
- months
+ %1 month
+ %1 months
formatWeeks
- 'week'
+ '%1 week'
- week
- weeks
+ %1 week
+ %1 weeks
formatDays
- 'day'
+ '%1 day'
- day
- days
+ %1 day
+ %1 days
formatHours
- 'hour'
+ '%1 hour'
- hour
- hours
+ %1 hour
+ %1 hours
formatMinutes
- 'minute'
+ '%1 minute'
- minute
- minutes
+ %1 minute
+ %1 minutes
formatSeconds
- 'second'
+ '%1 second'
- second
- seconds
+ %1 second
+ %1 seconds
diff --git a/linphone-app/assets/languages/es.ts b/linphone-app/assets/languages/es.ts
index 960c0c7d2..3b6e37899 100644
--- a/linphone-app/assets/languages/es.ts
+++ b/linphone-app/assets/languages/es.ts
@@ -516,11 +516,37 @@ URL del servidor no configurada.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
ChatDeliveries
@@ -4321,7 +4347,7 @@ Haga clic aquí: <a href="%1">%1 </a>
formatYears
- 'year'
+ '%1 year'
@@ -4329,7 +4355,7 @@ Haga clic aquí: <a href="%1">%1 </a>
formatMonths
- 'month'
+ '%1 month'
@@ -4337,7 +4363,7 @@ Haga clic aquí: <a href="%1">%1 </a>
formatWeeks
- 'week'
+ '%1 week'
@@ -4345,7 +4371,7 @@ Haga clic aquí: <a href="%1">%1 </a>
formatDays
- 'day'
+ '%1 day'
@@ -4353,7 +4379,7 @@ Haga clic aquí: <a href="%1">%1 </a>
formatHours
- 'hour'
+ '%1 hour'
@@ -4361,7 +4387,7 @@ Haga clic aquí: <a href="%1">%1 </a>
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4369,7 +4395,7 @@ Haga clic aquí: <a href="%1">%1 </a>
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/fr_FR.ts b/linphone-app/assets/languages/fr_FR.ts
index c9e9cb101..0cd16ef64 100644
--- a/linphone-app/assets/languages/fr_FR.ts
+++ b/linphone-app/assets/languages/fr_FR.ts
@@ -516,11 +516,37 @@ URL du serveur non configurée.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
ChatDeliveries
@@ -4321,7 +4347,7 @@ Cliquez ici : <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
@@ -4329,7 +4355,7 @@ Cliquez ici : <a href="%1">%1</a>
formatMonths
- 'month'
+ '%1 month'
@@ -4337,7 +4363,7 @@ Cliquez ici : <a href="%1">%1</a>
formatWeeks
- 'week'
+ '%1 week'
@@ -4345,7 +4371,7 @@ Cliquez ici : <a href="%1">%1</a>
formatDays
- 'day'
+ '%1 day'
@@ -4353,7 +4379,7 @@ Cliquez ici : <a href="%1">%1</a>
formatHours
- 'hour'
+ '%1 hour'
@@ -4361,7 +4387,7 @@ Cliquez ici : <a href="%1">%1</a>
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4369,7 +4395,7 @@ Cliquez ici : <a href="%1">%1</a>
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/hu.ts b/linphone-app/assets/languages/hu.ts
index 2b2754ee6..e8b4c76fe 100644
--- a/linphone-app/assets/languages/hu.ts
+++ b/linphone-app/assets/languages/hu.ts
@@ -515,11 +515,36 @@ A kiszolgáló URL-je nincs konfigurálva.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
ChatDeliveries
@@ -4309,49 +4334,49 @@ Kattintson ide: <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
formatMonths
- 'month'
+ '%1 month'
formatWeeks
- 'week'
+ '%1 week'
formatDays
- 'day'
+ '%1 day'
formatHours
- 'hour'
+ '%1 hour'
formatMinutes
- 'minute'
+ '%1 minute'
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/it.ts b/linphone-app/assets/languages/it.ts
index 9092d1e59..255f3d604 100644
--- a/linphone-app/assets/languages/it.ts
+++ b/linphone-app/assets/languages/it.ts
@@ -516,11 +516,37 @@ URL del server non configurato.
'Join' : Action button to join the conference.
Partecipa
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+ Descrizione
+
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+ Indirizzo conferenza
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+ Partecipa
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
ChatDeliveries
@@ -4321,7 +4347,7 @@ Clicca: <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
@@ -4329,7 +4355,7 @@ Clicca: <a href="%1">%1</a>
formatMonths
- 'month'
+ '%1 month'
@@ -4337,7 +4363,7 @@ Clicca: <a href="%1">%1</a>
formatWeeks
- 'week'
+ '%1 week'
@@ -4345,7 +4371,7 @@ Clicca: <a href="%1">%1</a>
formatDays
- 'day'
+ '%1 day'
@@ -4353,7 +4379,7 @@ Clicca: <a href="%1">%1</a>
formatHours
- 'hour'
+ '%1 hour'
@@ -4361,7 +4387,7 @@ Clicca: <a href="%1">%1</a>
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4369,7 +4395,7 @@ Clicca: <a href="%1">%1</a>
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/ja.ts b/linphone-app/assets/languages/ja.ts
index 7b2d843d5..a23119b7b 100644
--- a/linphone-app/assets/languages/ja.ts
+++ b/linphone-app/assets/languages/ja.ts
@@ -515,11 +515,36 @@
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
ChatDeliveries
@@ -4309,49 +4334,49 @@
formatYears
- 'year'
+ '%1 year'
formatMonths
- 'month'
+ '%1 month'
formatWeeks
- 'week'
+ '%1 week'
formatDays
- 'day'
+ '%1 day'
formatHours
- 'hour'
+ '%1 hour'
formatMinutes
- 'minute'
+ '%1 minute'
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/lt.ts b/linphone-app/assets/languages/lt.ts
index 9a5d70e84..4b6f90273 100644
--- a/linphone-app/assets/languages/lt.ts
+++ b/linphone-app/assets/languages/lt.ts
@@ -517,11 +517,38 @@ Nesukonfigūruotas serverio url.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
+
ChatDeliveries
@@ -4333,7 +4360,7 @@ Spustelėkite čia: <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
@@ -4342,7 +4369,7 @@ Spustelėkite čia: <a href="%1">%1</a>
formatMonths
- 'month'
+ '%1 month'
@@ -4351,7 +4378,7 @@ Spustelėkite čia: <a href="%1">%1</a>
formatWeeks
- 'week'
+ '%1 week'
@@ -4360,7 +4387,7 @@ Spustelėkite čia: <a href="%1">%1</a>
formatDays
- 'day'
+ '%1 day'
@@ -4369,7 +4396,7 @@ Spustelėkite čia: <a href="%1">%1</a>
formatHours
- 'hour'
+ '%1 hour'
@@ -4378,7 +4405,7 @@ Spustelėkite čia: <a href="%1">%1</a>
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4387,7 +4414,7 @@ Spustelėkite čia: <a href="%1">%1</a>
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/pt_BR.ts b/linphone-app/assets/languages/pt_BR.ts
index 7109a7db3..856ae5aec 100644
--- a/linphone-app/assets/languages/pt_BR.ts
+++ b/linphone-app/assets/languages/pt_BR.ts
@@ -516,11 +516,37 @@ URL do servidor não configurado.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
ChatDeliveries
@@ -4321,7 +4347,7 @@ Clique aqui: <a href="%1">%1 </a>
formatYears
- 'year'
+ '%1 year'
@@ -4329,7 +4355,7 @@ Clique aqui: <a href="%1">%1 </a>
formatMonths
- 'month'
+ '%1 month'
@@ -4337,7 +4363,7 @@ Clique aqui: <a href="%1">%1 </a>
formatWeeks
- 'week'
+ '%1 week'
@@ -4345,7 +4371,7 @@ Clique aqui: <a href="%1">%1 </a>
formatDays
- 'day'
+ '%1 day'
@@ -4353,7 +4379,7 @@ Clique aqui: <a href="%1">%1 </a>
formatHours
- 'hour'
+ '%1 hour'
@@ -4361,7 +4387,7 @@ Clique aqui: <a href="%1">%1 </a>
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4369,7 +4395,7 @@ Clique aqui: <a href="%1">%1 </a>
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/ru.ts b/linphone-app/assets/languages/ru.ts
index 8f62773bc..4034d822a 100644
--- a/linphone-app/assets/languages/ru.ts
+++ b/linphone-app/assets/languages/ru.ts
@@ -517,11 +517,38 @@
'Join' : Action button to join the conference.
Присоединиться
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+ Описание
+
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+ Адрес конференции
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+ Присоединиться
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
+
ChatDeliveries
@@ -4333,7 +4360,7 @@
formatYears
- 'year'
+ '%1 year'
@@ -4342,7 +4369,7 @@
formatMonths
- 'month'
+ '%1 month'
@@ -4351,7 +4378,7 @@
formatWeeks
- 'week'
+ '%1 week'
@@ -4360,7 +4387,7 @@
formatDays
- 'day'
+ '%1 day'
@@ -4369,7 +4396,7 @@
formatHours
- 'hour'
+ '%1 hour'
@@ -4378,7 +4405,7 @@
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4387,7 +4414,7 @@
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/sv.ts b/linphone-app/assets/languages/sv.ts
index 94ed58520..1911d1dd0 100644
--- a/linphone-app/assets/languages/sv.ts
+++ b/linphone-app/assets/languages/sv.ts
@@ -516,11 +516,37 @@ Serverwebbadressen är inte konfigurerad.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
ChatDeliveries
@@ -4321,7 +4347,7 @@ Klicka här: <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
@@ -4329,7 +4355,7 @@ Klicka här: <a href="%1">%1</a>
formatMonths
- 'month'
+ '%1 month'
@@ -4337,7 +4363,7 @@ Klicka här: <a href="%1">%1</a>
formatWeeks
- 'week'
+ '%1 week'
@@ -4345,7 +4371,7 @@ Klicka här: <a href="%1">%1</a>
formatDays
- 'day'
+ '%1 day'
@@ -4353,7 +4379,7 @@ Klicka här: <a href="%1">%1</a>
formatHours
- 'hour'
+ '%1 hour'
@@ -4361,7 +4387,7 @@ Klicka här: <a href="%1">%1</a>
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4369,7 +4395,7 @@ Klicka här: <a href="%1">%1</a>
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/tr.ts b/linphone-app/assets/languages/tr.ts
index d4c2fc72f..585c30e16 100644
--- a/linphone-app/assets/languages/tr.ts
+++ b/linphone-app/assets/languages/tr.ts
@@ -515,11 +515,36 @@ Sunucu url'si yapılandırılmadı.
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
ChatDeliveries
@@ -4309,49 +4334,49 @@ Buraya tıklayın: <a href="%1">%1</a>
formatYears
- 'year'
+ '%1 year'
formatMonths
- 'month'
+ '%1 month'
formatWeeks
- 'week'
+ '%1 week'
formatDays
- 'day'
+ '%1 day'
formatHours
- 'hour'
+ '%1 hour'
formatMinutes
- 'minute'
+ '%1 minute'
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/uk.ts b/linphone-app/assets/languages/uk.ts
index 2dc8b69d6..27537c83e 100644
--- a/linphone-app/assets/languages/uk.ts
+++ b/linphone-app/assets/languages/uk.ts
@@ -517,11 +517,38 @@
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
+
+
ChatDeliveries
@@ -4333,7 +4360,7 @@
formatYears
- 'year'
+ '%1 year'
@@ -4342,7 +4369,7 @@
formatMonths
- 'month'
+ '%1 month'
@@ -4351,7 +4378,7 @@
formatWeeks
- 'week'
+ '%1 week'
@@ -4360,7 +4387,7 @@
formatDays
- 'day'
+ '%1 day'
@@ -4369,7 +4396,7 @@
formatHours
- 'hour'
+ '%1 hour'
@@ -4378,7 +4405,7 @@
formatMinutes
- 'minute'
+ '%1 minute'
@@ -4387,7 +4414,7 @@
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/assets/languages/zh_CN.ts b/linphone-app/assets/languages/zh_CN.ts
index 43317ec94..4bc256c3e 100644
--- a/linphone-app/assets/languages/zh_CN.ts
+++ b/linphone-app/assets/languages/zh_CN.ts
@@ -515,11 +515,36 @@
'Join' : Action button to join the conference.
+
+
+ ChatConferenceInvitationMessage
- icsDuration
- 'Duration' : label for duration
+ icsDescription
+ 'Description' : Title for the conference description.
+
+ icsconferenceAddressTitle
+ 'Conference address' : Title for the conference address.
+
+
+
+ icsJoinButton
+ 'Join' : Action button to join the conference.
+
+
+
+ icsMeetingInvite
+ 'Meeting invite' : ICS title that is an invitation.
+
+
+
+ icsParticipants
+ '%1 participant' : number(=%1) of participant.
+
+
+
+
ChatDeliveries
@@ -4309,49 +4334,49 @@
formatYears
- 'year'
+ '%1 year'
formatMonths
- 'month'
+ '%1 month'
formatWeeks
- 'week'
+ '%1 week'
formatDays
- 'day'
+ '%1 day'
formatHours
- 'hour'
+ '%1 hour'
formatMinutes
- 'minute'
+ '%1 minute'
formatSeconds
- 'second'
+ '%1 second'
diff --git a/linphone-app/resources.qrc b/linphone-app/resources.qrc
index 0ef6bd957..a12958040 100644
--- a/linphone-app/resources.qrc
+++ b/linphone-app/resources.qrc
@@ -15,6 +15,7 @@
assets/images/auto_answer_custom.svg
assets/images/back_custom.svg
assets/images/burger_menu_custom.svg
+ assets/images/calendar_custom.svg
assets/images/calendar_participants_custom.svg
assets/images/call_accept_custom.svg
assets/images/call_chat_secure_custom.svg
@@ -314,6 +315,7 @@
ui/modules/Linphone/Chat/ChatAudioMessage.qml
ui/modules/Linphone/Chat/ChatAudioPreview.qml
ui/modules/Linphone/Chat/ChatCalendarMessage.qml
+ ui/modules/Linphone/Chat/ChatConferenceInvitationMessage.qml
ui/modules/Linphone/Chat/ChatFileMessage.qml
ui/modules/Linphone/Chat/ChatFilePreview.qml
ui/modules/Linphone/Chat/ChatForwardMessage.qml
diff --git a/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.cpp b/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.cpp
index b60794fdb..e0bf7b01a 100644
--- a/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.cpp
+++ b/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.cpp
@@ -172,6 +172,10 @@ QVariantList ConferenceInfoModel::getParticipants() const{
return addresses;
}
+int ConferenceInfoModel::getParticipantCount()const{
+ return mConferenceInfo->getParticipants().size();
+}
+
TimeZoneModel* ConferenceInfoModel::getTimeZoneModel() const{
TimeZoneModel * model = new TimeZoneModel(mTimeZone);
App::getInstance()->getEngine()->setObjectOwnership(model, QQmlEngine::JavaScriptOwnership);
diff --git a/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.hpp b/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.hpp
index 2f45c9637..a419aae4a 100644
--- a/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.hpp
+++ b/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.hpp
@@ -65,6 +65,7 @@ public:
QString getUri() const;
bool isScheduled() const;
Q_INVOKABLE QVariantList getParticipants() const;
+ Q_INVOKABLE int getParticipantCount()const;
Q_INVOKABLE TimeZoneModel* getTimeZoneModel() const;
void setDateTime(const QDateTime& dateTime);
diff --git a/linphone-app/ui/modules/Common/Form/Fields/TextAreaField.qml b/linphone-app/ui/modules/Common/Form/Fields/TextAreaField.qml
index c5544a4cd..f872e70ba 100644
--- a/linphone-app/ui/modules/Common/Form/Fields/TextAreaField.qml
+++ b/linphone-app/ui/modules/Common/Form/Fields/TextAreaField.qml
@@ -16,6 +16,7 @@ Rectangle {
property alias textColor: textArea.color
property alias readOnly: textArea.readOnly
property int padding: TextAreaFieldStyle.text.padding
+ property alias implicitHeight: flickable.contentHeight
height: TextAreaFieldStyle.background.height
width: TextAreaFieldStyle.background.width
diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatCalendarMessage.qml b/linphone-app/ui/modules/Linphone/Chat/ChatCalendarMessage.qml
index 0777d1cac..cc4159ee0 100644
--- a/linphone-app/ui/modules/Linphone/Chat/ChatCalendarMessage.qml
+++ b/linphone-app/ui/modules/Linphone/Chat/ChatCalendarMessage.qml
@@ -92,8 +92,7 @@ Loader{
elide: Text.ElideRight
font.pointSize: ChatCalendarMessageStyle.schedule.pointSize
text: Qt.formatDateTime(mainItem.conferenceInfoModel.dateTime, 'hh:mm')
- //: 'Duration' : label for duration
- + (mainItem.conferenceInfoModel.duration > 0 ? ' ('+qsTr('icsDuration')+' ' +Utils.formatDuration(mainItem.conferenceInfoModel.duration * 60) + ')'
+ + (mainItem.conferenceInfoModel.duration > 0 ? ' (' +Utils.formatDuration(mainItem.conferenceInfoModel.duration * 60) + ')'
: '')
}
}
@@ -272,6 +271,7 @@ Loader{
isCustom: true
colorSet: ChatCalendarMessageStyle.editButton
backgroundRadius: width/2
+ visible: UtilsCpp.isMe(mainItem.conferenceInfoModel.organizer)
onClicked: {
window.detachVirtualWindow()
window.attachVirtualWindow(Utils.buildAppDialogUri('NewConference')
diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatConferenceInvitationMessage.qml b/linphone-app/ui/modules/Linphone/Chat/ChatConferenceInvitationMessage.qml
new file mode 100644
index 000000000..2970710fb
--- /dev/null
+++ b/linphone-app/ui/modules/Linphone/Chat/ChatConferenceInvitationMessage.qml
@@ -0,0 +1,294 @@
+import QtQuick 2.7
+import QtQuick.Layouts 1.3
+
+import Clipboard 1.0
+import App 1.0
+import Common 1.0
+import Linphone 1.0
+
+import Common.Styles 1.0
+import Linphone.Styles 1.0
+import TextToSpeech 1.0
+import Utils 1.0
+import Units 1.0
+import UtilsCpp 1.0
+import LinphoneEnums 1.0
+
+import ColorsList 1.0
+
+import 'Message.js' as Logic
+import 'qrc:/ui/scripts/Utils/utils.js' as Utils
+
+// =============================================================================
+
+Loader{
+ id: mainItem
+ property ContentModel contentModel
+ property ConferenceInfoModel conferenceInfoModel: contentModel ? contentModel.conferenceInfoModel : null
+ property int maxWidth : parent.width
+ property int fitHeight: active && item ? item.fitHeight + ChatCalendarMessageStyle.topMargin+ChatCalendarMessageStyle.bottomMargin + (isExpanded? 200 : 0): 0
+ property int fitWidth: active && item ? item.fitWidth + ChatCalendarMessageStyle.widthMargin*2 : 0
+ property bool containsMouse: false
+ property int gotoButtonMode: -1 //-1: hide, 0:goto, 1:MoreInfo
+ property bool isExpanded : false
+
+ signal expandToggle()
+ signal conferenceUriCopied()
+
+ width: parent.width
+ height: parent.height
+
+ property font customFont : SettingsModel.textMessageFont
+ active: mainItem.conferenceInfoModel
+
+ sourceComponent: MouseArea{
+ id: loadedItem
+ property int fitHeight: layout.fitHeight + ChatCalendarMessageStyle.topMargin+ChatCalendarMessageStyle.bottomMargin
+ property int fitWidth: layout.fitWidth + ChatCalendarMessageStyle.leftMargin+ChatCalendarMessageStyle.rightMargin
+
+ anchors.fill: parent
+ anchors.leftMargin: ChatCalendarMessageStyle.widthMargin
+ anchors.rightMargin: ChatCalendarMessageStyle.widthMargin
+ anchors.topMargin: ChatCalendarMessageStyle.topMargin
+ anchors.bottomMargin: ChatCalendarMessageStyle.bottomMargin
+
+ clip: false
+
+ hoverEnabled: true
+ onClicked: CallsListModel.prepareConferenceCall(mainItem.conferenceInfoModel)
+ onHoveredChanged: mainItem.containsMouse = loadedItem.containsMouse
+
+ ColumnLayout{
+ id: layout
+ property int fitHeight: Layout.minimumHeight + (description.visible?description.implicitHeight + 5: 0)
+ property int fitWidth: (editButton.visible?editButton.width:0) + copyButton.width + joinButton.width + linkTitle.implicitWidth
+ anchors.fill: parent
+ spacing: 0
+ Text{
+ Layout.fillWidth: true
+ Layout.topMargin: 10
+ Layout.leftMargin: 10
+ Layout.alignment: Qt.AlignRight
+ elide: Text.ElideRight
+ color: ChatCalendarMessageStyle.subject.color
+ font.pointSize: ChatCalendarMessageStyle.subject.pointSize
+ //: 'Meeting invite' : ICS title that is an invitation.
+ text: qsTr('icsMeetingInvite') +': ' + UtilsCpp.getDisplayName(mainItem.conferenceInfoModel.organizer)
+ }
+ Text{
+ id: title
+ Layout.fillWidth: true
+ Layout.leftMargin: 10
+ Layout.alignment: Qt.AlignRight
+ elide: Text.ElideRight
+ color: ChatCalendarMessageStyle.subject.color
+ font.pointSize: ChatCalendarMessageStyle.subject.pointSize
+ font.weight: Font.Bold
+ text: mainItem.conferenceInfoModel.subject
+ }
+ RowLayout {
+ id: participantsRow
+ Layout.fillWidth: true
+ Layout.preferredHeight: ChatCalendarMessageStyle.participants.iconSize
+ Layout.leftMargin: 5
+ Layout.rightMargin: 15
+
+ spacing: ChatCalendarMessageStyle.participants.spacing
+
+ Icon{
+ icon: ChatCalendarMessageStyle.participants.icon
+ iconSize: ChatCalendarMessageStyle.participants.iconSize
+ overwriteColor: ChatCalendarMessageStyle.participants.color
+ }
+
+ Text {
+ id: participantsList
+ property int participantCount: mainItem.conferenceInfoModel.getParticipantCount()
+ Layout.fillWidth: true
+ color: ChatCalendarMessageStyle.participants.color
+ elide: Text.ElideRight
+ font.pointSize: ChatCalendarMessageStyle.participants.pointSize
+ //: '%1 participant' : number(=%1) of participant.
+ text: qsTr('icsParticipants', '', participantCount).arg(participantCount)
+ }
+ }
+
+ RowLayout {
+ id: dateRow
+ Layout.fillWidth: true
+ Layout.preferredHeight: ChatCalendarMessageStyle.calendar.iconSize
+ Layout.leftMargin: 5
+ Layout.rightMargin: 15
+
+ spacing: ChatCalendarMessageStyle.calendar.spacing
+
+ Icon{
+ icon: ChatCalendarMessageStyle.calendar.icon
+ iconSize: ChatCalendarMessageStyle.calendar.iconSize
+ overwriteColor: ChatCalendarMessageStyle.calendar.color
+ }
+
+ Text {
+ id: conferenceDate
+ Layout.fillWidth: true
+ Layout.minimumWidth: implicitWidth
+ verticalAlignment: Qt.AlignVCenter
+ color: ChatCalendarMessageStyle.schedule.color
+ elide: Text.ElideRight
+ font.pointSize: ChatCalendarMessageStyle.calendar.pointSize
+ text: Qt.formatDate(mainItem.conferenceInfoModel.dateTime, 'yyyy/MM/dd')
+ }
+ }
+ RowLayout {
+ id: conferenceTimeRow
+ Layout.fillWidth: true
+ Layout.preferredHeight: ChatCalendarMessageStyle.schedule.iconSize
+ Layout.leftMargin: 5
+ Layout.rightMargin: 15
+
+ spacing: ChatCalendarMessageStyle.schedule.spacing
+
+ Icon{
+ icon: ChatCalendarMessageStyle.schedule.icon
+ iconSize: ChatCalendarMessageStyle.schedule.iconSize
+ overwriteColor: ChatCalendarMessageStyle.schedule.color
+ }
+
+ Text {
+ id: conferenceTime
+ Layout.fillWidth: true
+ Layout.minimumWidth: implicitWidth
+ verticalAlignment: Qt.AlignVCenter
+ color: ChatCalendarMessageStyle.schedule.color
+ elide: Text.ElideRight
+ font.pointSize: ChatCalendarMessageStyle.schedule.pointSize
+ text: Qt.formatDateTime(mainItem.conferenceInfoModel.dateTime, 'hh:mm')
+ + (mainItem.conferenceInfoModel.duration > 0 ? ' ('+Utils.formatDuration(mainItem.conferenceInfoModel.duration * 60) + ')'
+ : '')
+ }
+ }
+ ColumnLayout{
+ id: expandedDescription
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.topMargin: 5
+ visible: mainItem.isExpanded
+ spacing: 0
+ ScrollableListView{
+ id: expandedParticipantsList
+ Layout.fillWidth: true
+ Layout.minimumHeight: Math.min( count * ChatCalendarMessageStyle.lineHeight, parent.height/(descriptionTitle.visible?3:2))
+ Layout.leftMargin: 10
+ spacing: 0
+ visible: mainItem.isExpanded
+ onVisibleChanged: model= mainItem.conferenceInfoModel.getParticipants()
+
+ delegate: Row{
+ spacing: 5
+ width: expandedParticipantsList.width
+ height: ChatCalendarMessageStyle.lineHeight
+ Text{text: modelData.displayName
+ color: ChatCalendarMessageStyle.description.color
+ font.pointSize: ChatCalendarMessageStyle.description.pointSize
+ elide: Text.ElideRight
+ wrapMode: TextEdit.WordWrap
+ }
+ Text{text: '('+modelData.address+')'
+ color: ChatCalendarMessageStyle.description.color
+ font.pointSize: ChatCalendarMessageStyle.description.pointSize
+ elide: Text.ElideRight
+ wrapMode: TextEdit.WordWrap
+ }
+ }
+ }
+ }
+ Text{
+ id: descriptionTitle
+ Layout.fillWidth: true
+ Layout.leftMargin: 10
+ Layout.topMargin: 5
+ color: ChatCalendarMessageStyle.subject.color
+ font.pointSize: ChatCalendarMessageStyle.subject.pointSize
+ font.weight: Font.Bold
+ //: 'Description' : Title for the conference description.
+ text: qsTr('icsDescription')
+ visible: description.text != ''
+ }
+ TextAreaField{
+ id: description
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.leftMargin: 10
+ padding: 0
+ color: 'transparent'
+ readOnly: true
+ textColor: ChatCalendarMessageStyle.description.color
+ font.pointSize: ChatCalendarMessageStyle.description.pointSize
+ border.width: 0
+ visible: description.text != ''
+
+ text: mainItem.conferenceInfoModel.description
+ }
+ Item{
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ }
+ Text{
+ id: linkTitle
+ Layout.fillWidth: true
+ Layout.leftMargin: 10
+ color: ChatCalendarMessageStyle.subject.color
+ font.pointSize: ChatCalendarMessageStyle.subject.pointSize
+ font.weight: Font.Bold
+
+ //: 'Conference address' : Title for the conference address.
+ text: qsTr('icsconferenceAddressTitle')
+ }
+ RowLayout{
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.leftMargin: 10
+ Layout.rightMargin: 10
+ spacing: 10
+ TextField{
+ id: uriField
+ readOnly: true
+ Layout.fillWidth: true
+ textFieldStyle: TextFieldStyle.flatInverse
+ text: mainItem.conferenceInfoModel.uri
+
+ }
+ ActionButton{
+ id: copyButton
+ iconSize: uriField.height
+ isCustom: true
+ colorSet: ChatCalendarMessageStyle.copyLinkButton
+ backgroundRadius: width/2
+ onClicked: {
+ Clipboard.text = uriField.text
+ mainItem.conferenceUriCopied()
+ }
+ }
+ TextButtonC{
+ id: joinButton
+ //: 'Join' : Action button to join the conference.
+ text: qsTr('icsJoinButton').toUpperCase()
+ onClicked: CallsListModel.prepareConferenceCall(mainItem.conferenceInfoModel)
+ }
+ ActionButton{
+ id: editButton
+ isCustom: true
+ colorSet: ChatCalendarMessageStyle.editButton
+ backgroundRadius: width/2
+ visible: UtilsCpp.isMe(mainItem.conferenceInfoModel.organizer)
+ onClicked: {
+ window.detachVirtualWindow()
+ window.attachVirtualWindow(Utils.buildAppDialogUri('NewConference')
+ ,{conferenceInfoModel: mainItem.conferenceInfoModel})
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatContent.qml b/linphone-app/ui/modules/Linphone/Chat/ChatContent.qml
index bdc4d1e2e..a98d68372 100644
--- a/linphone-app/ui/modules/Linphone/Chat/ChatContent.qml
+++ b/linphone-app/ui/modules/Linphone/Chat/ChatContent.qml
@@ -38,7 +38,7 @@ Column{
property bool isOutgoing : contentModel && contentModel.chatMessageModel && (contentModel.chatMessageModel.isOutgoing || contentModel.chatMessageModel.state == LinphoneEnums.ChatMessageStateIdle);
z: message.visible ? 0 : 1
- ChatCalendarMessage{
+ ChatConferenceInvitationMessage{
id: calendarMessage
contentModel: mainItem.contentModel
width: parent.width
diff --git a/linphone-app/ui/modules/Linphone/Styles/Chat/ChatCalendarMessageStyle.qml b/linphone-app/ui/modules/Linphone/Styles/Chat/ChatCalendarMessageStyle.qml
index 93fb98d71..fdcef973b 100644
--- a/linphone-app/ui/modules/Linphone/Styles/Chat/ChatCalendarMessageStyle.qml
+++ b/linphone-app/ui/modules/Linphone/Styles/Chat/ChatCalendarMessageStyle.qml
@@ -39,9 +39,15 @@ QtObject {
property color color: ColorsList.add(sectionName+'_conference_indicator', 'i').color
property int width: 5
}
-
+ property QtObject calendar: QtObject {
+ property int spacing: 5
+ property int pointSize: Units.dp * 9
+ property string icon : 'calendar_custom'
+ property int iconSize: 30
+ property color color: ColorsList.add(sectionName+'_schedule', 'j').color
+ }
property QtObject schedule: QtObject {
- property int spacing: 0
+ property int spacing: 5
property int pointSize: Units.dp * 9
property string icon : 'schedule_custom'
property int iconSize: 30
diff --git a/linphone-app/ui/modules/Linphone/qmldir b/linphone-app/ui/modules/Linphone/qmldir
index 3916fe6c8..5be907067 100644
--- a/linphone-app/ui/modules/Linphone/qmldir
+++ b/linphone-app/ui/modules/Linphone/qmldir
@@ -22,6 +22,7 @@ Chat 1.0 Chat/Chat.qml
ChatAudioMessage 1.0 Chat/ChatAudioMessage.qml
ChatAudioPreview 1.0 Chat/ChatAudioPreview.qml
ChatCalendarMessage 1.0 Chat/ChatCalendarMessage.qml
+ChatConferenceInvitationMessage 1.0 Chat/ChatConferenceInvitationMessage.qml
ChatMessagePreview 1.0 Chat/ChatMessagePreview.qml
ChatForwardMessage 1.0 Chat/ChatForwardMessage.qml
ChatReplyMessage 1.0 Chat/ChatReplyMessage.qml
diff --git a/linphone-app/ui/scripts/Utils/utils.js b/linphone-app/ui/scripts/Utils/utils.js
index 4a9fcefc3..098a4b961 100644
--- a/linphone-app/ui/scripts/Utils/utils.js
+++ b/linphone-app/ui/scripts/Utils/utils.js
@@ -527,30 +527,30 @@ function formatDuration (seconds) {
//1, 60, 3600, 86400, 604800, 2592000, 31104000
var y = Math.floor(seconds / 31104000)
if(y > 0)
- //: 'year'
- return y+ ' '+qsTr('formatYears', '', y)
+ //: '%1 year'
+ return qsTr('formatYears', '', y).arg(y)
var M = Math.floor(seconds / 2592000)
if(M > 0)
- //: 'month'
- return M+' '+qsTr('formatMonths', '', M)
+ //: '%1 month'
+ return qsTr('formatMonths', '', M).arg(M)
var w = Math.floor(seconds / 604800)
if(w>0)
- //: 'week'
- return w+' '+qsTr('formatWeeks', '', w)
+ //: '%1 week'
+ return qsTr('formatWeeks', '', w).arg(w)
var d = Math.floor(seconds / 86400)
if(d>0)
- //: 'day'
- return d+' '+qsTr('formatDays', '', d)
+ //: '%1 day'
+ return qsTr('formatDays', '', d).arg(d)
var h = Math.floor(seconds / 3600)
var m = Math.floor((seconds - h * 3600) / 60)
var s = seconds - h * 3600 - m * 60
- //: 'hour'
- return (h > 0 ? h + qsTr('formatHours', '', h): '')
- //: 'minute'
- + (m > 0 ? (h > 0 ? ', ' : '') + m + qsTr('formatMinutes', '', m): '')
- //: 'second'
- + (s > 0 ? (h> 0 || m > 0 ? ', ' : '') +s + qsTr('formatSeconds', '', s): '')
+ //: '%1 hour'
+ return (h > 0 ? qsTr('formatHours', '', h).arg(h): '')
+ //: '%1 minute'
+ + (m > 0 ? (h > 0 ? ', ' : '') +qsTr('formatMinutes', '', m).arg(m): '')
+ //: '%1 second'
+ + (s > 0 ? (h> 0 || m > 0 ? ', ' : '') +qsTr('formatSeconds', '', s).arg(s): '')
}
function buildDate(date, time){
diff --git a/linphone-sdk b/linphone-sdk
index 7e54d398f..baeed5ae0 160000
--- a/linphone-sdk
+++ b/linphone-sdk
@@ -1 +1 @@
-Subproject commit 7e54d398fa9f1648486386e66e2cc5c2984d19dd
+Subproject commit baeed5ae055e519284f7314d3a9bace134c3ecb5