mirror of
https://github.com/laurent22/joplin.git
synced 2026-03-13 08:09:59 +08:00
@@ -14,7 +14,7 @@ import { Text } from 'react-native-paper';
|
||||
import { AndroidAudioEncoder, AndroidOutputFormat, IOSAudioQuality, IOSOutputFormat, RecordingOptions } from 'expo-av/build/Audio';
|
||||
import time from '@joplin/lib/time';
|
||||
import { toFileExtension } from '@joplin/lib/mime-utils';
|
||||
import { formatMsToDurationLocal } from '@joplin/utils/time';
|
||||
import { formatMsToDurationCompat } from '@joplin/utils/time';
|
||||
|
||||
const logger = Logger.create('AudioRecording');
|
||||
|
||||
@@ -212,7 +212,7 @@ const AudioRecordingBanner: React.FC<Props> = props => {
|
||||
const renderDuration = () => {
|
||||
if (recordingState !== RecorderState.Recording) return null;
|
||||
|
||||
const durationValue = formatMsToDurationLocal(duration);
|
||||
const durationValue = formatMsToDurationCompat(duration);
|
||||
return <Text
|
||||
accessibilityLabel={_('Duration: %s', durationValue)}
|
||||
accessibilityRole='timer'
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
import { formatMsToDurationLocal, Hour, Minute } from './time';
|
||||
import { formatMsToDurationCompat, Hour, Minute, Second } from './time';
|
||||
|
||||
describe('time', () => {
|
||||
test.each([
|
||||
[0, '0:00'],
|
||||
[2500, '0:02'],
|
||||
[Minute * 3, '3:00'],
|
||||
[Hour * 4 + Minute * 3, '4:03:00'],
|
||||
[Hour * 25, '0000-00-01T01:00'],
|
||||
[Hour + Minute * 3, '63:00'],
|
||||
[Hour + Minute * 3 + Second, '63:01'],
|
||||
])('should support formatting durations', (input, expected) => {
|
||||
expect(formatMsToDurationLocal(input)).toBe(expected);
|
||||
expect(formatMsToDurationCompat(input)).toBe(expected);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -10,8 +10,6 @@ import * as dayjs from 'dayjs';
|
||||
// - import * as dayJsRelativeTimeType causes a runtime error.
|
||||
import type * as dayJsRelativeTimeType from 'dayjs/plugin/relativeTime';
|
||||
const dayJsRelativeTime: typeof dayJsRelativeTimeType = require('dayjs/plugin/relativeTime');
|
||||
import type * as dayJsDurationType from 'dayjs/plugin/duration';
|
||||
const dayJsDuration: typeof dayJsDurationType = require('dayjs/plugin/duration');
|
||||
|
||||
const supportedLocales: Record<string, unknown> = {
|
||||
'ar': require('dayjs/locale/ar'),
|
||||
@@ -65,7 +63,6 @@ export const Week = 7 * Day;
|
||||
export const Month = 30 * Day;
|
||||
|
||||
function initDayJs() {
|
||||
dayjs.extend(dayJsDuration);
|
||||
dayjs.extend(dayJsRelativeTime);
|
||||
}
|
||||
|
||||
@@ -161,14 +158,11 @@ export const formatDateTimeLocalToMs = (anything: string) => {
|
||||
return dayjs(anything).unix() * 1000;
|
||||
};
|
||||
|
||||
export const formatMsToDurationLocal = (ms: number) => {
|
||||
let format;
|
||||
if (ms < Hour) {
|
||||
format = 'm:ss';
|
||||
} else if (ms < Day) {
|
||||
format = 'H:mm:ss';
|
||||
} else {
|
||||
format = 'YYYY-MM-DDTHH:mm';
|
||||
}
|
||||
return dayjs.duration(ms).format(format);
|
||||
export const formatMsToDurationCompat = (ms: number) => {
|
||||
// Avoid using dayjs (and @joplin/utils/time) for formatting here.
|
||||
// See https://github.com/laurent22/joplin/issues/11864
|
||||
const seconds = Math.floor(ms / Second) % 60;
|
||||
const minutes = Math.floor(ms / Minute);
|
||||
const paddedSeconds = `${seconds}`.padStart(2, '0');
|
||||
return `${minutes}:${paddedSeconds}`;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user