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
|
||||
(evtl. feste liste für spätere runden)
|
||||
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;
|
||||
|
||||
import com.neovisionaries.i18n.CountryCode;
|
||||
import org.apache.hc.core5.http.ParseException;
|
||||
import se.michaelthelin.spotify.SpotifyApi;
|
||||
import se.michaelthelin.spotify.SpotifyHttpManager;
|
||||
|
|
@ -9,16 +10,16 @@ package eric.Roullette.service;
|
|||
import se.michaelthelin.spotify.model_objects.specification.PagingCursorbased;
|
||||
import se.michaelthelin.spotify.model_objects.specification.PlayHistory;
|
||||
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.net.URI;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class SpotifyAuthService {
|
||||
import static com.neovisionaries.i18n.CountryCode.DE;
|
||||
|
||||
public class SpotifyAuthService {
|
||||
private final String clientId;
|
||||
private final String clientSecret;
|
||||
private final URI redirectUri;
|
||||
|
|
@ -40,7 +41,7 @@ package eric.Roullette.service;
|
|||
.build();
|
||||
|
||||
return tempApi.authorizationCodeUri()
|
||||
.scope("user-read-recently-played")
|
||||
.scope("user-read-recently-played user-library-read")
|
||||
.state(user) // Der Benutzername wird im State mitgegeben
|
||||
.build()
|
||||
.execute();
|
||||
|
|
@ -80,33 +81,64 @@ package eric.Roullette.service;
|
|||
if (history == null || history.getItems() == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return Arrays.stream(history.getItems())
|
||||
List<String> recentTracks = Arrays.stream(history.getItems())
|
||||
.map(item -> item.getTrack().getUri())
|
||||
.distinct()
|
||||
.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) {
|
||||
e.printStackTrace();
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> getRecentTracksLimit(SpotifyApi userApi, int limit) throws IOException, SpotifyWebApiException, ParseException {
|
||||
GetCurrentUsersRecentlyPlayedTracksRequest request = userApi.getCurrentUsersRecentlyPlayedTracks()
|
||||
.limit(limit)
|
||||
.build();
|
||||
PagingCursorbased<PlayHistory> history = request.execute();
|
||||
|
||||
List<String> uris = Arrays.stream(history.getItems())
|
||||
.map(item -> item.getTrack().getUri())
|
||||
.distinct()
|
||||
.toList();
|
||||
if (uris.size() < limit) {
|
||||
int newLimit = limit + (limit - uris.size());
|
||||
return getRecentTracksLimit(userApi, newLimit);
|
||||
private List<String> getSavedTracks(String user, int limit, int offset) {
|
||||
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)
|
||||
.offset(offset)
|
||||
.market(CountryCode.DE)
|
||||
.build();
|
||||
Paging<SavedTrack> page = req.execute();
|
||||
if (page == null || page.getItems().length == 0){
|
||||
System.out.println("Keine weiteren gespeicherten Tracks gefunden.");
|
||||
break;
|
||||
}
|
||||
for (SavedTrack st : page.getItems()) {
|
||||
saved.add(st.getTrack().getUri());
|
||||
if (saved.size() == limit) break;
|
||||
}
|
||||
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