loading doesn't cause unavoidable lag (removed excessive blocking);
switched to a blocking queue list to manage album cover loading; threads that should be daemons are daemons now;
This commit is contained in:
@@ -149,6 +149,7 @@ public class MusicList extends Observable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Gdx.app.debug("MusicList", "recursive async search beginning.");
|
||||
Array<FileHandle> obtainedAudioFiles = recursiveMusicSearch(directory);
|
||||
Sort.instance().sort(obtainedAudioFiles, compare);
|
||||
if (work) {
|
||||
@@ -164,6 +165,7 @@ public class MusicList extends Observable {
|
||||
if (thread == null) {
|
||||
work = true;
|
||||
thread = new Thread(this, threadName);
|
||||
thread.setDaemon(true);
|
||||
thread.start();
|
||||
return true;
|
||||
} else {
|
||||
|
@@ -40,6 +40,10 @@ public class MusicMetadataController extends Observable implements Disposable, O
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* if there is the same amount of metadata as there is music in the music list.
|
||||
* @return whether or not both sizes are equal.
|
||||
*/
|
||||
public boolean isDone() {
|
||||
return (metadataArray.size == musicList.getMusicArray().size);
|
||||
}
|
||||
@@ -52,15 +56,11 @@ public class MusicMetadataController extends Observable implements Disposable, O
|
||||
}
|
||||
|
||||
public int size() {
|
||||
synchronized (loadingThread) {
|
||||
return metadataArray.size;
|
||||
}
|
||||
return metadataArray.size;
|
||||
}
|
||||
|
||||
public AudioMetadata getMetadata(int index) {
|
||||
synchronized (loadingThread) {
|
||||
return metadataArray.get(index);
|
||||
}
|
||||
return metadataArray.get(index);
|
||||
}
|
||||
|
||||
|
||||
@@ -80,28 +80,25 @@ public class MusicMetadataController extends Observable implements Disposable, O
|
||||
@Override
|
||||
public void run() {
|
||||
Gdx.app.debug(name, "loading...");
|
||||
clear();
|
||||
searching = true;
|
||||
for (int i = 0; i < metadataArray.size; i++) {
|
||||
metadataArray.get(i).dispose();
|
||||
}
|
||||
metadataArray.clear();
|
||||
Array<AudioMetadata> tempMetadataArray = new Array<>();
|
||||
for (int i = 0; i < musicList.getTotal() && work; i++) {
|
||||
FileHandle musicFile = musicList.getMusicArray().get(i);
|
||||
synchronized (this) {
|
||||
switch (SupportedFormats.valueOf(musicFile.extension().toUpperCase())) {
|
||||
case MP3:
|
||||
metadataArray.add(new MP3Metadata(musicFile));
|
||||
break;
|
||||
case WAV:
|
||||
metadataArray.add(new WAVMetadata(musicFile));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
switch (SupportedFormats.valueOf(musicFile.extension().toUpperCase())) {
|
||||
case MP3:
|
||||
tempMetadataArray.add(new MP3Metadata(musicFile));
|
||||
break;
|
||||
case WAV:
|
||||
tempMetadataArray.add(new WAVMetadata(musicFile));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (work) {
|
||||
metadataArray = tempMetadataArray;
|
||||
searching = false;
|
||||
Gdx.app.debug(name, "load complete.");
|
||||
setChanged();
|
||||
@@ -130,4 +127,11 @@ public class MusicMetadataController extends Observable implements Disposable, O
|
||||
loadAudioMetadata();
|
||||
}
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
for (int i = 0; i < metadataArray.size; i++) {
|
||||
metadataArray.get(i).dispose();
|
||||
}
|
||||
metadataArray.clear();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user