Skip to content

Commit

Permalink
Added SoundCloud Logo & Fixed JioSaavn Link Parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
Shabinder committed Oct 10, 2021
1 parent 1a7124b commit dd654e3
Show file tree
Hide file tree
Showing 9 changed files with 63 additions and 16 deletions.
1 change: 1 addition & 0 deletions android/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
<package android:name="com.gaana" />
<package android:name="com.spotify.music" />
<package android:name="com.jio.media.jiobeats" />
<package android:name="com.soundcloud.android" />
<package android:name="com.google.android.youtube" />
<package android:name="com.google.android.apps.youtube.music" />
</queries>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ actual fun SpotifyLogo() = getCachedPainter(R.drawable.ic_spotify_logo)
@Composable
actual fun SaavnLogo() = getCachedPainter(R.drawable.ic_jio_saavn_logo)

@Composable
actual fun SoundCloudLogo() = getCachedPainter(R.drawable.ic_soundcloud)

@Composable
actual fun GaanaLogo() = getCachedPainter(R.drawable.ic_gaana)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ expect fun SpotifyLogo(): Painter
@Composable
expect fun SaavnLogo(): Painter

@Composable
expect fun SoundCloudLogo(): Painter

@Composable
expect fun YoutubeLogo(): Painter

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,14 @@ import com.shabinder.common.main.SpotiFlyerMain
import com.shabinder.common.main.SpotiFlyerMain.HomeCategory
import com.shabinder.common.models.DownloadRecord
import com.shabinder.common.models.Actions
import com.shabinder.common.models.spotify.Source
import com.shabinder.common.translations.Strings
import com.shabinder.common.uikit.GaanaLogo
import com.shabinder.common.uikit.GithubLogo
import com.shabinder.common.uikit.ImageLoad
import com.shabinder.common.uikit.SaavnLogo
import com.shabinder.common.uikit.ShareImage
import com.shabinder.common.uikit.SoundCloudLogo
import com.shabinder.common.uikit.SpotifyLogo
import com.shabinder.common.uikit.VerticalScrollbar
import com.shabinder.common.uikit.YoutubeLogo
Expand Down Expand Up @@ -319,6 +321,17 @@ fun AboutColumn(
)
)
}
Spacer(modifier = Modifier.padding(top = 8.dp))
Row(horizontalArrangement = Arrangement.Center, modifier = modifier.fillMaxWidth()) {
Icon(
SoundCloudLogo(),
"${Strings.open()} Sound Cloud",
tint = Color.Unspecified,
modifier = Modifier.clip(SpotiFlyerShapes.medium).clickable(
onClick = { Actions.instance.openPlatform("com.soundcloud.android", "https://soundcloud.com/") }
)
)
}
}
}
Spacer(modifier = Modifier.padding(top = 8.dp))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ actual fun SpotifyLogo() =
actual fun SaavnLogo() =
getCachedPainter("drawable/ic_jio_saavn_logo.xml")

@Composable
actual fun SoundCloudLogo() =
getCachedPainter("drawable/ic_soundcloud.xml")

