added room and starting making database classes

This commit is contained in:
Isaac Iwasaki 2024-10-05 01:33:35 +07:00
parent 1956170e33
commit 6fcb1a7d39
6 changed files with 89 additions and 7 deletions

View file

@ -36,8 +36,11 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.media3.common.util.UnstableApi
import androidx.room.Room
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import usr.empty.player.database.AppDatabase
import usr.empty.player.database.Track
import usr.empty.player.ui.theme.PlayerTheme
@ -52,6 +55,12 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Log.d("meow", "${filesDir.toPath().resolve("all_tracks.data")}")
val db = Room.databaseBuilder(
applicationContext, AppDatabase::class.java, "local"
).allowMainThreadQueries().build()
Log.d("meow", "${db.trackDao().getAll()}")
if (!Environment.isExternalStorageManager()) {
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
val uri = Uri.fromParts("package", packageName, null)
@ -92,12 +101,21 @@ fun MainLayout(modifier: Modifier = Modifier) {
audioUri?.run {
uriToPath(this).let {
MediaMetadataRetriever().apply {
setDataSource(it)
notas.add(NotaDescriptor(name = nullifyException {
setDataSource(it) // notas.add(NotaDescriptor(name = nullifyException {
// extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)
// } ?: it.split('/').last().split('.').first(), artist = nullifyException {
// extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)
// } ?: "Unknown Artist", sourceType = NotaDescriptor.Source.LOCAL, source = it))
val db = Room.databaseBuilder(
context.applicationContext, AppDatabase::class.java, "local"
).allowMainThreadQueries().build()
db.trackDao().insertTrack(Track(title = nullifyException {
extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)
} ?: it.split('/').last().split('.').first(), artist = nullifyException {
extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)
} ?: "Unknown Artist", sourceType = NotaDescriptor.Source.LOCAL, source = it))
} ?: it.split('/').last().split('.').first(),
artistId = 0,
albumId = null,
sourceType = NotaDescriptor.Source.LOCAL,
source = it))
}
}
}

View file

@ -0,0 +1,11 @@
package usr.empty.player.database
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(
entities = [Track::class], version = 1
)
abstract class AppDatabase : RoomDatabase() {
abstract fun trackDao(): TrackDao
}

View file

@ -0,0 +1,41 @@
package usr.empty.player.database
import androidx.room.ColumnInfo
import androidx.room.Dao
import androidx.room.Entity
import androidx.room.Insert
import androidx.room.PrimaryKey
import androidx.room.Query
import usr.empty.player.NotaDescriptor
import java.util.UUID
// a.k.a. Nota
@Entity
data class Track(
@ColumnInfo val title: String,
@ColumnInfo val artistId: Int,
@ColumnInfo val albumId: Int?,
@ColumnInfo val sourceType: NotaDescriptor.Source,
@ColumnInfo val source: String,
) {
@PrimaryKey(autoGenerate = true)
var uid: Int = 0
@ColumnInfo
var uuid: UUID = UUID.nameUUIDFromBytes("${title}${artistId}".toByteArray())
}
@Dao
interface TrackDao {
@Insert
fun insertTrack(track: Track)
@Query("SELECT * FROM track")
fun getAll(): List<Track>
@Query("SELECT * FROM track WHERE :artistId = artistId")
fun getByArtistId(artistId: Int): List<Track>
@Query("SELECT * FROM track WHERE :albumId = albumId")
fun getByAlbumId(albumId: Int): List<Track>
}