fixed #2805: If Dropbox shared link already exists then get URL of it

This commit is contained in:
Jaex 2017-11-11 22:46:55 +03:00
parent 452a039392
commit 4d54841c73
3 changed files with 2033 additions and 8300 deletions

View file

@ -85,6 +85,7 @@ public sealed class Dropbox : FileUploader, IOAuth2Basic
private const string URLUpload = URLContent + "/files/upload"; private const string URLUpload = URLContent + "/files/upload";
private const string URLGetMetadata = URLAPI + "/files/get_metadata"; private const string URLGetMetadata = URLAPI + "/files/get_metadata";
private const string URLCreateSharedLink = URLAPI + "/sharing/create_shared_link_with_settings"; private const string URLCreateSharedLink = URLAPI + "/sharing/create_shared_link_with_settings";
private const string URLListSharedLinks = URLAPI + "/sharing/list_shared_links";
private const string URLCopy = URLAPI + "/files/copy"; private const string URLCopy = URLAPI + "/files/copy";
private const string URLCreateFolder = URLAPI + "/files/create_folder"; private const string URLCreateFolder = URLAPI + "/files/create_folder";
private const string URLDelete = URLAPI + "/files/delete"; private const string URLDelete = URLAPI + "/files/delete";
@ -296,10 +297,24 @@ public string CreateShareableLink(string path, bool directLink)
string response = SendRequest(HttpMethod.POST, URLCreateSharedLink, json, ContentTypeJSON, null, GetAuthHeaders()); string response = SendRequest(HttpMethod.POST, URLCreateSharedLink, json, ContentTypeJSON, null, GetAuthHeaders());
DropboxLinkMetadata linkMetadata = null;
if (!string.IsNullOrEmpty(response)) if (!string.IsNullOrEmpty(response))
{ {
DropboxLinkMetadata linkMetadata = JsonConvert.DeserializeObject<DropboxLinkMetadata>(response); linkMetadata = JsonConvert.DeserializeObject<DropboxLinkMetadata>(response);
}
else if (IsError && Errors[Errors.Count - 1].Contains("\"shared_link_already_exists\"")) // Ugly workaround
{
DropboxListSharedLinksResult result = ListSharedLinks(path, true);
if (result != null && result.links != null && result.links.Length > 0)
{
linkMetadata = result.links[0];
}
}
if (linkMetadata != null)
{
if (directLink) if (directLink)
{ {
return GetDirectShareableURL(linkMetadata.url); return GetDirectShareableURL(linkMetadata.url);
@ -314,6 +329,29 @@ public string CreateShareableLink(string path, bool directLink)
return null; return null;
} }
public DropboxListSharedLinksResult ListSharedLinks(string path, bool directOnly = false)
{
DropboxListSharedLinksResult result = null;
if (path != null && OAuth2Info.CheckOAuth(AuthInfo))
{
string json = JsonConvert.SerializeObject(new
{
path = VerifyPath(path),
direct_only = directOnly
});
string response = SendRequest(HttpMethod.POST, URLListSharedLinks, json, ContentTypeJSON, null, GetAuthHeaders());
if (!string.IsNullOrEmpty(response))
{
result = JsonConvert.DeserializeObject<DropboxListSharedLinksResult>(response);
}
}
return result;
}
public DropboxMetadata Copy(string fromPath, string toPath) public DropboxMetadata Copy(string fromPath, string toPath)
{ {
DropboxMetadata metadata = null; DropboxMetadata metadata = null;
@ -541,4 +579,11 @@ public class DropboxLinkMetadataTeamInfo
public string id { get; set; } public string id { get; set; }
public string name { get; set; } public string name { get; set; }
} }
public class DropboxListSharedLinksResult
{
public DropboxLinkMetadata[] links { get; set; }
public bool has_more { get; set; }
public string cursor { get; set; }
}
} }

View file

