package com.cappielloantonio.play.util; import android.content.Context; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.Uri; import android.text.Html; import com.cappielloantonio.play.App; import com.cappielloantonio.play.R; import com.cappielloantonio.play.glide.CustomGlideRequest; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.regex.Pattern; import java.util.stream.Collectors; public class MusicUtil { private static final String TAG = "MusicUtil"; public static Uri getStreamUri(String id) { Map params = App.getSubsonicClientInstance(false).getParams(); StringBuilder uri = new StringBuilder(); uri.append(App.getSubsonicClientInstance(false).getUrl()); uri.append("stream"); if (params.containsKey("u") && params.get("u") != null) uri.append("?u=").append(params.get("u")); if (params.containsKey("p") && params.get("p") != null) uri.append("&p=").append(params.get("p")); if (params.containsKey("s") && params.get("s") != null) uri.append("&s=").append(params.get("s")); if (params.containsKey("t") && params.get("t") != null) uri.append("&t=").append(params.get("t")); if (params.containsKey("v") && params.get("v") != null) uri.append("&v=").append(params.get("v")); if (params.containsKey("c") && params.get("c") != null) uri.append("&c=").append(params.get("c")); uri.append("&maxBitRate=").append(getBitratePreference()); uri.append("&format=").append(getTranscodingFormatPreference()); uri.append("&id=").append(id); return Uri.parse(uri.toString()); } public static Uri getDownloadUri(String id) { Map params = App.getSubsonicClientInstance(false).getParams(); StringBuilder uri = new StringBuilder(); uri.append(App.getSubsonicClientInstance(false).getUrl()); uri.append("stream"); if (params.containsKey("u") && params.get("u") != null) uri.append("?u=").append(params.get("u")); if (params.containsKey("p") && params.get("p") != null) uri.append("&p=").append(params.get("p")); if (params.containsKey("s") && params.get("s") != null) uri.append("&s=").append(params.get("s")); if (params.containsKey("t") && params.get("t") != null) uri.append("&t=").append(params.get("t")); if (params.containsKey("v") && params.get("v") != null) uri.append("&v=").append(params.get("v")); if (params.containsKey("c") && params.get("c") != null) uri.append("&c=").append(params.get("c")); uri.append("&id=").append(id); return Uri.parse(uri.toString()); } public static String getReadableDurationString(long duration, boolean millis) { long minutes; long seconds; if (millis) { minutes = (duration / 1000) / 60; seconds = (duration / 1000) % 60; } else { 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); } } 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(""", "\"") .replaceAll("'", "'") .replaceAll("&", "'") .replaceAll("]+)>((?:.(?!))*.)", ""); } return ""; } public static String getReadableLyrics(String string) { if (string != null) { return string .replaceAll(""", "\"") .replaceAll("'", "'") .replaceAll("&", "'") .replaceAll(" ", "\n"); } 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 ""; } public static List getReadableStrings(List strings) { List 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; } public static String passwordHexEncoding(String plainPassword) { return "enc:" + plainPassword.chars().mapToObj(Integer::toHexString).collect(Collectors.joining()); } public static int getDefaultPicPerCategory(String category) { 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; } } public static String getBitratePreference() { Network network = getConnectivityManager().getActiveNetwork(); NetworkCapabilities networkCapabilities = getConnectivityManager().getNetworkCapabilities(network); String audioTranscodeFormat = getTranscodingFormatPreference(); if (audioTranscodeFormat.equals("raw") || network == null || networkCapabilities == null) return "0"; if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { return Preferences.getMaxBitrateWifi(); } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { return Preferences.getMaxBitrateMobile(); } else { return Preferences.getMaxBitrateWifi(); } } public static String getTranscodingFormatPreference() { Network network = getConnectivityManager().getActiveNetwork(); NetworkCapabilities networkCapabilities = getConnectivityManager().getNetworkCapabilities(network); if (network == null || networkCapabilities == null) return "raw"; if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { return Preferences.getAudioTranscodeFormatWifi(); } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { return Preferences.getAudioTranscodeFormatMobile(); } else { return Preferences.getAudioTranscodeFormatWifi(); } } private static ConnectivityManager getConnectivityManager() { return (ConnectivityManager) App.getContext().getSystemService(Context.CONNECTIVITY_SERVICE); } }