mirror of https://github.com/ShareX/ShareX.git
Compare commits
7 Commits
686e5b6d8f
...
05ec6b1c29
Author | SHA1 | Date |
---|---|---|
faint | 05ec6b1c29 | |
Jaex | 39bba4dda9 | |
Jaex | 4ad4b5c9a7 | |
Jaex | 40530d90a8 | |
Jaex | 94e57208d3 | |
Jaex | 019c9a7dae | |
faint | 9fd1d4ee4f |
|
@ -3,7 +3,7 @@
|
|||
<Company>ShareX Team</Company>
|
||||
<Product>ShareX</Product>
|
||||
<Copyright>Copyright (c) 2007-2024 ShareX Team</Copyright>
|
||||
<Version>16.0.3</Version>
|
||||
<Version>16.0.4</Version>
|
||||
<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
|
||||
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace ShareX.HelpersLib.Audio
|
||||
{
|
||||
// The fields and their sizes were created according to WAV specification
|
||||
// See: http://soundfile.sapp.org/doc/WaveFormat/
|
||||
public class Wav
|
||||
{
|
||||
private const int Riff = 1179011410;
|
||||
public readonly int Size;
|
||||
private const int Format = 1163280727;
|
||||
|
||||
private const int FormatChunkId = 544501094;
|
||||
public readonly int FormatSize;
|
||||
public readonly short AudioFormat;
|
||||
public readonly short Channels;
|
||||
public readonly int SampleRate;
|
||||
public readonly int ByteRate;
|
||||
public readonly short BlockAlign;
|
||||
public readonly short BitsPerSample;
|
||||
|
||||
private const int DataChunkId = 1635017060;
|
||||
public readonly int DataSize;
|
||||
public readonly byte[] SoundData;
|
||||
|
||||
public Wav(Stream stream)
|
||||
{
|
||||
var reader = new BinaryReader(stream);
|
||||
|
||||
if (reader.ReadInt32() != Riff)
|
||||
throw new Exception("Invalid WAV file: wrong RIFF chunk ID");
|
||||
|
||||
Size = reader.ReadInt32();
|
||||
|
||||
if (reader.ReadInt32() != Format)
|
||||
throw new Exception("Invalid WAV file: wrong RIFF chunk format");
|
||||
if (reader.ReadInt32() != FormatChunkId)
|
||||
throw new Exception("Invalid WAV file: wrong fmt subchunk ID");
|
||||
|
||||
FormatSize = reader.ReadInt32();
|
||||
AudioFormat = reader.ReadInt16();
|
||||
Channels = reader.ReadInt16();
|
||||
SampleRate = reader.ReadInt32();
|
||||
ByteRate = reader.ReadInt32();
|
||||
BlockAlign = reader.ReadInt16();
|
||||
BitsPerSample = reader.ReadInt16();
|
||||
|
||||
if (reader.ReadInt32() != DataChunkId)
|
||||
throw new Exception("Invalid WAV file: wrong data subchunk ID");
|
||||
|
||||
DataSize = reader.ReadInt32();
|
||||
SoundData = reader.ReadBytes(DataSize);
|
||||
}
|
||||
|
||||
public Stream ToStream()
|
||||
{
|
||||
var stream = new MemoryStream();
|
||||
var writer = new BinaryWriter(stream);
|
||||
|
||||
writer.Write(Riff);
|
||||
writer.Write(Size);
|
||||
writer.Write(Format);
|
||||
writer.Write(FormatChunkId);
|
||||
writer.Write(FormatSize);
|
||||
writer.Write(AudioFormat);
|
||||
writer.Write(Channels);
|
||||
writer.Write(SampleRate);
|
||||
writer.Write(ByteRate);
|
||||
writer.Write(BlockAlign);
|
||||
writer.Write(BitsPerSample);
|
||||
writer.Write(DataChunkId);
|
||||
writer.Write(DataSize);
|
||||
writer.Write(SoundData);
|
||||
|
||||
stream.Position = 0;
|
||||
return stream;
|
||||
}
|
||||
|
||||
public Wav ChangeVolume(float factor)
|
||||
{
|
||||
for (var i = 0; i < DataSize; i += BitsPerSample/8)
|
||||
{
|
||||
var int16 = BitConverter.ToInt16(SoundData, i);
|
||||
int16 = (short)Math.Round(int16 * factor);
|
||||
BitConverter.GetBytes(int16).CopyTo(SoundData, i);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -48,6 +48,7 @@ using System.Threading.Tasks;
|
|||
using System.Web;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml;
|
||||
using ShareX.HelpersLib.Audio;
|
||||
|
||||
namespace ShareX.HelpersLib
|
||||
{
|
||||
|
@ -410,6 +411,21 @@ namespace ShareX.HelpersLib
|
|||
}
|
||||
}
|
||||
|
||||
public static void PlaySoundAsync(Stream stream, float factor)
|
||||
{
|
||||
if (stream != null)
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
using (stream)
|
||||
using (SoundPlayer soundPlayer = new SoundPlayer(new Wav(stream).ChangeVolume(factor).ToStream()))
|
||||
{
|
||||
soundPlayer.PlaySync();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static void PlaySoundAsync(string filePath)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
|
||||
|
@ -424,6 +440,21 @@ namespace ShareX.HelpersLib
|
|||
}
|
||||
}
|
||||
|
||||
public static void PlaySoundAsync(string filePath, float factor)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
using (StreamReader reader = new StreamReader(filePath))
|
||||
using (SoundPlayer soundPlayer = new SoundPlayer(new Wav(reader.BaseStream).ChangeVolume(factor).ToStream()))
|
||||
{
|
||||
soundPlayer.PlaySync();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static bool WaitWhile(Func<bool> check, int interval, int timeout = -1)
|
||||
{
|
||||
Stopwatch timer = Stopwatch.StartNew();
|
||||
|
|
|
@ -260,24 +260,24 @@ namespace ShareX.HelpersLib
|
|||
return null;
|
||||
}
|
||||
|
||||
private static Bitmap ApplyCutOutEffect(Bitmap bmp, AnchorStyles effectEdge, CutOutEffectType effectType, int effectSize, Color cutOutBackgroundColor)
|
||||
private static Bitmap ApplyCutOutEffect(Bitmap bmp, AnchorStyles effectEdge, CutOutEffectType effectType, int effectSize, Color backgroundColor)
|
||||
{
|
||||
switch (effectType)
|
||||
{
|
||||
case CutOutEffectType.None:
|
||||
return bmp;
|
||||
case CutOutEffectType.ZigZag:
|
||||
return TornEdges(bmp, effectSize, effectSize, effectEdge, false, false, cutOutBackgroundColor);
|
||||
return TornEdges(bmp, effectSize, effectSize, effectEdge, false, false, backgroundColor);
|
||||
case CutOutEffectType.TornEdge:
|
||||
return TornEdges(bmp, effectSize, effectSize * 2, effectEdge, false, true, cutOutBackgroundColor);
|
||||
return TornEdges(bmp, effectSize, effectSize * 2, effectEdge, false, true, backgroundColor);
|
||||
case CutOutEffectType.Wave:
|
||||
return WavyEdges(bmp, effectSize, effectSize * 5, effectEdge, cutOutBackgroundColor);
|
||||
return WavyEdges(bmp, effectSize, effectSize * 5, effectEdge, backgroundColor);
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static Bitmap CutOutBitmapMiddle(Bitmap bmp, Orientation orientation, int start, int size, CutOutEffectType effectType, int effectSize, Color cutOutBackgroundColor)
|
||||
public static Bitmap CutOutBitmapMiddle(Bitmap bmp, Orientation orientation, int start, int size, CutOutEffectType effectType, int effectSize, Color backgroundColor)
|
||||
{
|
||||
if (bmp != null && size > 0)
|
||||
{
|
||||
|
@ -290,7 +290,7 @@ namespace ShareX.HelpersLib
|
|||
: new Rectangle(0, 0, bmp.Width, Math.Min(start, bmp.Height));
|
||||
firstPart = CropBitmap(bmp, r);
|
||||
AnchorStyles effectEdge = orientation == Orientation.Horizontal ? AnchorStyles.Right : AnchorStyles.Bottom;
|
||||
firstPart = ApplyCutOutEffect(firstPart, effectEdge, effectType, effectSize, cutOutBackgroundColor);
|
||||
firstPart = ApplyCutOutEffect(firstPart, effectEdge, effectType, effectSize, backgroundColor);
|
||||
}
|
||||
|
||||
int cutDimension = orientation == Orientation.Horizontal ? bmp.Width : bmp.Height;
|
||||
|
@ -302,7 +302,7 @@ namespace ShareX.HelpersLib
|
|||
: new Rectangle(0, end, bmp.Width, bmp.Height - end);
|
||||
secondPart = CropBitmap(bmp, r);
|
||||
AnchorStyles effectEdge = orientation == Orientation.Horizontal ? AnchorStyles.Left : AnchorStyles.Top;
|
||||
secondPart = ApplyCutOutEffect(secondPart, effectEdge, effectType, effectSize, cutOutBackgroundColor);
|
||||
secondPart = ApplyCutOutEffect(secondPart, effectEdge, effectType, effectSize, backgroundColor);
|
||||
}
|
||||
|
||||
if (firstPart != null && secondPart != null)
|
||||
|
@ -1844,7 +1844,12 @@ namespace ShareX.HelpersLib
|
|||
}
|
||||
}
|
||||
|
||||
public static Bitmap WavyEdges(Bitmap bmp, int waveDepth, int waveRange, AnchorStyles sides, Color cutOutBackgroundColor)
|
||||
public static Bitmap WavyEdges(Bitmap bmp, int waveDepth, int waveRange, AnchorStyles sides)
|
||||
{
|
||||
return WavyEdges(bmp, waveDepth, waveRange, sides, Color.Transparent);
|
||||
}
|
||||
|
||||
public static Bitmap WavyEdges(Bitmap bmp, int waveDepth, int waveRange, AnchorStyles sides, Color backgroundColor)
|
||||
{
|
||||
if (waveDepth < 1 || waveRange < 1 || sides == AnchorStyles.None)
|
||||
{
|
||||
|
@ -1928,22 +1933,31 @@ namespace ShareX.HelpersLib
|
|||
}
|
||||
|
||||
Bitmap bmpResult = bmp.CreateEmptyBitmap();
|
||||
|
||||
using (bmp)
|
||||
using (Graphics g = Graphics.FromImage(bmpResult))
|
||||
using (TextureBrush brush = new TextureBrush(bmp))
|
||||
{
|
||||
if (backgroundColor.A > 0)
|
||||
{
|
||||
g.Clear(backgroundColor);
|
||||
}
|
||||
|
||||
g.SetHighQuality();
|
||||
g.PixelOffsetMode = PixelOffsetMode.Half;
|
||||
if (cutOutBackgroundColor.A > 0)
|
||||
{
|
||||
g.Clear(cutOutBackgroundColor);
|
||||
}
|
||||
|
||||
g.FillPolygon(brush, points.ToArray());
|
||||
}
|
||||
|
||||
return bmpResult;
|
||||
}
|
||||
|
||||
public static Bitmap TornEdges(Bitmap bmp, int tornDepth, int tornRange, AnchorStyles sides, bool curvedEdges, bool random, Color cutOutBackgroundColor)
|
||||
public static Bitmap TornEdges(Bitmap bmp, int tornDepth, int tornRange, AnchorStyles sides, bool curvedEdges, bool random)
|
||||
{
|
||||
return TornEdges(bmp, tornDepth, tornRange, sides, curvedEdges, random, Color.Transparent);
|
||||
}
|
||||
|
||||
public static Bitmap TornEdges(Bitmap bmp, int tornDepth, int tornRange, AnchorStyles sides, bool curvedEdges, bool random, Color backgroundColor)
|
||||
{
|
||||
if (tornDepth < 1 || tornRange < 1 || sides == AnchorStyles.None)
|
||||
{
|
||||
|
@ -2030,12 +2044,13 @@ namespace ShareX.HelpersLib
|
|||
using (Graphics g = Graphics.FromImage(bmpResult))
|
||||
using (TextureBrush brush = new TextureBrush(bmp))
|
||||
{
|
||||
if (backgroundColor.A > 0)
|
||||
{
|
||||
g.Clear(backgroundColor);
|
||||
}
|
||||
|
||||
g.SetHighQuality();
|
||||
g.PixelOffsetMode = PixelOffsetMode.Half;
|
||||
if (cutOutBackgroundColor.A > 0)
|
||||
{
|
||||
g.Clear(cutOutBackgroundColor);
|
||||
}
|
||||
|
||||
Point[] fillPoints = points.Distinct().ToArray();
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
using ShareX.HelpersLib;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Design;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ShareX.ImageEffectsLib
|
||||
|
@ -46,9 +45,6 @@ namespace ShareX.ImageEffectsLib
|
|||
[DefaultValue(true)]
|
||||
public bool CurvedEdges { get; set; }
|
||||
|
||||
[DefaultValue(typeof(Color), "Transparent"), Editor(typeof(MyColorEditor), typeof(UITypeEditor)), TypeConverter(typeof(MyColorConverter))]
|
||||
public Color CutOutBackgroundColor { get; set; }
|
||||
|
||||
public TornEdge()
|
||||
{
|
||||
this.ApplyDefaultPropertyValues();
|
||||
|
@ -56,7 +52,7 @@ namespace ShareX.ImageEffectsLib
|
|||
|
||||
public override Bitmap Apply(Bitmap bmp)
|
||||
{
|
||||
return ImageHelpers.TornEdges(bmp, Depth, Range, Sides, CurvedEdges, true, CutOutBackgroundColor);
|
||||
return ImageHelpers.TornEdges(bmp, Depth, Range, Sides, CurvedEdges, true);
|
||||
}
|
||||
|
||||
protected override string GetSummary()
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
using ShareX.HelpersLib;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Design;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ShareX.ImageEffectsLib
|
||||
|
@ -48,12 +47,9 @@ namespace ShareX.ImageEffectsLib
|
|||
this.ApplyDefaultPropertyValues();
|
||||
}
|
||||
|
||||
[DefaultValue(typeof(Color), "Transparent"), Editor(typeof(MyColorEditor), typeof(UITypeEditor)), TypeConverter(typeof(MyColorConverter))]
|
||||
public Color CutOutBackgroundColor { get; set; }
|
||||
|
||||
public override Bitmap Apply(Bitmap bmp)
|
||||
{
|
||||
return ImageHelpers.WavyEdges(bmp, Depth, Range, Sides, CutOutBackgroundColor);
|
||||
return ImageHelpers.WavyEdges(bmp, Depth, Range, Sides);
|
||||
}
|
||||
|
||||
protected override string GetSummary()
|
||||
|
|
|
@ -324,7 +324,7 @@ namespace ShareX.ScreenCaptureLib.Properties {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Cut out background color.
|
||||
/// Looks up a localized string similar to Cut out background color....
|
||||
/// </summary>
|
||||
internal static string CutOutBackgroundColor {
|
||||
get {
|
||||
|
|
|
@ -831,6 +831,6 @@ Would you like to save the changes before closing the image editor?</value>
|
|||
<value>..\Resources\control-record-green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="CutOutBackgroundColor" xml:space="preserve">
|
||||
<value>Cut out background color</value>
|
||||
<value>Cut out background color...</value>
|
||||
</data>
|
||||
</root>
|
|
@ -93,7 +93,7 @@ namespace ShareX.Setup
|
|||
private static string MakeAppxPath => Path.Combine(WindowsKitsDir, "x64", "makeappx.exe");
|
||||
|
||||
private const string InnoSetupCompilerPath = @"C:\Program Files (x86)\Inno Setup 6\ISCC.exe";
|
||||
private const string FFmpegDownloadURL = "https://github.com/ShareX/FFmpeg/releases/download/v6.1/ffmpeg-6.1-win64.zip";
|
||||
private const string FFmpegDownloadURL = "https://github.com/ShareX/FFmpeg/releases/download/v7.0/ffmpeg-7.0-win64.zip";
|
||||
|
||||
private static void Main(string[] args)
|
||||
{
|
||||
|
|
|
@ -89,7 +89,7 @@ namespace ShareX.UploadersLib.FileUploaders
|
|||
{
|
||||
OAuth2 = new GoogleOAuth2(oauth, this)
|
||||
{
|
||||
Scope = "https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/userinfo.profile"
|
||||
Scope = "https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/userinfo.profile"
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -197,6 +197,7 @@ namespace ShareX.UploadersLib
|
|||
this.cbOneDriveUseDirectLink = new System.Windows.Forms.CheckBox();
|
||||
this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl();
|
||||
this.tpGoogleDrive = new System.Windows.Forms.TabPage();
|
||||
this.btnGoogleDriveFolderIDHelp = new System.Windows.Forms.Button();
|
||||
this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthLoopbackControl();
|
||||
this.cbGoogleDriveSharedDrive = new System.Windows.Forms.ComboBox();
|
||||
this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox();
|
||||
|
@ -1756,6 +1757,7 @@ namespace ShareX.UploadersLib
|
|||
// tpGoogleDrive
|
||||
//
|
||||
this.tpGoogleDrive.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.tpGoogleDrive.Controls.Add(this.btnGoogleDriveFolderIDHelp);
|
||||
this.tpGoogleDrive.Controls.Add(this.oauth2GoogleDrive);
|
||||
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveSharedDrive);
|
||||
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveDirectLink);
|
||||
|
@ -1768,6 +1770,13 @@ namespace ShareX.UploadersLib
|
|||
resources.ApplyResources(this.tpGoogleDrive, "tpGoogleDrive");
|
||||
this.tpGoogleDrive.Name = "tpGoogleDrive";
|
||||
//
|
||||
// btnGoogleDriveFolderIDHelp
|
||||
//
|
||||
resources.ApplyResources(this.btnGoogleDriveFolderIDHelp, "btnGoogleDriveFolderIDHelp");
|
||||
this.btnGoogleDriveFolderIDHelp.Name = "btnGoogleDriveFolderIDHelp";
|
||||
this.btnGoogleDriveFolderIDHelp.UseVisualStyleBackColor = true;
|
||||
this.btnGoogleDriveFolderIDHelp.Click += new System.EventHandler(this.btnGoogleDriveFolderIDHelp_Click);
|
||||
//
|
||||
// oauth2GoogleDrive
|
||||
//
|
||||
resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive");
|
||||
|
@ -5495,5 +5504,6 @@ namespace ShareX.UploadersLib
|
|||
private OAuthLoopbackControl oauth2GoogleCloudStorage;
|
||||
private System.Windows.Forms.TextBox txtAzureStorageCacheControl;
|
||||
private System.Windows.Forms.Label lblAzureStorageCacheControl;
|
||||
private System.Windows.Forms.Button btnGoogleDriveFolderIDHelp;
|
||||
}
|
||||
}
|
|
@ -385,22 +385,25 @@ namespace ShareX.UploadersLib
|
|||
#region Google Drive
|
||||
|
||||
oauth2GoogleDrive.UpdateStatus(Config.GoogleDriveOAuth2Info, Config.GoogleDriveUserInfo);
|
||||
btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
|
||||
//btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
|
||||
|
||||
cbGoogleDriveIsPublic.Checked = Config.GoogleDriveIsPublic;
|
||||
cbGoogleDriveDirectLink.Checked = Config.GoogleDriveDirectLink;
|
||||
|
||||
/*
|
||||
cbGoogleDriveSharedDrive.Items.Clear();
|
||||
cbGoogleDriveSharedDrive.Items.Add(GoogleDrive.MyDrive);
|
||||
if (Config.GoogleDriveSelectedDrive?.id != GoogleDrive.MyDrive.id)
|
||||
{
|
||||
cbGoogleDriveSharedDrive.Items.Add(Config.GoogleDriveSelectedDrive);
|
||||
}
|
||||
*/
|
||||
|
||||
cbGoogleDriveUseFolder.Checked = Config.GoogleDriveUseFolder;
|
||||
txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder;
|
||||
btnGoogleDriveFolderIDHelp.Enabled = Config.GoogleDriveUseFolder;
|
||||
txtGoogleDriveFolderID.Text = Config.GoogleDriveFolderID;
|
||||
GoogleDriveSelectConfigDrive();
|
||||
//GoogleDriveSelectConfigDrive();
|
||||
|
||||
#endregion Google Drive
|
||||
|
||||
|
@ -1679,7 +1682,7 @@ namespace ShareX.UploadersLib
|
|||
}
|
||||
|
||||
oauth2GoogleDrive.UpdateStatus(Config.GoogleDriveOAuth2Info, Config.GoogleDriveUserInfo);
|
||||
btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
|
||||
//btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
|
||||
|
||||
this.ForceActivate();
|
||||
}
|
||||
|
@ -1704,6 +1707,7 @@ namespace ShareX.UploadersLib
|
|||
{
|
||||
Config.GoogleDriveUseFolder = cbGoogleDriveUseFolder.Checked;
|
||||
txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder;
|
||||
btnGoogleDriveFolderIDHelp.Enabled = Config.GoogleDriveUseFolder;
|
||||
}
|
||||
|
||||
private void txtGoogleDriveFolderID_TextChanged(object sender, EventArgs e)
|
||||
|
@ -1711,6 +1715,14 @@ namespace ShareX.UploadersLib
|
|||
Config.GoogleDriveFolderID = txtGoogleDriveFolderID.Text;
|
||||
}
|
||||
|
||||
private void btnGoogleDriveFolderIDHelp_Click(object sender, EventArgs e)
|
||||
{
|
||||
MessageBox.Show(@"Unfortunately, Google has forced us to use a more restrictive API scope, which does not allow us to see files or folders anymore. Because of this, we cannot provide folder listing and selection anymore.
|
||||
|
||||
However, there is a workaround. You can navigate to the Google Drive website in your browser, open the folder you want to upload to, and then copy the folder ID from the browser's address bar to here.",
|
||||
"ShareX - Google Drive", MessageBoxButtons.OK, MessageBoxIcon.Question);
|
||||
}
|
||||
|
||||
private void btnGoogleDriveRefreshFolders_Click(object sender, EventArgs e)
|
||||
{
|
||||
GoogleDriveRefreshFolders();
|
||||
|
|
|
@ -459,7 +459,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>oauthTwitter</value>
|
||||
</data>
|
||||
<data name=">>oauthTwitter.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauthTwitter.Parent" xml:space="preserve">
|
||||
<value>tpTwitter</value>
|
||||
|
@ -714,7 +714,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>oauth2Bitly</value>
|
||||
</data>
|
||||
<data name=">>oauth2Bitly.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauth2Bitly.Parent" xml:space="preserve">
|
||||
<value>tpBitly</value>
|
||||
|
@ -2349,7 +2349,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>eiFTP</value>
|
||||
</data>
|
||||
<data name=">>eiFTP.Type" xml:space="preserve">
|
||||
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>eiFTP.Parent" xml:space="preserve">
|
||||
<value>gbFTPAccount</value>
|
||||
|
@ -3555,7 +3555,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>oauth2Dropbox</value>
|
||||
</data>
|
||||
<data name=">>oauth2Dropbox.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauth2Dropbox.Parent" xml:space="preserve">
|
||||
<value>tpDropbox</value>
|
||||
|
@ -3714,7 +3714,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>oAuth2OneDrive</value>
|
||||
</data>
|
||||
<data name=">>oAuth2OneDrive.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oAuth2OneDrive.Parent" xml:space="preserve">
|
||||
<value>tpOneDrive</value>
|
||||
|
@ -3723,13 +3723,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>4</value>
|
||||
</data>
|
||||
<data name="tpOneDrive.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 58</value>
|
||||
<value>4, 220</value>
|
||||
</data>
|
||||
<data name="tpOneDrive.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="tpOneDrive.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>803, 507</value>
|
||||
<value>178, 0</value>
|
||||
</data>
|
||||
<data name="tpOneDrive.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
|
@ -3749,6 +3749,30 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<data name=">>tpOneDrive.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveFolderIDHelp.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>424, 174</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveFolderIDHelp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>24, 24</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveFolderIDHelp.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveFolderIDHelp.Text" xml:space="preserve">
|
||||
<value>?</value>
|
||||
</data>
|
||||
<data name=">>btnGoogleDriveFolderIDHelp.Name" xml:space="preserve">
|
||||
<value>btnGoogleDriveFolderIDHelp</value>
|
||||
</data>
|
||||
<data name=">>btnGoogleDriveFolderIDHelp.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnGoogleDriveFolderIDHelp.Parent" xml:space="preserve">
|
||||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>btnGoogleDriveFolderIDHelp.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="oauth2GoogleDrive.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>8, 8</value>
|
||||
</data>
|
||||
|
@ -3762,22 +3786,25 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>oauth2GoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>oauth2GoogleDrive.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauth2GoogleDrive.Parent" xml:space="preserve">
|
||||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>oauth2GoogleDrive.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveSharedDrive.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>16, 136</value>
|
||||
<value>16, 208</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveSharedDrive.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>256, 21</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveSharedDrive.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveSharedDrive.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>cbGoogleDriveSharedDrive.Name" xml:space="preserve">
|
||||
<value>cbGoogleDriveSharedDrive</value>
|
||||
|
@ -3789,7 +3816,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>cbGoogleDriveSharedDrive.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveDirectLink.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
|
@ -3798,7 +3825,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveDirectLink.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>16, 111</value>
|
||||
<value>16, 112</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveDirectLink.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>93, 17</value>
|
||||
|
@ -3819,7 +3846,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>cbGoogleDriveDirectLink.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveUseFolder.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
|
@ -3828,13 +3855,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveUseFolder.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>16, 167</value>
|
||||
<value>16, 136</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveUseFolder.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>165, 17</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveUseFolder.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveUseFolder.Text" xml:space="preserve">
|
||||
<value>Upload files to selected folder</value>
|
||||
|
@ -3849,16 +3876,16 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>cbGoogleDriveUseFolder.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="txtGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>16, 208</value>
|
||||
<value>16, 176</value>
|
||||
</data>
|
||||
<data name="txtGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 20</value>
|
||||
<value>400, 20</value>
|
||||
</data>
|
||||
<data name="txtGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>txtGoogleDriveFolderID.Name" xml:space="preserve">
|
||||
<value>txtGoogleDriveFolderID</value>
|
||||
|
@ -3870,7 +3897,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>txtGoogleDriveFolderID.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="lblGoogleDriveFolderID.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
|
@ -3879,13 +3906,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="lblGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 191</value>
|
||||
<value>13, 160</value>
|
||||
</data>
|
||||
<data name="lblGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 13</value>
|
||||
</data>
|
||||
<data name="lblGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="lblGoogleDriveFolderID.Text" xml:space="preserve">
|
||||
<value>Folder ID:</value>
|
||||
|
@ -3900,7 +3927,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>lblGoogleDriveFolderID.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="chGoogleDriveTitle.Text" xml:space="preserve">
|
||||
<value>Title</value>
|
||||
|
@ -3915,25 +3942,28 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>228</value>
|
||||
</data>
|
||||
<data name="lvGoogleDriveFoldersList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>16, 232</value>
|
||||
<value>16, 240</value>
|
||||
</data>
|
||||
<data name="lvGoogleDriveFoldersList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 296</value>
|
||||
</data>
|
||||
<data name="lvGoogleDriveFoldersList.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="lvGoogleDriveFoldersList.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>lvGoogleDriveFoldersList.Name" xml:space="preserve">
|
||||
<value>lvGoogleDriveFoldersList</value>
|
||||
</data>
|
||||
<data name=">>lvGoogleDriveFoldersList.Type" xml:space="preserve">
|
||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>lvGoogleDriveFoldersList.Parent" xml:space="preserve">
|
||||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>lvGoogleDriveFoldersList.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveRefreshFolders.Enabled" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
|
@ -3942,17 +3972,20 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveRefreshFolders.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>280, 135</value>
|
||||
<value>280, 208</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveRefreshFolders.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 23</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveRefreshFolders.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveRefreshFolders.Text" xml:space="preserve">
|
||||
<value>Refresh folders list</value>
|
||||
</data>
|
||||
<data name="btnGoogleDriveRefreshFolders.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>btnGoogleDriveRefreshFolders.Name" xml:space="preserve">
|
||||
<value>btnGoogleDriveRefreshFolders</value>
|
||||
</data>
|
||||
|
@ -3963,7 +3996,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>btnGoogleDriveRefreshFolders.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveIsPublic.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
|
@ -3975,13 +4008,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>16, 88</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveIsPublic.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>106, 17</value>
|
||||
<value>90, 17</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveIsPublic.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="cbGoogleDriveIsPublic.Text" xml:space="preserve">
|
||||
<value>Is public upload?</value>
|
||||
<value>Public upload</value>
|
||||
</data>
|
||||
<data name=">>cbGoogleDriveIsPublic.Name" xml:space="preserve">
|
||||
<value>cbGoogleDriveIsPublic</value>
|
||||
|
@ -3993,16 +4026,16 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>tpGoogleDrive</value>
|
||||
</data>
|
||||
<data name=">>cbGoogleDriveIsPublic.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="tpGoogleDrive.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 220</value>
|
||||
<value>4, 58</value>
|
||||
</data>
|
||||
<data name="tpGoogleDrive.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="tpGoogleDrive.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>178, 0</value>
|
||||
<value>803, 507</value>
|
||||
</data>
|
||||
<data name="tpGoogleDrive.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
|
@ -4392,7 +4425,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>lvBoxFolders</value>
|
||||
</data>
|
||||
<data name=">>lvBoxFolders.Type" xml:space="preserve">
|
||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>lvBoxFolders.Parent" xml:space="preserve">
|
||||
<value>tpBox</value>
|
||||
|
@ -4473,7 +4506,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>oauth2Box</value>
|
||||
</data>
|
||||
<data name=">>oauth2Box.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauth2Box.Parent" xml:space="preserve">
|
||||
<value>tpBox</value>
|
||||
|
@ -5352,7 +5385,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>oauth2GoogleCloudStorage</value>
|
||||
</data>
|
||||
<data name=">>oauth2GoogleCloudStorage.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauth2GoogleCloudStorage.Parent" xml:space="preserve">
|
||||
<value>tpGoogleCloudStorage</value>
|
||||
|
@ -7824,7 +7857,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>atcSendSpaceAccountType</value>
|
||||
</data>
|
||||
<data name=">>atcSendSpaceAccountType.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>atcSendSpaceAccountType.Parent" xml:space="preserve">
|
||||
<value>tpSendSpace</value>
|
||||
|
@ -8193,7 +8226,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>oAuthJira</value>
|
||||
</data>
|
||||
<data name=">>oAuthJira.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oAuthJira.Parent" xml:space="preserve">
|
||||
<value>tpJira</value>
|
||||
|
@ -8772,7 +8805,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
|
|||
<value>lvSeafileLibraries</value>
|
||||
</data>
|
||||
<data name=">>lvSeafileLibraries.Type" xml:space="preserve">
|
||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>lvSeafileLibraries.Parent" xml:space="preserve">
|
||||
<value>tpSeafile</value>
|
||||
|
@ -10531,7 +10564,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>oauth2YouTube</value>
|
||||
</data>
|
||||
<data name=">>oauth2YouTube.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauth2YouTube.Parent" xml:space="preserve">
|
||||
<value>tpYouTube</value>
|
||||
|
@ -12265,7 +12298,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>oAuth2Gist</value>
|
||||
</data>
|
||||
<data name=">>oAuth2Gist.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oAuth2Gist.Parent" xml:space="preserve">
|
||||
<value>tpGist</value>
|
||||
|
@ -12904,7 +12937,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>atcImgurAccountType</value>
|
||||
</data>
|
||||
<data name=">>atcImgurAccountType.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>atcImgurAccountType.Parent" xml:space="preserve">
|
||||
<value>tpImgur</value>
|
||||
|
@ -12925,7 +12958,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>oauth2Imgur</value>
|
||||
</data>
|
||||
<data name=">>oauth2Imgur.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauth2Imgur.Parent" xml:space="preserve">
|
||||
<value>tpImgur</value>
|
||||
|
@ -12961,7 +12994,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>lvImgurAlbumList</value>
|
||||
</data>
|
||||
<data name=">>lvImgurAlbumList.Type" xml:space="preserve">
|
||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>lvImgurAlbumList.Parent" xml:space="preserve">
|
||||
<value>tpImgur</value>
|
||||
|
@ -13360,7 +13393,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>oauthFlickr</value>
|
||||
</data>
|
||||
<data name=">>oauthFlickr.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauthFlickr.Parent" xml:space="preserve">
|
||||
<value>tpFlickr</value>
|
||||
|
@ -13897,7 +13930,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>oauth2GooglePhotos</value>
|
||||
</data>
|
||||
<data name=">>oauth2GooglePhotos.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>oauth2GooglePhotos.Parent" xml:space="preserve">
|
||||
<value>tpGooglePhotos</value>
|
||||
|
@ -14557,7 +14590,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>tttvMain</value>
|
||||
</data>
|
||||
<data name=">>tttvMain.Type" xml:space="preserve">
|
||||
<value>ShareX.HelpersLib.TabToTreeView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.HelpersLib.TabToTreeView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>tttvMain.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
|
@ -14578,7 +14611,7 @@ Using an encrypted library disables sharing.</value>
|
|||
<value>actRapidShareAccountType</value>
|
||||
</data>
|
||||
<data name=">>actRapidShareAccountType.Type" xml:space="preserve">
|
||||
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<EmbeddedResource Include="APIKeys\jira_sharex.pfx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentFTP" Version="49.0.2" />
|
||||
<PackageReference Include="FluentFTP" Version="50.0.1" />
|
||||
<PackageReference Include="MegaApiClient" Version="1.10.4" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="SSH.NET" Version="2024.0.0" />
|
||||
|
|
|
@ -97,6 +97,8 @@
|
|||
this.cbDisableNotifications = new System.Windows.Forms.CheckBox();
|
||||
this.cbPlaySoundAfterCapture = new System.Windows.Forms.CheckBox();
|
||||
this.cbPlaySoundAfterUpload = new System.Windows.Forms.CheckBox();
|
||||
this.nudSoundAfterUploadVolume = new System.Windows.Forms.NumericUpDown();
|
||||
this.lblSoundAfterUploadVolume = new System.Windows.Forms.Label();
|
||||
this.tpImage = new System.Windows.Forms.TabPage();
|
||||
this.tcImage = new System.Windows.Forms.TabControl();
|
||||
this.tpQuality = new System.Windows.Forms.TabPage();
|
||||
|
@ -314,6 +316,7 @@
|
|||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowSizeWidth)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowFadeDuration)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowDuration)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudSoundAfterUploadVolume)).BeginInit();
|
||||
this.tpImage.SuspendLayout();
|
||||
this.tcImage.SuspendLayout();
|
||||
this.tpQuality.SuspendLayout();
|
||||
|
@ -627,6 +630,8 @@
|
|||
this.tpNotifications.Controls.Add(this.cbDisableNotifications);
|
||||
this.tpNotifications.Controls.Add(this.cbPlaySoundAfterCapture);
|
||||
this.tpNotifications.Controls.Add(this.cbPlaySoundAfterUpload);
|
||||
this.tpNotifications.Controls.Add(this.nudSoundAfterUploadVolume);
|
||||
this.tpNotifications.Controls.Add(this.lblSoundAfterUploadVolume);
|
||||
resources.ApplyResources(this.tpNotifications, "tpNotifications");
|
||||
this.tpNotifications.Name = "tpNotifications";
|
||||
this.tpNotifications.UseVisualStyleBackColor = true;
|
||||
|
@ -905,7 +910,20 @@
|
|||
this.cbPlaySoundAfterUpload.Name = "cbPlaySoundAfterUpload";
|
||||
this.cbPlaySoundAfterUpload.UseVisualStyleBackColor = true;
|
||||
this.cbPlaySoundAfterUpload.CheckedChanged += new System.EventHandler(this.cbPlaySoundAfterUpload_CheckedChanged);
|
||||
//
|
||||
//
|
||||
// nudSoundAfterUploadVolume
|
||||
//
|
||||
resources.ApplyResources(this.nudSoundAfterUploadVolume, "nudSoundAfterUploadVolume");
|
||||
this.nudSoundAfterUploadVolume.Maximum = new decimal(new int[] { 200, 0, 0, 0 });
|
||||
this.nudSoundAfterUploadVolume.Name = "nudSoundAfterUploadVolume";
|
||||
this.nudSoundAfterUploadVolume.Value = new decimal(new int[] { 100, 0, 0, 0 });
|
||||
this.nudSoundAfterUploadVolume.ValueChanged += new System.EventHandler(this.nudSoundAfterUploadVolume_ValueChanged);
|
||||
//
|
||||
// lblSoundAfterUploadVolume
|
||||
//
|
||||
resources.ApplyResources(this.lblSoundAfterUploadVolume, "lblSoundAfterUploadVolume");
|
||||
this.lblSoundAfterUploadVolume.Name = "lblSoundAfterUploadVolume";
|
||||
//
|
||||
// tpImage
|
||||
//
|
||||
this.tpImage.BackColor = System.Drawing.SystemColors.Window;
|
||||
|
@ -2652,6 +2670,7 @@
|
|||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowSizeWidth)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowFadeDuration)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowDuration)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudSoundAfterUploadVolume)).EndInit();
|
||||
this.tpImage.ResumeLayout(false);
|
||||
this.tcImage.ResumeLayout(false);
|
||||
this.tpQuality.ResumeLayout(false);
|
||||
|
@ -2811,6 +2830,8 @@
|
|||
private System.Windows.Forms.TabPage tpGeneral;
|
||||
private System.Windows.Forms.CheckBox cbPlaySoundAfterCapture;
|
||||
private System.Windows.Forms.CheckBox cbPlaySoundAfterUpload;
|
||||
private System.Windows.Forms.NumericUpDown nudSoundAfterUploadVolume;
|
||||
private System.Windows.Forms.Label lblSoundAfterUploadVolume;
|
||||
private System.Windows.Forms.CheckBox cbOverrideGeneralSettings;
|
||||
private System.Windows.Forms.TabPage tpTools;
|
||||
private System.Windows.Forms.NumericUpDown nudScreenRecorderStartDelay;
|
||||
|
|
|
@ -190,7 +190,10 @@ namespace ShareX
|
|||
#region Notifications
|
||||
|
||||
cbPlaySoundAfterCapture.Checked = TaskSettings.GeneralSettings.PlaySoundAfterCapture;
|
||||
cbPlaySoundAfterUpload.Checked = TaskSettings.GeneralSettings.PlaySoundAfterUpload;
|
||||
nudSoundAfterUploadVolume.Enabled = cbPlaySoundAfterUpload.Checked = TaskSettings.GeneralSettings.PlaySoundAfterUpload;
|
||||
nudSoundAfterUploadVolume.SetValue(TaskSettings.GeneralSettings.SoundAfterUploadVolume);
|
||||
nudSoundAfterUploadVolume.Maximum = 200;
|
||||
nudSoundAfterUploadVolume.Minimum = 0;
|
||||
cbShowToastNotificationAfterTaskCompleted.Checked = TaskSettings.GeneralSettings.ShowToastNotificationAfterTaskCompleted;
|
||||
gbToastWindow.Enabled = TaskSettings.GeneralSettings.ShowToastNotificationAfterTaskCompleted;
|
||||
nudToastWindowDuration.SetValue((decimal)TaskSettings.GeneralSettings.ToastWindowDuration);
|
||||
|
@ -825,6 +828,12 @@ namespace ShareX
|
|||
private void cbPlaySoundAfterUpload_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
TaskSettings.GeneralSettings.PlaySoundAfterUpload = cbPlaySoundAfterUpload.Checked;
|
||||
nudSoundAfterUploadVolume.Enabled = cbPlaySoundAfterUpload.Checked;
|
||||
}
|
||||
|
||||
private void nudSoundAfterUploadVolume_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
TaskSettings.GeneralSettings.SoundAfterUploadVolume = (int)nudSoundAfterUploadVolume.Value;
|
||||
}
|
||||
|
||||
private void cbShowToastNotificationAfterTaskCompleted_CheckedChanged(object sender, EventArgs e)
|
||||
|
|
|
@ -1671,6 +1671,57 @@
|
|||
<data name=">>cbPlaySoundAfterUpload.ZOrder" xml:space="preserve">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="nudSoundAfterUploadVolume.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>248, 29</value>
|
||||
</data>
|
||||
<data name="nudSoundAfterUploadVolume.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>54, 20</value>
|
||||
</data>
|
||||
<data name="nudSoundAfterUploadVolume.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>15</value>
|
||||
</data>
|
||||
<data name=">>nudSoundAfterUploadVolume.Name" xml:space="preserve">
|
||||
<value>nudSoundAfterUploadVolume</value>
|
||||
</data>
|
||||
<data name=">>nudSoundAfterUploadVolume.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>nudSoundAfterUploadVolume.Parent" xml:space="preserve">
|
||||
<value>tpNotifications</value>
|
||||
</data>
|
||||
<data name=">>nudSoundAfterUploadVolume.ZOrder" xml:space="preserve">
|
||||
<value>15</value>
|
||||
</data>
|
||||
<data name="lblSoundAfterUploadVolume.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="lblSoundAfterUploadVolume.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="lblSoundAfterUploadVolume.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>308, 33</value>
|
||||
</data>
|
||||
<data name="lblSoundAfterUploadVolume.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>15, 13</value>
|
||||
</data>
|
||||
<data name="lblSoundAfterUploadVolume.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>19</value>
|
||||
</data>
|
||||
<data name="lblSoundAfterUploadVolume.Text" xml:space="preserve">
|
||||
<value>%</value>
|
||||
</data>
|
||||
<data name=">>lblSoundAfterUploadVolume.Name" xml:space="preserve">
|
||||
<value>lblSoundAfterUploadVolume</value>
|
||||
</data>
|
||||
<data name=">>lblSoundAfterUploadVolume.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>lblSoundAfterUploadVolume.Parent" xml:space="preserve">
|
||||
<value>tpNotifications</value>
|
||||
</data>
|
||||
<data name=">>lblSoundAfterUploadVolume.ZOrder" xml:space="preserve">
|
||||
<value>16</value>
|
||||
</data>
|
||||
<data name="tpNotifications.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 22</value>
|
||||
</data>
|
||||
|
|
|
@ -1550,13 +1550,35 @@ namespace ShareX
|
|||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
var volume = taskSettings.GeneralSettings.SoundAfterUploadVolume;
|
||||
|
||||
if (taskSettings.GeneralSettings.UseCustomTaskCompletedSound && !string.IsNullOrEmpty(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath))
|
||||
{
|
||||
Helpers.PlaySoundAsync(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath);
|
||||
switch (volume)
|
||||
{
|
||||
case var i when volume <= 0:
|
||||
return;
|
||||
case 100:
|
||||
Helpers.PlaySoundAsync(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath);
|
||||
break;
|
||||
default:
|
||||
Helpers.PlaySoundAsync(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath, volume / 100f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Helpers.PlaySoundAsync(Resources.TaskCompletedSound);
|
||||
switch (volume)
|
||||
{
|
||||
case var i when volume <= 0:
|
||||
return;
|
||||
case 100:
|
||||
Helpers.PlaySoundAsync(Resources.TaskCompletedSound);
|
||||
break;
|
||||
default:
|
||||
Helpers.PlaySoundAsync(Resources.TaskCompletedSound, volume / 100f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -308,6 +308,7 @@ namespace ShareX
|
|||
|
||||
public bool PlaySoundAfterCapture = true;
|
||||
public bool PlaySoundAfterUpload = true;
|
||||
public int SoundAfterUploadVolume = 100;
|
||||
public bool ShowToastNotificationAfterTaskCompleted = true;
|
||||
public float ToastWindowDuration = 3f;
|
||||
public float ToastWindowFadeDuration = 1f;
|
||||
|
|
Loading…
Reference in New Issue