package com.sleazyweasel.applescriptifier;
import com.google.gson.Gson;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MuseServlet extends HttpServlet {
private static final Logger logger = Logger.getLogger(MuseServlet.class.getName());
private final AppleScriptTemplate appleScriptTemplate = new AppleScriptTemplateFactory().getActiveTemplate();
private final MuseSupport museSupport = new MuseSupport(appleScriptTemplate);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
// Set to expire far in the past.
response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
String pathInfo = req.getPathInfo();
if (pathInfo.startsWith("/status")) {
appendStatus(response);
} else if (pathInfo.startsWith("/playpause")) {
museSupport.playPause();
appendStatus(response);
} else if (pathInfo.startsWith("/next")) {
museSupport.next();
appendStatus(response);
} else if (pathInfo.startsWith("/coverArt")) {
Object image = appleScriptTemplate.execute(Application.MUSE(), "get cover art");
response.setContentType("image/png");
if (image instanceof BufferedImage) {
BufferedImage thing = (BufferedImage) image;
ImageIO.write(thing, "PNG", response.getOutputStream());
}
response.setStatus(HttpServletResponse.SC_OK);
} else {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
}
}
private void appendStatus(HttpServletResponse response) throws IOException {
response.setContentType("application/json; charset=utf-8");
response.setCharacterEncoding("UTF-8");
Map<String, Object> status = new HashMap<String, Object>();
List<String> currentTrack;
try {
currentTrack = appleScriptTemplate.execute(Application.MUSE(), "get [track title, artist, album]");
} catch (Exception e) {
logger.log(Level.WARNING, "Exception caught.", e);
currentTrack = Arrays.asList("", "", "");
}
status.put("currentTrack", currentTrack);
status.put("version", ControlServlet.CURRENT_VERSION);
response.getWriter().append(new Gson().toJson(status));
response.setStatus(HttpServletResponse.SC_OK);
}
}