package com.shaneisrael.st.utilities;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import com.shaneisrael.st.SnippingToolPlusPlus;
import com.shaneisrael.st.data.LinkDataSaver;
import com.shaneisrael.st.data.OperatingSystem;
import com.shaneisrael.st.imgur.ImgurImage;
import com.shaneisrael.st.imgur.ImgurResponse;
import com.shaneisrael.st.imgur.ImgurResponseListener;
import com.shaneisrael.st.imgur.ImgurUploader;
import com.shaneisrael.st.notification.NotificationManager;
import com.shaneisrael.st.notification.STNotificationType;
import com.shaneisrael.st.prefs.Preferences;
import com.shaneisrael.st.prefs.Provider;
import com.shaneisrael.st.stppus.StppUploader;
import com.shaneisrael.st.utilities.database.DBStats;
public class Upload implements ImgurResponseListener
{
private static final AnimatedTrayIcon animatedIcon = AnimatedTrayIcon.getDefaultIcon();
private BufferedImage image;
private final boolean uploadToreddit;
private final Save save;
public Upload(BufferedImage image)
{
this(image, false);
}
public Upload(BufferedImage image, boolean uploadToReddit)
{
this.image = image;
this.uploadToreddit = uploadToReddit;
this.save = new Save();
upload();
}
private void upload()
{
int provider = Preferences.getInstance().getPrimaryProvider();
if(provider == Provider.STPP)
{
StppUploader uploader = new StppUploader(image);
uploader.upload();
}
else
{
doBeforeUpload();
ImgurUploader uploader = new ImgurUploader();
uploader.upload(image, this);
}
}
private void doBeforeUpload()
{
if (OperatingSystem.isWindows())
{
new Thread(animatedIcon, "upload-animation").start();
} else
{
SnippingToolPlusPlus.trayIcon.setImage(new ImageIcon(this.getClass().getResource("/images/uploadMac.png")).getImage());
}
NotificationManager.getInstance().showNotification("uploading", STNotificationType.INFO);
}
private void doAfterUpload()
{
if (OperatingSystem.isWindows())
{
if (Upload.animatedIcon != null)
{
Upload.animatedIcon.stopAnimating();
}
} else
{
SnippingToolPlusPlus.trayIcon.setImage(new ImageIcon(this.getClass().getResource("/images/trayIconMac.png")).getImage());
}
image = null;
}
@Override
public void onImgurResponseSuccess(ImgurImage uploadedImage)
{
if (Preferences.getInstance().isAutoSaveEnabled())
{
save.saveUpload(image);
new LinkDataSaver(uploadedImage.getLink(), uploadedImage.getDeleteLink(),
"upload(" + Preferences.TOTAL_SAVED_UPLOADS + ")");
}
if (!uploadToreddit)
{
ClipboardUtilities.setClipboard(uploadedImage.getLink());
NotificationManager.getInstance().showNotification("upload-done", STNotificationType.SUCCESS);
} else
{
Browser.openToReddit(uploadedImage.getLink());
NotificationManager.getInstance().showNotification("upload-done-reddit", STNotificationType.SUCCESS);
}
SoundNotifications.playDing();
doAfterUpload();
DBStats.addHistory(uploadedImage.getLink(), uploadedImage.getDeleteLink());
}
@Override
public void onImgurResponseFail(ImgurResponse response)
{
NotificationManager.getInstance().showNotification("upload-failed", STNotificationType.ERROR);
doAfterUpload();
}
public static Upload uploadFile(File imageFile, boolean uploadToReddit) throws IOException
{
return new Upload(ImageIO.read(imageFile), uploadToReddit);
}
}