tempus/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java

190 lines
6.8 KiB
Java
Raw Normal View History

2020-12-08 11:12:44 +01:00
package com.cappielloantonio.play.util;
2021-12-29 10:20:03 +01:00
import android.annotation.SuppressLint;
import android.content.Context;
import android.net.ConnectivityManager;
2021-12-29 10:20:03 +01:00
import android.net.Uri;
import android.text.Html;
import android.util.Log;
2020-12-08 11:12:44 +01:00
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest;
2020-12-08 11:12:44 +01:00
import com.cappielloantonio.play.model.Song;
2021-08-07 15:09:20 +02:00
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
2021-07-27 14:53:03 +02:00
import java.util.Map;
import java.util.regex.Pattern;
2022-01-11 16:25:11 +01:00
import java.util.stream.Collectors;
2020-12-08 11:12:44 +01:00
public class MusicUtil {
2021-07-27 14:53:03 +02:00
private static final String TAG = "MusicUtil";
2020-12-08 11:12:44 +01:00
public static Uri getStreamUri(Context context, String id) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Map<String, String> params = App.getSubsonicClientInstance(App.getInstance(), false).getParams();
2020-12-08 11:12:44 +01:00
String uri = App.getSubsonicClientInstance(App.getInstance(), false).getUrl() +
"stream" +
"?u=" + params.get("u") +
"&s=" + params.get("s") +
"&t=" + params.get("t") +
"&v=" + params.get("v") +
"&c=" + params.get("c") +
"&id=" + id;
2022-01-11 16:25:11 +01:00
if (connectivityManager.getActiveNetworkInfo() != null) {
uri = uri + "&maxBitRate="
+ getBitratePreference(context, connectivityManager.getActiveNetworkInfo().getType()) + "&format="
+ getTranscodingFormatPreference(context, connectivityManager.getActiveNetworkInfo().getType());
}
Log.d(TAG, "getSongStreamUri(): " + uri);
2021-12-29 10:20:03 +01:00
return Uri.parse(uri);
}
2021-12-29 10:20:03 +01:00
@SuppressLint("UnsafeOptInUsageError")
public static Uri getDownloadUri(String id) {
2021-07-27 14:53:03 +02:00
Map<String, String> params = App.getSubsonicClientInstance(App.getInstance(), false).getParams();
2020-12-08 11:12:44 +01:00
String uri = App.getSubsonicClientInstance(App.getInstance(), false).getUrl() +
"stream" +
2021-07-27 14:53:03 +02:00
"?u=" + params.get("u") +
"&s=" + params.get("s") +
"&t=" + params.get("t") +
"&v=" + params.get("v") +
"&c=" + params.get("c") +
"&id=" + id;
Log.d(TAG, "getSongDownloadUri(): " + uri);
return Uri.parse(uri);
2020-12-08 11:12:44 +01:00
}
2021-07-28 18:53:42 +02:00
public static String getReadableDurationString(long duration, boolean millis) {
long minutes;
long seconds;
2021-07-28 18:53:42 +02:00
2021-07-30 17:34:15 +02:00
if (millis) {
2021-07-28 18:53:42 +02:00
minutes = (duration / 1000) / 60;
seconds = (duration / 1000) % 60;
2021-07-30 17:34:15 +02:00
} else {
2021-07-28 18:53:42 +02:00
minutes = duration / 60;
seconds = duration % 60;
}
if (minutes < 60) {
return String.format(Locale.getDefault(), "%01d:%02d", minutes, seconds);
} else {
long hours = minutes / 60;
minutes = minutes % 60;
return String.format(Locale.getDefault(), "%d:%02d:%02d", hours, minutes, seconds);
}
}
public static String getReadablePodcastDurationString(long duration) {
long minutes = duration / 60;
if (minutes < 60) {
return String.format(Locale.getDefault(), "%01d min", minutes);
} else {
long hours = minutes / 60;
minutes = minutes % 60;
return String.format(Locale.getDefault(), "%d h %02d min", hours, minutes);
}
}
2021-08-07 15:09:20 +02:00
public static String getReadableString(String string) {
if (string != null) {
return Html.fromHtml(string, Html.FROM_HTML_MODE_COMPACT).toString();
}
return "";
}
public static String forceReadableString(String string) {
if (string != null) {
return getReadableString(string)
.replaceAll("&#34;", "\"")
.replaceAll("&#39;", "'")
2021-08-13 15:33:34 +02:00
.replaceAll("&amp;", "'")
.replaceAll("<a[\\s]+([^>]+)>((?:.(?!</a>))*.)</a>", "");
}
return "";
}
public static String normalizedArtistName(String string) {
if (string != null) {
if (string.toLowerCase().contains(" feat.")) return Pattern.compile(" feat.", Pattern.CASE_INSENSITIVE).split(string)[0].trim();
else if (string.toLowerCase().contains(" featuring")) return Pattern.compile(" featuring", Pattern.CASE_INSENSITIVE).split(string)[0].trim();
else return string;
}
return "";
}
2021-08-07 15:09:20 +02:00
public static List<String> getReadableStrings(List<String> strings) {
List<String> readableStrings = new ArrayList<>();
if (strings.size() > 0) {
for (String string : strings) {
if (string != null) {
readableStrings.add(Html.fromHtml(string, Html.FROM_HTML_MODE_COMPACT).toString());
}
}
}
return readableStrings;
}
2022-01-11 16:25:11 +01:00
public static String passwordHexEncoding(String plainPassword) {
return "enc:" + plainPassword.chars().mapToObj(Integer::toHexString).collect(Collectors.joining());
}
public static int getDefaultPicPerCategory(String category) {
2021-08-14 17:52:46 +02:00
switch (category) {
case CustomGlideRequest.SONG_PIC:
return R.drawable.default_album_art;
case CustomGlideRequest.ALBUM_PIC:
return R.drawable.default_album_art;
case CustomGlideRequest.ARTIST_PIC:
return R.drawable.default_album_art;
case CustomGlideRequest.PLAYLIST_PIC:
return R.drawable.default_album_art;
default:
return R.drawable.default_album_art;
}
}
private static String getBitratePreference(Context context, int connectionType) {
String audioTranscodeFormat = getTranscodingFormatPreference(context, connectionType);
2021-12-29 10:20:03 +01:00
if (audioTranscodeFormat.equals("0")) return "0";
switch (connectionType) {
case ConnectivityManager.TYPE_WIFI:
return PreferenceUtil.getInstance(context).getMaxBitrateWifi();
case ConnectivityManager.TYPE_MOBILE:
return PreferenceUtil.getInstance(context).getMaxBitrateMobile();
default:
return PreferenceUtil.getInstance(context).getMaxBitrateWifi();
}
}
private static String getTranscodingFormatPreference(Context context, int connectionType) {
switch (connectionType) {
case ConnectivityManager.TYPE_WIFI:
return PreferenceUtil.getInstance(context).getAudioTranscodeFormatWifi();
case ConnectivityManager.TYPE_MOBILE:
return PreferenceUtil.getInstance(context).getAudioTranscodeFormatMobile();
default:
return PreferenceUtil.getInstance(context).getAudioTranscodeFormatWifi();
}
}
2020-12-08 11:12:44 +01:00
}