diff --git a/GreenshotImgurPlugin/ImgurConfiguration.cs b/GreenshotImgurPlugin/ImgurConfiguration.cs
index 104839352..5392ec265 100644
--- a/GreenshotImgurPlugin/ImgurConfiguration.cs
+++ b/GreenshotImgurPlugin/ImgurConfiguration.cs
@@ -32,8 +32,6 @@ namespace GreenshotImgurPlugin {
///
[IniSection("Imgur", Description="Greenshot Imgur Plugin configuration")]
public class ImgurConfiguration : IniSection {
- [IniProperty("ImgurApiUrl", Description="Url to Imgur system.", DefaultValue= "http://api.imgur.com/2")]
- public string ImgurApiUrl;
[IniProperty("ImgurApi3Url", Description = "Url to Imgur system.", DefaultValue = "https://api.imgur.com/3")]
public string ImgurApi3Url;
diff --git a/GreenshotImgurPlugin/ImgurInfo.cs b/GreenshotImgurPlugin/ImgurInfo.cs
index 37e5a3ce8..c43903c04 100644
--- a/GreenshotImgurPlugin/ImgurInfo.cs
+++ b/GreenshotImgurPlugin/ImgurInfo.cs
@@ -27,7 +27,8 @@ namespace GreenshotImgurPlugin
///
/// Description of ImgurInfo.
///
- public class ImgurInfo : IDisposable {
+ public class ImgurInfo : IDisposable
+ {
private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ImgurInfo));
public string Hash
@@ -37,9 +38,11 @@ namespace GreenshotImgurPlugin
}
private string deleteHash;
- public string DeleteHash {
- get {return deleteHash;}
- set {
+ public string DeleteHash
+ {
+ get { return deleteHash; }
+ set
+ {
deleteHash = value;
DeletePage = "https://imgur.com/delete/" + value;
}
@@ -94,24 +97,29 @@ namespace GreenshotImgurPlugin
}
private Image image;
- public Image Image {
- get {return image;}
- set {
- if (image != null) {
+ public Image Image
+ {
+ get { return image; }
+ set
+ {
+ if (image != null)
+ {
image.Dispose();
}
image = value;
}
}
- public ImgurInfo() {
+ public ImgurInfo()
+ {
}
///
/// The public accessible Dispose
/// Will call the GarbageCollector to SuppressFinalize, preventing being cleaned twice
///
- public void Dispose() {
+ public void Dispose()
+ {
Dispose(true);
GC.SuppressFinalize(this);
}
@@ -121,15 +129,19 @@ namespace GreenshotImgurPlugin
/// When disposing==true all non-managed resources should be freed too!
///
///
- protected virtual void Dispose(bool disposing) {
- if (disposing) {
- if (image != null) {
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ if (image != null)
+ {
image.Dispose();
}
}
image = null;
}
- public static ImgurInfo ParseResponse(string response) {
+ public static ImgurInfo ParseResponse(string response)
+ {
LOG.Debug(response);
// This is actually a hack for BUG-1695
// The problem is the (C) sign, we send it HTML encoded "®" to Imgur and get it HTML encoded in the XML back
@@ -142,11 +154,13 @@ namespace GreenshotImgurPlugin
response = response.Replace("®", "®");
ImgurInfo imgurInfo = new ImgurInfo();
- try {
+ try
+ {
XmlDocument doc = new XmlDocument();
doc.LoadXml(response);
XmlNodeList nodes = doc.GetElementsByTagName("id");
- if(nodes.Count > 0) {
+ if (nodes.Count > 0)
+ {
imgurInfo.Hash = nodes.Item(0).InnerText;
}
nodes = doc.GetElementsByTagName("hash");
@@ -155,19 +169,23 @@ namespace GreenshotImgurPlugin
imgurInfo.Hash = nodes.Item(0).InnerText;
}
nodes = doc.GetElementsByTagName("deletehash");
- if(nodes.Count > 0) {
+ if (nodes.Count > 0)
+ {
imgurInfo.DeleteHash = nodes.Item(0).InnerText;
}
nodes = doc.GetElementsByTagName("type");
- if(nodes.Count > 0) {
+ if (nodes.Count > 0)
+ {
imgurInfo.ImageType = nodes.Item(0).InnerText;
}
nodes = doc.GetElementsByTagName("title");
- if(nodes.Count > 0) {
+ if (nodes.Count > 0)
+ {
imgurInfo.Title = nodes.Item(0).InnerText;
}
nodes = doc.GetElementsByTagName("datetime");
- if(nodes.Count > 0) {
+ if (nodes.Count > 0)
+ {
// Version 3 has seconds since Epoch
double secondsSince;
if (double.TryParse(nodes.Item(0).InnerText, out secondsSince))
@@ -198,15 +216,17 @@ namespace GreenshotImgurPlugin
imgurInfo.Page = string.Format("https://imgur.com/{0}", imgurInfo.Hash);
}
nodes = doc.GetElementsByTagName("small_square");
- if(nodes.Count > 0) {
+ if (nodes.Count > 0)
+ {
imgurInfo.SmallSquare = nodes.Item(0).InnerText;
}
- nodes = doc.GetElementsByTagName("large_thumbnail");
- if(nodes.Count > 0)
+ else
{
- imgurInfo.LargeThumbnail = nodes.Item(0).InnerText.Replace("http:", "https:");
+ imgurInfo.SmallSquare = string.Format("http://i.imgur.com/{0}s.png",imgurInfo.Hash);
}
- } catch(Exception e) {
+ }
+ catch (Exception e)
+ {
LOG.ErrorFormat("Could not parse Imgur response due to error {0}, response was: {1}", e.Message, response);
}
return imgurInfo;
diff --git a/GreenshotImgurPlugin/ImgurUtils.cs b/GreenshotImgurPlugin/ImgurUtils.cs
index 3bb80e0f8..0e426157d 100644
--- a/GreenshotImgurPlugin/ImgurUtils.cs
+++ b/GreenshotImgurPlugin/ImgurUtils.cs
@@ -119,7 +119,7 @@ namespace GreenshotImgurPlugin {
if (filename != null && Config.AddFilename) {
otherParameters.Add("name", filename);
}
- string responseString;
+ string responseString = null;
if (Config.AnonymousAccess) {
// add key, we only use the other parameters for the AnonymousAccess
//otherParameters.Add("key", IMGUR_ANONYMOUS_API_KEY);
@@ -133,11 +133,17 @@ namespace GreenshotImgurPlugin {
ImageOutput.SaveToStream(surfaceToUpload, requestStream, outputSettings);
}
- using (WebResponse response = webRequest.GetResponse()) {
- using (StreamReader reader = new StreamReader(response.GetResponseStream(), true)) {
- responseString = reader.ReadToEnd();
- }
+ using (WebResponse response = webRequest.GetResponse())
+ {
LogRateLimitInfo(response);
+ var responseStream = response.GetResponseStream();
+ if (responseStream != null)
+ {
+ using (StreamReader reader = new StreamReader(responseStream, true))
+ {
+ responseString = reader.ReadToEnd();
+ }
+ }
}
} catch (Exception ex) {
LOG.Error("Upload to imgur gave an exeption: ", ex);
@@ -145,20 +151,22 @@ namespace GreenshotImgurPlugin {
}
} else {
- var oauth2Settings = new OAuth2Settings();
- oauth2Settings.AuthUrlPattern = AuthUrlPattern;
- oauth2Settings.TokenUrl = TokenUrl;
- oauth2Settings.RedirectUrl = "https://imgur.com";
- oauth2Settings.CloudServiceName = "Imgur";
- oauth2Settings.ClientId = ImgurCredentials.CONSUMER_KEY;
- oauth2Settings.ClientSecret = ImgurCredentials.CONSUMER_SECRET;
- oauth2Settings.AuthorizeMode = OAuth2AuthorizeMode.EmbeddedBrowser;
- oauth2Settings.BrowserSize = new Size(680, 880);
+ var oauth2Settings = new OAuth2Settings
+ {
+ AuthUrlPattern = AuthUrlPattern,
+ TokenUrl = TokenUrl,
+ RedirectUrl = "https://imgur.com",
+ CloudServiceName = "Imgur",
+ ClientId = ImgurCredentials.CONSUMER_KEY,
+ ClientSecret = ImgurCredentials.CONSUMER_SECRET,
+ AuthorizeMode = OAuth2AuthorizeMode.EmbeddedBrowser,
+ BrowserSize = new Size(680, 880),
+ RefreshToken = Config.RefreshToken,
+ AccessToken = Config.AccessToken,
+ AccessTokenExpires = Config.AccessTokenExpires
+ };
// Copy the settings from the config, which is kept in memory and on the disk
- oauth2Settings.RefreshToken = Config.RefreshToken;
- oauth2Settings.AccessToken = Config.AccessToken;
- oauth2Settings.AccessTokenExpires = Config.AccessTokenExpires;
try
{
@@ -179,6 +187,10 @@ namespace GreenshotImgurPlugin {
IniConfig.Save();
}
}
+ if (string.IsNullOrEmpty(responseString))
+ {
+ return null;
+ }
return ImgurInfo.ParseResponse(responseString);
}
@@ -194,7 +206,8 @@ namespace GreenshotImgurPlugin {
LOG.InfoFormat("Retrieving Imgur image for {0} with url {1}", imgurInfo.Hash, imgurInfo.SmallSquare);
HttpWebRequest webRequest = NetworkHelper.CreateWebRequest(string.Format(SmallUrlPattern, imgurInfo.Hash), HTTPMethod.GET);
webRequest.ServicePoint.Expect100Continue = false;
- SetClientId(webRequest);
+ // Not for getting the thumbnail, in anonymous modus
+ //SetClientId(webRequest);
using (WebResponse response = webRequest.GetResponse()) {
LogRateLimitInfo(response);
Stream responseStream = response.GetResponseStream();
@@ -212,7 +225,7 @@ namespace GreenshotImgurPlugin {
///
/// ImgurInfo
public static ImgurInfo RetrieveImgurInfo(string hash, string deleteHash) {
- string url = Config.ImgurApiUrl + "/image/" + hash;
+ string url = Config.ImgurApi3Url + "/image/" + hash + ".xml";
LOG.InfoFormat("Retrieving Imgur info for {0} with url {1}", hash, url);
HttpWebRequest webRequest = NetworkHelper.CreateWebRequest(url, HTTPMethod.GET);
webRequest.ServicePoint.Expect100Continue = false;
@@ -247,8 +260,8 @@ namespace GreenshotImgurPlugin {
LOG.InfoFormat("Deleting Imgur image for {0}", imgurInfo.DeleteHash);
try {
- string url = Config.ImgurApiUrl + "/delete/" + imgurInfo.DeleteHash;
- HttpWebRequest webRequest = NetworkHelper.CreateWebRequest(url, HTTPMethod.GET);
+ string url = Config.ImgurApi3Url + "/image/" + imgurInfo.DeleteHash + ".xml";
+ HttpWebRequest webRequest = NetworkHelper.CreateWebRequest(url, HTTPMethod.DELETE);
webRequest.ServicePoint.Expect100Continue = false;
SetClientId(webRequest);
string responseString;