Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c91e4c615 | ||
|
|
b138fa2c44 | ||
|
|
70c4a775e3 | ||
|
|
978e858592 | ||
|
|
eca15317ce | ||
|
|
a9961c2cc1 | ||
|
|
557cbffe48 | ||
|
|
31258a75fa | ||
|
|
f884874d43 | ||
|
|
762ccc1f31 | ||
|
|
10b3268d43 | ||
|
|
fd1c13830c | ||
|
|
6dc91ad518 | ||
|
|
720c9ae2d4 | ||
|
|
1159efde80 | ||
|
|
9507aeb28d | ||
|
|
95011e4a04 | ||
|
|
f40fd295b1 | ||
|
|
b26239f1ff | ||
|
|
ccfa7dacdf |
@@ -33,6 +33,7 @@ The app is currently available in the following languages:
|
||||
* English
|
||||
* Chinese (simplified)
|
||||
* Chinese (traditional)
|
||||
* French
|
||||
* German
|
||||
* Korean
|
||||
* Romanian
|
||||
@@ -44,7 +45,6 @@ More translations are welcome. See [instructions](https://github.com/tinode/chat
|
||||
|
||||
## Not done yet
|
||||
|
||||
* Video or audio calling.
|
||||
* End-to-End encryption.
|
||||
* Emoji support is weak.
|
||||
* Mentions, hashtags.
|
||||
|
||||
@@ -2463,7 +2463,7 @@ ul.tabbar li.active > a {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
.material-icons.big {
|
||||
font-size: 2.4rem;
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
.material-icons.huge {
|
||||
font-size: 4rem;
|
||||
|
||||
@@ -19,6 +19,10 @@ const i18n = {
|
||||
'new_message': "New message",
|
||||
'new_chat': "New chat",
|
||||
},
|
||||
'fr': {
|
||||
'new_message': "Nouveau message",
|
||||
'new_chat': "Nouvelle conversation",
|
||||
},
|
||||
'es': {
|
||||
'new_message': "Nuevo mensaje",
|
||||
'new_chat': "Nueva conversación",
|
||||
|
||||
@@ -1413,7 +1413,14 @@
|
||||
"call_missed": {
|
||||
"translation": "verpasster",
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call",
|
||||
"description": "Label for missed incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"call_declined": {
|
||||
"translation": "abgelehnt",
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
|
||||
@@ -1413,7 +1413,14 @@
|
||||
"call_missed": {
|
||||
"translation": "missed",
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call",
|
||||
"description": "Label for missed incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"call_declined": {
|
||||
"translation": "declined",
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
|
||||
@@ -1413,7 +1413,14 @@
|
||||
"call_missed": {
|
||||
"translation": "perdida",
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call",
|
||||
"description": "Label for missed incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"call_declined": {
|
||||
"translation": "rechazada",
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
|
||||
@@ -127,9 +127,13 @@
|
||||
"defaultMessage": "cancelled",
|
||||
"description": "Label for cancelled outgoing call"
|
||||
},
|
||||
"call_declined": {
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call"
|
||||
},
|
||||
"call_missed": {
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call"
|
||||
"description": "Label for missed incoming call"
|
||||
},
|
||||
"calls_incoming": {
|
||||
"defaultMessage": "Incoming call",
|
||||
|
||||
@@ -1413,7 +1413,14 @@
|
||||
"call_missed": {
|
||||
"translation": "부재중",
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call",
|
||||
"description": "Label for missed incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"call_declined": {
|
||||
"translation": "통화 거부",
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
|
||||
@@ -1413,7 +1413,14 @@
|
||||
"call_missed": {
|
||||
"translation": "pierdut",
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call",
|
||||
"description": "Label for missed incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"call_declined": {
|
||||
"translation": "refuzat",
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
|
||||
@@ -1413,7 +1413,14 @@
|
||||
"call_missed": {
|
||||
"translation": "пропущен",
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call",
|
||||
"description": "Label for missed incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"call_declined": {
|
||||
"translation": "отклонен",
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
|
||||
@@ -1413,7 +1413,14 @@
|
||||
"call_missed": {
|
||||
"translation": "未接",
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call",
|
||||
"description": "Label for missed incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"call_declined": {
|
||||
"translation": "被拒",
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
|
||||
@@ -1413,7 +1413,14 @@
|
||||
"call_missed": {
|
||||
"translation": "未接",
|
||||
"defaultMessage": "missed",
|
||||
"description": "Label for cancelled incoming call",
|
||||
"description": "Label for missed incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"call_declined": {
|
||||
"translation": "被拒",
|
||||
"defaultMessage": "declined",
|
||||
"description": "Label for declined incoming call",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
|
||||
@@ -7,17 +7,18 @@ import { secondsToTime } from '../lib/strformat.js';
|
||||
|
||||
export default class CallMessage extends React.PureComponent {
|
||||
render() {
|
||||
const isCallDropped = this.props.callState == 'disconnected';
|
||||
const isCallDropped = ['declined', 'disconnected', 'missed'].includes(this.props.callState);
|
||||
const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');
|
||||
const callIcon = this.props.incoming ?
|
||||
(isCallDropped ? 'call_missed' : 'call_received') :
|
||||
(isCallDropped ? 'call_missed_outgoing' : 'call_made');
|
||||
const duration = isCallDropped ? (
|
||||
this.props.incoming ?
|
||||
<FormattedMessage id="call_missed" defaultMessage="missed" description="Label for cancelled incoming call" /> :
|
||||
<FormattedMessage id="call_cancelled" defaultMessage="cancelled" description="Label for cancelled outgoing call" />
|
||||
this.props.incoming ? (this.props.callState == 'declined' ?
|
||||
<FormattedMessage id="call_declined" defaultMessage="declined" description="Label for declined incoming call" /> :
|
||||
<FormattedMessage id="call_missed" defaultMessage="missed" description="Label for missed incoming call" />
|
||||
) :
|
||||
<span>{secondsToTime(this.props.duration / 1000)}</span>;
|
||||
<FormattedMessage id="call_cancelled" defaultMessage="cancelled" description="Label for cancelled outgoing call" />
|
||||
) : <span>{secondsToTime(this.props.duration / 1000)}</span>;
|
||||
return <div className="call-message">
|
||||
<div><i className="material-icons big gray">call</i></div>
|
||||
<div className="flex-column narrow">
|
||||
|
||||
@@ -91,6 +91,7 @@ class CallPanel extends React.PureComponent {
|
||||
}
|
||||
|
||||
handleVideoCallAccepted(info) {
|
||||
RING_SOUND.pause();
|
||||
const pc = this.createPeerConnection();
|
||||
const stream = this.state.localStream;
|
||||
stream.getTracks().forEach(track => {
|
||||
|
||||
@@ -9,16 +9,17 @@ import { secondsToTime } from '../lib/strformat.js';
|
||||
// success: true | false.
|
||||
export default class CallStatus extends React.PureComponent {
|
||||
render() {
|
||||
const isCallDropped = this.props.callState == 'disconnected';
|
||||
const isCallDropped = ['declined', 'disconnected', 'missed'].includes(this.props.callState);
|
||||
const icon2 = this.props.incoming ?
|
||||
(isCallDropped ? 'call_missed' : 'call_received') :
|
||||
(isCallDropped ? 'call_missed_outgoing' : 'call_made');
|
||||
const duration = isCallDropped ? (
|
||||
this.props.incoming ?
|
||||
<FormattedMessage id="call_missed" defaultMessage="missed" description="Label for cancelled incoming call" /> :
|
||||
<FormattedMessage id="call_cancelled" defaultMessage="cancelled" description="Label for cancelled outgoing call" />
|
||||
this.props.incoming ? (this.props.callState == 'declined' ?
|
||||
<FormattedMessage id="call_declined" defaultMessage="declined" description="Label for declined incoming call" /> :
|
||||
<FormattedMessage id="call_missed" defaultMessage="missed" description="Label for missed incoming call" />
|
||||
) :
|
||||
<span>{secondsToTime(this.props.duration / 1000)}</span>;
|
||||
<FormattedMessage id="call_cancelled" defaultMessage="cancelled" description="Label for cancelled outgoing call" />
|
||||
) : <span>{secondsToTime(this.props.duration / 1000)}</span>;
|
||||
return (
|
||||
<>
|
||||
<div className="composed-material">
|
||||
|
||||
|
Before Width: | Height: | Size: 393 KiB After Width: | Height: | Size: 439 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 474 KiB After Width: | Height: | Size: 538 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 171 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 169 KiB |