Skip to content

Commit 7ee0396

Browse files
authored
[release] ✨ 5.6.0 #226
2 parents ca6b90a + 84ec19c commit 7ee0396

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+669
-379
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## 5.6.0
4+
- Fixed LRCLIB api not responding sometimes (hopefully)
5+
- Misc updates and fixes
6+
- Added flex fonts for headlines, displays and sharecards
7+
38
## 5.5.2
49
- Fixed synced lyrics not loading
510
- Moved to jdk 21 (fdroid builds)

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
![](fastlane/metadata/android/en-US/images/featureGraphic.png)
22

3-
[<img alt="Get it on Google Play" src="badges/playstore.png" width="200px">](https://play.google.com/store/apps/details?id=com.shub39.rush.play)
4-
[<img alt="Get it on github" src="badges/github.png" width="200px">](https://github.com/shub39/Rush/releases)
5-
[<img alt="Get it on izzyondroid" src="badges/izzyondroid.png" width="200px">](https://apt.izzysoft.de/fdroid/index/apk/com.shub39.rush)
6-
[<img alt="Get it on fdroid" src="badges/fdroid.png" width="200px">](https://f-droid.org/en/packages/com.shub39.rush/)
3+
[<img alt="Get it on Google Play" src="badges/playstore.png" width="180px">](https://play.google.com/store/apps/details?id=com.shub39.rush.play)
4+
[<img alt="Get it on github" src="badges/github.png" width="180px">](https://github.com/shub39/Rush/releases)
5+
[<img alt="Get it on izzyondroid" src="badges/izzyondroid.png" width="180px">](https://apt.izzysoft.de/fdroid/index/apk/com.shub39.rush)
6+
[<img alt="Get it on fdroid" src="badges/fdroid.png" width="180px">](https://f-droid.org/en/packages/com.shub39.rush/)
77

88
## Screenshots
99

app/build.gradle.kts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414
* You should have received a copy of the GNU General Public License
1515
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1616
*/
17-
import com.android.build.gradle.internal.api.ApkVariantOutputImpl
1817
import java.util.Properties
1918

2019
plugins {
2120
alias(libs.plugins.android.application)
2221
alias(libs.plugins.compose.compiler)
2322
alias(libs.plugins.kotlin.serialization)
24-
alias(libs.plugins.jetbrains.kotlin.android)
2523
alias(libs.plugins.ksp)
2624
}
2725

@@ -105,16 +103,10 @@ android {
105103
}
106104
}
107105

108-
applicationVariants.all {
109-
outputs.all {
110-
val apkOutput = this as ApkVariantOutputImpl
111-
apkOutput.outputFileName = "app-release.apk"
112-
}
113-
}
114-
115106
buildFeatures {
116107
compose = true
117108
buildConfig = true
109+
resValues = true
118110
}
119111

120112
compileOptions {

app/src/main/java/com/shub39/rush/data/HttpClientFactory.kt

Lines changed: 0 additions & 56 deletions
This file was deleted.

app/src/main/java/com/shub39/rush/data/backup/ExportImpl.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,9 @@ import kotlinx.coroutines.Dispatchers
2525
import kotlinx.coroutines.withContext
2626
import kotlinx.serialization.json.Json
2727
import org.koin.core.annotation.Single
28-
import kotlin.time.ExperimentalTime
2928

3029
@Single(binds = [ExportRepo::class])
3130
class ExportImpl(private val songRepo: SongRepository) : ExportRepo {
32-
@OptIn(ExperimentalTime::class)
3331
override suspend fun exportToJson(): String? =
3432
withContext(Dispatchers.IO) {
3533
return@withContext try {

app/src/main/java/com/shub39/rush/data/backup/RestoreImpl.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ import com.shub39.rush.domain.backup.RestoreFailedException
2525
import com.shub39.rush.domain.backup.RestoreRepo
2626
import com.shub39.rush.domain.backup.RestoreResult
2727
import com.shub39.rush.domain.interfaces.SongRepository
28+
import kotlin.io.path.createTempFile
29+
import kotlin.io.path.deleteIfExists
30+
import kotlin.io.path.outputStream
31+
import kotlin.io.path.readText
2832
import kotlinx.coroutines.Dispatchers
2933
import kotlinx.coroutines.withContext
3034
import kotlinx.serialization.SerializationException
3135
import kotlinx.serialization.json.Json
3236
import org.koin.core.annotation.Single
33-
import kotlin.io.path.createTempFile
34-
import kotlin.io.path.deleteIfExists
35-
import kotlin.io.path.outputStream
36-
import kotlin.io.path.readText
3737

3838
@Single(binds = [RestoreRepo::class])
3939
class RestoreImpl(private val songRepo: SongRepository, private val context: Context) :

app/src/main/java/com/shub39/rush/data/listener/MediaListenerImpl.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ import androidx.core.content.getSystemService
2929
import com.shub39.rush.data.listener.MediaListenerImpl.playbackSpeedFlow
3030
import com.shub39.rush.data.listener.MediaListenerImpl.songInfoFlow
3131
import com.shub39.rush.data.listener.MediaListenerImpl.songPositionFlow
32-
import com.shub39.rush.presentation.getMainArtist
33-
import com.shub39.rush.presentation.getMainTitle
3432
import kotlinx.coroutines.CoroutineScope
3533
import kotlinx.coroutines.Dispatchers
3634
import kotlinx.coroutines.delay
@@ -204,7 +202,7 @@ object MediaListenerImpl {
204202

205203
coroutineScope.launch {
206204
if (controller.playbackState?.let { isActive(it) } == true) {
207-
songInfoFlow.emit(Pair(getMainTitle(title), getMainArtist(artist)))
205+
songInfoFlow.emit(Pair(title, artist))
208206
playbackSpeedFlow.emit(controller.playbackState?.playbackSpeed ?: 1f)
209207
controller.playbackState?.position?.let { songPositionFlow.emit(it) }
210208
}

app/src/main/java/com/shub39/rush/data/network/GeniusApi.kt

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,53 @@
1616
*/
1717
package com.shub39.rush.data.network
1818

19+
import com.shub39.rush.BuildConfig
1920
import com.shub39.rush.data.network.dto.genius.GeniusSearchDto
2021
import com.shub39.rush.data.safeCall
2122
import com.shub39.rush.domain.Result
2223
import io.ktor.client.HttpClient
24+
import io.ktor.client.engine.okhttp.OkHttp
25+
import io.ktor.client.plugins.HttpTimeout
26+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
27+
import io.ktor.client.plugins.defaultRequest
28+
import io.ktor.client.plugins.logging.Logger
29+
import io.ktor.client.plugins.logging.Logging
2330
import io.ktor.client.request.get
2431
import io.ktor.client.request.header
2532
import io.ktor.client.request.parameter
33+
import io.ktor.http.ContentType
2634
import io.ktor.http.HttpHeaders
35+
import io.ktor.http.contentType
36+
import io.ktor.serialization.kotlinx.json.json
37+
import kotlinx.serialization.json.Json
2738
import org.koin.core.annotation.Single
2839

2940
@Single
30-
class GeniusApi(private val client: HttpClient) {
41+
class GeniusApi {
42+
private val client by lazy {
43+
HttpClient(OkHttp) {
44+
install(ContentNegotiation) { json(json = Json { ignoreUnknownKeys = true }) }
45+
46+
install(HttpTimeout) {
47+
socketTimeoutMillis = 20_000
48+
requestTimeoutMillis = 20_000
49+
}
50+
51+
if (BuildConfig.DEBUG) {
52+
install(Logging) {
53+
logger =
54+
object : Logger {
55+
override fun log(message: String) {
56+
println(message)
57+
}
58+
}
59+
}
60+
}
61+
62+
defaultRequest { contentType(ContentType.Application.Json) }
63+
}
64+
}
65+
3166
suspend fun geniusSearch(
3267
query: String
3368
): Result<GeniusSearchDto, com.shub39.rush.domain.SourceError> = safeCall {
@@ -39,6 +74,6 @@ class GeniusApi(private val client: HttpClient) {
3974

4075
private companion object {
4176
private const val BASE_URL = "https://api.genius.com"
42-
private const val BEARER_TOKEN = "Bearer ${Tokens.GENIUS_API}"
77+
private const val BEARER_TOKEN = "Bearer ${BuildConfig.GENIUS_API_TOKEN}"
4378
}
4479
}

app/src/main/java/com/shub39/rush/data/network/GeniusScraper.kt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,54 @@ package com.shub39.rush.data.network
1919
import com.fleeksoft.ksoup.Ksoup
2020
import com.fleeksoft.ksoup.nodes.Element
2121
import com.fleeksoft.ksoup.nodes.TextNode
22+
import com.shub39.rush.BuildConfig
2223
import com.shub39.rush.data.safeCall
2324
import com.shub39.rush.domain.Result
2425
import com.shub39.rush.domain.SourceError
2526
import io.ktor.client.HttpClient
2627
import io.ktor.client.call.body
28+
import io.ktor.client.engine.okhttp.OkHttp
29+
import io.ktor.client.plugins.HttpTimeout
30+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
31+
import io.ktor.client.plugins.defaultRequest
32+
import io.ktor.client.plugins.logging.Logger
33+
import io.ktor.client.plugins.logging.Logging
2734
import io.ktor.client.request.get
2835
import io.ktor.client.statement.HttpResponse
36+
import io.ktor.http.ContentType
37+
import io.ktor.http.contentType
38+
import io.ktor.serialization.kotlinx.json.json
39+
import kotlinx.serialization.json.Json
2940
import org.koin.core.annotation.Single
3041

3142
// thanks to https://github.com/imjyotiraditya/genius-lyrics-cli and
3243
// https://github.com/rramiachraf/dumb
3344
@Single
34-
class GeniusScraper(private val client: HttpClient) {
45+
class GeniusScraper {
46+
private val client by lazy {
47+
HttpClient(OkHttp) {
48+
install(ContentNegotiation) { json(json = Json { ignoreUnknownKeys = true }) }
49+
50+
install(HttpTimeout) {
51+
socketTimeoutMillis = 20_000
52+
requestTimeoutMillis = 20_000
53+
}
54+
55+
if (BuildConfig.DEBUG) {
56+
install(Logging) {
57+
logger =
58+
object : Logger {
59+
override fun log(message: String) {
60+
println(message)
61+
}
62+
}
63+
}
64+
}
65+
66+
defaultRequest { contentType(ContentType.Application.Json) }
67+
}
68+
}
69+
3570
companion object {
3671
val dumbInstances =
3772
listOf("dumb.ducks.party/", "dumb.lunar.icu/", "dumb.bloat.cat/", "dumb.jeikobu.net/")

0 commit comments

Comments
 (0)