docs: private static TrackMetadata copyTrackToCache(Client client, SlotReference slot, ZipOutputStream zos,
                                                    WritableByteChannel channel, Set<Integer> artworkAdded, int rekordboxId)
              throws IOException, TimeoutException, InterruptedException {
  
          final TrackMetadata track = MetadataFinder.getInstance().queryMetadata(new DataReference(slot, rekordboxId), CdjStatus.TrackType.REKORDBOX, client);
          if (track != null) {
              logger.debug("Adding metadata with ID {}", track.trackReference.rekordboxId);
              zos.putNextEntry(new ZipEntry(getMetadataEntryName(track.trackReference.rekordboxId)));
              for (Message metadataItem : track.rawItems) {
                  metadataItem.write(channel);
              }
              MENU_FOOTER_MESSAGE.write(channel);  // So we know to stop reading
          } else {
              logger.warn("Unable to retrieve metadata with ID {}", rekordboxId);
              return null;
          }
  
          if (track.getArtworkId() != 0 && !artworkAdded.contains(track.getArtworkId())) {
              logger.debug("Adding artwork with ID {}", track.getArtworkId());
              zos.putNextEntry(new ZipEntry(getArtworkEntryName(track.getArtworkId())));
              final AlbumArt art = ArtFinder.getInstance().getArtwork(track.getArtworkId(), slot, CdjStatus.TrackType.REKORDBOX, client);
              if (art != null) {
                  Util.writeFully(art.getRawBytes(), channel);
                  artworkAdded.add(track.getArtworkId());
              }
          }
  
          final BeatGrid beatGrid = BeatGridFinder.getInstance().getBeatGrid(rekordboxId, slot, client);
          if (beatGrid != null) {
              logger.debug("Adding beat grid with ID {}", rekordboxId);
              zos.putNextEntry(new ZipEntry(getBeatGridEntryName(rekordboxId)));
              Util.writeFully(beatGrid.getRawData(), channel);
          }
  
          final CueList cueList = MetadataFinder.getInstance().getCueList(rekordboxId, slot.slot, client);
          if (cueList != null) {
              logger.debug("Adding cue list entry with ID {}", rekordboxId);
              zos.putNextEntry(new ZipEntry((getCueListEntryName(rekordboxId))));
              cueList.rawMessage.write(channel);
          }
  
          final WaveformPreview preview = WaveformFinder.getInstance().getWaveformPreview(rekordboxId, slot, client);
          if (preview != null) {
              logger.debug("Adding waveform preview entry with ID {}", rekordboxId);
              zos.putNextEntry(new ZipEntry((getWaveformPreviewEntryName(rekordboxId))));
              preview.rawMessage.write(channel);
          }
  
          final WaveformDetail detail = WaveformFinder.getInstance().getWaveformDetail(rekordboxId, slot, client);
          if (detail != null) {
              logger.debug("Adding waveform detail entry with ID {}", rekordboxId);
              zos.putNextEntry(new ZipEntry((getWaveformDetailEntryName(rekordboxId))));
              detail.rawMessage.write(channel);
          }
  
          return track;
      }