Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c89f98e
Init refactor
Piripe Jun 21, 2026
f3e097b
Reverted models in UI
Piripe Jun 24, 2026
995c7de
Added Retrofit
Piripe Jun 24, 2026
e11d2ff
implemented SubsonicMediaProvider.authenticate
Piripe Jun 27, 2026
b32b1ed
implemented MediaProviderManager init/save/load
Piripe Jun 27, 2026
9e4c70c
changed the package of every legacy files to avoid using them
Piripe Jun 27, 2026
9837e73
Renamed MediaItem to MediaModel
Piripe Jun 30, 2026
657e963
Added Album.toMediaItem
Piripe Jun 30, 2026
11d6c03
Updated AlbumRepository
Piripe Jun 30, 2026
69fadce
Updated ArtistRepository
Piripe Jun 30, 2026
7937305
Updated PlaylistRepository
Piripe Jun 30, 2026
7bbf8ad
Updated RadioRepository
Piripe Jun 30, 2026
e21f307
Updated SongRepository
Piripe Jun 30, 2026
3ca88a6
Updated StarredRepository
Piripe Jun 30, 2026
ced296a
Implemented MediaProviderManager addProvider/removeProvider/setProvid…
Piripe Jun 30, 2026
f198d50
Updated Application, MainActivity and MusicService
Piripe Jul 1, 2026
0387ce7
Added supported sorting in the MediaProvider
Piripe Jul 1, 2026
3fadaa8
Updated songs and radio screen view models
Piripe Jul 1, 2026
51ad43a
Updated the rest of the view models
Piripe Jul 1, 2026
0164faf
Updated some screens
Piripe Jul 1, 2026
b658ff3
Updated some more screens
Piripe Jul 1, 2026
915d70d
Removed most errors with minimal effort
Piripe Jul 1, 2026
0b15ed3
Deleted legacy files
Piripe Jul 2, 2026
492bc11
"Working" app
Piripe Jul 2, 2026
e28a45b
Some changes to SubsonicMediaProvider
Piripe Jul 2, 2026
faf31a5
Implemented MigrationManager
Piripe Jul 2, 2026
2802907
Fix Subsonic models and add Json Deserialization
CraftWorksMC Jul 2, 2026
a8afcb8
Fixed ProvidersRefactorMigration
Piripe Jul 2, 2026
670f957
Reverted ProvidersRefactorMigration changes
Piripe Jul 2, 2026
0562b47
Simplified the album model
Piripe Jul 2, 2026
9535880
Added LocalMediaProvider (unfinished)
Piripe Jul 2, 2026
ab77e7f
Make LocalMediaProvider serializable
Piripe Jul 2, 2026
6965f74
Switch to Ktorfit, implement more subsonic endpoints, playback working.
CraftWorksMC Jul 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
plugins {
id("com.android.application")
id("com.google.devtools.ksp")
kotlin("plugin.serialization") version "2.4.0"
kotlin("plugin.serialization") version "2.3.21"
alias(libs.plugins.compose.compiler)
alias(libs.plugins.hilt)
alias(libs.plugins.ktorfit)
}

android {
Expand Down Expand Up @@ -100,6 +101,8 @@ dependencies {
implementation(libs.androidx.datastore.preferences)

implementation(libs.composefadingedges)
implementation(libs.ktorfit)
ksp(libs.kotlin.metadata.jvm)

testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/com/craftworks/music/Application.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.craftworks.music

import android.app.Application
import com.craftworks.music.managers.LocalProviderManager
import com.craftworks.music.managers.NavidromeManager
import com.craftworks.music.managers.MediaProviderManager
import com.craftworks.music.managers.MigrationManager
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class ChoraApplication : Application(){
override fun onCreate() {
super.onCreate()
NavidromeManager.init(this)
LocalProviderManager.init(this)
MigrationManager.init(this)
MediaProviderManager.init(this)
}
}
11 changes: 4 additions & 7 deletions app/src/main/java/com/craftworks/music/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,7 @@ import androidx.tv.material3.NavigationDrawerItem
import androidx.tv.material3.rememberDrawerState
import com.craftworks.music.data.BottomNavItem
import com.craftworks.music.data.model.Screen
import com.craftworks.music.managers.LocalProviderManager
import com.craftworks.music.managers.NavidromeManager
import com.craftworks.music.managers.MediaProviderManager
import com.craftworks.music.managers.settings.AppearanceSettingsManager
import com.craftworks.music.player.ChoraMediaLibraryService
import com.craftworks.music.player.rememberManagedMediaController
Expand Down Expand Up @@ -324,10 +323,7 @@ class MainActivity : ComponentActivity() {
var showNoProvidersDialog by rememberSaveable { mutableStateOf(false) }

LaunchedEffect(Unit) {
val folders = LocalProviderManager.getAllFolders()
val servers = NavidromeManager.getAllServers()

showNoProvidersDialog = !(folders.isEmpty() && servers.isEmpty())
showNoProvidersDialog = MediaProviderManager.allProviders.value.isEmpty()
}

if (!showNoProvidersDialog) {
Expand Down Expand Up @@ -801,7 +797,8 @@ fun AnimatedBottomNavBar(
}
}

fun formatMilliseconds(seconds: Int): String {
// TODO("Move these utils funtions to a separated utils package")
fun formatSeconds(seconds: Int): String {
return String.format(Locale.getDefault(), "%02d:%02d", seconds / 60, seconds % 60)
}

Expand Down
7 changes: 0 additions & 7 deletions app/src/main/java/com/craftworks/music/NavGraph.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,7 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.navigation
import androidx.navigation.navArgument
import com.craftworks.music.data.model.Screen
import com.craftworks.music.data.model.playlistList
import com.craftworks.music.data.repository.LyricsState
import com.craftworks.music.managers.settings.LocalDataSettingsManager
import com.craftworks.music.managers.settings.MediaProviderSettingsManager
import com.craftworks.music.ui.playing.NowPlayingContent
import com.craftworks.music.ui.playing.NowPlayingViewModel
Expand Down Expand Up @@ -97,9 +95,6 @@ fun SetupNavGraph(
val isTv = LocalConfiguration.current.uiMode and
Configuration.UI_MODE_TYPE_MASK == Configuration.UI_MODE_TYPE_TELEVISION

playlistList =
LocalDataSettingsManager(context).localPlaylists.collectAsStateWithLifecycle(mutableListOf()).value

LyricsState.useLrcLib =
MediaProviderSettingsManager(context).lrcLibLyricsFlow.collectAsStateWithLifecycle(true).value

Expand All @@ -111,8 +106,6 @@ fun SetupNavGraph(

val animationSpec = MaterialTheme.LocalMotionScheme.current.slowSpatialSpec<Float>()



NavHost(
navController = navController,
startDestination = Screen.Home.route,
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class LrclibDataSource @Inject constructor(
suspend fun getLrcLibLyrics(metadata: MediaMetadata?, ignoreCachedResponse: Boolean = false): List<Lyric> = withContext(Dispatchers.IO) {
val baseUrl = settingsManager.lrcLibEndpointFlow.first()

val artist = metadata?.extras?.getString("lyricsArtist")
val artist = metadata?.extras?.getString("lyricsArtist") ?: metadata?.artist.toString()
val title = metadata?.title
val album = metadata?.albumTitle
val duration = metadata?.durationMs?.div(1000)
Expand Down
Loading