From 3a2527b00396923850f0aff4cca91037d652f3f9 Mon Sep 17 00:00:00 2001 From: Mikael Hermansson Date: Sat, 11 Jun 2016 12:11:58 +0200 Subject: [PATCH] Added "Use direct link" checkbox to Google Drive uploader settings --- .../FileUploaders/GoogleDrive.cs | 21 ++++++++++++- .../Forms/UploadersConfigForm.Designer.cs | 12 +++++++- .../Forms/UploadersConfigForm.cs | 6 ++++ .../Forms/UploadersConfigForm.resx | 30 +++++++++++++++++++ ShareX.UploadersLib/UploadersConfig.cs | 1 + 5 files changed, 68 insertions(+), 2 deletions(-) diff --git a/ShareX.UploadersLib/FileUploaders/GoogleDrive.cs b/ShareX.UploadersLib/FileUploaders/GoogleDrive.cs index bcd2c783a..bdfb3521e 100644 --- a/ShareX.UploadersLib/FileUploaders/GoogleDrive.cs +++ b/ShareX.UploadersLib/FileUploaders/GoogleDrive.cs @@ -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; } } diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs index c25283117..80374ea78 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs @@ -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; + } } diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs index 6be0f3ae0..404d1d237 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs @@ -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; diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx index 5d0b1cd3b..ac2821142 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx @@ -4203,6 +4203,36 @@ store.book[0].title 2 + + True + + + NoControl + + + 16, 287 + + + 73, 17 + + + 13 + + + Use direct link + + + cbGoogleDriveDirectLink + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpGoogleDrive + + + 0 + True diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs index 061c20ff4..5cde381b1 100644 --- a/ShareX.UploadersLib/UploadersConfig.cs +++ b/ShareX.UploadersLib/UploadersConfig.cs @@ -152,6 +152,7 @@ public class UploadersConfig : SettingsBase public OAuth2Info GoogleDriveOAuth2Info = null; public bool GoogleDriveIsPublic = true; + public bool GoogleDriveDirectLink = false; public bool GoogleDriveUseFolder = false; public string GoogleDriveFolderID = "";