// Sample beaTlet for beaTunes 5.x // More info at https://www.beatunes.com/en/beatlet-getting-started.html import org.slf4j.LoggerFactory import java.awt.Toolkit import java.io.File import java.awt.event.ActionEvent import java.awt.event.* import java.awt.Desktop import javax.swing.* import com.tagtraum.core.app.* import com.tagtraum.beatunes.library.* import com.tagtraum.beatunes.MessageDialog import com.tagtraum.beatunes.action.* /** * Simple beaTlet that lets you export playlists and open * them in the external default player. */ class OpenPlaylistExternallyAction extends BaseAction { static log = LoggerFactory.getLogger("OpenPlaylistExternallyAction.groovy") def String getId() { "Groovy.OpenPlaylistExternallyAction" } def void init() { putValue(Action.NAME, "Open Playlist Externally") putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())) } def ActionLocation[] getActionLocations() { [new AbsoluteActionLocation(BeaTunesUIRegion.FILE_MENU, AbsoluteActionLocation.LAST)] } def void actionPerformed(ActionEvent actionEvent) { try { final exporters = getApplication().getPluginManager().getImplementations(PlayListExporter.class) // find the right exporter by searching for the desired file extension final format = "m3u" //final format = "m3u8" //final format = "pls" //final format = "xspf" final exporter = exporters.findResult { it.getFileExtension().equals(format) ? it : null } final file = File.createTempFile("beaTunes_OpenPlaylistExternally_", "." + format) final playlist = getApplication().getMainWindow().getPlayListTree().getSelectedPlayList() log.info("Exporting playlist ${playlist} to ${file}") exporter.export(file, playlist, false null) log.info("Opening ${file} in external program.") Desktop.getDesktop().open(file) } catch (Exception e) { log.error("Failed to export and open playlist.", e); new MessageDialog( getApplication().getMainWindow(), "Failed to export and play playlist.

${e.toString()}", JOptionPane.ERROR_MESSAGE, JOptionPane.DEFAULT_OPTION ).showDialog() } } }