@Composable
actual fun YoutubeLogo() =
getCachedPainter("drawable/ic_youtube.xml")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,11 @@ class DesktopFileManager(

override suspend fun cacheImage(image: Any, path: String): Unit = withContext(dispatcherIO) {
try {
val file = File(path)
if(!file.parentFile.exists()) createDirectories()
(image as? BufferedImage)?.let {
ImageIO.write(it, "jpeg", File(path))
}
ImageIO.write(it, "jpeg", file)
}
} catch (e: IOException) {
e.printStackTrace()
}
Expand Down
14 changes: 14 additions & 0 deletions common/data-models/src/main/res/drawable/ic_soundcloud.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<vector android:height="32dp" android:viewportHeight="1386"
android:viewportWidth="2500" android:width="58dp"
xmlns:aapt="http://schemas.android.com/aapt"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:pathData="M0,1137.74c0,31.02 11.25,54.48 33.74,70.38 22.49,15.9 46.53,21.52 72.13,16.87 24.04,-4.65 40.91,-13.19 50.61,-25.59 9.69,-12.41 14.54,-32.96 14.54,-61.66L171.01,800.37c0,-24.04 -8.34,-44.4 -25.01,-61.08 -16.67,-16.68 -37.03,-25.01 -61.07,-25.01 -23.27,0 -43.24,8.34 -59.91,25.01C8.34,755.97 0,776.33 0,800.37zM267.57,1281.99c0,22.5 7.95,39.36 23.85,50.61 15.9,11.25 36.26,16.87 61.08,16.87 25.59,0 46.34,-5.62 62.24,-16.87 15.9,-11.24 23.85,-28.11 23.85,-50.61L438.58,495.58c0,-23.27 -8.34,-43.24 -25.01,-59.91 -16.67,-16.67 -37.03,-25.01 -61.08,-25.01 -23.27,0 -43.24,8.34 -59.91,25.01 -16.68,16.68 -25.01,36.65 -25.01,59.91zM533.97,1319.22c0,22.49 8.14,39.36 24.43,50.61 16.29,11.24 37.23,16.87 62.82,16.87 24.82,0 45.17,-5.62 61.07,-16.87 15.9,-11.25 23.85,-28.11 23.85,-50.61L706.14,601.44c0,-24.04 -8.34,-44.6 -25.01,-61.66 -16.67,-17.06 -36.64,-25.59 -59.91,-25.59 -24.04,0 -44.6,8.53 -61.66,25.59 -17.06,17.06 -25.59,37.62 -25.59,61.66v717.78zM801.54,1322.71c0,42.66 28.69,63.99 86.09,63.99 57.39,0 86.08,-21.33 86.08,-63.99L973.71,159.38c0,-65.15 -19.78,-101.99 -59.33,-110.52 -25.59,-6.2 -50.8,1.16 -75.62,22.1 -24.82,20.94 -37.23,50.41 -37.23,88.41v1163.33zM1073.76,1356.44L1073.76,90.74c0,-40.33 12.02,-64.37 36.06,-72.13C1161.78,6.2 1213.36,0 1264.54,0c118.66,0 229.18,27.92 331.55,83.76 102.37,55.84 185.16,132.04 248.37,228.59 63.21,96.56 99.85,203 109.94,319.34 47.31,-20.17 97.72,-30.25 151.23,-30.25 108.58,0 201.45,38.39 278.62,115.17 77.17,76.78 115.75,169.07 115.75,276.88 0,108.58 -38.59,201.26 -115.75,278.04 -77.17,76.78 -169.65,115.17 -277.45,115.17l-1012.1,-1.16c-6.98,-2.33 -12.22,-6.59 -15.71,-12.8s-5.23,-11.64 -5.23,-16.29z">
<aapt:attr name="android:fillColor">
<gradient android:endX="1252.675" android:endY="1359.0215"
android:startX="1252.675" android:startY="37.73211" android:type="linear">
<item android:color="#FFFF8800" android:offset="0"/>
<item android:color="#FFFF3300" android:offset="1"/>
</gradient>
</aapt:attr>
</path>
</vector>
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class SaavnProvider(
).apply {
val pageLink = fullLink.substringAfter("saavn.com/").substringBefore("?")
when {
pageLink.contains("/song/", true) -> {
pageLink.contains("song/", true) -> {
getSong(fullLink).value.let {
folderType = "Tracks"
subFolder = ""
Expand All @@ -38,7 +38,7 @@ class SaavnProvider(
coverUrl = it.image.replace("http:", "https:")
}
}
pageLink.contains("/album/", true) -> {
pageLink.contains("album/", true) -> {
getAlbum(fullLink).value.let {
folderType = "Albums"
subFolder = removeIllegalChars(it.title)
Expand All @@ -47,7 +47,7 @@ class SaavnProvider(
coverUrl = it.image.replace("http:", "https:")
}
}
pageLink.contains("/featured/", true) -> { // Playlist
pageLink.contains("featured/", true) -> { // Playlist
getPlaylist(fullLink).value.let {
folderType = "Playlists"
subFolder = removeIllegalChars(it.listname)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,16 @@ import io.github.shabinder.utils.getBoolean
import io.github.shabinder.utils.getJsonArray
import io.github.shabinder.utils.getJsonObject
import io.github.shabinder.utils.getString
import io.ktor.client.*
import io.ktor.client.request.*
import kotlinx.serialization.json.*
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonArray
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.put
import kotlin.collections.set

interface JioSaavnRequests {
Expand All @@ -32,9 +39,9 @@ interface JioSaavnRequests {
trackName: String,
trackArtists: List<String>,
preferredQuality: AudioQuality
): SuspendableEvent<Pair<String,AudioQuality>, Throwable> = searchForSong(trackName).map { songs ->
val bestMatch = sortByBestMatch(songs, trackName, trackArtists).keys.firstOrNull() ?:
throw SpotiFlyerException.DownloadLinkFetchFailed("No SAAVN Match Found for $trackName")
): SuspendableEvent<Pair<String, AudioQuality>, Throwable> = searchForSong(trackName).map { songs ->
val bestMatch = sortByBestMatch(songs, trackName, trackArtists).keys.firstOrNull()
?: throw SpotiFlyerException.DownloadLinkFetchFailed("No SAAVN Match Found for $trackName")

var audioQuality: AudioQuality = AudioQuality.KBPS160
val m4aLink: String by getSongFromID(bestMatch).map { song ->
Expand All @@ -46,7 +53,7 @@ interface JioSaavnRequests {
song.media_url.requireNotNull().replaceAfterLast("_", "${optimalQuality.kbps}.mp4")
}

Pair(m4aLink,audioQuality)
Pair(m4aLink, audioQuality)
}

suspend fun searchForSong(
Expand Down Expand Up @@ -235,8 +242,8 @@ interface JioSaavnRequests {
for (result in tracks) {
var hasCommonWord = false

val resultName = result.title.lowercase().replace("/", " ")
val trackNameWords = trackName.lowercase().split(" ")
val resultName = result.title.toLowerCase().replace("/", " ")
val trackNameWords = trackName.toLowerCase().split(" ")

for (nameWord in trackNameWords) {
if (nameWord.isNotBlank() && FuzzySearch.partialRatio(nameWord, resultName) > 85) hasCommonWord = true
Expand All @@ -256,11 +263,11 @@ interface JioSaavnRequests {
// String Containing All Artist Names from JioSaavn Search Result
val artistListString = mutableSetOf<String>().apply {
result.more_info?.singers?.split(",")?.let { addAll(it) }
result.more_info?.primary_artists?.lowercase()?.split(",")?.let { addAll(it) }
result.more_info?.primary_artists?.toLowerCase()?.split(",")?.let { addAll(it) }
}.joinToString(" , ")

for (artist in trackArtists) {
if (FuzzySearch.partialRatio(artist.lowercase(), artistListString) > 85)
if (FuzzySearch.partialRatio(artist.toLowerCase(), artistListString) > 85)
artistMatchNumber++
}

Expand Down

0 comments on commit dd654e3

Please sign in to comment.