Compare commits

...

6 Commits

Author SHA1 Message Date
jcommander 53e7ff0925
Merge 0704453dfc into 39bba4dda9 2024-04-23 20:05:24 +00:00
Jaex 39bba4dda9 Update version 2024-04-23 06:07:05 +03:00
Jaex 4ad4b5c9a7 Update FluentFTP 2024-04-23 05:59:36 +03:00
Jaex 40530d90a8 Update FFmpeg to 7.0 2024-04-23 05:40:37 +03:00
Jaex 94e57208d3 Use googleapis.com/auth/drive.file scope 2024-04-22 09:00:17 +03:00
jcommander 0704453dfc Generate ComboBox List for FTP Accounts and Select Default for Acc for filetype. 2024-02-27 02:43:39 +01:00
10 changed files with 178 additions and 73 deletions

View File

@ -3,7 +3,7 @@
<Company>ShareX Team</Company>
<Product>ShareX</Product>
<Copyright>Copyright (c) 2007-2024 ShareX Team</Copyright>
<Version>16.0.3</Version>
<Version>16.0.4</Version>
<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>

View File

@ -93,7 +93,7 @@ namespace ShareX.Setup
private static string MakeAppxPath => Path.Combine(WindowsKitsDir, "x64", "makeappx.exe");
private const string InnoSetupCompilerPath = @"C:\Program Files (x86)\Inno Setup 6\ISCC.exe";
private const string FFmpegDownloadURL = "https://github.com/ShareX/FFmpeg/releases/download/v6.1/ffmpeg-6.1-win64.zip";
private const string FFmpegDownloadURL = "https://github.com/ShareX/FFmpeg/releases/download/v7.0/ffmpeg-7.0-win64.zip";
private static void Main(string[] args)
{

View File

@ -89,7 +89,7 @@ namespace ShareX.UploadersLib.FileUploaders
{
OAuth2 = new GoogleOAuth2(oauth, this)
{
Scope = "https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/userinfo.profile"
Scope = "https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/userinfo.profile"
};
}

View File

@ -197,6 +197,7 @@ namespace ShareX.UploadersLib
this.cbOneDriveUseDirectLink = new System.Windows.Forms.CheckBox();
this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl();
this.tpGoogleDrive = new System.Windows.Forms.TabPage();
this.btnGoogleDriveFolderIDHelp = new System.Windows.Forms.Button();
this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthLoopbackControl();
this.cbGoogleDriveSharedDrive = new System.Windows.Forms.ComboBox();
this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox();
@ -1756,6 +1757,7 @@ namespace ShareX.UploadersLib
// tpGoogleDrive
//
this.tpGoogleDrive.BackColor = System.Drawing.SystemColors.Window;
this.tpGoogleDrive.Controls.Add(this.btnGoogleDriveFolderIDHelp);
this.tpGoogleDrive.Controls.Add(this.oauth2GoogleDrive);
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveSharedDrive);
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveDirectLink);
@ -1768,6 +1770,13 @@ namespace ShareX.UploadersLib
resources.ApplyResources(this.tpGoogleDrive, "tpGoogleDrive");
this.tpGoogleDrive.Name = "tpGoogleDrive";
//
// btnGoogleDriveFolderIDHelp
//
resources.ApplyResources(this.btnGoogleDriveFolderIDHelp, "btnGoogleDriveFolderIDHelp");
this.btnGoogleDriveFolderIDHelp.Name = "btnGoogleDriveFolderIDHelp";
this.btnGoogleDriveFolderIDHelp.UseVisualStyleBackColor = true;
this.btnGoogleDriveFolderIDHelp.Click += new System.EventHandler(this.btnGoogleDriveFolderIDHelp_Click);
//
// oauth2GoogleDrive
//
resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive");
@ -5495,5 +5504,6 @@ namespace ShareX.UploadersLib
private OAuthLoopbackControl oauth2GoogleCloudStorage;
private System.Windows.Forms.TextBox txtAzureStorageCacheControl;
private System.Windows.Forms.Label lblAzureStorageCacheControl;
private System.Windows.Forms.Button btnGoogleDriveFolderIDHelp;
}
}

View File

