diff --git a/ShareX.UploadersLib/BaseUploaders/Uploader.cs b/ShareX.UploadersLib/BaseUploaders/Uploader.cs
index 5eee696e5..9c47f8d64 100644
--- a/ShareX.UploadersLib/BaseUploaders/Uploader.cs
+++ b/ShareX.UploadersLib/BaseUploaders/Uploader.cs
@@ -345,6 +345,12 @@ private HttpWebRequest PrepareWebRequest(HttpMethod method, string url, NameValu
headers.Remove("Accept");
}
+ if (headers["Content-Length"] != null)
+ {
+ request.ContentLength = Convert.ToInt32(headers["Content-Length"]);
+ headers.Remove("Content-Length");
+ }
+
request.Headers.Add(headers);
}
diff --git a/ShareX.UploadersLib/Enums.cs b/ShareX.UploadersLib/Enums.cs
index 1f5b8148c..7e92b810a 100644
--- a/ShareX.UploadersLib/Enums.cs
+++ b/ShareX.UploadersLib/Enums.cs
@@ -105,6 +105,8 @@ public enum FileDestination
Mega,
[Description("Amazon S3")]
AmazonS3,
+ [Description("Azure Storage")]
+ AzureStorage,
[Description("ownCloud")]
OwnCloud,
[Description("MediaFire")]
diff --git a/ShareX.UploadersLib/Favicons/AzureStorage.png b/ShareX.UploadersLib/Favicons/AzureStorage.png
new file mode 100644
index 000000000..ace84333e
Binary files /dev/null and b/ShareX.UploadersLib/Favicons/AzureStorage.png differ
diff --git a/ShareX.UploadersLib/FileUploaders/AzureStorage.cs b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs
new file mode 100644
index 000000000..920292a5c
--- /dev/null
+++ b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs
@@ -0,0 +1,186 @@
+using ShareX.UploadersLib.Properties;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Drawing;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Security.Cryptography;
+using System.Text;
+using System.Windows.Forms;
+
+namespace ShareX.UploadersLib.FileUploaders
+{
+ public sealed class AzureStorage : FileUploader
+ {
+ private string azureStorageAccountName;
+ private string azureStorageAccountAccessKey;
+ private string azureStorageContainer;
+ private const string apiVersion = "2016-05-31";
+
+ public AzureStorage(string asAccountName, string asAccessKey, string asContainer)
+ {
+ azureStorageAccountName = asAccountName;
+ azureStorageAccountAccessKey = asAccessKey;
+ azureStorageContainer = asContainer;
+ }
+
+ public override UploadResult Upload(Stream stream, string fileName)
+ {
+ if (string.IsNullOrEmpty(azureStorageAccountName)) { Errors.Add("'Account Name' must not be empty"); }
+ if (string.IsNullOrEmpty(azureStorageAccountAccessKey)) { Errors.Add("'Access key' must not be empty"); }
+ if (string.IsNullOrEmpty(azureStorageContainer)) { Errors.Add("'Container' must not be empty"); }
+
+ if (IsError)
+ {
+ return null;
+ }
+
+ CreateContainerIfNotExists();
+
+ var date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
+ var uri = string.Format("https://{0}.blob.core.windows.net/{1}/{2}", azureStorageAccountName, azureStorageContainer, fileName);
+
+ NameValueCollection requestHeaders = new NameValueCollection();
+ requestHeaders["x-ms-date"] = date;
+ requestHeaders["x-ms-version"] = apiVersion;
+ requestHeaders["x-ms-blob-type"] = "BlockBlob";
+
+ var canonicalizedHeaders = string.Format("x-ms-blob-type:BlockBlob\nx-ms-date:{0}\nx-ms-version:{1}\n", date, apiVersion);
+ var canonicalizedResource = string.Format("/{0}/{1}/{2}", azureStorageAccountName, azureStorageContainer, fileName);
+
+ var StringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource, stream.Length.ToString());
+
+ requestHeaders["Authorization"] = string.Format("SharedKey {0}:{1}", azureStorageAccountName, HashRequest(StringToSign));
+
+ NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, uri, stream, null, null, requestHeaders, null);
+
+ if (responseHeaders != null)
+ {
+ return new UploadResult { IsSuccess = true, URL = uri };
+ }
+ else
+ {
+ Errors.Add("Upload failed.");
+ return null;
+ }
+ }
+
+ private void CreateContainerIfNotExists()
+ {
+ var date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
+ var uri = string.Format("https://{0}.blob.core.windows.net/{1}?restype=container", azureStorageAccountName, azureStorageContainer);
+
+ NameValueCollection requestHeaders = new NameValueCollection();
+ requestHeaders["Content-Length"] = "0";
+ requestHeaders["x-ms-date"] = date;
+ requestHeaders["x-ms-version"] = apiVersion;
+
+ var canonicalizedHeaders = string.Format("x-ms-date:{0}\nx-ms-version:{1}\n", date, apiVersion);
+ var canonicalizedResource = string.Format("/{0}/{1}\nrestype:container", azureStorageAccountName, azureStorageContainer);
+
+ var StringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource);
+
+ requestHeaders["Authorization"] = string.Format("SharedKey {0}:{1}", azureStorageAccountName, HashRequest(StringToSign));
+
+ NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, uri, null, null, null, requestHeaders, null);
+
+ if (responseHeaders != null)
+ {
+ SetContainerACL();
+ }
+ else
+ {
+ if (Errors.Count != 0)
+ {
+ if (Errors[0].Contains("409"))
+ SetContainerACL();
+ else
+ {
+ Errors.Add("Upload to Azure storage failed.");
+ }
+ }
+ }
+ }
+
+ private void SetContainerACL()
+ {
+ var date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
+ var uri = string.Format("https://{0}.blob.core.windows.net/{1}?restype=container&comp=acl", azureStorageAccountName, azureStorageContainer);
+
+ NameValueCollection requestHeaders = new NameValueCollection();
+ requestHeaders["Content-Length"] = "0";
+ requestHeaders["x-ms-date"] = date;
+ requestHeaders["x-ms-version"] = apiVersion;
+ requestHeaders["x-ms-blob-public-access"] = "container";
+
+ var canonicalizedHeaders = string.Format("x-ms-blob-public-access:container\nx-ms-date:{0}\nx-ms-version:{1}\n", date, apiVersion);
+ var canonicalizedResource = string.Format("/{0}/{1}\ncomp:acl\nrestype:container", azureStorageAccountName, azureStorageContainer);
+
+ var StringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource);
+
+ requestHeaders["Authorization"] = string.Format("SharedKey {0}:{1}", azureStorageAccountName, HashRequest(StringToSign));
+
+ NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, uri, null, null, null, requestHeaders, null);
+
+ if (responseHeaders == null)
+ Errors.Add("There was an issue with setting ACL on the container.");
+ }
+
+ private string HashRequest(string stringToSign)
+ {
+ string hashedString;
+
+ using (HashAlgorithm hashAlgorithm = new HMACSHA256(Convert.FromBase64String(azureStorageAccountAccessKey)))
+ {
+ byte[] messageBuffer = Encoding.UTF8.GetBytes(stringToSign);
+ hashedString = Convert.ToBase64String(hashAlgorithm.ComputeHash(messageBuffer));
+ }
+
+ return hashedString;
+ }
+
+ private string GenerateStringToSign(string canonicalizedHeaders, string canonicalizedResource, string contentLength = "")
+ {
+ var stringToSign = "PUT" + "\n" +
+ "\n" +
+ "\n" +
+ (string.IsNullOrEmpty(contentLength) ? string.Empty : contentLength) + "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ canonicalizedHeaders +
+ canonicalizedResource;
+
+ return stringToSign;
+ }
+ }
+
+ public class AzureStorageUploaderService : FileUploaderService
+ {
+ public override FileDestination EnumValue { get; } = FileDestination.AzureStorage;
+
+ public override Image ServiceImage => Resources.AzureStorage;
+
+ public override bool CheckConfig(UploadersConfig config)
+ {
+ return !string.IsNullOrEmpty(config.AzureStorageAccountName) &&
+ !string.IsNullOrEmpty(config.AzureStorageAccountAccessKey) &&
+ !string.IsNullOrEmpty(config.AzureStorageContainer);
+ }
+
+ public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo)
+ {
+ return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer);
+ }
+
+ public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpAzureStorage;
+ }
+}
\ No newline at end of file
diff --git a/ShareX.UploadersLib/FileUploaders/AzureStorageSettings.cs b/ShareX.UploadersLib/FileUploaders/AzureStorageSettings.cs
new file mode 100644
index 000000000..d4cd846a6
--- /dev/null
+++ b/ShareX.UploadersLib/FileUploaders/AzureStorageSettings.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace ShareX.UploadersLib.FileUploaders
+{
+ public class AzureStorageSettings
+ {
+ public string AccountName { get; set; }
+ public string AccessKey { get; set; }
+ public string Container { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs
index 89b047916..bed39996b 100644
--- a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs
+++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs
@@ -34,6 +34,8 @@ private void InitializeComponent()
this.ttHelpTip = new System.Windows.Forms.ToolTip(this.components);
this.cbAmazonS3UseRRS = new System.Windows.Forms.CheckBox();
this.cbAmazonS3CustomCNAME = new System.Windows.Forms.CheckBox();
+ this.mbCustomUploaderDestinationType = new ShareX.HelpersLib.MenuButton();
+ this.cmsCustomUploaderDestinationType = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tpOtherUploaders = new System.Windows.Forms.TabPage();
this.tcOtherUploaders = new System.Windows.Forms.TabControl();
this.tpTwitter = new System.Windows.Forms.TabPage();
@@ -42,6 +44,7 @@ private void InitializeComponent()
this.lblTwitterDefaultMessage = new System.Windows.Forms.Label();
this.txtTwitterDefaultMessage = new System.Windows.Forms.TextBox();
this.cbTwitterSkipMessageBox = new System.Windows.Forms.CheckBox();
+ this.oauthTwitter = new ShareX.UploadersLib.OAuthControl();
this.txtTwitterDescription = new System.Windows.Forms.TextBox();
this.lblTwitterDescription = new System.Windows.Forms.Label();
this.btnTwitterRemove = new System.Windows.Forms.Button();
@@ -103,8 +106,6 @@ private void InitializeComponent()
this.lblCustomUploaderResponseType = new System.Windows.Forms.Label();
this.cbCustomUploaderURLShortener = new System.Windows.Forms.ComboBox();
this.gbCustomUploaders = new System.Windows.Forms.GroupBox();
- this.mbCustomUploaderDestinationType = new ShareX.HelpersLib.MenuButton();
- this.cmsCustomUploaderDestinationType = new System.Windows.Forms.ContextMenuStrip(this.components);
this.btnCustomUploadersExportAll = new System.Windows.Forms.Button();
this.btnCustomUploaderClearUploaders = new System.Windows.Forms.Button();
this.eiCustomUploaders = new ShareX.HelpersLib.ExportImportControl();
@@ -136,7 +137,10 @@ private void InitializeComponent()
this.tpBitly = new System.Windows.Forms.TabPage();
this.txtBitlyDomain = new System.Windows.Forms.TextBox();
this.lblBitlyDomain = new System.Windows.Forms.Label();
+ this.oauth2Bitly = new ShareX.UploadersLib.OAuthControl();
this.tpGoogleURLShortener = new System.Windows.Forms.TabPage();
+ this.oauth2GoogleURLShortener = new ShareX.UploadersLib.OAuthControl();
+ this.atcGoogleURLShortenerAccountType = new ShareX.UploadersLib.AccountTypeControl();
this.tpYourls = new System.Windows.Forms.TabPage();
this.txtYourlsPassword = new System.Windows.Forms.TextBox();
this.txtYourlsUsername = new System.Windows.Forms.TextBox();
@@ -174,7 +178,9 @@ private void InitializeComponent()
this.cboFtpImages = new System.Windows.Forms.ComboBox();
this.cboFtpFiles = new System.Windows.Forms.ComboBox();
this.cboFtpText = new System.Windows.Forms.ComboBox();
+ this.ucFTPAccounts = new ShareX.UploadersLib.AccountsControl();
this.tpDropbox = new System.Windows.Forms.TabPage();
+ this.oauth2Dropbox = new ShareX.UploadersLib.OAuthControl();
this.cbDropboxURLType = new System.Windows.Forms.ComboBox();
this.cbDropboxAutoCreateShareableLink = new System.Windows.Forms.CheckBox();
this.pbDropboxLogo = new System.Windows.Forms.PictureBox();
@@ -186,6 +192,7 @@ private void InitializeComponent()
this.tvOneDrive = new System.Windows.Forms.TreeView();
this.lblOneDriveFolderID = new System.Windows.Forms.Label();
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();
@@ -196,6 +203,7 @@ private void InitializeComponent()
this.chGoogleDriveDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.btnGoogleDriveRefreshFolders = new System.Windows.Forms.Button();
this.cbGoogleDriveIsPublic = new System.Windows.Forms.CheckBox();
+ this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthControl();
this.tpPuush = new System.Windows.Forms.TabPage();
this.pbPuush = new System.Windows.Forms.PictureBox();
this.lblPuushAPIKey = new System.Windows.Forms.Label();
@@ -214,6 +222,7 @@ private void InitializeComponent()
this.chBoxFoldersName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.lblBoxFolderID = new System.Windows.Forms.Label();
this.btnBoxRefreshFolders = new System.Windows.Forms.Button();
+ this.oauth2Box = new ShareX.UploadersLib.OAuthControl();
this.tpAmazonS3 = new System.Windows.Forms.TabPage();
this.txtAmazonS3CustomDomain = new System.Windows.Forms.TextBox();
this.lblAmazonS3PathPreviewLabel = new System.Windows.Forms.Label();
@@ -230,6 +239,14 @@ private void InitializeComponent()
this.lblAmazonS3SecretKey = new System.Windows.Forms.Label();
this.lblAmazonS3AccessKey = new System.Windows.Forms.Label();
this.txtAmazonS3AccessKey = new System.Windows.Forms.TextBox();
+ this.tpAzureStorage = new System.Windows.Forms.TabPage();
+ this.btnAzureStoragePortal = new System.Windows.Forms.Button();
+ this.txtAzureStorageContainer = new System.Windows.Forms.TextBox();
+ this.lblAzureStorageContainer = new System.Windows.Forms.Label();
+ this.txtAzureStorageAccessKey = new System.Windows.Forms.TextBox();
+ this.lblAzureStorageAccessKey = new System.Windows.Forms.Label();
+ this.txtAzureStorageAccountName = new System.Windows.Forms.TextBox();
+ this.lblAzureStorageAccountName = new System.Windows.Forms.Label();
this.tpMega = new System.Windows.Forms.TabPage();
this.btnMegaRefreshFolders = new System.Windows.Forms.Button();
this.lblMegaStatus = new System.Windows.Forms.Label();
@@ -275,6 +292,7 @@ private void InitializeComponent()
this.lblSendSpaceUsername = new System.Windows.Forms.Label();
this.txtSendSpacePassword = new System.Windows.Forms.TextBox();
this.txtSendSpaceUserName = new System.Windows.Forms.TextBox();
+ this.atcSendSpaceAccountType = new ShareX.UploadersLib.AccountTypeControl();
this.tpGe_tt = new System.Windows.Forms.TabPage();
this.lblGe_ttStatus = new System.Windows.Forms.Label();
this.lblGe_ttPassword = new System.Windows.Forms.Label();
@@ -312,6 +330,7 @@ private void InitializeComponent()
this.txtJiraConfigHelp = new System.Windows.Forms.TextBox();
this.txtJiraHost = new System.Windows.Forms.TextBox();
this.lblJiraHost = new System.Windows.Forms.Label();
+ this.oAuthJira = new ShareX.UploadersLib.OAuthControl();
this.tpLambda = new System.Windows.Forms.TabPage();
this.lblLambdaInfo = new System.Windows.Forms.Label();
this.lblLambdaApiKey = new System.Windows.Forms.Label();
@@ -400,6 +419,7 @@ private void InitializeComponent()
this.lblSharedFolderImages = new System.Windows.Forms.Label();
this.cboSharedFolderText = new System.Windows.Forms.ComboBox();
this.cboSharedFolderImages = new System.Windows.Forms.ComboBox();
+ this.ucLocalhostAccounts = new ShareX.UploadersLib.AccountsControl();
this.tpEmail = new System.Windows.Forms.TabPage();
this.txtEmailAutomaticSendTo = new System.Windows.Forms.TextBox();
this.cbEmailAutomaticSend = new System.Windows.Forms.CheckBox();
@@ -442,6 +462,8 @@ private void InitializeComponent()
this.tpGist = new System.Windows.Forms.TabPage();
this.cbGistUseRawURL = new System.Windows.Forms.CheckBox();
this.cbGistPublishPublic = new System.Windows.Forms.CheckBox();
+ this.oAuth2Gist = new ShareX.UploadersLib.OAuthControl();
+ this.atcGistAccountType = new ShareX.UploadersLib.AccountTypeControl();
this.tpUpaste = new System.Windows.Forms.TabPage();
this.cbUpasteIsPublic = new System.Windows.Forms.CheckBox();
this.lblUpasteUserKey = new System.Windows.Forms.Label();
@@ -466,6 +488,8 @@ private void InitializeComponent()
this.cbImgurUseGIFV = new System.Windows.Forms.CheckBox();
this.cbImgurUploadSelectedAlbum = new System.Windows.Forms.CheckBox();
this.cbImgurDirectLink = new System.Windows.Forms.CheckBox();
+ this.atcImgurAccountType = new ShareX.UploadersLib.AccountTypeControl();
+ this.oauth2Imgur = new ShareX.UploadersLib.OAuthControl();
this.lvImgurAlbumList = new System.Windows.Forms.ListView();
this.chImgurID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chImgurTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
@@ -483,6 +507,7 @@ private void InitializeComponent()
this.txtImageShackPassword = new System.Windows.Forms.TextBox();
this.lblImageShackPassword = new System.Windows.Forms.Label();
this.tpTinyPic = new System.Windows.Forms.TabPage();
+ this.atcTinyPicAccountType = new ShareX.UploadersLib.AccountTypeControl();
this.btnTinyPicLogin = new System.Windows.Forms.Button();
this.txtTinyPicPassword = new System.Windows.Forms.TextBox();
this.lblTinyPicPassword = new System.Windows.Forms.Label();
@@ -523,6 +548,7 @@ private void InitializeComponent()
this.chPicasaName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chPicasaDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.btnPicasaRefreshAlbumList = new System.Windows.Forms.Button();
+ this.oauth2Picasa = new ShareX.UploadersLib.OAuthControl();
this.tpChevereto = new System.Windows.Forms.TabPage();
this.btnCheveretoTestAll = new System.Windows.Forms.Button();
this.lblCheveretoUploadURLExample = new System.Windows.Forms.Label();
@@ -545,24 +571,6 @@ private void InitializeComponent()
this.tcUploaders = new System.Windows.Forms.TabControl();
this.lblWidthHint = new System.Windows.Forms.Label();
this.ttlvMain = new ShareX.HelpersLib.TabToListView();
- this.atcImgurAccountType = new ShareX.UploadersLib.AccountTypeControl();
- this.oauth2Imgur = new ShareX.UploadersLib.OAuthControl();
- this.atcTinyPicAccountType = new ShareX.UploadersLib.AccountTypeControl();
- this.oauth2Picasa = new ShareX.UploadersLib.OAuthControl();
- this.oAuth2Gist = new ShareX.UploadersLib.OAuthControl();
- this.atcGistAccountType = new ShareX.UploadersLib.AccountTypeControl();
- this.ucFTPAccounts = new ShareX.UploadersLib.AccountsControl();
- this.oauth2Dropbox = new ShareX.UploadersLib.OAuthControl();
- this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl();
- this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthControl();
- this.oauth2Box = new ShareX.UploadersLib.OAuthControl();
- this.atcSendSpaceAccountType = new ShareX.UploadersLib.AccountTypeControl();
- this.oAuthJira = new ShareX.UploadersLib.OAuthControl();
- this.oauthTwitter = new ShareX.UploadersLib.OAuthControl();
- this.oauth2Bitly = new ShareX.UploadersLib.OAuthControl();
- this.oauth2GoogleURLShortener = new ShareX.UploadersLib.OAuthControl();
- this.atcGoogleURLShortenerAccountType = new ShareX.UploadersLib.AccountTypeControl();
- this.ucLocalhostAccounts = new ShareX.UploadersLib.AccountsControl();
this.actRapidShareAccountType = new ShareX.UploadersLib.AccountTypeControl();
this.tpOtherUploaders.SuspendLayout();
this.tcOtherUploaders.SuspendLayout();
@@ -595,6 +603,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.pbPuush)).BeginInit();
this.tpBox.SuspendLayout();
this.tpAmazonS3.SuspendLayout();
+ this.tpAzureStorage.SuspendLayout();
this.tpMega.SuspendLayout();
this.tpOwnCloud.SuspendLayout();
this.tpMediaFire.SuspendLayout();
@@ -681,6 +690,20 @@ private void InitializeComponent()
this.cbAmazonS3CustomCNAME.UseVisualStyleBackColor = true;
this.cbAmazonS3CustomCNAME.CheckedChanged += new System.EventHandler(this.cbAmazonS3CustomCNAME_CheckedChanged);
//
+ // mbCustomUploaderDestinationType
+ //
+ resources.ApplyResources(this.mbCustomUploaderDestinationType, "mbCustomUploaderDestinationType");
+ this.mbCustomUploaderDestinationType.Menu = this.cmsCustomUploaderDestinationType;
+ this.mbCustomUploaderDestinationType.Name = "mbCustomUploaderDestinationType";
+ this.ttHelpTip.SetToolTip(this.mbCustomUploaderDestinationType, resources.GetString("mbCustomUploaderDestinationType.ToolTip"));
+ this.mbCustomUploaderDestinationType.UseVisualStyleBackColor = true;
+ //
+ // cmsCustomUploaderDestinationType
+ //
+ this.cmsCustomUploaderDestinationType.ImageScalingSize = new System.Drawing.Size(24, 24);
+ this.cmsCustomUploaderDestinationType.Name = "cmsCustomUploaderDestinationType";
+ resources.ApplyResources(this.cmsCustomUploaderDestinationType, "cmsCustomUploaderDestinationType");
+ //
// tpOtherUploaders
//
this.tpOtherUploaders.Controls.Add(this.tcOtherUploaders);
@@ -744,6 +767,15 @@ private void InitializeComponent()
this.cbTwitterSkipMessageBox.UseVisualStyleBackColor = true;
this.cbTwitterSkipMessageBox.CheckedChanged += new System.EventHandler(this.cbTwitterSkipMessageBox_CheckedChanged);
//
+ // oauthTwitter
+ //
+ resources.ApplyResources(this.oauthTwitter, "oauthTwitter");
+ this.oauthTwitter.IsRefreshable = false;
+ this.oauthTwitter.Name = "oauthTwitter";
+ this.oauthTwitter.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauthTwitter_OpenButtonClicked);
+ this.oauthTwitter.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauthTwitter_CompleteButtonClicked);
+ this.oauthTwitter.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauthTwitter_ClearButtonClicked);
+ //
// txtTwitterDescription
//
resources.ApplyResources(this.txtTwitterDescription, "txtTwitterDescription");
@@ -1227,19 +1259,6 @@ private void InitializeComponent()
this.gbCustomUploaders.Name = "gbCustomUploaders";
this.gbCustomUploaders.TabStop = false;
//
- // mbCustomUploaderDestinationType
- //
- resources.ApplyResources(this.mbCustomUploaderDestinationType, "mbCustomUploaderDestinationType");
- this.mbCustomUploaderDestinationType.Menu = this.cmsCustomUploaderDestinationType;
- this.mbCustomUploaderDestinationType.Name = "mbCustomUploaderDestinationType";
- this.ttHelpTip.SetToolTip(this.mbCustomUploaderDestinationType, resources.GetString("mbCustomUploaderDestinationType.ToolTip"));
- this.mbCustomUploaderDestinationType.UseVisualStyleBackColor = true;
- //
- // cmsCustomUploaderDestinationType
- //
- this.cmsCustomUploaderDestinationType.Name = "cmsCustomUploaderDestinationType";
- resources.ApplyResources(this.cmsCustomUploaderDestinationType, "cmsCustomUploaderDestinationType");
- //
// btnCustomUploadersExportAll
//
resources.ApplyResources(this.btnCustomUploadersExportAll, "btnCustomUploadersExportAll");
@@ -1444,6 +1463,15 @@ private void InitializeComponent()
resources.ApplyResources(this.lblBitlyDomain, "lblBitlyDomain");
this.lblBitlyDomain.Name = "lblBitlyDomain";
//
+ // oauth2Bitly
+ //
+ this.oauth2Bitly.IsRefreshable = false;
+ resources.ApplyResources(this.oauth2Bitly, "oauth2Bitly");
+ this.oauth2Bitly.Name = "oauth2Bitly";
+ this.oauth2Bitly.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Bitly_OpenButtonClicked);
+ this.oauth2Bitly.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Bitly_CompleteButtonClicked);
+ this.oauth2Bitly.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Bitly_ClearButtonClicked);
+ //
// tpGoogleURLShortener
//
this.tpGoogleURLShortener.Controls.Add(this.oauth2GoogleURLShortener);
@@ -1452,6 +1480,22 @@ private void InitializeComponent()
this.tpGoogleURLShortener.Name = "tpGoogleURLShortener";
this.tpGoogleURLShortener.UseVisualStyleBackColor = true;
//
+ // oauth2GoogleURLShortener
+ //
+ resources.ApplyResources(this.oauth2GoogleURLShortener, "oauth2GoogleURLShortener");
+ this.oauth2GoogleURLShortener.Name = "oauth2GoogleURLShortener";
+ this.oauth2GoogleURLShortener.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleURLShortener_OpenButtonClicked);
+ this.oauth2GoogleURLShortener.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleURLShortener_CompleteButtonClicked);
+ this.oauth2GoogleURLShortener.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleURLShortener_ClearButtonClicked);
+ this.oauth2GoogleURLShortener.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleURLShortener_RefreshButtonClicked);
+ //
+ // atcGoogleURLShortenerAccountType
+ //
+ resources.ApplyResources(this.atcGoogleURLShortenerAccountType, "atcGoogleURLShortenerAccountType");
+ this.atcGoogleURLShortenerAccountType.Name = "atcGoogleURLShortenerAccountType";
+ this.atcGoogleURLShortenerAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
+ this.atcGoogleURLShortenerAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGoogleURLShortenerAccountType_AccountTypeChanged);
+ //
// tpYourls
//
this.tpYourls.Controls.Add(this.txtYourlsPassword);
@@ -1643,6 +1687,7 @@ private void InitializeComponent()
this.tcFileUploaders.Controls.Add(this.tpPuush);
this.tcFileUploaders.Controls.Add(this.tpBox);
this.tcFileUploaders.Controls.Add(this.tpAmazonS3);
+ this.tcFileUploaders.Controls.Add(this.tpAzureStorage);
this.tcFileUploaders.Controls.Add(this.tpMega);
this.tcFileUploaders.Controls.Add(this.tpOwnCloud);
this.tcFileUploaders.Controls.Add(this.tpMediaFire);
@@ -1735,6 +1780,11 @@ private void InitializeComponent()
this.cboFtpText.Name = "cboFtpText";
this.cboFtpText.SelectedIndexChanged += new System.EventHandler(this.cboFtpText_SelectedIndexChanged);
//
+ // ucFTPAccounts
+ //
+ resources.ApplyResources(this.ucFTPAccounts, "ucFTPAccounts");
+ this.ucFTPAccounts.Name = "ucFTPAccounts";
+ //
// tpDropbox
//
this.tpDropbox.Controls.Add(this.oauth2Dropbox);
@@ -1749,6 +1799,15 @@ private void InitializeComponent()
this.tpDropbox.Name = "tpDropbox";
this.tpDropbox.UseVisualStyleBackColor = true;
//
+ // oauth2Dropbox
+ //
+ this.oauth2Dropbox.IsRefreshable = false;
+ resources.ApplyResources(this.oauth2Dropbox, "oauth2Dropbox");
+ this.oauth2Dropbox.Name = "oauth2Dropbox";
+ this.oauth2Dropbox.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Dropbox_OpenButtonClicked);
+ this.oauth2Dropbox.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Dropbox_CompleteButtonClicked);
+ this.oauth2Dropbox.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Dropbox_ClearButtonClicked);
+ //
// cbDropboxURLType
//
this.cbDropboxURLType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -1822,6 +1881,15 @@ private void InitializeComponent()
this.cbOneDriveCreateShareableLink.UseVisualStyleBackColor = true;
this.cbOneDriveCreateShareableLink.CheckedChanged += new System.EventHandler(this.cbOneDriveCreateShareableLink_CheckedChanged);
//
+ // oAuth2OneDrive
+ //
+ resources.ApplyResources(this.oAuth2OneDrive, "oAuth2OneDrive");
+ this.oAuth2OneDrive.Name = "oAuth2OneDrive";
+ this.oAuth2OneDrive.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2OneDrive_OpenButtonClicked);
+ this.oAuth2OneDrive.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2OneDrive_CompleteButtonClicked);
+ this.oAuth2OneDrive.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2OneDrive_ClearButtonClicked);
+ this.oAuth2OneDrive.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oAuth2OneDrive_RefreshButtonClicked);
+ //
// tpGoogleDrive
//
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveDirectLink);
@@ -1897,6 +1965,15 @@ private void InitializeComponent()
this.cbGoogleDriveIsPublic.UseVisualStyleBackColor = true;
this.cbGoogleDriveIsPublic.CheckedChanged += new System.EventHandler(this.cbGoogleDriveIsPublic_CheckedChanged);
//
+ // oauth2GoogleDrive
+ //
+ resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive");
+ this.oauth2GoogleDrive.Name = "oauth2GoogleDrive";
+ this.oauth2GoogleDrive.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleDrive_OpenButtonClicked);
+ this.oauth2GoogleDrive.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleDrive_CompleteButtonClicked);
+ this.oauth2GoogleDrive.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleDrive_ClearButtonClicked);
+ this.oauth2GoogleDrive.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleDrive_RefreshButtonClicked);
+ //
// tpPuush
//
this.tpPuush.Controls.Add(this.pbPuush);
@@ -2029,6 +2106,15 @@ private void InitializeComponent()
this.btnBoxRefreshFolders.UseVisualStyleBackColor = true;
this.btnBoxRefreshFolders.Click += new System.EventHandler(this.btnBoxRefreshFolders_Click);
//
+ // oauth2Box
+ //
+ resources.ApplyResources(this.oauth2Box, "oauth2Box");
+ this.oauth2Box.Name = "oauth2Box";
+ this.oauth2Box.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Box_OpenButtonClicked);
+ this.oauth2Box.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Box_CompleteButtonClicked);
+ this.oauth2Box.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Box_ClearButtonClicked);
+ this.oauth2Box.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Box_RefreshButtonClicked);
+ //
// tpAmazonS3
//
this.tpAmazonS3.Controls.Add(this.txtAmazonS3CustomDomain);
@@ -2140,6 +2226,60 @@ private void InitializeComponent()
this.txtAmazonS3AccessKey.Name = "txtAmazonS3AccessKey";
this.txtAmazonS3AccessKey.TextChanged += new System.EventHandler(this.txtAmazonS3AccessKey_TextChanged);
//
+ // tpAzureStorage
+ //
+ this.tpAzureStorage.Controls.Add(this.btnAzureStoragePortal);
+ this.tpAzureStorage.Controls.Add(this.txtAzureStorageContainer);
+ this.tpAzureStorage.Controls.Add(this.lblAzureStorageContainer);
+ this.tpAzureStorage.Controls.Add(this.txtAzureStorageAccessKey);
+ this.tpAzureStorage.Controls.Add(this.lblAzureStorageAccessKey);
+ this.tpAzureStorage.Controls.Add(this.txtAzureStorageAccountName);
+ this.tpAzureStorage.Controls.Add(this.lblAzureStorageAccountName);
+ resources.ApplyResources(this.tpAzureStorage, "tpAzureStorage");
+ this.tpAzureStorage.Name = "tpAzureStorage";
+ this.tpAzureStorage.UseVisualStyleBackColor = true;
+ //
+ // btnAzureStoragePortal
+ //
+ resources.ApplyResources(this.btnAzureStoragePortal, "btnAzureStoragePortal");
+ this.btnAzureStoragePortal.Name = "btnAzureStoragePortal";
+ this.btnAzureStoragePortal.UseVisualStyleBackColor = true;
+ this.btnAzureStoragePortal.Click += new System.EventHandler(this.btnAzureStoragePortal_Click);
+ //
+ // txtAzureStorageContainer
+ //
+ resources.ApplyResources(this.txtAzureStorageContainer, "txtAzureStorageContainer");
+ this.txtAzureStorageContainer.Name = "txtAzureStorageContainer";
+ this.txtAzureStorageContainer.TextChanged += new System.EventHandler(this.txtAzureStorageContainer_TextChanged);
+ //
+ // lblAzureStorageContainer
+ //
+ resources.ApplyResources(this.lblAzureStorageContainer, "lblAzureStorageContainer");
+ this.lblAzureStorageContainer.Name = "lblAzureStorageContainer";
+ //
+ // txtAzureStorageAccessKey
+ //
+ resources.ApplyResources(this.txtAzureStorageAccessKey, "txtAzureStorageAccessKey");
+ this.txtAzureStorageAccessKey.Name = "txtAzureStorageAccessKey";
+ this.txtAzureStorageAccessKey.UseSystemPasswordChar = true;
+ this.txtAzureStorageAccessKey.TextChanged += new System.EventHandler(this.txtAzureStorageAccessKey_TextChanged);
+ //
+ // lblAzureStorageAccessKey
+ //
+ resources.ApplyResources(this.lblAzureStorageAccessKey, "lblAzureStorageAccessKey");
+ this.lblAzureStorageAccessKey.Name = "lblAzureStorageAccessKey";
+ //
+ // txtAzureStorageAccountName
+ //
+ resources.ApplyResources(this.txtAzureStorageAccountName, "txtAzureStorageAccountName");
+ this.txtAzureStorageAccountName.Name = "txtAzureStorageAccountName";
+ this.txtAzureStorageAccountName.TextChanged += new System.EventHandler(this.txtAzureStorageAccountName_TextChanged);
+ //
+ // lblAzureStorageAccountName
+ //
+ resources.ApplyResources(this.lblAzureStorageAccountName, "lblAzureStorageAccountName");
+ this.lblAzureStorageAccountName.Name = "lblAzureStorageAccountName";
+ //
// tpMega
//
this.tpMega.Controls.Add(this.btnMegaRefreshFolders);
@@ -2452,6 +2592,13 @@ private void InitializeComponent()
this.txtSendSpaceUserName.Name = "txtSendSpaceUserName";
this.txtSendSpaceUserName.TextChanged += new System.EventHandler(this.txtSendSpaceUserName_TextChanged);
//
+ // atcSendSpaceAccountType
+ //
+ resources.ApplyResources(this.atcSendSpaceAccountType, "atcSendSpaceAccountType");
+ this.atcSendSpaceAccountType.Name = "atcSendSpaceAccountType";
+ this.atcSendSpaceAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
+ this.atcSendSpaceAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcSendSpaceAccountType_AccountTypeChanged);
+ //
// tpGe_tt
//
this.tpGe_tt.Controls.Add(this.lblGe_ttStatus);
@@ -2707,6 +2854,15 @@ private void InitializeComponent()
resources.ApplyResources(this.lblJiraHost, "lblJiraHost");
this.lblJiraHost.Name = "lblJiraHost";
//
+ // oAuthJira
+ //
+ resources.ApplyResources(this.oAuthJira, "oAuthJira");
+ this.oAuthJira.Name = "oAuthJira";
+ this.oAuthJira.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuthJira_OpenButtonClicked);
+ this.oAuthJira.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuthJira_CompleteButtonClicked);
+ this.oAuthJira.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuthJira_ClearButtonClicked);
+ this.oAuthJira.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oAuthJira_RefreshButtonClicked);
+ //
// tpLambda
//
this.tpLambda.Controls.Add(this.lblLambdaInfo);
@@ -3333,6 +3489,11 @@ private void InitializeComponent()
this.cboSharedFolderImages.Name = "cboSharedFolderImages";
this.cboSharedFolderImages.SelectedIndexChanged += new System.EventHandler(this.cboSharedFolderImages_SelectedIndexChanged);
//
+ // ucLocalhostAccounts
+ //
+ resources.ApplyResources(this.ucLocalhostAccounts, "ucLocalhostAccounts");
+ this.ucLocalhostAccounts.Name = "ucLocalhostAccounts";
+ //
// tpEmail
//
this.tpEmail.Controls.Add(this.txtEmailAutomaticSendTo);
@@ -3641,6 +3802,22 @@ private void InitializeComponent()
this.cbGistPublishPublic.UseVisualStyleBackColor = true;
this.cbGistPublishPublic.CheckedChanged += new System.EventHandler(this.chkGistPublishPublic_CheckedChanged);
//
+ // oAuth2Gist
+ //
+ resources.ApplyResources(this.oAuth2Gist, "oAuth2Gist");
+ this.oAuth2Gist.IsRefreshable = false;
+ this.oAuth2Gist.Name = "oAuth2Gist";
+ this.oAuth2Gist.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2Gist_OpenButtonClicked);
+ this.oAuth2Gist.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2Gist_CompleteButtonClicked);
+ this.oAuth2Gist.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2Gist_ClearButtonClicked);
+ //
+ // atcGistAccountType
+ //
+ resources.ApplyResources(this.atcGistAccountType, "atcGistAccountType");
+ this.atcGistAccountType.Name = "atcGistAccountType";
+ this.atcGistAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
+ this.atcGistAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGistAccountType_AccountTypeChanged);
+ //
// tpUpaste
//
this.tpUpaste.Controls.Add(this.cbUpasteIsPublic);
@@ -3822,6 +3999,22 @@ private void InitializeComponent()
this.cbImgurDirectLink.UseVisualStyleBackColor = true;
this.cbImgurDirectLink.CheckedChanged += new System.EventHandler(this.cbImgurDirectLink_CheckedChanged);
//
+ // atcImgurAccountType
+ //
+ resources.ApplyResources(this.atcImgurAccountType, "atcImgurAccountType");
+ this.atcImgurAccountType.Name = "atcImgurAccountType";
+ this.atcImgurAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
+ this.atcImgurAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcImgurAccountType_AccountTypeChanged);
+ //
+ // oauth2Imgur
+ //
+ resources.ApplyResources(this.oauth2Imgur, "oauth2Imgur");
+ this.oauth2Imgur.Name = "oauth2Imgur";
+ this.oauth2Imgur.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Imgur_OpenButtonClicked);
+ this.oauth2Imgur.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Imgur_CompleteButtonClicked);
+ this.oauth2Imgur.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Imgur_ClearButtonClicked);
+ this.oauth2Imgur.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Imgur_RefreshButtonClicked);
+ //
// lvImgurAlbumList
//
this.lvImgurAlbumList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
@@ -3948,6 +4141,13 @@ private void InitializeComponent()
this.tpTinyPic.Name = "tpTinyPic";
this.tpTinyPic.UseVisualStyleBackColor = true;
//
+ // atcTinyPicAccountType
+ //
+ resources.ApplyResources(this.atcTinyPicAccountType, "atcTinyPicAccountType");
+ this.atcTinyPicAccountType.Name = "atcTinyPicAccountType";
+ this.atcTinyPicAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
+ this.atcTinyPicAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcTinyPicAccountType_AccountTypeChanged);
+ //
// btnTinyPicLogin
//
resources.ApplyResources(this.btnTinyPicLogin, "btnTinyPicLogin");
@@ -4008,6 +4208,7 @@ private void InitializeComponent()
//
this.pgFlickrAuthInfo.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;
this.pgFlickrAuthInfo.CommandsVisibleIfAvailable = false;
+ this.pgFlickrAuthInfo.LineColor = System.Drawing.SystemColors.ControlDark;
resources.ApplyResources(this.pgFlickrAuthInfo, "pgFlickrAuthInfo");
this.pgFlickrAuthInfo.Name = "pgFlickrAuthInfo";
this.pgFlickrAuthInfo.PropertySort = System.Windows.Forms.PropertySort.NoSort;
@@ -4017,6 +4218,7 @@ private void InitializeComponent()
//
this.pgFlickrSettings.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;
this.pgFlickrSettings.CommandsVisibleIfAvailable = false;
+ this.pgFlickrSettings.LineColor = System.Drawing.SystemColors.ControlDark;
resources.ApplyResources(this.pgFlickrSettings, "pgFlickrSettings");
this.pgFlickrSettings.Name = "pgFlickrSettings";
this.pgFlickrSettings.PropertySort = System.Windows.Forms.PropertySort.NoSort;
@@ -4228,6 +4430,15 @@ private void InitializeComponent()
this.btnPicasaRefreshAlbumList.UseVisualStyleBackColor = true;
this.btnPicasaRefreshAlbumList.Click += new System.EventHandler(this.btnPicasaRefreshAlbumList_Click);
//
+ // oauth2Picasa
+ //
+ resources.ApplyResources(this.oauth2Picasa, "oauth2Picasa");
+ this.oauth2Picasa.Name = "oauth2Picasa";
+ this.oauth2Picasa.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Picasa_OpenButtonClicked);
+ this.oauth2Picasa.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Picasa_CompleteButtonClicked);
+ this.oauth2Picasa.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Picasa_ClearButtonClicked);
+ this.oauth2Picasa.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Picasa_RefreshButtonClicked);
+ //
// tpChevereto
//
this.tpChevereto.Controls.Add(this.btnCheveretoTestAll);
@@ -4384,150 +4595,6 @@ private void InitializeComponent()
this.ttlvMain.MainTabControl = null;
this.ttlvMain.Name = "ttlvMain";
//
- // atcImgurAccountType
- //
- resources.ApplyResources(this.atcImgurAccountType, "atcImgurAccountType");
- this.atcImgurAccountType.Name = "atcImgurAccountType";
- this.atcImgurAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
- this.atcImgurAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcImgurAccountType_AccountTypeChanged);
- //
- // oauth2Imgur
- //
- resources.ApplyResources(this.oauth2Imgur, "oauth2Imgur");
- this.oauth2Imgur.Name = "oauth2Imgur";
- this.oauth2Imgur.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Imgur_OpenButtonClicked);
- this.oauth2Imgur.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Imgur_CompleteButtonClicked);
- this.oauth2Imgur.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Imgur_ClearButtonClicked);
- this.oauth2Imgur.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Imgur_RefreshButtonClicked);
- //
- // atcTinyPicAccountType
- //
- resources.ApplyResources(this.atcTinyPicAccountType, "atcTinyPicAccountType");
- this.atcTinyPicAccountType.Name = "atcTinyPicAccountType";
- this.atcTinyPicAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
- this.atcTinyPicAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcTinyPicAccountType_AccountTypeChanged);
- //
- // oauth2Picasa
- //
- resources.ApplyResources(this.oauth2Picasa, "oauth2Picasa");
- this.oauth2Picasa.Name = "oauth2Picasa";
- this.oauth2Picasa.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Picasa_OpenButtonClicked);
- this.oauth2Picasa.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Picasa_CompleteButtonClicked);
- this.oauth2Picasa.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Picasa_ClearButtonClicked);
- this.oauth2Picasa.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Picasa_RefreshButtonClicked);
- //
- // oAuth2Gist
- //
- resources.ApplyResources(this.oAuth2Gist, "oAuth2Gist");
- this.oAuth2Gist.IsRefreshable = false;
- this.oAuth2Gist.Name = "oAuth2Gist";
- this.oAuth2Gist.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2Gist_OpenButtonClicked);
- this.oAuth2Gist.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2Gist_CompleteButtonClicked);
- this.oAuth2Gist.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2Gist_ClearButtonClicked);
- //
- // atcGistAccountType
- //
- resources.ApplyResources(this.atcGistAccountType, "atcGistAccountType");
- this.atcGistAccountType.Name = "atcGistAccountType";
- this.atcGistAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
- this.atcGistAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGistAccountType_AccountTypeChanged);
- //
- // ucFTPAccounts
- //
- resources.ApplyResources(this.ucFTPAccounts, "ucFTPAccounts");
- this.ucFTPAccounts.Name = "ucFTPAccounts";
- //
- // oauth2Dropbox
- //
- this.oauth2Dropbox.IsRefreshable = false;
- resources.ApplyResources(this.oauth2Dropbox, "oauth2Dropbox");
- this.oauth2Dropbox.Name = "oauth2Dropbox";
- this.oauth2Dropbox.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Dropbox_OpenButtonClicked);
- this.oauth2Dropbox.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Dropbox_CompleteButtonClicked);
- this.oauth2Dropbox.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Dropbox_ClearButtonClicked);
- //
- // oAuth2OneDrive
- //
- resources.ApplyResources(this.oAuth2OneDrive, "oAuth2OneDrive");
- this.oAuth2OneDrive.Name = "oAuth2OneDrive";
- this.oAuth2OneDrive.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2OneDrive_OpenButtonClicked);
- this.oAuth2OneDrive.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2OneDrive_CompleteButtonClicked);
- this.oAuth2OneDrive.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2OneDrive_ClearButtonClicked);
- this.oAuth2OneDrive.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oAuth2OneDrive_RefreshButtonClicked);
- //
- // oauth2GoogleDrive
- //
- resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive");
- this.oauth2GoogleDrive.Name = "oauth2GoogleDrive";
- this.oauth2GoogleDrive.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleDrive_OpenButtonClicked);
- this.oauth2GoogleDrive.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleDrive_CompleteButtonClicked);
- this.oauth2GoogleDrive.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleDrive_ClearButtonClicked);
- this.oauth2GoogleDrive.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleDrive_RefreshButtonClicked);
- //
- // oauth2Box
- //
- resources.ApplyResources(this.oauth2Box, "oauth2Box");
- this.oauth2Box.Name = "oauth2Box";
- this.oauth2Box.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Box_OpenButtonClicked);
- this.oauth2Box.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Box_CompleteButtonClicked);
- this.oauth2Box.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Box_ClearButtonClicked);
- this.oauth2Box.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Box_RefreshButtonClicked);
- //
- // atcSendSpaceAccountType
- //
- resources.ApplyResources(this.atcSendSpaceAccountType, "atcSendSpaceAccountType");
- this.atcSendSpaceAccountType.Name = "atcSendSpaceAccountType";
- this.atcSendSpaceAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
- this.atcSendSpaceAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcSendSpaceAccountType_AccountTypeChanged);
- //
- // oAuthJira
- //
- resources.ApplyResources(this.oAuthJira, "oAuthJira");
- this.oAuthJira.Name = "oAuthJira";
- this.oAuthJira.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuthJira_OpenButtonClicked);
- this.oAuthJira.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuthJira_CompleteButtonClicked);
- this.oAuthJira.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuthJira_ClearButtonClicked);
- this.oAuthJira.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oAuthJira_RefreshButtonClicked);
- //
- // oauthTwitter
- //
- resources.ApplyResources(this.oauthTwitter, "oauthTwitter");
- this.oauthTwitter.IsRefreshable = false;
- this.oauthTwitter.Name = "oauthTwitter";
- this.oauthTwitter.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauthTwitter_OpenButtonClicked);
- this.oauthTwitter.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauthTwitter_CompleteButtonClicked);
- this.oauthTwitter.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauthTwitter_ClearButtonClicked);
- //
- // oauth2Bitly
- //
- this.oauth2Bitly.IsRefreshable = false;
- resources.ApplyResources(this.oauth2Bitly, "oauth2Bitly");
- this.oauth2Bitly.Name = "oauth2Bitly";
- this.oauth2Bitly.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Bitly_OpenButtonClicked);
- this.oauth2Bitly.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Bitly_CompleteButtonClicked);
- this.oauth2Bitly.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Bitly_ClearButtonClicked);
- //
- // oauth2GoogleURLShortener
- //
- resources.ApplyResources(this.oauth2GoogleURLShortener, "oauth2GoogleURLShortener");
- this.oauth2GoogleURLShortener.Name = "oauth2GoogleURLShortener";
- this.oauth2GoogleURLShortener.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleURLShortener_OpenButtonClicked);
- this.oauth2GoogleURLShortener.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleURLShortener_CompleteButtonClicked);
- this.oauth2GoogleURLShortener.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleURLShortener_ClearButtonClicked);
- this.oauth2GoogleURLShortener.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleURLShortener_RefreshButtonClicked);
- //
- // atcGoogleURLShortenerAccountType
- //
- resources.ApplyResources(this.atcGoogleURLShortenerAccountType, "atcGoogleURLShortenerAccountType");
- this.atcGoogleURLShortenerAccountType.Name = "atcGoogleURLShortenerAccountType";
- this.atcGoogleURLShortenerAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
- this.atcGoogleURLShortenerAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGoogleURLShortenerAccountType_AccountTypeChanged);
- //
- // ucLocalhostAccounts
- //
- resources.ApplyResources(this.ucLocalhostAccounts, "ucLocalhostAccounts");
- this.ucLocalhostAccounts.Name = "ucLocalhostAccounts";
- //
// actRapidShareAccountType
//
resources.ApplyResources(this.actRapidShareAccountType, "actRapidShareAccountType");
@@ -4597,6 +4664,8 @@ private void InitializeComponent()
this.tpBox.PerformLayout();
this.tpAmazonS3.ResumeLayout(false);
this.tpAmazonS3.PerformLayout();
+ this.tpAzureStorage.ResumeLayout(false);
+ this.tpAzureStorage.PerformLayout();
this.tpMega.ResumeLayout(false);
this.tpMega.PerformLayout();
this.tpOwnCloud.ResumeLayout(false);
@@ -5231,5 +5300,13 @@ private void InitializeComponent()
private System.Windows.Forms.CheckBox cbPolrIsSecret;
private HelpersLib.MenuButton mbCustomUploaderDestinationType;
private System.Windows.Forms.ContextMenuStrip cmsCustomUploaderDestinationType;
+ internal System.Windows.Forms.TabPage tpAzureStorage;
+ private System.Windows.Forms.Label lblAzureStorageAccessKey;
+ private System.Windows.Forms.TextBox txtAzureStorageAccountName;
+ private System.Windows.Forms.Label lblAzureStorageAccountName;
+ private System.Windows.Forms.TextBox txtAzureStorageAccessKey;
+ private System.Windows.Forms.TextBox txtAzureStorageContainer;
+ private System.Windows.Forms.Label lblAzureStorageContainer;
+ private System.Windows.Forms.Button btnAzureStoragePortal;
}
}
diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs
index 8e25f8501..6597665d2 100644
--- a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs
+++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs
@@ -590,6 +590,11 @@ public void LoadSettings()
cbUpleaInstantDownloadEnabled.Checked = Config.UpleaInstantDownloadEnabled;
cbUpleaIsPremium.Checked = Config.UpleaIsPremiumMember;
+ // Azure Storage
+ txtAzureStorageAccountName.Text = Config.AzureStorageAccountName;
+ txtAzureStorageAccessKey.Text = Config.AzureStorageAccountAccessKey;
+ txtAzureStorageContainer.Text = Config.AzureStorageContainer;
+
#endregion File uploaders
#region URL shorteners
@@ -2603,6 +2608,30 @@ private void cbUpleaInstantDownloadEnabled_CheckedChanged(object sender, EventAr
#endregion Uplea
+ #region Azure Storage
+
+ private void txtAzureStorageAccountName_TextChanged(object sender, EventArgs e)
+ {
+ Config.AzureStorageAccountName = txtAzureStorageAccountName.Text;
+ }
+
+ private void txtAzureStorageAccessKey_TextChanged(object sender, EventArgs e)
+ {
+ Config.AzureStorageAccountAccessKey = txtAzureStorageAccessKey.Text;
+ }
+
+ private void txtAzureStorageContainer_TextChanged(object sender, EventArgs e)
+ {
+ Config.AzureStorageContainer = txtAzureStorageContainer.Text;
+ }
+
+ private void btnAzureStoragePortal_Click(object sender, EventArgs e)
+ {
+ URLHelpers.OpenURL("https://portal.azure.com/?feature.customportal=false#blade/HubsExtension/Resources/resourceType/Microsoft.Storage%2FStorageAccounts");
+ }
+
+ #endregion Azure Storage
+
#endregion File Uploaders
#region URL Shorteners
diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx
index 13454c9dd..570fec21e 100644
--- a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx
+++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx
@@ -207,6 +207,207 @@ For example, if your bucket is called bucket.example.com then URL will be http:/
5
+
+
+ 556, 48
+
+
+ 40, 26
+
+
+ 6
+
+
+ ...
+
+
+ btnAzureStoragePortal
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 0
+
+
+ 24, 201
+
+
+ 526, 26
+
+
+ 5
+
+
+ txtAzureStorageContainer
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 1
+
+
+ True
+
+
+ 20, 178
+
+
+ 82, 20
+
+
+ 4
+
+
+ Container:
+
+
+ lblAzureStorageContainer
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 2
+
+
+ 24, 121
+
+
+ 526, 26
+
+
+ 3
+
+
+ txtAzureStorageAccessKey
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 3
+
+
+ True
+
+
+ 20, 98
+
+
+ 4, 0, 4, 0
+
+
+ 93, 20
+
+
+ 2
+
+
+ Access key:
+
+
+ lblAzureStorageAccessKey
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 4
+
+
+ 24, 48
+
+
+ 526, 26
+
+
+ 1
+
+
+ txtAzureStorageAccountName
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 5
+
+
+ True
+
+
+ 20, 25
+
+
+ 4, 0, 4, 0
+
+
+ 116, 20
+
+
+ 0
+
+
+ Account name:
+
+
+ lblAzureStorageAccountName
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 6
+
+
+ 4, 54
+
+
+ 3, 3, 3, 3
+
+
+ 1468, 746
+
+
+ 28
+
+
+ Azure Storage
+
+
+ tpAzureStorage
+
+
+ System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tcFileUploaders
+
+
+ 7
NoControl
diff --git a/ShareX.UploadersLib/Properties/Resources.Designer.cs b/ShareX.UploadersLib/Properties/Resources.Designer.cs
index a8a8acfc8..006080193 100644
--- a/ShareX.UploadersLib/Properties/Resources.Designer.cs
+++ b/ShareX.UploadersLib/Properties/Resources.Designer.cs
@@ -80,6 +80,16 @@ internal static System.Drawing.Icon AmazonS3 {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap AzureStorage {
+ get {
+ object obj = ResourceManager.GetObject("AzureStorage", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
///
diff --git a/ShareX.UploadersLib/Properties/Resources.resx b/ShareX.UploadersLib/Properties/Resources.resx
index bcd5890f4..4d0a2c4b0 100644
--- a/ShareX.UploadersLib/Properties/Resources.resx
+++ b/ShareX.UploadersLib/Properties/Resources.resx
@@ -398,4 +398,7 @@ Created folders:
..\Favicons\Pastie.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Favicons\AzureStorage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/ShareX.UploadersLib/ShareX.UploadersLib.csproj b/ShareX.UploadersLib/ShareX.UploadersLib.csproj
index af9cba24c..7df75dbcb 100644
--- a/ShareX.UploadersLib/ShareX.UploadersLib.csproj
+++ b/ShareX.UploadersLib/ShareX.UploadersLib.csproj
@@ -124,6 +124,8 @@
+
+
@@ -882,6 +884,7 @@
+
diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs
index 00b28ecb8..81c88529b 100644
--- a/ShareX.UploadersLib/UploadersConfig.cs
+++ b/ShareX.UploadersLib/UploadersConfig.cs
@@ -298,6 +298,12 @@ public class UploadersConfig : SettingsBase
public bool UpleaIsPremiumMember = false;
public bool UpleaInstantDownloadEnabled = false;
+ // Azure Storage
+
+ public string AzureStorageAccountName = "";
+ public string AzureStorageAccountAccessKey = "";
+ public string AzureStorageContainer = "";
+
#endregion File uploaders
#region URL shorteners