Search in sources :

Example 1 with Video

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;
}
Also used : HashMap(java.util.HashMap) ShardManager(net.dv8tion.jda.api.sharding.ShardManager) Playlist(net.robinfriedli.aiode.entities.Playlist) SpotifyTrackBulkLoadingService(net.robinfriedli.aiode.audio.spotify.SpotifyTrackBulkLoadingService) Video(net.robinfriedli.aiode.entities.Video) UrlTrack(net.robinfriedli.aiode.entities.UrlTrack) XmlElement(net.robinfriedli.jxp.api.XmlElement) List(java.util.List) PlaylistItem(net.robinfriedli.aiode.entities.PlaylistItem)

Example 2 with Video

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);
        }
    }
}
Also used : Playlist(net.robinfriedli.aiode.entities.Playlist) Song(net.robinfriedli.aiode.entities.Song) Video(net.robinfriedli.aiode.entities.Video) UrlTrack(net.robinfriedli.aiode.entities.UrlTrack) PlaylistItem(net.robinfriedli.aiode.entities.PlaylistItem)

Aggregations

Playlist (net.robinfriedli.aiode.entities.Playlist)2 PlaylistItem (net.robinfriedli.aiode.entities.PlaylistItem)2 UrlTrack (net.robinfriedli.aiode.entities.UrlTrack)2 Video (net.robinfriedli.aiode.entities.Video)2 HashMap (java.util.HashMap)1 List (java.util.List)1 ShardManager (net.dv8tion.jda.api.sharding.ShardManager)1 SpotifyTrackBulkLoadingService (net.robinfriedli.aiode.audio.spotify.SpotifyTrackBulkLoadingService)1 Song (net.robinfriedli.aiode.entities.Song)1 XmlElement (net.robinfriedli.jxp.api.XmlElement)1