use of net.robinfriedli.aiode.entities.Video in project aiode by robinfriedli.
the class HibernatePlaylistMigrator method perform.
@Override
public Map<Playlist, List<PlaylistItem>> perform() throws Exception {
ShardManager shardManager = Aiode.get().getShardManager();
SpotifyTrackBulkLoadingService spotifyBulkLoadingService = new SpotifyTrackBulkLoadingService(spotifyApi);
List<XmlElement> playlists = context.query(tagName("playlist")).collect();
Map<Playlist, List<PlaylistItem>> playlistMap = new HashMap<>();
for (XmlElement playlist : playlists) {
Playlist newPlaylist = new Playlist();
newPlaylist.setName(playlist.getAttribute("name").getValue());
newPlaylist.setCreatedUser(playlist.getAttribute("createdUser").getValue());
newPlaylist.setCreatedUserId(playlist.getAttribute("createdUserId").getValue());
newPlaylist.setGuild(guild.getName());
newPlaylist.setGuildId(guild.getId());
List<XmlElement> items = playlist.getSubElements();
Map<PlaylistItem, Integer> itemsWithIndex = new HashMap<>();
for (int i = 0; i < items.size(); i++) {
XmlElement item = items.get(i);
switch(item.getTagName()) {
case "song":
loadSpotifyItem(item, i, spotifyBulkLoadingService, shardManager, newPlaylist, itemsWithIndex, TRACK);
break;
case "episode":
loadSpotifyItem(item, i, spotifyBulkLoadingService, shardManager, newPlaylist, itemsWithIndex, EPISODE);
break;
case "video":
Video video = new Video();
video.setId(item.getAttribute("id").getValue());
video.setTitle(item.getAttribute("title").getValue());
if (item.hasAttribute("redirectedSpotifyId")) {
video.setRedirectedSpotifyId(item.getAttribute("redirectedSpotifyId").getValue());
}
if (item.hasAttribute("spotifyTrackName")) {
video.setSpotifyTrackName(item.getAttribute("spotifyTrackName").getValue());
}
video.setPlaylist(newPlaylist);
video.setDuration(item.getAttribute("duration").getLong());
video.setAddedUser(item.getAttribute("addedUser").getValue());
video.setAddedUserId(item.getAttribute("addedUserId").getValue());
newPlaylist.getVideos().add(video);
itemsWithIndex.put(video, i);
break;
case "urlTrack":
UrlTrack urlTrack = new UrlTrack();
urlTrack.setUrl(item.getAttribute("url").getValue());
urlTrack.setTitle(item.getAttribute("title").getValue());
urlTrack.setDuration(item.getAttribute("duration").getLong());
urlTrack.setAddedUser(item.getAttribute("addedUser").getValue());
urlTrack.setAddedUserId(item.getAttribute("addedUserId").getValue());
urlTrack.setPlaylist(newPlaylist);
newPlaylist.getUrlTracks().add(urlTrack);
itemsWithIndex.put(urlTrack, i);
break;
}
}
SpotifyInvoker.create(spotifyApi).invoke(() -> {
spotifyBulkLoadingService.perform();
return null;
});
List<PlaylistItem> playlistItems = itemsWithIndex.keySet().stream().sorted(Comparator.comparing(itemsWithIndex::get)).collect(Collectors.toList());
playlistMap.put(newPlaylist, playlistItems);
}
return playlistMap;
}
use of net.robinfriedli.aiode.entities.Video in project aiode by robinfriedli.
the class VerifyPlaylistInterceptor method onDeleteChained.
@Override
public void onDeleteChained(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
if (entity instanceof PlaylistItem) {
PlaylistItem playlistItem = (PlaylistItem) entity;
Playlist playlist = playlistItem.getPlaylist();
if (playlistItem instanceof Song) {
playlist.getSongs().remove(playlistItem);
} else if (playlistItem instanceof Video) {
playlist.getVideos().remove(playlistItem);
} else if (playlistItem instanceof UrlTrack) {
playlist.getUrlTracks().remove(playlistItem);
}
}
}
Aggregations