mirror of
				https://github.com/emptyynes/EmptyPlayer.git
				synced 2025-10-30 22:28:56 +03:00 
			
		
		
		
	added room and starting making database classes
This commit is contained in:
		
							parent
							
								
									1956170e33
								
							
						
					
					
						commit
						6fcb1a7d39
					
				
					 6 changed files with 89 additions and 7 deletions
				
			
		|  | @ -3,6 +3,7 @@ plugins { | |||
|     alias(libs.plugins.kotlin.android) | ||||
|     alias(libs.plugins.compose.compiler) | ||||
|     id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" | ||||
|     id("com.google.devtools.ksp") | ||||
| } | ||||
| 
 | ||||
| android { | ||||
|  | @ -64,6 +65,12 @@ dependencies { | |||
|     implementation(libs.androidx.media3.ui) | ||||
|     implementation(libs.androidx.media3.common) | ||||
|     implementation(libs.androidx.media3.session) | ||||
|     implementation(libs.androidx.room.runtime) | ||||
|     implementation(libs.com.google.devtools.ksp.gradle.plugin) | ||||
| 
 | ||||
|     ksp(libs.androidx.room.compiler) | ||||
| 
 | ||||
|     annotationProcessor(libs.androidx.room.compiler) | ||||
| 
 | ||||
|     debugImplementation(libs.androidx.ui.tooling) | ||||
|     debugImplementation(libs.androidx.ui.test.manifest) | ||||
|  |  | |||
|  | @ -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)) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  |  | |||
							
								
								
									
										11
									
								
								app/src/main/java/usr/empty/player/database/AppDatabase.kt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								app/src/main/java/usr/empty/player/database/AppDatabase.kt
									
										
									
									
									
										Normal 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 | ||||
| } | ||||
							
								
								
									
										41
									
								
								app/src/main/java/usr/empty/player/database/Track.kt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								app/src/main/java/usr/empty/player/database/Track.kt
									
										
									
									
									
										Normal 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> | ||||
| } | ||||
|  | @ -2,4 +2,5 @@ | |||
| plugins { | ||||
|     alias(libs.plugins.android.application) apply false | ||||
|     alias(libs.plugins.kotlin.android) apply false | ||||
|     id("com.google.devtools.ksp") version "2.0.20-1.0.25" apply false | ||||
| } | ||||
|  | @ -5,8 +5,9 @@ coreKtx = "1.13.1" | |||
| kotlinxSerializationJson = "1.7.3" | ||||
| lifecycleRuntimeKtx = "2.8.6" | ||||
| activityCompose = "1.9.2" | ||||
| composeBom = "2024.09.02" | ||||
| composeBom = "2024.09.03" | ||||
| media3Exoplayer = "1.4.1" | ||||
| roomRuntime = "2.6.1" | ||||
| 
 | ||||
| [libraries] | ||||
| androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } | ||||
|  | @ -17,13 +18,16 @@ androidx-media3-ui = { module = "androidx.media3:media3-ui", version.ref = "medi | |||
| androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } | ||||
| androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } | ||||
| androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } | ||||
| androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "roomRuntime" } | ||||
| androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" } | ||||
| androidx-ui = { group = "androidx.compose.ui", name = "ui" } | ||||
| androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } | ||||
| androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } | ||||
| androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } | ||||
| androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } | ||||
| androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest", version = "1.7.3" } | ||||
| androidx-material3 = { group = "androidx.compose.material3", name = "material3" } | ||||
| kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" } | ||||
| com-google-devtools-ksp-gradle-plugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version = "2.0.20-1.0.25" } | ||||
| 
 | ||||
| [plugins] | ||||
| android-application = { id = "com.android.application", version.ref = "agp" } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue