mirror of
https://github.com/greenshot/greenshot
synced 2025-07-15 01:23:47 -07:00
Refactoring to make Picasa work, added Upload to the IBinaryContainer.
git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2135 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
parent
03b4b17ea4
commit
756c8d9403
5 changed files with 66 additions and 23 deletions
|
@ -169,7 +169,7 @@ namespace GreenshotImgurPlugin {
|
||||||
uploadParameters.Add("name", filename);
|
uploadParameters.Add("name", filename);
|
||||||
}
|
}
|
||||||
uploadParameters.Add("image", new ImageContainer(image, outputSettings, filename));
|
uploadParameters.Add("image", new ImageContainer(image, outputSettings, filename));
|
||||||
responseString = oAuth.MakeRequest(HTTPMethod.POST, apiUrl, uploadParameters, null, null);
|
responseString = oAuth.MakeRequest(HTTPMethod.POST, apiUrl, uploadParameters, null);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
LOG.Error("Upload to imgur gave an exeption: ", ex);
|
LOG.Error("Upload to imgur gave an exeption: ", ex);
|
||||||
throw ex;
|
throw ex;
|
||||||
|
|
|
@ -84,6 +84,7 @@ namespace GreenshotPlugin.Controls {
|
||||||
if (browser.Url.ToString().StartsWith(callbackUrl)) {
|
if (browser.Url.ToString().StartsWith(callbackUrl)) {
|
||||||
string queryParams = browser.Url.Query;
|
string queryParams = browser.Url.Query;
|
||||||
if (queryParams.Length > 0) {
|
if (queryParams.Length > 0) {
|
||||||
|
queryParams = NetworkHelper.UrlDecode(queryParams);
|
||||||
//Store the Token and Token Secret
|
//Store the Token and Token Secret
|
||||||
IDictionary<string, string> qs = NetworkHelper.ParseQueryString(queryParams);
|
IDictionary<string, string> qs = NetworkHelper.ParseQueryString(queryParams);
|
||||||
if (qs.ContainsKey("oauth_token") && qs["oauth_token"] != null) {
|
if (qs.ContainsKey("oauth_token") && qs["oauth_token"] != null) {
|
||||||
|
|
|
@ -99,9 +99,13 @@ namespace GreenshotPlugin.Core {
|
||||||
default:
|
default:
|
||||||
// Problem with non-seekable streams most likely doesn't happen with Windows 7 (OS Version 6.1 and later)
|
// Problem with non-seekable streams most likely doesn't happen with Windows 7 (OS Version 6.1 and later)
|
||||||
// http://stackoverflow.com/questions/8349260/generic-gdi-error-on-one-machine-but-not-the-other
|
// http://stackoverflow.com/questions/8349260/generic-gdi-error-on-one-machine-but-not-the-other
|
||||||
if (!stream.CanSeek && (Environment.OSVersion.Version.Major < 6 || (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor == 1))) {
|
if (!stream.CanSeek) {
|
||||||
useMemoryStream = true;
|
int majorVersion = Environment.OSVersion.Version.Major;
|
||||||
LOG.Warn("Using memorystream prevent an issue with saving to a non seekable stream.");
|
int minorVersion = Environment.OSVersion.Version.Minor;
|
||||||
|
if (majorVersion < 6 || (majorVersion == 6 && minorVersion == 0)) {
|
||||||
|
useMemoryStream = true;
|
||||||
|
LOG.Warn("Using memorystream prevent an issue with saving to a non seekable stream.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
imageFormat = ImageFormat.Png;
|
imageFormat = ImageFormat.Png;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -291,6 +291,7 @@ namespace GreenshotPlugin.Core {
|
||||||
void WriteToStream(Stream formDataStream);
|
void WriteToStream(Stream formDataStream);
|
||||||
string ToBase64String(Base64FormattingOptions formattingOptions);
|
string ToBase64String(Base64FormattingOptions formattingOptions);
|
||||||
byte[] ToByteArray();
|
byte[] ToByteArray();
|
||||||
|
void Upload(HttpWebRequest webRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -361,6 +362,17 @@ namespace GreenshotPlugin.Core {
|
||||||
// Write the file data directly to the Stream, rather than serializing it to a string.
|
// Write the file data directly to the Stream, rather than serializing it to a string.
|
||||||
dataStream.Write(file, 0, fileSize);
|
dataStream.Write(file, 0, fileSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Upload the file to the webrequest
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="webRequest"></param>
|
||||||
|
public void Upload(HttpWebRequest webRequest) {
|
||||||
|
webRequest.ContentType = contentType;
|
||||||
|
using (var requestStream = webRequest.GetRequestStream()) {
|
||||||
|
WriteToStream(requestStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -426,5 +438,16 @@ namespace GreenshotPlugin.Core {
|
||||||
// Write the file data directly to the Stream, rather than serializing it to a string.
|
// Write the file data directly to the Stream, rather than serializing it to a string.
|
||||||
ImageOutput.SaveToStream(image, dataStream, outputSettings);
|
ImageOutput.SaveToStream(image, dataStream, outputSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Upload the image to the webrequest
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="webRequest"></param>
|
||||||
|
public void Upload(HttpWebRequest webRequest) {
|
||||||
|
webRequest.ContentType = "image/" + outputSettings.Format.ToString();
|
||||||
|
using (var requestStream = webRequest.GetRequestStream()) {
|
||||||
|
WriteToStream(requestStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,12 @@ namespace GreenshotPlugin.Core {
|
||||||
private bool useHTTPHeadersForAuthorization = true;
|
private bool useHTTPHeadersForAuthorization = true;
|
||||||
private IDictionary<string, string> accessTokenResponseParameters = null;
|
private IDictionary<string, string> accessTokenResponseParameters = null;
|
||||||
private IDictionary<string, string> requestTokenResponseParameters = null;
|
private IDictionary<string, string> requestTokenResponseParameters = null;
|
||||||
|
private IDictionary<string, object> requestTokenParameters = new Dictionary<string, object>();
|
||||||
|
|
||||||
|
public IDictionary<string, object> RequestTokenParameters {
|
||||||
|
get { return requestTokenParameters; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Parameters of the last called getAccessToken
|
/// Parameters of the last called getAccessToken
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -100,7 +105,7 @@ namespace GreenshotPlugin.Core {
|
||||||
private Size _browserSize = new Size(864, 587);
|
private Size _browserSize = new Size(864, 587);
|
||||||
private string loginTitle = "Authorize Greenshot access";
|
private string loginTitle = "Authorize Greenshot access";
|
||||||
|
|
||||||
#region PublicPropertiies
|
#region PublicProperties
|
||||||
public string RequestTokenUrl { get; set; }
|
public string RequestTokenUrl { get; set; }
|
||||||
public string AuthorizeUrl { get; set; }
|
public string AuthorizeUrl { get; set; }
|
||||||
public string AccessTokenUrl { get; set; }
|
public string AccessTokenUrl { get; set; }
|
||||||
|
@ -260,10 +265,14 @@ namespace GreenshotPlugin.Core {
|
||||||
private String getRequestToken() {
|
private String getRequestToken() {
|
||||||
string ret = null;
|
string ret = null;
|
||||||
IDictionary<string, object> parameters = new Dictionary<string, object>();
|
IDictionary<string, object> parameters = new Dictionary<string, object>();
|
||||||
|
foreach(var value in requestTokenParameters) {
|
||||||
|
parameters.Add(value);
|
||||||
|
}
|
||||||
Sign(HTTPMethod.POST, RequestTokenUrl, parameters);
|
Sign(HTTPMethod.POST, RequestTokenUrl, parameters);
|
||||||
string response = MakeRequest(HTTPMethod.POST, RequestTokenUrl, parameters, null, null);
|
string response = MakeRequest(HTTPMethod.POST, RequestTokenUrl, parameters, null);
|
||||||
LOG.DebugFormat("Request token response: {0}", response);
|
|
||||||
if (response.Length > 0) {
|
if (response.Length > 0) {
|
||||||
|
response = NetworkHelper.UrlDecode(response);
|
||||||
|
LOG.DebugFormat("Request token response: {0}", response);
|
||||||
requestTokenResponseParameters = NetworkHelper.ParseQueryString(response);
|
requestTokenResponseParameters = NetworkHelper.ParseQueryString(response);
|
||||||
if (requestTokenResponseParameters.ContainsKey(OAUTH_TOKEN_KEY)) {
|
if (requestTokenResponseParameters.ContainsKey(OAUTH_TOKEN_KEY)) {
|
||||||
this.Token = requestTokenResponseParameters[OAUTH_TOKEN_KEY];
|
this.Token = requestTokenResponseParameters[OAUTH_TOKEN_KEY];
|
||||||
|
@ -311,9 +320,10 @@ namespace GreenshotPlugin.Core {
|
||||||
|
|
||||||
IDictionary<string, object> parameters = new Dictionary<string, object>();
|
IDictionary<string, object> parameters = new Dictionary<string, object>();
|
||||||
Sign(HTTPMethod.POST, AccessTokenUrl, parameters);
|
Sign(HTTPMethod.POST, AccessTokenUrl, parameters);
|
||||||
string response = MakeRequest(HTTPMethod.POST, AccessTokenUrl, parameters, null, null);
|
string response = MakeRequest(HTTPMethod.POST, AccessTokenUrl, parameters, null);
|
||||||
LOG.DebugFormat("Access token response: {0}", response);
|
|
||||||
if (response.Length > 0) {
|
if (response.Length > 0) {
|
||||||
|
response = NetworkHelper.UrlDecode(response);
|
||||||
|
LOG.DebugFormat("Access token response: {0}", response);
|
||||||
accessTokenResponseParameters = NetworkHelper.ParseQueryString(response);
|
accessTokenResponseParameters = NetworkHelper.ParseQueryString(response);
|
||||||
if (accessTokenResponseParameters.ContainsKey(OAUTH_TOKEN_KEY) && accessTokenResponseParameters[OAUTH_TOKEN_KEY] != null) {
|
if (accessTokenResponseParameters.ContainsKey(OAUTH_TOKEN_KEY) && accessTokenResponseParameters[OAUTH_TOKEN_KEY] != null) {
|
||||||
this.Token = accessTokenResponseParameters[OAUTH_TOKEN_KEY];
|
this.Token = accessTokenResponseParameters[OAUTH_TOKEN_KEY];
|
||||||
|
@ -345,7 +355,13 @@ namespace GreenshotPlugin.Core {
|
||||||
LOG.Debug("User didn't authenticate!");
|
LOG.Debug("User didn't authenticate!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return getAccessToken() != null;
|
try {
|
||||||
|
System.Threading.Thread.Sleep(1000);
|
||||||
|
return getAccessToken() != null;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
LOG.Error(ex);
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -366,7 +382,7 @@ namespace GreenshotPlugin.Core {
|
||||||
/// <param name="parameters"></param>
|
/// <param name="parameters"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public string MakeOAuthRequest(HTTPMethod method, string requestURL, IDictionary<string, object> parameters) {
|
public string MakeOAuthRequest(HTTPMethod method, string requestURL, IDictionary<string, object> parameters) {
|
||||||
return MakeOAuthRequest(method, requestURL, parameters, null, null);
|
return MakeOAuthRequest(method, requestURL, parameters, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -375,10 +391,9 @@ namespace GreenshotPlugin.Core {
|
||||||
/// <param name="method">GET or POST</param>
|
/// <param name="method">GET or POST</param>
|
||||||
/// <param name="requestURL">The full url, including the querystring.</param>
|
/// <param name="requestURL">The full url, including the querystring.</param>
|
||||||
/// <param name="parameters">Parameters for the request</param>
|
/// <param name="parameters">Parameters for the request</param>
|
||||||
/// <param name="contentType">contenttype for the postdata</param>
|
|
||||||
/// <param name="postData">Data to post (MemoryStream)</param>
|
/// <param name="postData">Data to post (MemoryStream)</param>
|
||||||
/// <returns>The web server response.</returns>
|
/// <returns>The web server response.</returns>
|
||||||
public string MakeOAuthRequest(HTTPMethod method, string requestURL, IDictionary<string, object> parameters, string contentType, IBinaryContainer postData) {
|
public string MakeOAuthRequest(HTTPMethod method, string requestURL, IDictionary<string, object> parameters, IBinaryContainer postData) {
|
||||||
if (parameters == null) {
|
if (parameters == null) {
|
||||||
parameters = new Dictionary<string, object>();
|
parameters = new Dictionary<string, object>();
|
||||||
}
|
}
|
||||||
|
@ -393,7 +408,7 @@ namespace GreenshotPlugin.Core {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Sign(method, requestURL, parameters);
|
Sign(method, requestURL, parameters);
|
||||||
return MakeRequest(method, requestURL, parameters, contentType, postData);
|
return MakeRequest(method, requestURL, parameters, postData);
|
||||||
} catch (WebException wEx) {
|
} catch (WebException wEx) {
|
||||||
lastException = wEx;
|
lastException = wEx;
|
||||||
if (wEx.Response != null) {
|
if (wEx.Response != null) {
|
||||||
|
@ -479,10 +494,9 @@ namespace GreenshotPlugin.Core {
|
||||||
/// <param name="method"></param>
|
/// <param name="method"></param>
|
||||||
/// <param name="requestURL"></param>
|
/// <param name="requestURL"></param>
|
||||||
/// <param name="parameters"></param>
|
/// <param name="parameters"></param>
|
||||||
/// <param name="contentType"></param>
|
|
||||||
/// <param name="postData">IBinaryParameter</param>
|
/// <param name="postData">IBinaryParameter</param>
|
||||||
/// <returns>Response from server</returns>
|
/// <returns>Response from server</returns>
|
||||||
public string MakeRequest(HTTPMethod method, string requestURL, IDictionary<string, object> parameters, string contentType, IBinaryContainer postData) {
|
public string MakeRequest(HTTPMethod method, string requestURL, IDictionary<string, object> parameters, IBinaryContainer postData) {
|
||||||
if (parameters == null) {
|
if (parameters == null) {
|
||||||
throw new ArgumentNullException("parameters");
|
throw new ArgumentNullException("parameters");
|
||||||
}
|
}
|
||||||
|
@ -546,13 +560,10 @@ namespace GreenshotPlugin.Core {
|
||||||
requestStream.Write(data, 0, data.Length);
|
requestStream.Write(data, 0, data.Length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (postData != null) {
|
||||||
|
postData.Upload(webRequest);
|
||||||
} else {
|
} else {
|
||||||
webRequest.ContentType = contentType;
|
webRequest.ContentLength = 0;
|
||||||
if (postData != null) {
|
|
||||||
using (var requestStream = webRequest.GetRequestStream()) {
|
|
||||||
postData.WriteToStream(requestStream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string responseData = WebResponseGet(webRequest);
|
string responseData = WebResponseGet(webRequest);
|
||||||
|
@ -574,7 +585,11 @@ namespace GreenshotPlugin.Core {
|
||||||
using (StreamReader reader = new StreamReader(webRequest.GetResponse().GetResponseStream(), true)) {
|
using (StreamReader reader = new StreamReader(webRequest.GetResponse().GetResponseStream(), true)) {
|
||||||
responseData = reader.ReadToEnd();
|
responseData = reader.ReadToEnd();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (WebException e) {
|
||||||
|
HttpWebResponse response = (HttpWebResponse)e.Response;
|
||||||
|
using (Stream responseStream = response.GetResponseStream()) {
|
||||||
|
LOG.ErrorFormat("HTTP error {0} with content: {1}", response.StatusCode, new StreamReader(responseStream).ReadToEnd());
|
||||||
|
}
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue