Continuing work on #16

This commit is contained in:
amazing-username
2019-03-03 01:25:26 -05:00
parent e542bf7dd4
commit bc24149e73
6 changed files with 116 additions and 86 deletions
-8
View File
@@ -1,13 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="Mear" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> <module external.linked.project.id="Mear" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
<option name="BUILDABLE" value="false" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
<exclude-output /> <exclude-output />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
@@ -54,7 +54,8 @@ class MainActivity : AppCompatActivity() {
if (TrackPayer == null) { if (TrackPayer == null) {
TrackPayer = MediaPlayer() TrackPayer = MediaPlayer()
playerInitialized = true playerInitialized = true
TrackPayer!!.setDataSource(allTracks!![currentSong!!].songPath) val tr = TrackRepository(this).getTrack(currentSong!!)
TrackPayer!!.setDataSource(tr.songPath)
TrackPayer!!.prepare() TrackPayer!!.prepare()
} }
} }
@@ -65,9 +66,6 @@ class MainActivity : AppCompatActivity() {
if (!TrackPayer!!.isPlaying) { if (!TrackPayer!!.isPlaying) {
TrackPayer!!.start() TrackPayer!!.start()
configureTrackDisplay() configureTrackDisplay()
println("ss")
} else { } else {
TrackPayer!!.pause() TrackPayer!!.pause()
} }
@@ -85,7 +83,7 @@ class MainActivity : AppCompatActivity() {
} }
TrackPayer!!.reset() TrackPayer!!.reset()
TrackPayer!!.setDataSource(allTracks!![currentSong!!].songPath) TrackPayer!!.setDataSource(TrackRepository(this).getTrack(currentSong!!).songPath)
TrackPayer!!.prepare() TrackPayer!!.prepare()
TrackPayer!!.start() TrackPayer!!.start()
configureTrackDisplay() configureTrackDisplay()
@@ -104,7 +102,7 @@ class MainActivity : AppCompatActivity() {
} }
TrackPayer!!.reset() TrackPayer!!.reset()
TrackPayer!!.setDataSource(allTracks!![currentSong!!].songPath) TrackPayer!!.setDataSource(TrackRepository(this).getTrack(currentSong!!).songPath)
TrackPayer!!.prepare() TrackPayer!!.prepare()
TrackPayer!!.start() TrackPayer!!.start()
configureTrackDisplay() configureTrackDisplay()
@@ -115,12 +113,13 @@ class MainActivity : AppCompatActivity() {
} }
} }
private fun configureTrackDisplay() { private fun configureTrackDisplay() {
val trackTitle = allTracks!![currentSong!!].title val currTrack = TrackRepository(this).getTrack(currentSong!!)
val albumTitle = allTracks!![currentSong!!].album val trackTitle = currTrack.title
val albumTitle = currTrack.album
var trackCover: ByteArray? = null var trackCover: ByteArray? = null
if (!(allTracks!![currentSong!!].TrackCover == null)) { if (!(currTrack.TrackCover == null)) {
trackCover = allTracks!![currentSong!!].TrackCover trackCover = currTrack.TrackCover
} }
TrackTitle.text.clear() TrackTitle.text.clear()
@@ -143,16 +142,16 @@ class MainActivity : AppCompatActivity() {
when (playType) { when (playType) {
PlayTypes.PlayPreviousSong -> { PlayTypes.PlayPreviousSong -> {
if (currentSong!! == 0) { if (currentSong!! == 0) {
songIndex = allTracks!!.size - 1 songIndex = songCount
} else { } else {
songIndex = currentSong!!.dec() songIndex = currentSong!!.dec()
} }
} }
PlayTypes.PlaySong -> { PlayTypes.PlaySong -> {
songIndex = Random.nextInt(0, allTracks!!.size - 1) songIndex = Random.nextInt(0, songCount!!)
} }
PlayTypes.PlayNextSong -> { PlayTypes.PlayNextSong -> {
if (currentSong!! == (allTracks!!.size - 1)) { if (currentSong!! == songCount!!) {
songIndex = 0 songIndex = 0
} else { } else {
songIndex = currentSong!!.inc() songIndex = currentSong!!.inc()
@@ -177,69 +176,44 @@ class MainActivity : AppCompatActivity() {
return allSongs!! return allSongs!!
} }
private fun loadTracks(allSongs: MutableList<String>) { private fun loadTracks(allSongs: MutableList<String>) {
var trackMgr = TrackManager(allSongs!!) try {
trackMgr.configureTracks()
val allTracks = trackMgr.allTracks
trackMgr = TrackManager( listOf())
this.allTracks = allTracks
databaseInit(allTracks!!) //var trackMgr = TrackManager(allSongs!!)
val obk = TrackRepository(this).getAll() //trackMgr.deleteTable(this)
//songCount = trackMgr.configureTracks(this)
//songCount = trackMgr.configureTracks(this)
//TrackRepository(this).createSongCount(songCount!!)
//var sC = TrackRepository(this).getSongCount()
//trackMgr.dumpToDatabase(this)
//trackMgr.dumpToDatabase()
//val allTracks = trackMgr.allTracks
//databaseInit(allTracks!!)
//databaseInit(trackMgr.allTracks!!)
//trackMgr = TrackManager( mutableListOf())
//val obk = TrackRepository(this).getAll()
//TrackRepository(this).songCount = TrackRepository(this).getAll().size
songCount = TrackRepository(this).getSongCount()
currentSong = fetchSongIndex(PlayTypes.PlaySong) currentSong = fetchSongIndex(PlayTypes.PlaySong)
}
catch (ex: Exception) {
val exMsg = ex.message
}
} }
private fun databaseInit(allTracks: MutableList<Track>) { private fun databaseInit(allTracks: MutableList<Track>) {
/**
database.use {
dropTable("Track")
createTable("Track", true,
"Id" to INTEGER + PRIMARY_KEY + UNIQUE,
"Title" to INTEGER, "Album" to TEXT, "Artist" to TEXT,
"Duration" to INTEGER, "Cover" to BLOB, "SongPath" to TEXT
)
for (songData in allTracks) {
insert("Track",
"id" to songData.id,
"Title" to songData.title,
"Album" to songData.album,
"Artist" to songData.artist,
"Duration" to songData.length,
"Cover" to songData.TrackCover,
"FilePath" to songData.songPath)
}
}
*/
/**
myDB.createTable("Track", true,
"Id" to INTEGER + UNIQUE,
"Title" to TEXT, "Artist" to TEXT, "Album" to TEXT,
"Duration" to INTEGER, "Cover" to BLOB, "SongPath" to TEXT)
*/
TrackRepository(this).delete() TrackRepository(this).delete()
for (songData in allTracks) { for (songData in allTracks) {
TrackRepository(this).create(songData) TrackRepository(this).create(songData)
} }
} }
/**
private fun databaseGetTracks(db: ManagedSQLiteOpenHelper): List<Track> = db.use {
val trackParser = classParser<Track>()
var dbObj = db.readableDatabase
dbObj.use {
select("Track").exec {
val ss = this
val tracks: List<Track> = parseList()
}
}
}
*/
private var TrackPayer: MediaPlayer? = null private var TrackPayer: MediaPlayer? = null
private var allTracks: MutableList<Track>? = null
private var currentSong: Int? = null private var currentSong: Int? = null
private var playerInitialized: Boolean? = null private var playerInitialized: Boolean? = null
private var songCount: Int? = null
private enum class PlayTypes { private enum class PlayTypes {
PlayNextSong, PlaySong, PlayPreviousSong PlayNextSong, PlaySong, PlayPreviousSong
@@ -28,10 +28,14 @@ class DatabaseManager(ctx: Context): ManagedSQLiteOpenHelper(ctx, "Mear",
"Title" to TEXT, "Album" to TEXT, "Artist" to TEXT, "Title" to TEXT, "Album" to TEXT, "Artist" to TEXT,
"Cover" to BLOB, "Duration" to INTEGER, "Cover" to BLOB, "Duration" to INTEGER,
"FilePath" to TEXT) "FilePath" to TEXT)
db!!.createTable("TrackCount", true,
"Id" to INTEGER + PRIMARY_KEY + UNIQUE,
"TotalSongs" to INTEGER)
} }
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db!!.dropTable("Track") db!!.dropTable("Track")
db!!.dropTable("TrackCount")
} }
@@ -2,15 +2,14 @@ package com.example.mear.management
import java.io.File import java.io.File
import java.lang.Exception import java.lang.Exception
import kotlin.io.*
class MusicFiles (val demoPath: File) { class MusicFiles (private val demoPath: File) {
fun loadAllMusicPaths() { fun loadAllMusicPaths() {
try { try {
allSongs = mutableListOf() allSongs = mutableListOf()
val demoPath = this.demoPath.absoluteFile.toString() +"/music/" val demoPath = this.demoPath.absoluteFile.toString() + "/music/"
val f = File(demoPath) val f = File(demoPath)
var count = 0 var count = 0
@@ -45,5 +44,5 @@ class MusicFiles (val demoPath: File) {
var allSongs: MutableList<String>?= null var allSongs: MutableList<String>?= null
var songCount: Int? = null var songCount: Int? = null
val musicSongLimit = 120 val musicSongLimit = Int.MAX_VALUE
} }
@@ -1,5 +1,6 @@
package com.example.mear.management package com.example.mear.management
import android.content.Context
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.media.MediaMetadataRetriever import android.media.MediaMetadataRetriever
@@ -7,12 +8,12 @@ import java.lang.Exception
import com.example.mear.models.Track import com.example.mear.models.Track
class TrackManager(val allSongPath: List<String>) { class TrackManager(var allSongPath: MutableList<String>) {
fun configureTracks() { fun configureTracks(ctx: Context): Int {
var id = 0
try { try {
var id = 0
allTracks = mutableListOf() allTracks = mutableListOf()
for (musicPath in allSongPath) { for (musicPath in allSongPath) {
var mmr = MediaMetadataRetriever() var mmr = MediaMetadataRetriever()
@@ -30,19 +31,36 @@ class TrackManager(val allSongPath: List<String>) {
} }
else { else {
art = mmr.embeddedPicture art = mmr.embeddedPicture
var songImage = BitmapFactory }
.decodeByteArray(art, 0, art!!.size) if (trackTitle == null || trackArtist == null || trackAlbum == null ||
trackLenghStr == null) {
println("dd")
} }
var track = Track(id, trackTitle, trackArtist, trackAlbum, trackLength, var track = Track(id, trackTitle, trackArtist, trackAlbum, trackLength,
art!!, musicPath) art!!, musicPath)
dumpToDatabase(ctx, track)
id++ id++
allTracks!!.add(track)
} }
TrackRepository(ctx).createSongCount((id -1))
} }
catch (ex: Exception) { catch (ex: Exception) {
val exMsg = ex.message val exMsg = ex.message
} }
return id.dec()
}
fun dumpToDatabase(ctx: Context) {
TrackRepository(ctx).delete()
for (songData in allTracks!!) {
TrackRepository(ctx).create(songData)
allTracks!!.removeAt(songData.id )
}
}
fun deleteTable(ctx: Context) {
TrackRepository(ctx).delete()
}
private fun dumpToDatabase(ctx: Context, track: Track) {
TrackRepository(ctx).create(track)
} }
var allTracks: MutableList<Track>? = null var allTracks: MutableList<Track>? = null
@@ -1,13 +1,10 @@
package com.example.mear.management package com.example.mear.management
import android.content.Context import android.content.Context
import com.example.mear.database
import java.util.ArrayList
import org.jetbrains.anko.db.* import org.jetbrains.anko.db.*
import com.example.mear.management.* import com.example.mear.database
import com.example.mear.models.Track import com.example.mear.models.Track
class TrackRepository(val context: Context) { class TrackRepository(val context: Context) {
@@ -15,21 +12,55 @@ class TrackRepository(val context: Context) {
fun getAll(): List<Track> = context.database.use { fun getAll(): List<Track> = context.database.use {
val tracks = mutableListOf<Track>() val tracks = mutableListOf<Track>()
select("Track", "id", "Title") select("Track" )
.parseList(object : MapRowParser<Track>{ .parseList(object : MapRowParser<Track>{
override fun parseRow(columns: Map<String, Any?>): Track { override fun parseRow(columns: Map<String, Any?>): Track {
val id = columns.getValue("Id") val id = columns.getValue("Id")
val title = columns.getValue("Title") val title = columns.getValue("Title")
val artist = columns.getValue("Artist").toString()
val album = columns.getValue("Album").toString()
val duration = columns.getValue("Duration").toString().toInt()
val cover = columns.getValue("Cover").toString().toByteArray()
val songPath = columns.getValue("FilePath").toString()
val track = Track(id.toString().toInt(), title.toString(),"","",0, val track = Track(id.toString().toInt(), title.toString(),artist,album,
ByteArray(0), "") duration,cover,songPath)
tracks.add(track) tracks.add(track)
return track return track
} }
}) })
sonC = tracks.count()
tracks tracks
} }
fun getTrack(id: Int): Track = context.database.use {
select("Track").where("Id = $id")
.parseSingle(object: MapRowParser<Track>{
override fun parseRow(columns: Map<String, Any?>): Track {
val id = columns.getValue("Id").toString().toInt()
val title = columns.getValue("Title").toString()
val artist = columns.getValue("Artist").toString()
var album = columns.getValue("Album").toString()
val duration = columns.getValue("Duration").toString().toInt()
var cover = columns.getValue("Cover").toString().toByteArray()
var filePath = columns.getValue("FilePath").toString()
val track = Track(id, title, artist, album, duration,
cover, filePath)
return track
}
})
}
fun getSongCount(): Int = context.database.use {
select("TrackCount").limit(1)
.parseSingle(object : MapRowParser<Int>{
override fun parseRow(columns: Map<String, Any?>): Int {
return columns.getValue("TotalSongs").toString().toInt()
}
})
}
fun create(track: Track) = context.database.use { fun create(track: Track) = context.database.use {
insert("Track", insert("Track",
@@ -38,9 +69,14 @@ class TrackRepository(val context: Context) {
"Album" to track.album, "Album" to track.album,
"Artist" to track.artist, "Artist" to track.artist,
"Duration" to track.length, "Duration" to track.length,
"SongPath" to track.songPath, "FilePath" to track.songPath,
"Cover" to track.TrackCover) "Cover" to track.TrackCover)
} }
fun createSongCount(songCount: Int) = context.database.use {
insert("TrackCount",
"Id" to 0,
"TotalSongs" to songCount)
}
fun delete(track: Track) = context.database.use { fun delete(track: Track) = context.database.use {
delete("Track", whereClause = "id = {$track.id}") delete("Track", whereClause = "id = {$track.id}")
@@ -48,4 +84,11 @@ class TrackRepository(val context: Context) {
fun delete() = context.database.use { fun delete() = context.database.use {
delete("Track") delete("Track")
} }
var songCount: Int? = null
companion object {
var sonC: Int = 0
}
} }