Minor improvements to the music adding process #43
This commit is contained in:
@@ -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) {
|
||||||
addRemainingTracks()
|
GlobalScope.launch {
|
||||||
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user