@ -441,7 +441,7 @@ private void InitializeComponent()
this.txtSulAPIKey = new System.Windows.Forms.TextBox(); this.txtSulAPIKey = new System.Windows.Forms.TextBox();
this.lblSulAPIKey = new System.Windows.Forms.Label(); this.lblSulAPIKey = new System.Windows.Forms.Label();
this.tpLithiio = new System.Windows.Forms.TabPage(); this.tpLithiio = new System.Windows.Forms.TabPage();
this.btnLithiioLogin = new System.Windows.Forms.Button(); this.btnLithiioFetchAPIKey = new System.Windows.Forms.Button();
this.txtLithiioPassword = new System.Windows.Forms.TextBox(); this.txtLithiioPassword = new System.Windows.Forms.TextBox();
this.txtLithiioEmail = new System.Windows.Forms.TextBox(); this.txtLithiioEmail = new System.Windows.Forms.TextBox();
this.lblLithiioPassword = new System.Windows.Forms.Label(); this.lblLithiioPassword = new System.Windows.Forms.Label();
@ -3737,7 +3737,7 @@ private void InitializeComponent()
// //
// tpLithiio // tpLithiio
// //
this.tpLithiio.Controls.Add(this.btnLithiioLogin); this.tpLithiio.Controls.Add(this.btnLithiioFetchAPIKey);
this.tpLithiio.Controls.Add(this.txtLithiioPassword); this.tpLithiio.Controls.Add(this.txtLithiioPassword);
this.tpLithiio.Controls.Add(this.txtLithiioEmail); this.tpLithiio.Controls.Add(this.txtLithiioEmail);
this.tpLithiio.Controls.Add(this.lblLithiioPassword); this.tpLithiio.Controls.Add(this.lblLithiioPassword);
@ -3749,12 +3749,12 @@ private void InitializeComponent()
this.tpLithiio.Name = "tpLithiio"; this.tpLithiio.Name = "tpLithiio";
this.tpLithiio.UseVisualStyleBackColor = true; this.tpLithiio.UseVisualStyleBackColor = true;
// //
// btnLithiioLogin // btnLithiioFetchAPIKey
// //
resources.ApplyResources(this.btnLithiioLogin, "btnLithiioLogin"); resources.ApplyResources(this.btnLithiioFetchAPIKey, "btnLithiioFetchAPIKey");
this.btnLithiioLogin.Name = "btnLithiioLogin"; this.btnLithiioFetchAPIKey.Name = "btnLithiioFetchAPIKey";
this.btnLithiioLogin.UseVisualStyleBackColor = true; this.btnLithiioFetchAPIKey.UseVisualStyleBackColor = true;
this.btnLithiioLogin.Click += new System.EventHandler(this.btnLithiioLogin_Click); this.btnLithiioFetchAPIKey.Click += new System.EventHandler(this.btnLithiioLogin_Click);
// //
// txtLithiioPassword // txtLithiioPassword
// //
@ -5833,7 +5833,7 @@ private void InitializeComponent()
private OAuthControl oauthFlickr; private OAuthControl oauthFlickr;
private System.Windows.Forms.CheckBox cbFlickrDirectLink; private System.Windows.Forms.CheckBox cbFlickrDirectLink;
private System.Windows.Forms.Button btnSulGetAPIKey; private System.Windows.Forms.Button btnSulGetAPIKey;
private System.Windows.Forms.Button btnLithiioLogin; private System.Windows.Forms.Button btnLithiioFetchAPIKey;
private System.Windows.Forms.TextBox txtLithiioPassword; private System.Windows.Forms.TextBox txtLithiioPassword;
private System.Windows.Forms.TextBox txtLithiioEmail; private System.Windows.Forms.TextBox txtLithiioEmail;
private System.Windows.Forms.Label lblLithiioPassword; private System.Windows.Forms.Label lblLithiioPassword;

File diff suppressed because it is too large Load diff