doppelte aus der liste entfernen
parent
ef634e9009
commit
c214cc6c80
29
README.md
29
README.md
|
|
@ -9,3 +9,32 @@
|
||||||
9. songs die schon gespielt wurden in extra liste anzeigen um doppelte songs zu vermeiden
|
9. songs die schon gespielt wurden in extra liste anzeigen um doppelte songs zu vermeiden
|
||||||
(evtl. feste liste für spätere runden)
|
(evtl. feste liste für spätere runden)
|
||||||
10. Schauen ob andere auch einen song in der liste haben für mehrere auswahlen
|
10. Schauen ob andere auch einen song in der liste haben für mehrere auswahlen
|
||||||
|
|
||||||
|
spotify:track:6ek0XS2AUbzrHS0B5wPNcU
|
||||||
|
spotify:track:3nOi7ba91njKhrSVfXL8N9
|
||||||
|
spotify:track:1C7L687da9iOT9M06lQTHP
|
||||||
|
spotify:track:4sV4WmntbXUn04VVCBXKfm
|
||||||
|
spotify:track:1yV6fdxy2NEhF8NZglc05q
|
||||||
|
spotify:track:28gFMOStVQEoLErPNjqceH
|
||||||
|
spotify:track:2aLV4tGii6GOGZFWXpR5ZG
|
||||||
|
spotify:track:19uJO0Mwn5Kk6rMgfopBAc
|
||||||
|
spotify:track:7p0VAEeIQ9AUzVNcgYFzSX
|
||||||
|
spotify:track:471ZsQCVcur6UdFSvpgsWG
|
||||||
|
spotify:track:2SWBdMOS22tRx8RQvmKm24
|
||||||
|
spotify:track:2iircORdVvzwpunyffnUlp
|
||||||
|
spotify:track:1DE97qruXdH4h9jdg4Wskj
|
||||||
|
spotify:track:6PpCmm96cOwriuVgP2czcq
|
||||||
|
spotify:track:4Z6nIEWR0pdHFj7V2i6CiV
|
||||||
|
spotify:track:1ZTKPOOoxX8wIDQKwQVecR
|
||||||
|
spotify:track:6GgE5Q4T1MSBF32F6bzJWH
|
||||||
|
spotify:track:42N2DvfVcx5vypA0dyKsC4
|
||||||
|
spotify:track:3mvdCmuRinGmBwhIkScUAR
|
||||||
|
spotify:track:5V1Yu5iHBU5DFkkto9Xvqd
|
||||||
|
spotify:track:33UgExC0xy3V2GMFntq5Cd
|
||||||
|
spotify:track:2hpQl8ryv3IonCg9LiAtGT
|
||||||
|
spotify:track:2szqc4gTZSQwl8izHzDIuS
|
||||||
|
spotify:track:4XuyUnS0hbnM0rdmQU4lqh
|
||||||
|
spotify:track:6njBU31h23SmbQyX8J16j2
|
||||||
|
spotify:track:0xhiZpXkrUJ09cGitxGpVl
|
||||||
|
spotify:track:3sR7YC1QR2bx7aIsQdjEtT
|
||||||
|
spotify:track:5vh22BuxNDxbAD0ze4fdql
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package eric.Roullette.service;
|
package eric.Roullette.service;
|
||||||
|
|
||||||
|
import com.neovisionaries.i18n.CountryCode;
|
||||||
import org.apache.hc.core5.http.ParseException;
|
import org.apache.hc.core5.http.ParseException;
|
||||||
import se.michaelthelin.spotify.SpotifyApi;
|
import se.michaelthelin.spotify.SpotifyApi;
|
||||||
import se.michaelthelin.spotify.SpotifyHttpManager;
|
import se.michaelthelin.spotify.SpotifyHttpManager;
|
||||||
|
|
@ -9,15 +10,15 @@ package eric.Roullette.service;
|
||||||
import se.michaelthelin.spotify.model_objects.specification.PagingCursorbased;
|
import se.michaelthelin.spotify.model_objects.specification.PagingCursorbased;
|
||||||
import se.michaelthelin.spotify.model_objects.specification.PlayHistory;
|
import se.michaelthelin.spotify.model_objects.specification.PlayHistory;
|
||||||
import se.michaelthelin.spotify.requests.data.player.GetCurrentUsersRecentlyPlayedTracksRequest;
|
import se.michaelthelin.spotify.requests.data.player.GetCurrentUsersRecentlyPlayedTracksRequest;
|
||||||
|
import se.michaelthelin.spotify.requests.data.library.GetUsersSavedTracksRequest;
|
||||||
|
import se.michaelthelin.spotify.model_objects.specification.SavedTrack;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import static com.neovisionaries.i18n.CountryCode.DE;
|
||||||
|
|
||||||
public class SpotifyAuthService {
|
public class SpotifyAuthService {
|
||||||
private final String clientId;
|
private final String clientId;
|
||||||
private final String clientSecret;
|
private final String clientSecret;
|
||||||
|
|
@ -40,7 +41,7 @@ package eric.Roullette.service;
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
return tempApi.authorizationCodeUri()
|
return tempApi.authorizationCodeUri()
|
||||||
.scope("user-read-recently-played")
|
.scope("user-read-recently-played user-library-read")
|
||||||
.state(user) // Der Benutzername wird im State mitgegeben
|
.state(user) // Der Benutzername wird im State mitgegeben
|
||||||
.build()
|
.build()
|
||||||
.execute();
|
.execute();
|
||||||
|
|
@ -80,33 +81,64 @@ package eric.Roullette.service;
|
||||||
if (history == null || history.getItems() == null) {
|
if (history == null || history.getItems() == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return Arrays.stream(history.getItems())
|
List<String> recentTracks = Arrays.stream(history.getItems())
|
||||||
.map(item -> item.getTrack().getUri())
|
.map(item -> item.getTrack().getUri())
|
||||||
.distinct()
|
.distinct()
|
||||||
.toList();
|
.toList();
|
||||||
// Verwende die limitierte Methode, um die Anzahl der Tracks zu begrenzen
|
|
||||||
// return getRecentTracksLimit(userApi, limit);
|
if (recentTracks.size() < limit) {
|
||||||
|
int newLimit = limit - recentTracks.size();
|
||||||
|
// restliche songs mit kürzlich gespeicherten Tracks auffüllen
|
||||||
|
List<String> savedTracks = getSavedTracks(user, newLimit, 0);
|
||||||
|
// Nur Tracks hinzufügen, die noch nicht in recentTracks sind
|
||||||
|
savedTracks.removeAll(recentTracks);
|
||||||
|
recentTracks = new java.util.ArrayList<>(recentTracks);
|
||||||
|
recentTracks.addAll(savedTracks.subList(0, Math.min(newLimit, savedTracks.size())));
|
||||||
|
if(recentTracks.size() < limit){
|
||||||
|
newLimit = limit - recentTracks.size();
|
||||||
|
List<String> savedTracks2 = getSavedTracks(user, newLimit, 50);
|
||||||
|
savedTracks2.removeAll(recentTracks);
|
||||||
|
recentTracks.addAll(savedTracks2.subList(0, Math.min(newLimit, savedTracks2.size())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return recentTracks.subList(0, Math.min(limit, recentTracks.size()));
|
||||||
} catch (IOException | SpotifyWebApiException | ParseException e) {
|
} catch (IOException | SpotifyWebApiException | ParseException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getRecentTracksLimit(SpotifyApi userApi, int limit) throws IOException, SpotifyWebApiException, ParseException {
|
private List<String> getSavedTracks(String user, int limit, int offset) {
|
||||||
GetCurrentUsersRecentlyPlayedTracksRequest request = userApi.getCurrentUsersRecentlyPlayedTracks()
|
SpotifyApi userApi = userApis.get(user);
|
||||||
|
|
||||||
|
if (userApi == null) {
|
||||||
|
System.err.println("Kein SpotifyApi-Client für Benutzer gefunden: " + user);
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
List<String> saved = new ArrayList<>();
|
||||||
|
while (saved.size() < limit) {
|
||||||
|
GetUsersSavedTracksRequest req = userApi.getUsersSavedTracks()
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
|
.offset(offset)
|
||||||
|
.market(CountryCode.DE)
|
||||||
.build();
|
.build();
|
||||||
PagingCursorbased<PlayHistory> history = request.execute();
|
Paging<SavedTrack> page = req.execute();
|
||||||
|
if (page == null || page.getItems().length == 0){
|
||||||
List<String> uris = Arrays.stream(history.getItems())
|
System.out.println("Keine weiteren gespeicherten Tracks gefunden.");
|
||||||
.map(item -> item.getTrack().getUri())
|
break;
|
||||||
.distinct()
|
}
|
||||||
.toList();
|
for (SavedTrack st : page.getItems()) {
|
||||||
if (uris.size() < limit) {
|
saved.add(st.getTrack().getUri());
|
||||||
int newLimit = limit + (limit - uris.size());
|
if (saved.size() == limit) break;
|
||||||
return getRecentTracksLimit(userApi, newLimit);
|
}
|
||||||
|
offset += limit;
|
||||||
|
}
|
||||||
|
return saved;
|
||||||
|
} catch (IOException | SpotifyWebApiException | ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return uris.subList(0, limit);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
1. Limit manuell einstellbar
|
|
||||||
2. songs die schon gespielt wurden nicht mehr spielen
|
|
||||||
3. songs die schon gespielt wurden nicht mehr in der Liste anzeigen
|
|
||||||
4. songs die schon gespielt wurden in einer extra Liste anzeigen
|
|
||||||
mehrere auswählbar, wenn man alle richtig hat einen extra punkt kriegen
|
|
||||||
verhindern dass 3 mal hinterander der gleicher owner bzw. das gleiche lied kommt
|
|
||||||
songs die schon gespielt wurden in extra liste anzeigen um doppelte songs zu vermeiden
|
|
||||||
(evtl. feste liste für spätere runden)
|
|
||||||
Schauen ob andere auch einen song in der liste haben für mehrere auswahlen
|
|
||||||
Loading…
Reference in New Issue