Minor improvements to the music adding process #43

This commit is contained in:
amazing-username
2019-04-18 21:34:18 -04:00
parent 66a14edbce
commit 95ad867743
3 changed files with 78 additions and 12 deletions
@@ -69,6 +69,7 @@ class SongViewActivity : BaseServiceActivity() {
trackList.layoutManager = linearLayoutManager trackList.layoutManager = linearLayoutManager
trackListItems = retrieveTrackItems() trackListItems = retrieveTrackItems()
trackListItems.sortedWith(compareBy { it.trackTitle })
adapter = RecyclerAdapter({trackItem: TrackItems -> playTrack(trackItem)}, trackListItems) adapter = RecyclerAdapter({trackItem: TrackItems -> playTrack(trackItem)}, trackListItems)
adapter.configureActivity(this) adapter.configureActivity(this)
@@ -2,9 +2,9 @@ package com.example.mear.management
import android.content.Context import android.content.Context
import android.media.MediaMetadataRetriever import android.media.MediaMetadataRetriever
import android.widget.Toast
import java.io.FileInputStream import java.io.FileInputStream
import java.lang.Exception
import kotlinx.coroutines.* import kotlinx.coroutines.*
import com.example.mear.constants.Filenames import com.example.mear.constants.Filenames
@@ -13,6 +13,7 @@ import com.example.mear.models.Track
import com.example.mear.repositories.PlayCountRepository import com.example.mear.repositories.PlayCountRepository
import com.example.mear.repositories.TrackRepository import com.example.mear.repositories.TrackRepository
import com.example.mear.util.ConvertByteArray import com.example.mear.util.ConvertByteArray
import kotlin.Exception
class TrackManager(var allSongPath: MutableList<String>) { class TrackManager(var allSongPath: MutableList<String>) {
@@ -77,26 +78,40 @@ class TrackManager(var allSongPath: MutableList<String>) {
addToDatabase(initTracks) addToDatabase(initTracks)
if (moreSongs) { if (moreSongs) {
GlobalScope.launch {
addRemainingTracks() addRemainingTracks()
} }
} }
private fun addRemainingTracks() { }
fun addRemainingTracks() = runBlocking {
val remainder = allSongPath.size - songCount!! val remainder = allSongPath.size - songCount!!
if (remainder > 10) { if (remainder > 10) {
// TODO: implement coroutine to add music using the addRanges function
// to get ranges of music to add for each coroutine
val rangeAmount = remainder / 10 val rangeAmount = remainder / 10
val rg = addRanges(rangeAmount)
val remainingT = remainingTracks(rg)
addToDatabase(remainingT)
} }
} }
private fun addRanges(rangeAmount: Int): MutableList<AddMusicRange> { private fun addRanges(rangeAmount: Int): MutableList<AddMusicRange> {
// TODO: implement setting up ranges to split up searching music to add
var ranges = mutableListOf<AddMusicRange>() var ranges = mutableListOf<AddMusicRange>()
try { try {
var rangeCounter = 0 var rangeCounter = 0
//whie (songIndex!! <) val songAmount = allSongPath.size
while (songIndex!! < songAmount) {
val startIndex = songIndex
var endIndex = songIndex!! + rangeAmount
if ((songIndex!! + rangeAmount) > songAmount ) {
endIndex = (songAmount - songIndex!!) + songIndex!!
}
val range = AddMusicRange(startIndex!!, endIndex)
ranges.add(range)
songIndex = endIndex + 1
}
} }
catch (ex: Exception) { catch (ex: Exception) {
val exMsg = ex.message val exMsg = ex.message
@@ -149,6 +164,57 @@ class TrackManager(var allSongPath: MutableList<String>) {
return tracks return tracks
} }
private fun remainingTracks(rangeobjects: AddMusicRange): MutableList<Track> {
val tracks = mutableListOf<Track>()
try {
val startIndex = rangeobjects.startIndex
var endIndex = rangeobjects.endIndex
if (endIndex == allSongPath.size) {
endIndex--
}
for (songPathIndex in startIndex.. endIndex) {
val songPath = allSongPath[songPathIndex]
val track = configureTrack(songPath, songPathIndex)
if (track.id != Int.MAX_VALUE) {
tracks.add(track)
}
}
songCount = songCount!!.plus(tracks.size)
}
catch (ex: Exception) {
val exMsg = ex.message
}
return tracks
}
suspend private fun remainingTracks(obj: MutableList<AddMusicRange>): MutableList<Track> {
val tracks = mutableListOf<Track>()
var rangeRecords = mutableListOf<Boolean>()
try {
for (rgObj in obj) {
coroutineScope {
launch {
val remainingTracks = remainingTracks(rgObj)
tracks.addAll(remainingTracks)
rangeRecords.add(true)
}
}
}
runBlocking {
while (rangeRecords.size != obj.size) {
delay(10)
}
}
}
catch (ex: java.lang.Exception) {
val exMsg = ex.message
}
return tracks
}
private fun configureTrack(songPath: String, id: Int): Track { private fun configureTrack(songPath: String, id: Int): Track {
try { try {
@@ -196,8 +262,6 @@ class TrackManager(var allSongPath: MutableList<String>) {
} }
} }
class AddMusicRange { data class AddMusicRange(val startIndex: Int, val endIndex: Int) {
val startIndex: Int? = null
val endIndex: Int? = null
} }
} }
@@ -284,7 +284,8 @@ class MusicService: Service() {
val paths = mp3Paths.allSongs val paths = mp3Paths.allSongs
trackMgr = TrackManager(paths!!) trackMgr = TrackManager(paths!!)
trackMgr!!.initializeContext(this) trackMgr!!.initializeContext(this)
trackMgr!!.addTracks() //trackMgr!!.addTracks()
trackMgr!!.addTracksKx()
initializeShuffleMode() initializeShuffleMode()
initializeRepeatMode() initializeRepeatMode()
} }
@@ -376,7 +377,7 @@ class MusicService: Service() {
private fun retrieveSongCount(): Int? { private fun retrieveSongCount(): Int? {
try { try {
val count = TrackRepository(this).getSongCount() var count = TrackRepository(this).getSongCount()
return count return count
} }