2019-01-23 23:13:48 +13:00
|
|
|
|
#region License Information (GPL v3)
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
ShareX - A program that allows you to take screenshots and share any file type
|
2022-01-12 05:32:17 +13:00
|
|
|
|
Copyright (c) 2007-2022 ShareX Team
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
|
modify it under the terms of the GNU General Public License
|
|
|
|
|
as published by the Free Software Foundation; either version 2
|
|
|
|
|
of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
|
|
|
|
|
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#endregion License Information (GPL v3)
|
|
|
|
|
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using ShareX.HelpersLib;
|
|
|
|
|
using ShareX.UploadersLib.FileUploaders;
|
|
|
|
|
using ShareX.UploadersLib.ImageUploaders;
|
|
|
|
|
using ShareX.UploadersLib.Properties;
|
|
|
|
|
using ShareX.UploadersLib.SharingServices;
|
|
|
|
|
using ShareX.UploadersLib.TextUploaders;
|
|
|
|
|
using ShareX.UploadersLib.URLShorteners;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace ShareX.UploadersLib
|
|
|
|
|
{
|
|
|
|
|
public partial class CustomUploaderSettingsForm : Form
|
|
|
|
|
{
|
|
|
|
|
public static bool IsInstanceActive => instance != null && !instance.IsDisposed;
|
|
|
|
|
|
|
|
|
|
private static CustomUploaderSettingsForm instance;
|
|
|
|
|
|
|
|
|
|
public UploadersConfig Config { get; private set; }
|
|
|
|
|
|
|
|
|
|
private bool customUploaderPauseLoad;
|
2022-04-13 23:49:37 +12:00
|
|
|
|
private UploadResult lastResult;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
public CustomUploaderSettingsForm(UploadersConfig config)
|
|
|
|
|
{
|
|
|
|
|
Config = config;
|
|
|
|
|
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
2019-02-02 22:38:44 +13:00
|
|
|
|
/*
|
2019-01-23 23:13:48 +13:00
|
|
|
|
CodeMenuItem[] inputCodeMenuItems = new CodeMenuItem[]
|
|
|
|
|
{
|
2022-02-02 13:18:33 +13:00
|
|
|
|
new CodeMenuItem("{input}", "Text/URL input"),
|
|
|
|
|
new CodeMenuItem("{filename}", "File name"),
|
|
|
|
|
new CodeMenuItem("{random:input1|input2}", "Random selection from list"),
|
|
|
|
|
new CodeMenuItem("{select:input1|input2}", "Lets user to select one input from list"),
|
|
|
|
|
new CodeMenuItem("{prompt:title|default_value}", "Lets user to input text"),
|
|
|
|
|
new CodeMenuItem("{base64:input}", "Base64 encode input")
|
2019-01-23 23:13:48 +13:00
|
|
|
|
};
|
2019-02-02 22:38:44 +13:00
|
|
|
|
*/
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
CodeMenuItem[] outputCodeMenuItems = new CodeMenuItem[]
|
|
|
|
|
{
|
2022-02-02 13:18:33 +13:00
|
|
|
|
new CodeMenuItem("{response}", "Response text"),
|
|
|
|
|
new CodeMenuItem("{responseurl}", "Response/Redirection URL"),
|
|
|
|
|
new CodeMenuItem("{header:header_name}", "Response header"),
|
|
|
|
|
new CodeMenuItem("{json:path}", "Parse JSON response using JSONPath"),
|
|
|
|
|
new CodeMenuItem("{xml:path}", "Parse XML response using XPath"),
|
|
|
|
|
new CodeMenuItem("{regex:pattern|group}", "Parse response using Regex"),
|
|
|
|
|
new CodeMenuItem("{filename}", "File name used when uploading"),
|
|
|
|
|
new CodeMenuItem("{random:input1|input2}", "Random selection from list"),
|
|
|
|
|
new CodeMenuItem("{select:input1|input2}", "Lets user to select one input from list"),
|
|
|
|
|
new CodeMenuItem("{prompt:title|default_value}", "Lets user to input text"),
|
|
|
|
|
new CodeMenuItem("{base64:input}", "Base64 encode input")
|
2019-01-23 23:13:48 +13:00
|
|
|
|
};
|
|
|
|
|
|
2020-04-28 13:44:37 +12:00
|
|
|
|
new CodeMenu(rtbResultURL, outputCodeMenuItems);
|
|
|
|
|
new CodeMenu(rtbResultThumbnailURL, outputCodeMenuItems);
|
|
|
|
|
new CodeMenu(rtbResultDeletionURL, outputCodeMenuItems);
|
2020-09-22 18:53:01 +12:00
|
|
|
|
new CodeMenu(rtbResultErrorMessage, outputCodeMenuItems);
|
2019-02-04 22:29:49 +13:00
|
|
|
|
|
|
|
|
|
rtbRequestURL.AddContextMenu();
|
|
|
|
|
rtbData.AddContextMenu();
|
|
|
|
|
rtbResultURL.AddContextMenu();
|
|
|
|
|
rtbResultThumbnailURL.AddContextMenu();
|
|
|
|
|
rtbResultDeletionURL.AddContextMenu();
|
2020-09-22 18:53:01 +12:00
|
|
|
|
rtbResultErrorMessage.AddContextMenu();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
eiCustomUploaders.ObjectType = typeof(CustomUploaderItem);
|
|
|
|
|
CustomUploaderAddDestinationTypes();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
cbRequestMethod.Items.AddRange(Enum.GetNames(typeof(HttpMethod)));
|
|
|
|
|
cbBody.Items.AddRange(Helpers.GetEnumDescriptions<CustomUploaderBody>());
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2019-06-25 07:33:17 +12:00
|
|
|
|
ShareXResources.ApplyTheme(this);
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
CustomUploaderLoadTab();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static CustomUploaderSettingsForm GetFormInstance(UploadersConfig config)
|
|
|
|
|
{
|
|
|
|
|
if (!IsInstanceActive)
|
|
|
|
|
{
|
|
|
|
|
instance = new CustomUploaderSettingsForm(config);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return instance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool CustomUploaderCheck(int index)
|
|
|
|
|
{
|
|
|
|
|
return Config.CustomUploadersList.IsValidIndex(index);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private CustomUploaderItem CustomUploaderGetSelected()
|
|
|
|
|
{
|
|
|
|
|
int index = lbCustomUploaderList.SelectedIndex;
|
|
|
|
|
|
|
|
|
|
if (CustomUploaderCheck(index))
|
|
|
|
|
{
|
|
|
|
|
return Config.CustomUploadersList[index];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderNew()
|
|
|
|
|
{
|
2019-02-20 20:36:44 +13:00
|
|
|
|
CustomUploaderAdd(CustomUploaderItem.Init());
|
2019-01-23 23:13:48 +13:00
|
|
|
|
CustomUploaderUpdateList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderAdd(CustomUploaderItem uploader)
|
|
|
|
|
{
|
|
|
|
|
if (uploader != null)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomUploadersList.Add(uploader);
|
|
|
|
|
lbCustomUploaderList.Items.Add(uploader);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderLoadSelected()
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
|
|
|
|
if (uploader != null)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderLoad(uploader);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderLoad(CustomUploaderItem uploader)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
txtName.Text = uploader.Name ?? "";
|
2021-03-02 02:13:36 +13:00
|
|
|
|
txtName.SetWatermark(URLHelpers.GetHostName(uploader.RequestURL) ?? "");
|
2019-01-23 23:13:48 +13:00
|
|
|
|
CustomUploaderSetDestinationType(uploader.DestinationType);
|
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
cbRequestMethod.SelectedIndex = (int)uploader.RequestMethod;
|
|
|
|
|
rtbRequestURL.Text = uploader.RequestURL ?? "";
|
|
|
|
|
CustomUploaderSyntaxHighlight(rtbRequestURL);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2019-02-02 20:39:53 +13:00
|
|
|
|
dgvParameters.Rows.Clear();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
if (uploader.Parameters != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (KeyValuePair<string, string> arg in uploader.Parameters)
|
|
|
|
|
{
|
2019-02-02 20:39:53 +13:00
|
|
|
|
dgvParameters.Rows.Add(new string[] { arg.Key, arg.Value });
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-02 21:03:16 +13:00
|
|
|
|
dgvHeaders.Rows.Clear();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
if (uploader.Headers != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (KeyValuePair<string, string> arg in uploader.Headers)
|
|
|
|
|
{
|
2019-02-02 21:03:16 +13:00
|
|
|
|
dgvHeaders.Rows.Add(new string[] { arg.Key, arg.Value });
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
cbBody.SelectedIndex = (int)uploader.Body;
|
2019-02-02 21:03:16 +13:00
|
|
|
|
|
|
|
|
|
dgvArguments.Rows.Clear();
|
|
|
|
|
if (uploader.Arguments != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (KeyValuePair<string, string> arg in uploader.Arguments)
|
|
|
|
|
{
|
|
|
|
|
dgvArguments.Rows.Add(new string[] { arg.Key, arg.Value });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
txtFileFormName.Text = uploader.FileFormName ?? "";
|
2019-02-02 21:03:16 +13:00
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
rtbData.Text = uploader.Data ?? "";
|
2019-02-02 21:03:16 +13:00
|
|
|
|
|
2020-09-22 18:53:01 +12:00
|
|
|
|
rtbResultURL.Text = uploader.URL;
|
2019-02-04 22:29:49 +13:00
|
|
|
|
CustomUploaderSyntaxHighlight(rtbResultURL);
|
2020-09-22 18:53:01 +12:00
|
|
|
|
rtbResultThumbnailURL.Text = uploader.ThumbnailURL;
|
2019-02-04 22:29:49 +13:00
|
|
|
|
CustomUploaderSyntaxHighlight(rtbResultThumbnailURL);
|
2020-09-22 18:53:01 +12:00
|
|
|
|
rtbResultDeletionURL.Text = uploader.DeletionURL;
|
2019-02-04 22:29:49 +13:00
|
|
|
|
CustomUploaderSyntaxHighlight(rtbResultDeletionURL);
|
2020-09-22 18:53:01 +12:00
|
|
|
|
rtbResultErrorMessage.Text = uploader.ErrorMessage;
|
|
|
|
|
CustomUploaderSyntaxHighlight(rtbResultErrorMessage);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
CustomUploaderUpdateStates();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderUpdateStates()
|
|
|
|
|
{
|
2021-03-02 02:13:36 +13:00
|
|
|
|
btnRemove.Enabled = btnDuplicate.Enabled = pMain.Visible = CustomUploaderCheck(lbCustomUploaderList.SelectedIndex);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2021-01-11 02:46:51 +13:00
|
|
|
|
tsmiExportAll.Enabled = tsmiClearUploaders.Enabled = cbImageUploader.Enabled =
|
2019-02-04 22:29:49 +13:00
|
|
|
|
btnImageUploaderTest.Enabled = cbTextUploader.Enabled = btnTextUploaderTest.Enabled =
|
|
|
|
|
cbFileUploader.Enabled = btnFileUploaderTest.Enabled = cbURLShortener.Enabled =
|
|
|
|
|
btnURLShortenerTest.Enabled = cbURLSharingService.Enabled = btnURLSharingServiceTest.Enabled =
|
2019-01-23 23:13:48 +13:00
|
|
|
|
lbCustomUploaderList.Items.Count > 0;
|
2019-02-20 20:36:44 +13:00
|
|
|
|
|
|
|
|
|
CustomUploaderUpdateBodyState();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-20 20:36:44 +13:00
|
|
|
|
private void CustomUploaderUpdateBodyState()
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2022-02-01 13:11:27 +13:00
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
if (uploader != null)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
pBodyArguments.Visible = uploader.Body == CustomUploaderBody.MultipartFormData ||
|
2019-01-23 23:13:48 +13:00
|
|
|
|
uploader.Body == CustomUploaderBody.FormURLEncoded;
|
2019-02-04 22:29:49 +13:00
|
|
|
|
lblFileFormName.Visible = txtFileFormName.Visible = uploader.Body == CustomUploaderBody.MultipartFormData;
|
|
|
|
|
pBodyData.Visible = uploader.Body == CustomUploaderBody.JSON || uploader.Body == CustomUploaderBody.XML;
|
|
|
|
|
btnDataMinify.Visible = uploader.Body == CustomUploaderBody.JSON;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderRefreshNames()
|
|
|
|
|
{
|
2022-02-02 19:29:22 +13:00
|
|
|
|
int index = lbCustomUploaderList.SelectedIndex;
|
2022-02-02 21:11:16 +13:00
|
|
|
|
|
|
|
|
|
if (index >= 0)
|
|
|
|
|
{
|
|
|
|
|
customUploaderPauseLoad = true;
|
|
|
|
|
|
|
|
|
|
lbCustomUploaderList.Items[index] = lbCustomUploaderList.Items[index];
|
|
|
|
|
cbImageUploader.Items[index] = cbImageUploader.Items[index];
|
|
|
|
|
cbTextUploader.Items[index] = cbTextUploader.Items[index];
|
|
|
|
|
cbFileUploader.Items[index] = cbFileUploader.Items[index];
|
|
|
|
|
cbURLShortener.Items[index] = cbURLShortener.Items[index];
|
|
|
|
|
cbURLSharingService.Items[index] = cbURLSharingService.Items[index];
|
|
|
|
|
|
|
|
|
|
customUploaderPauseLoad = false;
|
|
|
|
|
}
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderClearUploaders()
|
|
|
|
|
{
|
|
|
|
|
Config.CustomUploadersList.Clear();
|
|
|
|
|
lbCustomUploaderList.Items.Clear();
|
|
|
|
|
CustomUploaderClearFields();
|
|
|
|
|
Config.CustomImageUploaderSelected = Config.CustomTextUploaderSelected = Config.CustomFileUploaderSelected = Config.CustomURLShortenerSelected =
|
|
|
|
|
Config.CustomURLSharingServiceSelected = 0;
|
|
|
|
|
CustomUploaderUpdateList();
|
|
|
|
|
CustomUploaderUpdateStates();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
btnNew.Focus();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderClearFields()
|
|
|
|
|
{
|
2019-02-20 20:36:44 +13:00
|
|
|
|
CustomUploaderLoad(CustomUploaderItem.Init());
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2020-09-30 03:39:01 +13:00
|
|
|
|
private void CustomUploaderSerialize(CustomUploaderItem cui, string folderPath)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string filePath = Path.Combine(folderPath, cui.GetFileName());
|
|
|
|
|
JsonHelpers.SerializeToFile(cui, filePath, DefaultValueHandling.Ignore, NullValueHandling.Ignore);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
DebugHelper.WriteException(e);
|
2020-10-22 18:04:05 +13:00
|
|
|
|
MessageBox.Show(Resources.ExportFailed + "\n\n" + e, "ShareX - " + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
2020-09-30 03:39:01 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
private void CustomUploaderExportAll()
|
|
|
|
|
{
|
|
|
|
|
if (Config.CustomUploadersList != null && Config.CustomUploadersList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
using (FolderSelectDialog fsd = new FolderSelectDialog())
|
|
|
|
|
{
|
|
|
|
|
if (fsd.ShowDialog())
|
|
|
|
|
{
|
2019-03-05 08:03:41 +13:00
|
|
|
|
foreach (CustomUploaderItem cui in Config.CustomUploadersList)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2020-09-30 03:39:01 +13:00
|
|
|
|
CustomUploaderSerialize(cui, fsd.FileName);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-03-05 08:03:41 +13:00
|
|
|
|
private void CustomUploaderUpdateFolder()
|
|
|
|
|
{
|
|
|
|
|
using (FolderSelectDialog fsd = new FolderSelectDialog())
|
|
|
|
|
{
|
|
|
|
|
if (fsd.ShowDialog())
|
|
|
|
|
{
|
|
|
|
|
string folderPath = fsd.FileName;
|
|
|
|
|
string[] files = Directory.GetFiles(folderPath, "*.sxcu", SearchOption.TopDirectoryOnly);
|
|
|
|
|
|
|
|
|
|
int updated = 0;
|
|
|
|
|
|
|
|
|
|
if (files != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (string filePath in files)
|
|
|
|
|
{
|
2020-09-30 02:42:46 +13:00
|
|
|
|
CustomUploaderItem cui = JsonHelpers.DeserializeFromFile<CustomUploaderItem>(filePath);
|
2019-03-05 08:03:41 +13:00
|
|
|
|
|
|
|
|
|
if (cui != null)
|
|
|
|
|
{
|
|
|
|
|
cui.CheckBackwardCompatibility();
|
2020-09-30 03:39:01 +13:00
|
|
|
|
CustomUploaderSerialize(cui, folderPath);
|
2019-03-05 08:03:41 +13:00
|
|
|
|
updated++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MessageBox.Show($"{updated} custom uploader files updated.", "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
private void CustomUploaderLoadTab(bool selectLastItem = false)
|
|
|
|
|
{
|
|
|
|
|
lbCustomUploaderList.Items.Clear();
|
|
|
|
|
|
|
|
|
|
if (Config.CustomUploadersList == null)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomUploadersList = new List<CustomUploaderItem>();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
foreach (CustomUploaderItem customUploader in Config.CustomUploadersList)
|
|
|
|
|
{
|
|
|
|
|
lbCustomUploaderList.Items.Add(customUploader);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CustomUploaderUpdateList();
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-19 11:23:08 +13:00
|
|
|
|
if (HelpersOptions.DevMode)
|
|
|
|
|
{
|
|
|
|
|
tsmiExportAll.Visible = true;
|
|
|
|
|
tsmiUpdateFolder.Visible = true;
|
|
|
|
|
}
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
CustomUploaderClearFields();
|
|
|
|
|
|
|
|
|
|
if (lbCustomUploaderList.Items.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
if (selectLastItem)
|
|
|
|
|
{
|
|
|
|
|
lbCustomUploaderList.SelectedIndex = lbCustomUploaderList.Items.Count - 1;
|
|
|
|
|
}
|
|
|
|
|
else if (Config.CustomUploadersList.IsValidIndex(Config.CustomImageUploaderSelected))
|
|
|
|
|
{
|
|
|
|
|
lbCustomUploaderList.SelectedIndex = Config.CustomImageUploaderSelected;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CustomUploaderUpdateStates();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void CustomUploaderUpdateTab()
|
|
|
|
|
{
|
|
|
|
|
if (IsInstanceActive)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderSettingsForm form = GetFormInstance(null);
|
|
|
|
|
form.CustomUploaderLoadTab(true);
|
|
|
|
|
form.ForceActivate();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderAddDestinationTypes()
|
|
|
|
|
{
|
|
|
|
|
string[] enums = Helpers.GetLocalizedEnumDescriptions<CustomUploaderDestinationType>().Skip(1).Select(x => x.Replace("&", "&&")).ToArray();
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < enums.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
ToolStripMenuItem tsmi = new ToolStripMenuItem(enums[i]);
|
|
|
|
|
|
|
|
|
|
int index = i;
|
|
|
|
|
|
|
|
|
|
tsmi.Click += (sender, e) =>
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
ToolStripMenuItem tsmi2 = (ToolStripMenuItem)cmsDestinationType.Items[index];
|
2019-01-23 23:13:48 +13:00
|
|
|
|
tsmi2.Checked = !tsmi2.Checked;
|
|
|
|
|
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
|
|
|
|
if (uploader != null)
|
|
|
|
|
{
|
|
|
|
|
uploader.DestinationType = CustomUploaderGetDestinationType();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CustomUploaderDestinationTypeUpdate();
|
|
|
|
|
};
|
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
cmsDestinationType.Items.Add(tsmi);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
cmsDestinationType.Closing += (sender, e) => e.Cancel = e.CloseReason == ToolStripDropDownCloseReason.ItemClicked;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderSetDestinationType(CustomUploaderDestinationType destinationType)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
for (int i = 0; i < cmsDestinationType.Items.Count; i++)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
ToolStripMenuItem tsmi = (ToolStripMenuItem)cmsDestinationType.Items[i];
|
2019-01-23 23:13:48 +13:00
|
|
|
|
tsmi.Checked = destinationType.HasFlag(1 << i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CustomUploaderDestinationTypeUpdate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private CustomUploaderDestinationType CustomUploaderGetDestinationType()
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderDestinationType destinationType = CustomUploaderDestinationType.None;
|
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
for (int i = 0; i < cmsDestinationType.Items.Count; i++)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
ToolStripMenuItem tsmi = (ToolStripMenuItem)cmsDestinationType.Items[i];
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
if (tsmi.Checked)
|
|
|
|
|
{
|
|
|
|
|
destinationType |= (CustomUploaderDestinationType)(1 << i);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return destinationType;
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-05 06:09:48 +13:00
|
|
|
|
private void CheckDataGridView(DataGridView dgv, bool checkDuplicate)
|
2019-02-02 20:39:53 +13:00
|
|
|
|
{
|
|
|
|
|
for (int i = dgv.Rows.Count - 1; i > -1; i--)
|
|
|
|
|
{
|
|
|
|
|
DataGridViewRow row = dgv.Rows[i];
|
|
|
|
|
DataGridViewCell cell = row.Cells[0];
|
|
|
|
|
|
|
|
|
|
if (cell.Value == null)
|
|
|
|
|
{
|
|
|
|
|
if (!row.IsNewRow)
|
|
|
|
|
{
|
|
|
|
|
dgv.Rows.RemoveAt(i);
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-02-05 06:09:48 +13:00
|
|
|
|
else if (checkDuplicate)
|
2019-02-02 20:39:53 +13:00
|
|
|
|
{
|
|
|
|
|
bool isDuplicate = false;
|
|
|
|
|
|
|
|
|
|
for (int i2 = 0; i2 < i; i2++)
|
|
|
|
|
{
|
|
|
|
|
if (dgv.Rows[i2].Cells[0].Value?.ToString() == cell.Value.ToString())
|
|
|
|
|
{
|
|
|
|
|
isDuplicate = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isDuplicate)
|
|
|
|
|
{
|
2019-04-05 08:22:16 +13:00
|
|
|
|
cell.ErrorText = Resources.DuplicateNameNotAllowed;
|
2019-02-02 20:39:53 +13:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cell.ErrorText = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Dictionary<string, string> DataGridViewToDictionary(DataGridView dgv)
|
|
|
|
|
{
|
2019-02-05 02:50:39 +13:00
|
|
|
|
Dictionary<string, string> dictionary = new Dictionary<string, string>();
|
2019-02-02 20:39:53 +13:00
|
|
|
|
|
|
|
|
|
for (int i = 0; i < dgv.Rows.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
DataGridViewRow row = dgv.Rows[i];
|
2019-02-05 02:50:39 +13:00
|
|
|
|
string key = row.Cells[0].Value?.ToString();
|
2019-02-02 20:39:53 +13:00
|
|
|
|
|
2019-02-05 02:50:39 +13:00
|
|
|
|
if (!string.IsNullOrEmpty(key) && !dictionary.ContainsKey(key))
|
2019-02-02 20:39:53 +13:00
|
|
|
|
{
|
|
|
|
|
string value = row.Cells[1].Value?.ToString();
|
|
|
|
|
|
2019-02-05 02:50:39 +13:00
|
|
|
|
dictionary.Add(key, value);
|
2019-02-02 20:39:53 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-05 02:50:39 +13:00
|
|
|
|
return dictionary;
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
private void CustomUploaderDestinationTypeUpdate()
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
|
|
|
|
if (uploader != null)
|
|
|
|
|
{
|
|
|
|
|
if (uploader.DestinationType == CustomUploaderDestinationType.None)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
mbDestinationType.Text = CustomUploaderDestinationType.None.GetLocalizedDescription();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2021-01-14 12:05:43 +13:00
|
|
|
|
mbDestinationType.Text = string.Join(", ", uploader.DestinationType.GetFlags().Select(x => x.GetLocalizedDescription()));
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderFixSelectedUploader(int removedIndex)
|
|
|
|
|
{
|
|
|
|
|
int resetIndex = Config.CustomUploadersList.Count - 1;
|
|
|
|
|
|
|
|
|
|
if (Config.CustomImageUploaderSelected == removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomImageUploaderSelected = resetIndex;
|
|
|
|
|
}
|
|
|
|
|
else if (Config.CustomImageUploaderSelected > removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomImageUploaderSelected--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Config.CustomTextUploaderSelected == removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomTextUploaderSelected = resetIndex;
|
|
|
|
|
}
|
|
|
|
|
else if (Config.CustomTextUploaderSelected > removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomTextUploaderSelected--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Config.CustomFileUploaderSelected == removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomFileUploaderSelected = resetIndex;
|
|
|
|
|
}
|
|
|
|
|
else if (Config.CustomFileUploaderSelected > removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomFileUploaderSelected--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Config.CustomURLShortenerSelected == removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomURLShortenerSelected = resetIndex;
|
|
|
|
|
}
|
|
|
|
|
else if (Config.CustomURLShortenerSelected > removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomURLShortenerSelected--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Config.CustomURLSharingServiceSelected == removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomURLSharingServiceSelected = resetIndex;
|
|
|
|
|
}
|
|
|
|
|
else if (Config.CustomURLSharingServiceSelected > removedIndex)
|
|
|
|
|
{
|
|
|
|
|
Config.CustomURLSharingServiceSelected--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderUpdateList()
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
cbImageUploader.Items.Clear();
|
|
|
|
|
cbTextUploader.Items.Clear();
|
|
|
|
|
cbFileUploader.Items.Clear();
|
|
|
|
|
cbURLShortener.Items.Clear();
|
|
|
|
|
cbURLSharingService.Items.Clear();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
if (Config.CustomUploadersList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (CustomUploaderItem item in Config.CustomUploadersList)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
cbImageUploader.Items.Add(item);
|
|
|
|
|
cbTextUploader.Items.Add(item);
|
|
|
|
|
cbFileUploader.Items.Add(item);
|
|
|
|
|
cbURLShortener.Items.Add(item);
|
|
|
|
|
cbURLSharingService.Items.Add(item);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-05-24 07:59:16 +12:00
|
|
|
|
cbImageUploader.SelectedIndex = Config.CustomImageUploaderSelected.Clamp(0, Config.CustomUploadersList.Count - 1);
|
|
|
|
|
cbTextUploader.SelectedIndex = Config.CustomTextUploaderSelected.Clamp(0, Config.CustomUploadersList.Count - 1);
|
|
|
|
|
cbFileUploader.SelectedIndex = Config.CustomFileUploaderSelected.Clamp(0, Config.CustomUploadersList.Count - 1);
|
|
|
|
|
cbURLShortener.SelectedIndex = Config.CustomURLShortenerSelected.Clamp(0, Config.CustomUploadersList.Count - 1);
|
|
|
|
|
cbURLSharingService.SelectedIndex = Config.CustomURLSharingServiceSelected.Clamp(0, Config.CustomUploadersList.Count - 1);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task TestCustomUploader(CustomUploaderDestinationType type, int index)
|
|
|
|
|
{
|
|
|
|
|
if (!Config.CustomUploadersList.IsValidIndex(index))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
btnImageUploaderTest.Enabled = btnTextUploaderTest.Enabled = btnFileUploaderTest.Enabled =
|
|
|
|
|
btnURLShortenerTest.Enabled = btnURLSharingServiceTest.Enabled = false;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
lbCustomUploaderList.SelectedIndex = index;
|
|
|
|
|
|
|
|
|
|
CustomUploaderItem item = Config.CustomUploadersList[index];
|
|
|
|
|
UploadResult result = null;
|
|
|
|
|
|
|
|
|
|
await Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
|
|
|
|
case CustomUploaderDestinationType.ImageUploader:
|
|
|
|
|
using (Stream stream = ShareXResources.Logo.GetStream())
|
|
|
|
|
{
|
|
|
|
|
CustomImageUploader imageUploader = new CustomImageUploader(item);
|
|
|
|
|
result = imageUploader.Upload(stream, "Test.png");
|
2021-07-04 01:43:12 +12:00
|
|
|
|
result.Errors.AddRange(imageUploader.Errors);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case CustomUploaderDestinationType.TextUploader:
|
|
|
|
|
CustomTextUploader textUploader = new CustomTextUploader(item);
|
2022-02-02 14:31:35 +13:00
|
|
|
|
using (TextUploadForm form = new TextUploadForm("ShareX text upload test"))
|
|
|
|
|
{
|
|
|
|
|
if (form.ShowDialog() == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
string text = form.Content;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(text))
|
|
|
|
|
{
|
|
|
|
|
result = textUploader.UploadText(text, "Test.txt");
|
|
|
|
|
result.Errors.AddRange(textUploader.Errors);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-01-23 23:13:48 +13:00
|
|
|
|
break;
|
|
|
|
|
case CustomUploaderDestinationType.FileUploader:
|
|
|
|
|
using (Stream stream = ShareXResources.Logo.GetStream())
|
|
|
|
|
{
|
|
|
|
|
CustomFileUploader fileUploader = new CustomFileUploader(item);
|
|
|
|
|
result = fileUploader.Upload(stream, "Test.png");
|
2021-07-04 01:43:12 +12:00
|
|
|
|
result.Errors.AddRange(fileUploader.Errors);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case CustomUploaderDestinationType.URLShortener:
|
|
|
|
|
CustomURLShortener urlShortener = new CustomURLShortener(item);
|
2022-05-15 09:32:09 +12:00
|
|
|
|
result = urlShortener.ShortenURL(Links.Website);
|
2021-07-04 01:43:12 +12:00
|
|
|
|
result.Errors.AddRange(urlShortener.Errors);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
break;
|
|
|
|
|
case CustomUploaderDestinationType.URLSharingService:
|
|
|
|
|
CustomURLSharer urlSharer = new CustomURLSharer(item);
|
2022-05-15 09:32:09 +12:00
|
|
|
|
result = urlSharer.ShareURL(Links.Website);
|
2021-07-04 01:43:12 +12:00
|
|
|
|
result.Errors.AddRange(urlSharer.Errors);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
result = new UploadResult();
|
|
|
|
|
result.Errors.Add(e.Message);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!IsDisposed)
|
|
|
|
|
{
|
2022-04-13 23:49:37 +12:00
|
|
|
|
lastResult = result;
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
if (result != null)
|
|
|
|
|
{
|
2021-01-29 05:02:24 +13:00
|
|
|
|
ResponseForm.ShowInstance(result);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
btnImageUploaderTest.Enabled = btnTextUploaderTest.Enabled = btnFileUploaderTest.Enabled =
|
|
|
|
|
btnURLShortenerTest.Enabled = btnURLSharingServiceTest.Enabled = true;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderSyntaxHighlight(RichTextBox rtb)
|
|
|
|
|
{
|
2022-02-01 00:16:35 +13:00
|
|
|
|
string text = rtb.Text;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(text))
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2022-02-01 00:16:35 +13:00
|
|
|
|
int start = rtb.SelectionStart;
|
|
|
|
|
int length = rtb.SelectionLength;
|
|
|
|
|
rtb.BeginUpdate();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2022-02-01 00:16:35 +13:00
|
|
|
|
rtb.SelectionStart = 0;
|
|
|
|
|
rtb.SelectionLength = rtb.TextLength;
|
|
|
|
|
rtb.SelectionColor = rtb.ForeColor;
|
|
|
|
|
|
2022-04-13 17:12:14 +12:00
|
|
|
|
ShareXCustomUploaderSyntaxParser parser = new ShareXCustomUploaderSyntaxParser();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2022-02-01 00:16:35 +13:00
|
|
|
|
for (int i = 0; i < text.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
char c = text[i];
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2022-02-01 00:16:35 +13:00
|
|
|
|
if (c == parser.SyntaxStart || c == parser.SyntaxEnd || c == parser.SyntaxParameterStart ||
|
|
|
|
|
c == parser.SyntaxParameterDelimiter || c == parser.SyntaxEscape)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2022-02-01 00:16:35 +13:00
|
|
|
|
rtb.SelectionStart = i;
|
|
|
|
|
rtb.SelectionLength = 1;
|
2022-02-01 00:53:59 +13:00
|
|
|
|
rtb.SelectionColor = Color.Lime;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-02-01 00:16:35 +13:00
|
|
|
|
|
|
|
|
|
rtb.SelectionStart = start;
|
|
|
|
|
rtb.SelectionLength = length;
|
|
|
|
|
rtb.EndUpdate();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderFormatJsonData(Formatting formatting)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
string json = rtbData.Text;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(json))
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
rtbData.Text = Helpers.JSONFormat(json, formatting);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show(e.Message, "ShareX - Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderFormatXMLData()
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
string xml = rtbData.Text;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(xml))
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
rtbData.Text = Helpers.XMLFormat(xml);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show(e.Message, "ShareX - Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region Form events
|
|
|
|
|
|
2019-02-01 20:54:48 +13:00
|
|
|
|
private void CustomUploaderSettingsForm_DragEnter(object sender, DragEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
|
|
|
|
|
{
|
2021-06-10 10:14:01 +12:00
|
|
|
|
if (e.Data.GetData(DataFormats.FileDrop, false) is string[] files && files.Any(x => !string.IsNullOrEmpty(x) && x.EndsWith(".sxcu")))
|
2019-02-01 20:54:48 +13:00
|
|
|
|
{
|
|
|
|
|
e.Effect = DragDropEffects.Copy;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
e.Effect = DragDropEffects.None;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
e.Effect = DragDropEffects.None;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CustomUploaderSettingsForm_DragDrop(object sender, DragEventArgs e)
|
|
|
|
|
{
|
2021-06-10 10:14:01 +12:00
|
|
|
|
if (e.Data.GetDataPresent(DataFormats.FileDrop, false) && e.Data.GetData(DataFormats.FileDrop, false) is string[] files)
|
2019-02-01 20:54:48 +13:00
|
|
|
|
{
|
2021-06-10 10:14:01 +12:00
|
|
|
|
foreach (string filePath in files.Where(x => !string.IsNullOrEmpty(x) && x.EndsWith(".sxcu")))
|
2019-02-01 20:54:48 +13:00
|
|
|
|
{
|
2021-06-10 10:14:01 +12:00
|
|
|
|
CustomUploaderItem cui = JsonHelpers.DeserializeFromFile<CustomUploaderItem>(filePath);
|
2019-02-01 20:54:48 +13:00
|
|
|
|
|
2021-06-10 10:14:01 +12:00
|
|
|
|
if (cui != null)
|
|
|
|
|
{
|
|
|
|
|
cui.CheckBackwardCompatibility();
|
|
|
|
|
CustomUploaderAdd(cui);
|
2019-02-01 20:54:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-06-10 10:14:01 +12:00
|
|
|
|
|
|
|
|
|
eiCustomUploaders_ImportCompleted();
|
2019-02-01 20:54:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
private void btnCustomUploaderNew_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderNew();
|
|
|
|
|
lbCustomUploaderList.SelectedIndex = lbCustomUploaderList.Items.Count - 1;
|
2019-02-04 22:29:49 +13:00
|
|
|
|
txtName.Focus();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btnCustomUploaderRemove_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
int selected = lbCustomUploaderList.SelectedIndex;
|
|
|
|
|
|
|
|
|
|
if (selected > -1)
|
|
|
|
|
{
|
|
|
|
|
lbCustomUploaderList.Items.RemoveAt(selected);
|
|
|
|
|
Config.CustomUploadersList.RemoveAt(selected);
|
|
|
|
|
|
|
|
|
|
if (lbCustomUploaderList.Items.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
lbCustomUploaderList.SelectedIndex = selected == lbCustomUploaderList.Items.Count ? lbCustomUploaderList.Items.Count - 1 : selected;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderClearFields();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
btnNew.Focus();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CustomUploaderFixSelectedUploader(selected);
|
|
|
|
|
CustomUploaderUpdateList();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btnCustomUploaderDuplicate_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
|
|
|
|
if (uploader != null)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem clone = uploader.Copy();
|
|
|
|
|
CustomUploaderAdd(clone);
|
|
|
|
|
CustomUploaderUpdateList();
|
|
|
|
|
lbCustomUploaderList.SelectedIndex = lbCustomUploaderList.Items.Count - 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void lbCustomUploaderList_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!customUploaderPauseLoad)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderLoadSelected();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private object eiCustomUploaders_ExportRequested()
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
|
|
|
|
|
|
|
|
|
if (uploader != null)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(uploader.RequestURL))
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show(Resources.UploadersConfigForm_eiCustomUploaders_ExportRequested_RequestURLMustBeConfigured, "ShareX - " + Resources.UploadersConfigForm_Error,
|
|
|
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (uploader.DestinationType == CustomUploaderDestinationType.None)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show(Resources.UploadersConfigForm_eiCustomUploaders_ExportRequested_DestinationTypeMustBeConfigured, "ShareX - " + Resources.UploadersConfigForm_Error,
|
|
|
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
eiCustomUploaders.DefaultFileName = uploader.GetFileName();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return uploader;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void eiCustomUploaders_ImportRequested(object obj)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = obj as CustomUploaderItem;
|
|
|
|
|
uploader.CheckBackwardCompatibility();
|
|
|
|
|
CustomUploaderAdd(uploader);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void eiCustomUploaders_ImportCompleted()
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderUpdateList();
|
|
|
|
|
CustomUploaderUpdateStates();
|
|
|
|
|
lbCustomUploaderList.SelectedIndex = lbCustomUploaderList.Items.Count - 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void tsmiCustomUploaderGuide_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2022-05-15 09:32:09 +12:00
|
|
|
|
URLHelpers.OpenURL(Links.DocsCustomUploader);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 02:46:51 +13:00
|
|
|
|
private void tsmiClearUploaders_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (MessageBox.Show(Resources.UploadersConfigForm_Remove_all_custom_uploaders_Confirmation, "ShareX",
|
|
|
|
|
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderClearUploaders();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
private void tsmiCustomUploaderExportAll_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderExportAll();
|
|
|
|
|
}
|
|
|
|
|
|
2019-03-05 08:03:41 +13:00
|
|
|
|
private void tsmiUpdateFolder_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderUpdateFolder();
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
private void txtCustomUploaderName_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
if (uploader != null) uploader.Name = txtName.Text;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
CustomUploaderRefreshNames();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbCustomUploaderRequestType_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
if (uploader != null) uploader.RequestMethod = (HttpMethod)cbRequestMethod.SelectedIndex;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void rtbCustomUploaderRequestURL_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-05 20:52:41 +13:00
|
|
|
|
if (uploader != null)
|
|
|
|
|
{
|
|
|
|
|
uploader.RequestURL = rtbRequestURL.Text;
|
|
|
|
|
txtName.SetWatermark(URLHelpers.GetHostName(uploader.RequestURL));
|
|
|
|
|
}
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2019-02-04 22:29:49 +13:00
|
|
|
|
CustomUploaderSyntaxHighlight(rtbRequestURL);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
CustomUploaderRefreshNames();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbCustomUploaderRequestFormat_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
if (uploader != null) uploader.Body = (CustomUploaderBody)cbBody.SelectedIndex;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2019-02-20 20:36:44 +13:00
|
|
|
|
CustomUploaderUpdateBodyState();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-02 22:38:44 +13:00
|
|
|
|
private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (((DataGridView)sender).CurrentCell.ColumnIndex == 1)
|
|
|
|
|
{
|
|
|
|
|
if (e.Control is TextBox tb)
|
|
|
|
|
{
|
|
|
|
|
if (tb.AutoCompleteCustomSource == null || tb.AutoCompleteCustomSource.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
AutoCompleteStringCollection col = new AutoCompleteStringCollection();
|
|
|
|
|
col.Add("$input$");
|
|
|
|
|
col.Add("$filename$");
|
|
|
|
|
col.Add("$random:");
|
|
|
|
|
col.Add("$select:");
|
|
|
|
|
col.Add("$prompt:");
|
|
|
|
|
col.Add("$base64:");
|
|
|
|
|
|
|
|
|
|
tb.AutoCompleteCustomSource = col;
|
|
|
|
|
tb.AutoCompleteSource = AutoCompleteSource.CustomSource;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tb.AutoCompleteMode = AutoCompleteMode.Suggest;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (e.Control is TextBox tb)
|
|
|
|
|
{
|
|
|
|
|
tb.AutoCompleteMode = AutoCompleteMode.None;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void dgvParameters_CellValueChanged(object sender, DataGridViewCellEventArgs e)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-05 06:09:48 +13:00
|
|
|
|
CheckDataGridView(dgvParameters, true);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-02 21:03:16 +13:00
|
|
|
|
if (uploader != null) uploader.Parameters = DataGridViewToDictionary(dgvParameters);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-02 22:38:44 +13:00
|
|
|
|
private void dgvHeaders_CellValueChanged(object sender, DataGridViewCellEventArgs e)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-05 06:09:48 +13:00
|
|
|
|
CheckDataGridView(dgvHeaders, true);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-02 21:03:16 +13:00
|
|
|
|
if (uploader != null) uploader.Headers = DataGridViewToDictionary(dgvHeaders);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-02 22:38:44 +13:00
|
|
|
|
private void dgvArguments_CellValueChanged(object sender, DataGridViewCellEventArgs e)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-05 06:09:48 +13:00
|
|
|
|
CheckDataGridView(dgvArguments, true);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
|
2019-02-02 21:03:16 +13:00
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
|
|
|
|
if (uploader != null) uploader.Arguments = DataGridViewToDictionary(dgvArguments);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-02 21:03:16 +13:00
|
|
|
|
private void txtCustomUploaderFileForm_TextChanged(object sender, EventArgs e)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-02 20:39:53 +13:00
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
if (uploader != null) uploader.FileFormName = txtFileFormName.Text;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-02 21:03:16 +13:00
|
|
|
|
private void rtbCustomUploaderData_TextChanged(object sender, EventArgs e)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-02 21:03:16 +13:00
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
if (uploader != null) uploader.Data = rtbData.Text;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-02 21:03:16 +13:00
|
|
|
|
private void btnCustomUploaderDataBeautify_Click(object sender, EventArgs e)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-02 21:03:16 +13:00
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
|
|
|
|
if (uploader != null)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-02 21:03:16 +13:00
|
|
|
|
if (uploader.Body == CustomUploaderBody.JSON)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-02 21:03:16 +13:00
|
|
|
|
CustomUploaderFormatJsonData(Formatting.Indented);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
2019-02-02 21:03:16 +13:00
|
|
|
|
else if (uploader.Body == CustomUploaderBody.XML)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-02 21:03:16 +13:00
|
|
|
|
CustomUploaderFormatXMLData();
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-02 21:03:16 +13:00
|
|
|
|
private void btnCustomUploaderDataMinify_Click(object sender, EventArgs e)
|
2019-01-23 23:13:48 +13:00
|
|
|
|
{
|
2019-02-02 21:03:16 +13:00
|
|
|
|
CustomUploaderFormatJsonData(Formatting.None);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2022-04-09 08:06:08 +12:00
|
|
|
|
private void btnTestURLSyntax_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2022-04-13 23:49:37 +12:00
|
|
|
|
using (CustomUploaderSyntaxTestForm syntaxTestForm = new CustomUploaderSyntaxTestForm(lastResult?.ResponseInfo, rtbResultURL.Text))
|
2022-04-09 08:06:08 +12:00
|
|
|
|
{
|
|
|
|
|
syntaxTestForm.ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
private void rtbCustomUploaderURL_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
if (uploader != null) uploader.URL = rtbResultURL.Text;
|
|
|
|
|
CustomUploaderSyntaxHighlight(rtbResultURL);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void rtbCustomUploaderThumbnailURL_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
if (uploader != null) uploader.ThumbnailURL = rtbResultThumbnailURL.Text;
|
|
|
|
|
CustomUploaderSyntaxHighlight(rtbResultThumbnailURL);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void rtbCustomUploaderDeletionURL_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
2019-02-04 22:29:49 +13:00
|
|
|
|
if (uploader != null) uploader.DeletionURL = rtbResultDeletionURL.Text;
|
|
|
|
|
CustomUploaderSyntaxHighlight(rtbResultDeletionURL);
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
2020-09-22 18:53:01 +12:00
|
|
|
|
private void rtbResultErrorMessage_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CustomUploaderItem uploader = CustomUploaderGetSelected();
|
|
|
|
|
if (uploader != null) uploader.ErrorMessage = rtbResultErrorMessage.Text;
|
|
|
|
|
CustomUploaderSyntaxHighlight(rtbResultErrorMessage);
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-23 23:13:48 +13:00
|
|
|
|
private void cbCustomUploaderImageUploader_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
Config.CustomImageUploaderSelected = cbImageUploader.SelectedIndex;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void btnCustomUploaderImageUploaderTest_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
await TestCustomUploader(CustomUploaderDestinationType.ImageUploader, Config.CustomImageUploaderSelected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbCustomUploaderTextUploader_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
Config.CustomTextUploaderSelected = cbTextUploader.SelectedIndex;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void btnCustomUploaderTextUploaderTest_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
await TestCustomUploader(CustomUploaderDestinationType.TextUploader, Config.CustomTextUploaderSelected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbCustomUploaderFileUploader_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
Config.CustomFileUploaderSelected = cbFileUploader.SelectedIndex;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void btnCustomUploaderFileUploaderTest_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
await TestCustomUploader(CustomUploaderDestinationType.FileUploader, Config.CustomFileUploaderSelected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbCustomUploaderURLShortener_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
Config.CustomURLShortenerSelected = cbURLShortener.SelectedIndex;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void btnCustomUploaderURLShortenerTest_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
await TestCustomUploader(CustomUploaderDestinationType.URLShortener, Config.CustomURLShortenerSelected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void cbCustomUploaderURLSharingService_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2019-02-04 22:29:49 +13:00
|
|
|
|
Config.CustomURLSharingServiceSelected = cbURLSharingService.SelectedIndex;
|
2019-01-23 23:13:48 +13:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void btnCustomUploaderURLSharingServiceTest_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
await TestCustomUploader(CustomUploaderDestinationType.URLSharingService, Config.CustomURLSharingServiceSelected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion Form events
|
|
|
|
|
}
|
|
|
|
|
}
|