@ -385,22 +385,25 @@ namespace ShareX.UploadersLib
#region Google Drive
oauth2GoogleDrive.UpdateStatus(Config.GoogleDriveOAuth2Info, Config.GoogleDriveUserInfo);
btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
//btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
cbGoogleDriveIsPublic.Checked = Config.GoogleDriveIsPublic;
cbGoogleDriveDirectLink.Checked = Config.GoogleDriveDirectLink;
/*
cbGoogleDriveSharedDrive.Items.Clear();
cbGoogleDriveSharedDrive.Items.Add(GoogleDrive.MyDrive);
if (Config.GoogleDriveSelectedDrive?.id != GoogleDrive.MyDrive.id)
{
cbGoogleDriveSharedDrive.Items.Add(Config.GoogleDriveSelectedDrive);
}
*/
cbGoogleDriveUseFolder.Checked = Config.GoogleDriveUseFolder;
txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder;
btnGoogleDriveFolderIDHelp.Enabled = Config.GoogleDriveUseFolder;
txtGoogleDriveFolderID.Text = Config.GoogleDriveFolderID;
GoogleDriveSelectConfigDrive();
//GoogleDriveSelectConfigDrive();
#endregion Google Drive
@ -1679,7 +1682,7 @@ namespace ShareX.UploadersLib
}
oauth2GoogleDrive.UpdateStatus(Config.GoogleDriveOAuth2Info, Config.GoogleDriveUserInfo);
btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
//btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
this.ForceActivate();
}
@ -1704,6 +1707,7 @@ namespace ShareX.UploadersLib
{
Config.GoogleDriveUseFolder = cbGoogleDriveUseFolder.Checked;
txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder;
btnGoogleDriveFolderIDHelp.Enabled = Config.GoogleDriveUseFolder;
}
private void txtGoogleDriveFolderID_TextChanged(object sender, EventArgs e)
@ -1711,6 +1715,14 @@ namespace ShareX.UploadersLib
Config.GoogleDriveFolderID = txtGoogleDriveFolderID.Text;
}
private void btnGoogleDriveFolderIDHelp_Click(object sender, EventArgs e)
{
MessageBox.Show(@"Unfortunately, Google has forced us to use a more restrictive API scope, which does not allow us to see files or folders anymore. Because of this, we cannot provide folder listing and selection anymore.
However, there is a workaround. You can navigate to the Google Drive website in your browser, open the folder you want to upload to, and then copy the folder ID from the browser's address bar to here.",
"ShareX - Google Drive", MessageBoxButtons.OK, MessageBoxIcon.Question);
}
private void btnGoogleDriveRefreshFolders_Click(object sender, EventArgs e)
{
GoogleDriveRefreshFolders();

View File

@ -459,7 +459,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauthTwitter</value>
</data>
<data name="&gt;&gt;oauthTwitter.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauthTwitter.Parent" xml:space="preserve">
<value>tpTwitter</value>
@ -714,7 +714,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2Bitly</value>
</data>
<data name="&gt;&gt;oauth2Bitly.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauth2Bitly.Parent" xml:space="preserve">
<value>tpBitly</value>
@ -2349,7 +2349,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>eiFTP</value>
</data>
<data name="&gt;&gt;eiFTP.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;eiFTP.Parent" xml:space="preserve">
<value>gbFTPAccount</value>
@ -3555,7 +3555,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2Dropbox</value>
</data>
<data name="&gt;&gt;oauth2Dropbox.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauth2Dropbox.Parent" xml:space="preserve">
<value>tpDropbox</value>
@ -3714,7 +3714,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oAuth2OneDrive</value>
</data>
<data name="&gt;&gt;oAuth2OneDrive.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oAuth2OneDrive.Parent" xml:space="preserve">
<value>tpOneDrive</value>
@ -3723,13 +3723,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>4</value>
</data>
<data name="tpOneDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 58</value>
<value>4, 220</value>
</data>
<data name="tpOneDrive.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tpOneDrive.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 507</value>
<value>178, 0</value>
</data>
<data name="tpOneDrive.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
@ -3749,6 +3749,30 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<data name="&gt;&gt;tpOneDrive.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="btnGoogleDriveFolderIDHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>424, 174</value>
</data>
<data name="btnGoogleDriveFolderIDHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
</data>
<data name="btnGoogleDriveFolderIDHelp.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="btnGoogleDriveFolderIDHelp.Text" xml:space="preserve">
<value>?</value>
</data>
<data name="&gt;&gt;btnGoogleDriveFolderIDHelp.Name" xml:space="preserve">
<value>btnGoogleDriveFolderIDHelp</value>
</data>
<data name="&gt;&gt;btnGoogleDriveFolderIDHelp.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnGoogleDriveFolderIDHelp.Parent" xml:space="preserve">
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;btnGoogleDriveFolderIDHelp.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="oauth2GoogleDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
</data>
@ -3762,22 +3786,25 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2GoogleDrive</value>
</data>
<data name="&gt;&gt;oauth2GoogleDrive.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauth2GoogleDrive.Parent" xml:space="preserve">
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;oauth2GoogleDrive.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="cbGoogleDriveSharedDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 136</value>
<value>16, 208</value>
</data>
<data name="cbGoogleDriveSharedDrive.Size" type="System.Drawing.Size, System.Drawing">
<value>256, 21</value>
</data>
<data name="cbGoogleDriveSharedDrive.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>7</value>
</data>
<data name="cbGoogleDriveSharedDrive.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;cbGoogleDriveSharedDrive.Name" xml:space="preserve">
<value>cbGoogleDriveSharedDrive</value>
@ -3789,7 +3816,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveSharedDrive.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="cbGoogleDriveDirectLink.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3798,7 +3825,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>NoControl</value>
</data>
<data name="cbGoogleDriveDirectLink.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 111</value>
<value>16, 112</value>
</data>
<data name="cbGoogleDriveDirectLink.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value>
@ -3819,7 +3846,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveDirectLink.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<data name="cbGoogleDriveUseFolder.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3828,13 +3855,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>NoControl</value>
</data>
<data name="cbGoogleDriveUseFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 167</value>
<value>16, 136</value>
</data>
<data name="cbGoogleDriveUseFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 17</value>
</data>
<data name="cbGoogleDriveUseFolder.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
<value>3</value>
</data>
<data name="cbGoogleDriveUseFolder.Text" xml:space="preserve">
<value>Upload files to selected folder</value>
@ -3849,16 +3876,16 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveUseFolder.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="txtGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 208</value>
<value>16, 176</value>
</data>
<data name="txtGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing">
<value>432, 20</value>
<value>400, 20</value>
</data>
<data name="txtGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
<value>5</value>
</data>
<data name="&gt;&gt;txtGoogleDriveFolderID.Name" xml:space="preserve">
<value>txtGoogleDriveFolderID</value>
@ -3870,7 +3897,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;txtGoogleDriveFolderID.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<data name="lblGoogleDriveFolderID.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3879,13 +3906,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>NoControl</value>
</data>
<data name="lblGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 191</value>
<value>13, 160</value>
</data>
<data name="lblGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 13</value>
</data>
<data name="lblGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
<value>4</value>
</data>
<data name="lblGoogleDriveFolderID.Text" xml:space="preserve">
<value>Folder ID:</value>
@ -3900,7 +3927,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;lblGoogleDriveFolderID.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="chGoogleDriveTitle.Text" xml:space="preserve">
<value>Title</value>
@ -3915,25 +3942,28 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>228</value>
</data>
<data name="lvGoogleDriveFoldersList.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 232</value>
<value>16, 240</value>
</data>
<data name="lvGoogleDriveFoldersList.Size" type="System.Drawing.Size, System.Drawing">
<value>432, 296</value>
</data>
<data name="lvGoogleDriveFoldersList.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<value>9</value>
</data>
<data name="lvGoogleDriveFoldersList.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.Name" xml:space="preserve">
<value>lvGoogleDriveFoldersList</value>
</data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.Parent" xml:space="preserve">
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
@ -3942,17 +3972,20 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>NoControl</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Location" type="System.Drawing.Point, System.Drawing">
<value>280, 135</value>
<value>280, 208</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 23</value>
</data>
<data name="btnGoogleDriveRefreshFolders.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<value>8</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Text" xml:space="preserve">
<value>Refresh folders list</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;btnGoogleDriveRefreshFolders.Name" xml:space="preserve">
<value>btnGoogleDriveRefreshFolders</value>
</data>
@ -3963,7 +3996,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;btnGoogleDriveRefreshFolders.ZOrder" xml:space="preserve">
<value>7</value>
<value>8</value>
</data>
<data name="cbGoogleDriveIsPublic.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3975,13 +4008,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>16, 88</value>
</data>
<data name="cbGoogleDriveIsPublic.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 17</value>
<value>90, 17</value>
</data>
<data name="cbGoogleDriveIsPublic.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="cbGoogleDriveIsPublic.Text" xml:space="preserve">
<value>Is public upload?</value>
<value>Public upload</value>
</data>
<data name="&gt;&gt;cbGoogleDriveIsPublic.Name" xml:space="preserve">
<value>cbGoogleDriveIsPublic</value>
@ -3993,16 +4026,16 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveIsPublic.ZOrder" xml:space="preserve">
<value>8</value>
<value>9</value>
</data>
<data name="tpGoogleDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 220</value>
<value>4, 58</value>
</data>
<data name="tpGoogleDrive.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tpGoogleDrive.Size" type="System.Drawing.Size, System.Drawing">
<value>178, 0</value>
<value>803, 507</value>
</data>
<data name="tpGoogleDrive.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -4392,7 +4425,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>lvBoxFolders</value>
</data>
<data name="&gt;&gt;lvBoxFolders.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvBoxFolders.Parent" xml:space="preserve">
<value>tpBox</value>
@ -4473,7 +4506,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2Box</value>
</data>
<data name="&gt;&gt;oauth2Box.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauth2Box.Parent" xml:space="preserve">
<value>tpBox</value>
@ -5352,7 +5385,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2GoogleCloudStorage</value>
</data>
<data name="&gt;&gt;oauth2GoogleCloudStorage.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauth2GoogleCloudStorage.Parent" xml:space="preserve">
<value>tpGoogleCloudStorage</value>
@ -7824,7 +7857,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>atcSendSpaceAccountType</value>
</data>
<data name="&gt;&gt;atcSendSpaceAccountType.Type" xml:space="preserve">
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;atcSendSpaceAccountType.Parent" xml:space="preserve">
<value>tpSendSpace</value>
@ -8193,7 +8226,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oAuthJira</value>
</data>
<data name="&gt;&gt;oAuthJira.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oAuthJira.Parent" xml:space="preserve">
<value>tpJira</value>
@ -8772,7 +8805,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>lvSeafileLibraries</value>
</data>
<data name="&gt;&gt;lvSeafileLibraries.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvSeafileLibraries.Parent" xml:space="preserve">
<value>tpSeafile</value>
@ -10531,7 +10564,7 @@ Using an encrypted library disables sharing.</value>
<value>oauth2YouTube</value>
</data>
<data name="&gt;&gt;oauth2YouTube.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauth2YouTube.Parent" xml:space="preserve">
<value>tpYouTube</value>
@ -12265,7 +12298,7 @@ Using an encrypted library disables sharing.</value>
<value>oAuth2Gist</value>
</data>
<data name="&gt;&gt;oAuth2Gist.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oAuth2Gist.Parent" xml:space="preserve">
<value>tpGist</value>
@ -12904,7 +12937,7 @@ Using an encrypted library disables sharing.</value>
<value>atcImgurAccountType</value>
</data>
<data name="&gt;&gt;atcImgurAccountType.Type" xml:space="preserve">
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;atcImgurAccountType.Parent" xml:space="preserve">
<value>tpImgur</value>
@ -12925,7 +12958,7 @@ Using an encrypted library disables sharing.</value>
<value>oauth2Imgur</value>
</data>
<data name="&gt;&gt;oauth2Imgur.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauth2Imgur.Parent" xml:space="preserve">
<value>tpImgur</value>
@ -12961,7 +12994,7 @@ Using an encrypted library disables sharing.</value>
<value>lvImgurAlbumList</value>
</data>
<data name="&gt;&gt;lvImgurAlbumList.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvImgurAlbumList.Parent" xml:space="preserve">
<value>tpImgur</value>
@ -13360,7 +13393,7 @@ Using an encrypted library disables sharing.</value>
<value>oauthFlickr</value>
</data>
<data name="&gt;&gt;oauthFlickr.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauthFlickr.Parent" xml:space="preserve">
<value>tpFlickr</value>
@ -13897,7 +13930,7 @@ Using an encrypted library disables sharing.</value>
<value>oauth2GooglePhotos</value>
</data>
<data name="&gt;&gt;oauth2GooglePhotos.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;oauth2GooglePhotos.Parent" xml:space="preserve">
<value>tpGooglePhotos</value>
@ -14557,7 +14590,7 @@ Using an encrypted library disables sharing.</value>
<value>tttvMain</value>
</data>
<data name="&gt;&gt;tttvMain.Type" xml:space="preserve">
<value>ShareX.HelpersLib.TabToTreeView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.TabToTreeView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tttvMain.Parent" xml:space="preserve">
<value>$this</value>
@ -14578,7 +14611,7 @@ Using an encrypted library disables sharing.</value>
<value>actRapidShareAccountType</value>
</data>
<data name="&gt;&gt;actRapidShareAccountType.Type" xml:space="preserve">
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>

View File

@ -16,7 +16,7 @@
<EmbeddedResource Include="APIKeys\jira_sharex.pfx" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FluentFTP" Version="49.0.2" />
<PackageReference Include="FluentFTP" Version="50.0.1" />
<PackageReference Include="MegaApiClient" Version="1.10.4" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="SSH.NET" Version="2024.0.0" />

View File

@ -47,7 +47,7 @@ namespace ShareX
switch (info.DataType)
{
case EDataType.Image:
InitCapture(info.TaskSettings);
InitCapture(info.TaskSettings, info.DataType);
break;
case EDataType.Text:
Helpers.GetEnums<TextDestination>().ForEach(x =>
@ -61,7 +61,7 @@ namespace ShareX
overrideText = GetCustomUploaderName(Program.UploadersConfig.CustomTextUploaderSelected, info.TaskSettings);
}
AddDestination<TextDestination>((int)x, EDataType.Text, info.TaskSettings, overrideText);
AddDestination<TextDestination>((int)x, EDataType.Text, info.TaskSettings, overrideText, info.DataType);
}
});
@ -74,7 +74,7 @@ namespace ShareX
overrideText = GetCustomUploaderName(Program.UploadersConfig.CustomFileUploaderSelected, info.TaskSettings);
}
AddDestination<FileDestination>((int)x, EDataType.Text, info.TaskSettings, overrideText);
AddDestination<FileDestination>((int)x, EDataType.Text, info.TaskSettings, overrideText, info.DataType);
});
flp.Controls.OfType<RadioButton>().ForEach(x =>
@ -99,7 +99,7 @@ namespace ShareX
overrideText = GetCustomUploaderName(Program.UploadersConfig.CustomFileUploaderSelected, info.TaskSettings);
}
AddDestination<FileDestination>((int)x, EDataType.File, info.TaskSettings, overrideText);
AddDestination<FileDestination>((int)x, EDataType.File, info.TaskSettings, overrideText, info.DataType);
});
flp.Controls.OfType<RadioButton>().ForEach(x =>
@ -117,7 +117,7 @@ namespace ShareX
overrideText = GetCustomUploaderName(Program.UploadersConfig.CustomURLShortenerSelected, info.TaskSettings);
}
AddDestination<UrlShortenerType>((int)x, EDataType.URL, info.TaskSettings, overrideText);
AddDestination<UrlShortenerType>((int)x, EDataType.URL, info.TaskSettings, overrideText, info.DataType);
});
flp.Controls.OfType<RadioButton>().ForEach(x =>
@ -131,7 +131,7 @@ namespace ShareX
OnInitCompleted();
}
public void InitCapture(TaskSettings taskSettings)
public void InitCapture(TaskSettings taskSettings, EDataType trueDateType = EDataType.Default)
{
Helpers.GetEnums<ImageDestination>().ForEach(x =>
{
@ -144,7 +144,7 @@ namespace ShareX
overrideText = GetCustomUploaderName(Program.UploadersConfig.CustomImageUploaderSelected, taskSettings);
}
AddDestination<ImageDestination>((int)x, EDataType.Image, taskSettings, overrideText);
AddDestination<ImageDestination>((int)x, EDataType.Image, taskSettings, overrideText, trueDateType);
}
});
@ -157,7 +157,7 @@ namespace ShareX
overrideText = GetCustomUploaderName(Program.UploadersConfig.CustomFileUploaderSelected, taskSettings);
}
AddDestination<FileDestination>((int)x, EDataType.File, taskSettings, overrideText);
AddDestination<FileDestination>((int)x, EDataType.File, taskSettings, overrideText, trueDateType);
});
flp.Controls.OfType<RadioButton>().ForEach(x =>
@ -187,23 +187,67 @@ namespace ShareX
}
}
private void AddDestination<T>(int index, EDataType dataType, TaskSettings taskSettings, string overrideText = null)
private void AddDestination<T>(int index, EDataType dataType, TaskSettings taskSettings, string overrideText = null, EDataType trueDataType = EDataType.Default)
{
Enum destination = (Enum)Enum.ToObject(typeof(T), index);
if (UploadersConfigValidator.Validate<T>(index, Program.UploadersConfig))
if (destination.Equals(FileDestination.FTP))
{
RadioButton rb = new RadioButton() { AutoSize = true };
rb.Text = string.IsNullOrEmpty(overrideText) ? destination.GetLocalizedDescription() :
string.Format("{0} [{1}]", Resources.BeforeUploadControl_AddDestination_Custom, overrideText);
rb.Text = string.Format("FTP");
rb.Tag = destination;
rb.CheckedChanged += (sender, e) => SetDestinations(rb.Checked, dataType, rb.Tag, taskSettings);
ComboBox ftpComboBox = new ComboBox() { Size = new System.Drawing.Size(250, 100) };
Program.UploadersConfig.FTPAccountList.ForEach(ftpAcc => { ftpComboBox.Items.Add(ftpAcc.Name); });
ftpComboBox.SelectedIndexChanged += (sender, e) => SetFTPOverrideIndex(ftpComboBox.SelectedIndex, taskSettings);
switch (trueDataType)
{
case EDataType.Image:
ftpComboBox.SelectedIndex = Program.UploadersConfig.FTPSelectedImage;
break;
case EDataType.Text:
ftpComboBox.SelectedIndex = Program.UploadersConfig.FTPSelectedText;
break;
default:
case EDataType.File:
ftpComboBox.SelectedIndex = Program.UploadersConfig.FTPSelectedFile;
break;
}
rb.CheckedChanged += (sender, e) => SetFTPOverride(rb.Checked, ftpComboBox.SelectedIndex, taskSettings);
flp.Controls.Add(rb);
flp.Controls.Add(ftpComboBox);
} else {
if (UploadersConfigValidator.Validate<T>(index, Program.UploadersConfig))
{
RadioButton rb = new RadioButton() { AutoSize = true };
rb.Text = string.IsNullOrEmpty(overrideText) ? destination.GetLocalizedDescription() :
string.Format("{0} [{1}]", Resources.BeforeUploadControl_AddDestination_Custom, overrideText);
rb.Tag = destination;
rb.CheckedChanged += (sender, e) => SetDestinations(rb.Checked, dataType, rb.Tag, taskSettings);
flp.Controls.Add(rb);
}
}
}
private void SetFTPOverrideIndex(int ftpAccIndex, TaskSettings taskSettings)
{
DebugHelper.WriteLine(ftpAccIndex.ToString());
taskSettings.FTPIndex = ftpAccIndex;
}
private void SetFTPOverride(bool isActive, int ftpAccIndex, TaskSettings taskSettings)
{
if (!isActive) return;
DebugHelper.WriteLine(ftpAccIndex.ToString());
taskSettings.OverrideFTP = true;
taskSettings.FTPIndex = ftpAccIndex;
taskSettings.ImageDestination = ImageDestination.FileUploader;
taskSettings.TextDestination = TextDestination.FileUploader;
taskSettings.ImageFileDestination = taskSettings.TextFileDestination = taskSettings.FileDestination = FileDestination.FTP;
}
private void SetDestinations(bool isActive, EDataType dataType, object destination, TaskSettings taskSettings)
{
if (!isActive) return;

View File

@ -50,7 +50,7 @@ namespace ShareX
lvAfterCaptureTasks.SmallImageList = imageList;
lvAfterUploadTasks.SmallImageList = imageList;
ucBeforeUpload.InitCapture(TaskSettings);
ucBeforeUpload.InitCapture(TaskSettings, EDataType.Image);
AddAfterCaptureItems(TaskSettings.AfterCaptureJob);
AddAfterUploadItems(TaskSettings.AfterUploadJob);

View File

@ -431,6 +431,12 @@ namespace ShareX
if (!cancelUpload)
{
if (Info.TaskSettings.OverrideFTP)
{
taskReferenceHelper.OverrideFTP = true;
taskReferenceHelper.FTPIndex = Info.TaskSettings.FTPIndex;
}
OnUploadStarted();
bool isError = DoUpload(Data, Info.FileName);