Got rid of duplicated code to format durations

Added new functions and test cases.
This commit is contained in:
Evan Harris
2019-10-21 07:46:16 -05:00
parent 0660c4f3e6
commit a793deab0b
4 changed files with 56 additions and 56 deletions
@@ -22,6 +22,7 @@ package org.airsonic.player.domain;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import org.airsonic.player.util.FileUtil;
import org.airsonic.player.util.StringUtil;
import org.apache.commons.io.FilenameUtils;
import java.io.File;
@@ -279,31 +280,8 @@ public class MediaFile {
if (durationSeconds == null) {
return null;
}
StringBuilder result = new StringBuilder(8);
int seconds = durationSeconds;
int hours = seconds / 3600;
seconds -= hours * 3600;
int minutes = seconds / 60;
seconds -= minutes * 60;
if (hours > 0) {
result.append(hours).append(':');
if (minutes < 10) {
result.append('0');
}
}
result.append(minutes).append(':');
if (seconds < 10) {
result.append('0');
}
result.append(seconds);
return result.toString();
// Return in M:SS or H:MM:SS
return StringUtil.formatDuration(durationSeconds);
}
public Long getFileSize() {
@@ -89,27 +89,7 @@ public abstract class CustomContentDirectory extends AbstractContentDirectorySer
if (seconds == null) {
return null;
}
StringBuilder result = new StringBuilder(8);
int hours = seconds / 3600;
seconds -= hours * 3600;
int minutes = seconds / 60;
seconds -= minutes * 60;
result.append(hours).append(':');
if (minutes < 10) {
result.append('0');
}
result.append(minutes).append(':');
if (seconds < 10) {
result.append('0');
}
result.append(seconds);
result.append(".0");
return result.toString();
return StringUtil.formatDurationHMMSS((int)seconds) + ".0";
}
protected String getBaseUrl() {
@@ -226,19 +226,33 @@ public final class StringUtil {
}
/**
* Formats a duration with minutes and seconds, e.g., "93:45"
* Formats a duration with minutes and seconds, e.g., "4:34" or "93:45"
*/
public static String formatDurationMSS(int seconds) {
int minutes = seconds / 60;
int secs = seconds % 60;
StringBuilder builder = new StringBuilder(6);
builder.append(minutes).append(":");
if (secs < 10) {
builder.append("0");
if (seconds < 0) {
throw new IllegalArgumentException("seconds must be >= 0");
}
builder.append(secs);
return builder.toString();
return String.format("%d:%02d", seconds / 60, seconds % 60);
}
/**
* Formats a duration with H:MM:SS, e.g., "1:33:45"
*/
public static String formatDurationHMMSS(int seconds) {
int hours = seconds / 3600;
seconds -= hours * 3600;
return String.format("%d:%s%s", hours, seconds < 600 ? "0" : "", formatDurationMSS(seconds));
}
/**
* Formats a duration to M:SS or H:MM:SS
*/
public static String formatDuration(int seconds) {
if (seconds >= 3600) {
return formatDurationHMMSS(seconds);
}
return formatDurationMSS(seconds);
}
/**