[mb-commits] branch, mbs-5765, created. MBS-5765: Correctly render a duration in seconds as hours, minutes, seconds
MusicBrainz Git Server <[email protected]> Tue, 22 Jan 2013 14:37:39 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1Txeyp-00046r-Tk@wiley> |
The branch, mbs-5765 has been created
at 63289a136150f379cd8b21e2a964e1cf910ff6a2 (commit)
- Log -----------------------------------------------------------------
commit 63289a136150f379cd8b21e2a964e1cf910ff6a2
Author: Oliver Charles <[email protected]>
Date: Tue Jan 22 14:37:14 2013 +0000
MBS-5765: Correctly render a duration in seconds as hours, minutes, seconds
Time::Duration->normalize normalizes a large duration into years, months, and
days - rather than just the needed hours, minutes, seconds. Rather than manually
re-fudging the calculation to account for that overflow, I've just implemented
partioning of seconds in hours, minutes and seconds manually.
diff --git a/lib/MusicBrainz/Server/Track.pm b/lib/MusicBrainz/Server/Track.pm
index eae2202..789793e 100644
--- a/lib/MusicBrainz/Server/Track.pm
+++ b/lib/MusicBrainz/Server/Track.pm
@@ -1,7 +1,7 @@
package MusicBrainz::Server::Track;
use strict;
use Carp 'confess';
-use aliased 'DateTime::Format::Duration';
+use POSIX qw( floor );
use Scalar::Util qw( looks_like_number );
use Sub::Exporter -setup => {
@@ -23,12 +23,18 @@ sub FormatTrackLength
return $ms unless looks_like_number($ms);
return "$ms ms" if $ms < 1000;
- my $seconds = $ms / 1000.0 + 0.5;
+ my $one_second = 1000.0;
+ my $one_minute = $one_second * 60;
+ my $one_hour = $one_minute * 60;
- my %data = Duration->new->normalise (seconds => $seconds);
- return $data{hours} > 0 ?
- sprintf ("%d:%02d:%02d", $data{hours}, $data{minutes}, $data{seconds}) :
- sprintf ("%d:%02d", $data{minutes}, $data{seconds});
+ my ($hours, $minutes, $seconds);
+ ($hours, $ms) = (floor($ms / $one_hour), $ms % $one_hour);
+ ($minutes, $ms) = (floor($ms / $one_minute), $ms % $one_minute);
+ $seconds = floor($ms / $one_second);
+
+ return $hours > 0 ?
+ sprintf ("%d:%02d:%02d", $hours, $minutes, $seconds) :
+ sprintf ("%d:%02d", $minutes, $seconds);
}
sub FormatXSDTrackLength
-----------------------------------------------------------------------
hooks/post-receive
--
mb_server