Added "Use direct link" checkbox to Google Drive uploader settings

This commit is contained in:
Mikael Hermansson 2016-06-11 12:11:58 +02:00
parent 6d9331ceb5
commit 3a2527b003
5 changed files with 68 additions and 2 deletions

View file

@ -24,9 +24,11 @@
#endregion License Information (GPL v3)
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Web;
using System.Windows.Forms;
namespace ShareX.UploadersLib.FileUploaders
@ -45,6 +47,7 @@ public override GenericUploader CreateUploader(UploadersConfig config, TaskRefer
return new GoogleDrive(config.GoogleDriveOAuth2Info)
{
IsPublic = config.GoogleDriveIsPublic,
DirectLink = config.GoogleDriveDirectLink,
FolderID = config.GoogleDriveUseFolder ? config.GoogleDriveFolderID : null
};
}
@ -56,6 +59,7 @@ public sealed class GoogleDrive : FileUploader, IOAuth2
{
public OAuth2Info AuthInfo { get; set; }
public bool IsPublic { get; set; }
public bool DirectLink { get; set; }
public string FolderID { get; set; }
public GoogleDrive(OAuth2Info oauth)
@ -258,7 +262,21 @@ public override UploadResult Upload(Stream stream, string fileName)
SetPermissions(upload.id, GoogleDrivePermissionRole.reader, GoogleDrivePermissionType.anyone, "", true);
}
result.URL = upload.alternateLink;
if (DirectLink)
{
Uri webContentLink = new Uri(upload.webContentLink);
string leftPart = webContentLink.GetLeftPart(UriPartial.Path);
NameValueCollection queryString = HttpUtility.ParseQueryString(webContentLink.Query);
queryString.Remove("export");
result.URL = $"{leftPart}?{queryString}";
}
else
{
result.URL = upload.alternateLink;
}
}
}
@ -269,6 +287,7 @@ public class GoogleDriveFile
{
public string id { get; set; }
public string alternateLink { get; set; }
public string webContentLink { get; set; }
public string title { get; set; }
public string description { get; set; }
}

View file

@ -191,6 +191,7 @@ private void InitializeComponent()
this.cbOneDriveCreateShareableLink = new System.Windows.Forms.CheckBox();
this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl();
this.tpGoogleDrive = new System.Windows.Forms.TabPage();
this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox();
this.cbGoogleDriveUseFolder = new System.Windows.Forms.CheckBox();
this.txtGoogleDriveFolderID = new System.Windows.Forms.TextBox();
this.lblGoogleDriveFolderID = new System.Windows.Forms.Label();
@ -1826,6 +1827,7 @@ private void InitializeComponent()
//
// tpGoogleDrive
//
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveDirectLink);
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveUseFolder);
this.tpGoogleDrive.Controls.Add(this.txtGoogleDriveFolderID);
this.tpGoogleDrive.Controls.Add(this.lblGoogleDriveFolderID);
@ -1837,6 +1839,13 @@ private void InitializeComponent()
this.tpGoogleDrive.Name = "tpGoogleDrive";
this.tpGoogleDrive.UseVisualStyleBackColor = true;
//
// cbGoogleDriveDirectLink
//
resources.ApplyResources(this.cbGoogleDriveDirectLink, "cbGoogleDriveDirectLink");
this.cbGoogleDriveDirectLink.Name = "cbGoogleDriveDirectLink";
this.cbGoogleDriveDirectLink.UseVisualStyleBackColor = true;
this.cbGoogleDriveDirectLink.CheckedChanged += new System.EventHandler(this.cbGoogleDriveDirectLink_CheckedChanged);
//
// cbGoogleDriveUseFolder
//
resources.ApplyResources(this.cbGoogleDriveUseFolder, "cbGoogleDriveUseFolder");
@ -4977,5 +4986,6 @@ private void InitializeComponent()
private System.Windows.Forms.TextBox txtEmailAutomaticSendTo;
private System.Windows.Forms.CheckBox cbEmailAutomaticSend;
private System.Windows.Forms.Button btnLithiioGetAPIKey;
}
private System.Windows.Forms.CheckBox cbGoogleDriveDirectLink;
}
}

View file

@ -370,6 +370,7 @@ public void LoadSettings()
}
cbGoogleDriveIsPublic.Checked = Config.GoogleDriveIsPublic;
cbGoogleDriveDirectLink.Checked = Config.GoogleDriveDirectLink;
cbGoogleDriveUseFolder.Checked = Config.GoogleDriveUseFolder;
txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder;
txtGoogleDriveFolderID.Text = Config.GoogleDriveFolderID;
@ -1366,6 +1367,11 @@ private void cbGoogleDriveIsPublic_CheckedChanged(object sender, EventArgs e)
Config.GoogleDriveIsPublic = cbGoogleDriveIsPublic.Checked;
}
private void cbGoogleDriveDirectLink_CheckedChanged(object sender, EventArgs e)
{
Config.GoogleDriveDirectLink = cbGoogleDriveDirectLink.Checked;
}
private void cbGoogleDriveUseFolder_CheckedChanged(object sender, EventArgs e)
{
Config.GoogleDriveUseFolder = cbGoogleDriveUseFolder.Checked;

View file

@ -4203,6 +4203,36 @@ store.book[0].title</value>
<data name="&gt;&gt;tpOneDrive.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cbGoogleDriveDirectLink.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbGoogleDriveDirectLink.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="cbGoogleDriveDirectLink.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 287</value>
</data>
<data name="cbGoogleDriveDirectLink.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 17</value>
</data>
<data name="cbGoogleDriveDirectLink.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="cbGoogleDriveDirectLink.Text" xml:space="preserve">
<value>Use direct link</value>
</data>
<data name="&gt;&gt;cbGoogleDriveDirectLink.Name" xml:space="preserve">
<value>cbGoogleDriveDirectLink</value>
</data>
<data name="&gt;&gt;cbGoogleDriveDirectLink.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbGoogleDriveDirectLink.Parent" xml:space="preserve">
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveDirectLink.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cbGoogleDriveUseFolder.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>

View file

@ -152,6 +152,7 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
public OAuth2Info GoogleDriveOAuth2Info = null;
public bool GoogleDriveIsPublic = true;
public bool GoogleDriveDirectLink = false;
public bool GoogleDriveUseFolder = false;
public string GoogleDriveFolderID = "";