#Better handling AudioTracks

1 messages · Page 1 of 1 (latest)

finite fractal
#

Hello everyone. I'm just curious is there a better way to handle loading (and searching) audio tracks than my way:

List<AudioTrack> combinedTracks = new ArrayList<>();
    for (Document track : mentionedUserTopTracks) {
      CompletableFuture<AudioTrack> futureTrack =
          PlayerManager.getInstance().getTrack(track.getString("trackUrl"), textChannel);
      try {
        AudioTrack audioTrack = futureTrack.get();
        if (audioTrack != null) {
          String trackTitle = track.getString("trackTitle");
          Long userId = track.getLong("authorId");

          User user = ctx.getEvent().getJDA().retrieveUserById(userId).complete();
          if (user != null) {
            trackUsers
                .computeIfAbsent(trackTitle, k -> new ArrayList<>())
                .add(user.getEffectiveName());
          } else {
            MessageSender.sendErrorMessage(
                textChannel, "Error");
            ErrorSender.sendError("Error!", "blend");
          }

          if (combinedTracks.stream()
              .noneMatch(t -> t.getInfo().title.equals(audioTrack.getInfo().title))) {
            combinedTracks.add(audioTrack);
          }
        }
      } catch (InterruptedException | ExecutionException e) {
        logExceptionMessage(e, "blend");
      }

The function getTrack is CompletableFuture with logic based on:

public CompletableFuture<AudioTrack> getTrack(String trackUrl, TextChannel textChannel) {
    final GuildMusicManager musicManager = getGuildMusicManager(textChannel.getGuild());
    CompletableFuture<AudioTrack> futureTrack = new CompletableFuture<>();

    this.audioPlayerManager.loadItemOrdered(
        musicManager,
        trackUrl,
        new AudioLoadResultHandler() {

          @Override
          public void trackLoaded(AudioTrack audioTrack) {
            futureTrack.complete(audioTrack);
          }

          @Override
          public void playlistLoaded(AudioPlaylist audioPlaylist) {
            futureTrack.complete(audioPlaylist.getTracks().getFirst());
          }

          @Override
          public void noMatches() {
            MessageSender.sendErrorMessage(
                textChannel, "Ziom... Nie mogłem znaleźć wyników dla: " + trackUrl);
            futureTrack.complete(null);
          }

          @Override
          public void loadFailed(FriendlyException e) {
            MessageSender.sendErrorMessage(
                textChannel, "Nie udało się załadować: " + e.getMessage());
            futureTrack.completeExceptionally(e);
          }
        });

    return futureTrack;
  }

I have the AudioTrack stored in database but unofrtunately as a String
track: "dev.lavalink.youtube.track.YoutubeAudioTrack@7145d10e"

Can i build an AudioTrack from this? Or even better, can i create an AudioTrack class specifically from that String in any way?

minor karma
#

Can i build an AudioTrack from this? Or even better, can i create an AudioTrack class specifically from that String in any way?
no

#

Use AudioPlayerManager#encodeTrack if you want to serialize tracks into a format that can be stored in a database