package com.shaneisrael.st.imgur; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.shaneisrael.st.Config; import com.shaneisrael.st.data.Logger; import com.shaneisrael.st.prefs.Preferences; import com.shaneisrael.st.upload.SimpleFTPUploader; import com.shaneisrael.st.upload.SimpleFileUploader; import com.shaneisrael.st.upload.UploadListener; import com.shaneisrael.st.utilities.ImageUtilities; public class ImgurUploader implements UploadListener { private static final Gson gson = new Gson(); private static final String IMGUR_URI = "https://api.imgur.com/3"; private static final String CLIENT_ID = "6311d570cd54953"; private ImgurResponseListener listener; private File tempFile; public void upload(BufferedImage image, ImgurResponseListener listener) { float quality = Preferences.getInstance().getUploadQuality(); if(quality < 1f) image = ImageUtilities.compressImage(image, quality); tempFile = saveTemporarily(image); upload(tempFile, listener); if(Preferences.getInstance().getFTPUploadAlways() && Preferences.getInstance().isFTPReady()) new SimpleFTPUploader(tempFile); } public void upload(File imageFile, ImgurResponseListener listener) { this.listener = listener; SimpleFileUploader uploader = new SimpleFileUploader( IMGUR_URI + "/image.json", imageFile, Config.STPP_USER_AGENT, CLIENT_ID); uploader.addField("description", "Uploaded via " + Config.WEBSITE_URL); uploader.uploadAsync(this); } @Override public void onUploadSuccess(String content) { ImgurResponse response = null; try { response = gson.fromJson(content, ImgurResponse.class); } catch (JsonSyntaxException ex) { Logger.Log(ex); listener.onImgurResponseFail(response); } if (response != null && response.wasSuccessful()) { ImgurImage uploadedImage = gson.fromJson(response.getRawData(), ImgurImage.class); if (uploadedImage != null) { listener.onImgurResponseSuccess(uploadedImage); } else { listener.onImgurResponseFail(response); } } else { listener.onImgurResponseFail(response); } } @Override public void onUploadFail(int statusCode, String reason) { System.out.println(statusCode + ": Failed to upload image: " + reason); listener.onImgurResponseFail(null); } private File saveTemporarily(BufferedImage image) { try { File file = File.createTempFile("stpp-", "-snip.png"); ImageIO.write(image, "png", file); return file; } catch (IOException e) { Logger.Log(e); e.printStackTrace(); } return null; } }