diff --git a/app/src/main/java/max/music_cyclon/service/BeetsFetcher.java b/app/src/main/java/max/music_cyclon/service/BeetsFetcher.java index 7a04846..0f24170 100644 --- a/app/src/main/java/max/music_cyclon/service/BeetsFetcher.java +++ b/app/src/main/java/max/music_cyclon/service/BeetsFetcher.java @@ -10,8 +10,10 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Random; +import java.util.Set; import max.music_cyclon.SynchronizeConfig; import okhttp3.OkHttpClient; @@ -29,7 +31,7 @@ public class BeetsFetcher { this.resources = resources; } - public List fetch(SynchronizeConfig config, + public Set fetch(SynchronizeConfig config, String username, String password) throws IOException { StringBuilder get; @@ -58,18 +60,18 @@ public class BeetsFetcher { if (response.code() != 200) { Log.e("ERROR", "Server returned HTTP " + response.message()); - return Collections.emptyList(); + return Collections.emptySet(); } InputStream stream = response.body().byteStream(); - List items = parseJson(stream, config.getSize(resources), config.isAlbum(resources)); + Set items = parseJson(stream, config.getSize(resources), config.isAlbum(resources)); stream.close(); return items; } - private List parseJson(InputStream stream, int size, boolean isAlbums) throws IOException { + private Set parseJson(InputStream stream, int size, boolean isAlbums) throws IOException { JsonReader reader = new JsonReader(new BufferedReader(new InputStreamReader(stream, "UTF-8"))); List items = new ArrayList<>(); List> albums = new ArrayList<>(); @@ -90,29 +92,31 @@ public class BeetsFetcher { // Select random if (isAlbums) { - List> randomAlbums = selectRandom(albums, size); + Set> randomAlbums = selectRandom(albums, size); - for (ArrayList album : randomAlbums) { + for (List album : randomAlbums) { items.addAll(album); } - return Collections.unmodifiableList(items); + + return Collections.unmodifiableSet(new HashSet(items)); } else { return selectRandom(items, size); } } - public List selectRandom(List list, int n) { + public Set selectRandom(List list, int n) { if (list.isEmpty()) { - return Collections.emptyList(); + return Collections.emptySet(); } - ArrayList out = new ArrayList<>(); + Set out = new HashSet(); + for (int i = 0; i < n; i++) { int item = list.size() > 1 ? RANDOM.nextInt(list.size() - 1) : 0; out.add(list.get(item)); } - return Collections.unmodifiableList(out); + return Collections.unmodifiableSet(out); } private ArrayList parseAlbum(JsonReader reader) throws IOException { diff --git a/app/src/main/java/max/music_cyclon/service/LibraryService.java b/app/src/main/java/max/music_cyclon/service/LibraryService.java index 7cd1ab0..668b6ca 100644 --- a/app/src/main/java/max/music_cyclon/service/LibraryService.java +++ b/app/src/main/java/max/music_cyclon/service/LibraryService.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -134,7 +135,7 @@ public class LibraryService extends IntentService { for (Parcelable parcelable : configs) { SynchronizeConfig config = (SynchronizeConfig) parcelable; - List items; + Set items; try { updater.showOngoingMessage("Fetching music information for %s", config.getName()); items = fetcher.fetch(config,