mirror of https://github.com/vector-im/riot-web
				
				
				
			Merge pull request #6570 from SimonBrandner/feature/call-length/18405
						commit
						81b70c6955
					
				|  | @ -123,6 +123,19 @@ export function formatTime(date: Date, showTwelveHour = false): string { | |||
|     return pad(date.getHours()) + ':' + pad(date.getMinutes()); | ||||
| } | ||||
| 
 | ||||
| export function formatCallTime(delta: Date): string { | ||||
|     const hours = delta.getUTCHours(); | ||||
|     const minutes = delta.getUTCMinutes(); | ||||
|     const seconds = delta.getUTCSeconds(); | ||||
| 
 | ||||
|     let output = ""; | ||||
|     if (hours) output += `${hours}h `; | ||||
|     if (minutes || output) output += `${minutes}m `; | ||||
|     if (seconds || output) output += `${seconds}s`; | ||||
| 
 | ||||
|     return output; | ||||
| } | ||||
| 
 | ||||
| const MILLIS_IN_DAY = 86400000; | ||||
| export function wantsDateSeparator(prevEventDate: Date, nextEventDate: Date): boolean { | ||||
|     if (!nextEventDate || !prevEventDate) { | ||||
|  |  | |||
|  | @ -61,6 +61,10 @@ export default class CallEventGrouper extends EventEmitter { | |||
|         return [...this.events].find((event) => event.getType() === EventType.CallReject); | ||||
|     } | ||||
| 
 | ||||
|     private get selectAnswer(): MatrixEvent { | ||||
|         return [...this.events].find((event) => event.getType() === EventType.CallSelectAnswer); | ||||
|     } | ||||
| 
 | ||||
|     public get isVoice(): boolean { | ||||
|         const invite = this.invite; | ||||
|         if (!invite) return; | ||||
|  | @ -82,6 +86,11 @@ export default class CallEventGrouper extends EventEmitter { | |||
|         return Boolean(this.reject); | ||||
|     } | ||||
| 
 | ||||
|     public get duration(): Date { | ||||
|         if (!this.hangup || !this.selectAnswer) return; | ||||
|         return new Date(this.hangup.getDate().getTime() - this.selectAnswer.getDate().getTime()); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Returns true if there are only events from the other side - we missed the call | ||||
|      */ | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ import { CallErrorCode, CallState } from 'matrix-js-sdk/src/webrtc/call'; | |||
| import InfoTooltip, { InfoTooltipKind } from '../elements/InfoTooltip'; | ||||
| import classNames from 'classnames'; | ||||
| import AccessibleTooltipButton from '../elements/AccessibleTooltipButton'; | ||||
| import { formatCallTime } from "../../../DateUtils"; | ||||
| 
 | ||||
| interface IProps { | ||||
|     mxEvent: MatrixEvent; | ||||
|  | @ -131,9 +132,14 @@ export default class CallEvent extends React.Component<IProps, IState> { | |||
|                 // https://github.com/vector-im/riot-android/issues/2623
 | ||||
|                 // Also the correct hangup code as of VoIP v1 (with underscore)
 | ||||
|                 // Also, if we don't have a reason
 | ||||
|                 const duration = this.props.callEventGrouper.duration; | ||||
|                 let text = _t("Call ended"); | ||||
|                 if (duration) { | ||||
|                     text += " • " + formatCallTime(duration); | ||||
|                 } | ||||
|                 return ( | ||||
|                     <div className="mx_CallEvent_content"> | ||||
|                         { _t("Call ended") } | ||||
|                         { text } | ||||
|                     </div> | ||||
|                 ); | ||||
|             } else if (hangupReason === CallErrorCode.InviteTimeout) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Michael Telatynski
						Michael Telatynski