ShareX/ShareX/TaskHelpers.cs

913 lines
35 KiB
C#
Raw Normal View History

2013-11-03 23:53:49 +13:00
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
2015-08-13 13:07:38 +12:00
Copyright (c) 2007-2015 ShareX Team
2013-11-03 23:53:49 +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)
2014-12-11 09:25:20 +13:00
using ShareX.HelpersLib;
using ShareX.ImageEffectsLib;
2015-08-25 04:38:35 +12:00
using ShareX.IRCLib;
2015-08-04 23:47:34 +12:00
using ShareX.MediaLib;
using ShareX.Properties;
2014-12-11 12:19:28 +13:00
using ShareX.ScreenCaptureLib;
using ShareX.UploadersLib;
using ShareX.UploadersLib.HelperClasses;
2014-12-18 07:24:27 +13:00
using System;
2013-11-03 23:53:49 +13:00
using System.Collections.Generic;
2014-05-03 05:56:51 +12:00
using System.Diagnostics;
2013-11-03 23:53:49 +13:00
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
2013-11-03 23:53:49 +13:00
using System.Windows.Forms;
namespace ShareX
{
public static class TaskHelpers
{
public static ImageData PrepareImage(Image img, TaskSettings taskSettings)
{
ImageData imageData = new ImageData();
imageData.ImageFormat = taskSettings.ImageSettings.ImageFormat;
2013-11-03 23:53:49 +13:00
if (taskSettings.ImageSettings.ImageFormat == EImageFormat.JPEG)
2013-11-03 23:53:49 +13:00
{
img = ImageHelpers.FillBackground(img, Color.White);
2013-11-03 23:53:49 +13:00
}
imageData.ImageStream = SaveImage(img, taskSettings.ImageSettings.ImageFormat, taskSettings);
2013-11-03 23:53:49 +13:00
int sizeLimit = taskSettings.ImageSettings.ImageSizeLimit * 1000;
2013-11-03 23:53:49 +13:00
if (taskSettings.ImageSettings.ImageFormat != taskSettings.ImageSettings.ImageFormat2 && sizeLimit > 0 && imageData.ImageStream.Length > sizeLimit)
2013-11-03 23:53:49 +13:00
{
if (taskSettings.ImageSettings.ImageFormat2 == EImageFormat.JPEG)
2013-11-03 23:53:49 +13:00
{
img = ImageHelpers.FillBackground(img, Color.White);
2013-11-03 23:53:49 +13:00
}
imageData.ImageStream = SaveImage(img, taskSettings.ImageSettings.ImageFormat2, taskSettings);
imageData.ImageFormat = taskSettings.ImageSettings.ImageFormat2;
2013-11-03 23:53:49 +13:00
}
return imageData;
}
public static string CreateThumbnail(Image img, string folder, string filename, TaskSettings taskSettings)
{
if ((taskSettings.ImageSettings.ThumbnailWidth > 0 || taskSettings.ImageSettings.ThumbnailHeight > 0) && (!taskSettings.ImageSettings.ThumbnailCheckSize ||
(img.Width > taskSettings.ImageSettings.ThumbnailWidth && img.Height > taskSettings.ImageSettings.ThumbnailHeight)))
{
string thumbnailFileName = Path.GetFileNameWithoutExtension(filename) + taskSettings.ImageSettings.ThumbnailName + ".jpg";
2014-10-19 10:48:47 +13:00
string thumbnailFilePath = CheckFilePath(folder, thumbnailFileName, taskSettings);
if (!string.IsNullOrEmpty(thumbnailFilePath))
{
Image thumbImage = null;
try
{
thumbImage = (Image)img.Clone();
thumbImage = new Resize
{
Width = taskSettings.ImageSettings.ThumbnailWidth,
Height = taskSettings.ImageSettings.ThumbnailHeight
}.Apply(thumbImage);
thumbImage = ImageHelpers.FillBackground(thumbImage, Color.White);
thumbImage.SaveJPG(thumbnailFilePath, 90);
return thumbnailFilePath;
}
2014-12-18 07:24:27 +13:00
catch (Exception e)
{
DebugHelper.WriteException(e);
}
finally
{
if (thumbImage != null)
{
thumbImage.Dispose();
}
}
}
}
return null;
}
2013-11-03 23:53:49 +13:00
public static MemoryStream SaveImage(Image img, EImageFormat imageFormat, TaskSettings taskSettings)
{
MemoryStream stream = new MemoryStream();
switch (imageFormat)
{
case EImageFormat.PNG:
img.Save(stream, ImageFormat.Png);
break;
case EImageFormat.JPEG:
img.SaveJPG(stream, taskSettings.ImageSettings.ImageJPEGQuality);
2013-11-03 23:53:49 +13:00
break;
case EImageFormat.GIF:
img.SaveGIF(stream, taskSettings.ImageSettings.ImageGIFQuality);
2013-11-03 23:53:49 +13:00
break;
case EImageFormat.BMP:
img.Save(stream, ImageFormat.Bmp);
break;
case EImageFormat.TIFF:
img.Save(stream, ImageFormat.Tiff);
break;
}
return stream;
}
public static string GetFilename(TaskSettings taskSettings, string extension = "")
{
NameParser nameParser = new NameParser(NameParserType.FileName)
{
AutoIncrementNumber = Program.Settings.NameParserAutoIncrementNumber,
MaxNameLength = taskSettings.AdvancedSettings.NamePatternMaxLength,
MaxTitleLength = taskSettings.AdvancedSettings.NamePatternMaxTitleLength,
CustomTimeZone = taskSettings.UploadSettings.UseCustomTimeZone ? taskSettings.UploadSettings.CustomTimeZone : null
2013-11-03 23:53:49 +13:00
};
string filename = nameParser.Parse(taskSettings.UploadSettings.NameFormatPattern);
2013-11-03 23:53:49 +13:00
if (!string.IsNullOrEmpty(extension))
{
filename += "." + extension.TrimStart('.');
}
Program.Settings.NameParserAutoIncrementNumber = nameParser.AutoIncrementNumber;
return filename;
}
public static string GetImageFilename(TaskSettings taskSettings, Image image)
{
string filename;
NameParser nameParser = new NameParser(NameParserType.FileName)
{
Picture = image,
AutoIncrementNumber = Program.Settings.NameParserAutoIncrementNumber,
MaxNameLength = taskSettings.AdvancedSettings.NamePatternMaxLength,
MaxTitleLength = taskSettings.AdvancedSettings.NamePatternMaxTitleLength,
CustomTimeZone = taskSettings.UploadSettings.UseCustomTimeZone ? taskSettings.UploadSettings.CustomTimeZone : null
};
2013-11-03 23:53:49 +13:00
ImageTag imageTag = image.Tag as ImageTag;
if (imageTag != null)
{
nameParser.WindowText = imageTag.ActiveWindowTitle;
nameParser.ProcessName = imageTag.ActiveProcessName;
2013-11-03 23:53:49 +13:00
}
if (string.IsNullOrEmpty(nameParser.WindowText))
{
filename = nameParser.Parse(taskSettings.UploadSettings.NameFormatPattern) + ".bmp";
2013-11-03 23:53:49 +13:00
}
else
{
filename = nameParser.Parse(taskSettings.UploadSettings.NameFormatPatternActiveWindow) + ".bmp";
2013-11-03 23:53:49 +13:00
}
Program.Settings.NameParserAutoIncrementNumber = nameParser.AutoIncrementNumber;
return filename;
}
public static bool ShowAfterCaptureForm(TaskSettings taskSettings, Image img = null)
{
if (taskSettings.GeneralSettings.ShowAfterCaptureTasksForm)
{
using (AfterCaptureForm afterCaptureForm = new AfterCaptureForm(img, taskSettings))
{
afterCaptureForm.ShowDialog();
switch (afterCaptureForm.Result)
{
case AfterCaptureFormResult.Continue:
taskSettings.AfterCaptureJob = afterCaptureForm.AfterCaptureTasks;
break;
case AfterCaptureFormResult.Copy:
taskSettings.AfterCaptureJob = AfterCaptureTasks.CopyImageToClipboard;
break;
case AfterCaptureFormResult.Cancel:
if (img != null) img.Dispose();
return false;
}
}
}
return true;
}
public static void AnnotateImage(string filePath)
{
AnnotateImage(null, filePath);
}
public static Image AnnotateImage(Image img, string imgPath)
2013-11-03 23:53:49 +13:00
{
return ImageHelpers.AnnotateImage(img, imgPath, !Program.IsSandbox, Program.PersonalPath,
2013-11-03 23:53:49 +13:00
x => Program.MainForm.InvokeSafe(() => ClipboardHelpers.CopyImage(x)),
x => Program.MainForm.InvokeSafe(() => UploadManager.UploadImage(x)),
(x, filePath) => Program.MainForm.InvokeSafe(() => ImageHelpers.SaveImage(x, filePath)),
(x, filePath) =>
{
string newFilePath = null;
Program.MainForm.InvokeSafe(() => newFilePath = ImageHelpers.SaveImageFileDialog(x, filePath));
return newFilePath;
},
2014-10-19 10:48:47 +13:00
x => Program.MainForm.InvokeSafe(() => PrintImage(x)));
}
public static void PrintImage(Image img)
{
if (Program.Settings.DontShowPrintSettingsDialog)
{
using (PrintHelper printHelper = new PrintHelper(img))
{
printHelper.Settings = Program.Settings.PrintSettings;
printHelper.Print();
}
}
else
{
using (PrintForm printForm = new PrintForm(img, Program.Settings.PrintSettings))
{
printForm.ShowDialog();
}
}
2013-11-03 23:53:49 +13:00
}
public static Image AddImageEffects(Image img, TaskSettings taskSettings)
{
if (taskSettings.ImageSettings.ShowImageEffectsWindowAfterCapture)
2013-11-03 23:53:49 +13:00
{
using (ImageEffectsForm imageEffectsForm = new ImageEffectsForm(img, taskSettings.ImageSettings.ImageEffects))
2013-11-03 23:53:49 +13:00
{
if (imageEffectsForm.ShowDialog() == DialogResult.OK)
{
taskSettings.ImageSettings.ImageEffects = imageEffectsForm.Effects;
2013-11-03 23:53:49 +13:00
}
}
}
using (img)
{
return ImageEffectManager.ApplyEffects(img, taskSettings.ImageSettings.ImageEffects);
2013-11-03 23:53:49 +13:00
}
}
public static void AddDefaultExternalPrograms(TaskSettings taskSettings)
{
if (taskSettings.ExternalPrograms == null)
{
taskSettings.ExternalPrograms = new List<ExternalProgram>();
}
AddExternalProgramFromRegistry(taskSettings, "Paint", "mspaint.exe");
AddExternalProgramFromRegistry(taskSettings, "Paint.NET", "PaintDotNet.exe");
AddExternalProgramFromRegistry(taskSettings, "Adobe Photoshop", "Photoshop.exe");
AddExternalProgramFromRegistry(taskSettings, "IrfanView", "i_view32.exe");
AddExternalProgramFromRegistry(taskSettings, "XnView", "xnview.exe");
AddExternalProgramFromFile(taskSettings, "OptiPNG", "optipng.exe");
}
private static void AddExternalProgramFromFile(TaskSettings taskSettings, string name, string filename, string args = "")
{
if (!taskSettings.ExternalPrograms.Exists(x => x.Name == name))
2013-11-03 23:53:49 +13:00
{
if (File.Exists(filename))
{
DebugHelper.WriteLine("Found program: " + filename);
taskSettings.ExternalPrograms.Add(new ExternalProgram(name, filename, args));
2013-11-03 23:53:49 +13:00
}
}
}
private static void AddExternalProgramFromRegistry(TaskSettings taskSettings, string name, string filename)
{
if (!taskSettings.ExternalPrograms.Exists(x => x.Name == name))
2013-11-03 23:53:49 +13:00
{
ExternalProgram externalProgram = RegistryHelpers.FindProgram(name, filename);
if (externalProgram != null)
{
taskSettings.ExternalPrograms.Add(externalProgram);
2013-11-03 23:53:49 +13:00
}
}
}
public static bool SelectRegion(out Rectangle rect, TaskSettings taskSettings)
2013-11-03 23:53:49 +13:00
{
using (RectangleRegion surface = new RectangleRegion())
{
surface.Config = taskSettings.CaptureSettings.SurfaceOptions;
surface.Config.ShowTips = false;
surface.Config.QuickCrop = true;
surface.Config.ForceWindowCapture = true;
2013-11-03 23:53:49 +13:00
surface.Prepare();
surface.ShowDialog();
if (surface.Result == SurfaceResult.Region)
{
if (surface.AreaManager.IsCurrentAreaValid)
{
rect = CaptureHelpers.ClientToScreen(surface.AreaManager.CurrentArea);
return true;
}
}
else if (surface.Result == SurfaceResult.Fullscreen)
{
rect = CaptureHelpers.GetScreenBounds();
return true;
}
else if (surface.Result == SurfaceResult.Monitor)
{
Screen[] screens = Screen.AllScreens;
if (surface.MonitorIndex < screens.Length)
{
Screen screen = screens[surface.MonitorIndex];
rect = screen.Bounds;
return true;
}
}
else if (surface.Result == SurfaceResult.ActiveMonitor)
{
rect = CaptureHelpers.GetActiveScreenBounds();
return true;
}
2013-11-03 23:53:49 +13:00
}
rect = Rectangle.Empty;
return false;
}
public static PointInfo SelectPointColor()
2013-11-03 23:53:49 +13:00
{
2014-11-27 06:48:25 +13:00
using (RectangleRegion surface = new RectangleRegion())
2013-11-03 23:53:49 +13:00
{
2015-05-13 05:02:51 +12:00
surface.ScreenColorPickerMode = true;
surface.Config.UseDimming = false;
2015-05-13 05:02:51 +12:00
surface.Config.ShowInfo = true;
surface.Config.ShowMagnifier = true;
surface.Config.ShowTips = false;
2013-11-03 23:53:49 +13:00
surface.Prepare();
surface.ShowDialog();
if (surface.Result == SurfaceResult.Region)
{
PointInfo pointInfo = new PointInfo();
pointInfo.Position = surface.CurrentPosition;
pointInfo.Color = surface.CurrentColor;
2013-11-03 23:53:49 +13:00
return pointInfo;
}
}
return null;
}
public static Icon GetProgressIcon(int percentage)
{
using (Bitmap bmp = new Bitmap(16, 16))
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.Black);
int width = (int)(16 * (percentage / 100f));
if (width > 0)
{
using (Brush brush = new LinearGradientBrush(new Rectangle(0, 0, width, 16), Color.DarkBlue, Color.DodgerBlue, LinearGradientMode.Vertical))
{
g.FillRectangle(brush, 0, 0, width, 16);
}
}
using (Font font = new Font("Arial", 11, GraphicsUnit.Pixel))
2013-11-03 23:53:49 +13:00
using (StringFormat sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center })
{
2014-07-20 07:10:25 +12:00
g.DrawString(percentage.ToString(), font, Brushes.White, 8, 8, sf);
2013-11-03 23:53:49 +13:00
}
2013-11-11 19:28:23 +13:00
g.DrawRectangleProper(Pens.WhiteSmoke, 0, 0, 16, 16);
2013-11-03 23:53:49 +13:00
return Icon.FromHandle(bmp.GetHicon());
}
}
public static UpdateChecker CheckUpdate()
{
UpdateChecker updateChecker = new GitHubUpdateChecker("ShareX", "ShareX");
2014-07-23 12:18:49 +12:00
updateChecker.IsBeta = Program.IsBeta;
updateChecker.Proxy = HelpersOptions.CurrentProxy.GetWebProxy();
updateChecker.CheckUpdate();
/*
// Fallback if GitHub API fails
2014-07-23 12:18:49 +12:00
if (updateChecker.Status == UpdateStatus.None || updateChecker.Status == UpdateStatus.UpdateCheckFailed)
{
updateChecker = new XMLUpdateChecker(Links.URL_UPDATE, "ShareX");
2014-07-23 12:18:49 +12:00
updateChecker.IsBeta = Program.IsBeta;
updateChecker.Proxy = HelpersOptions.CurrentProxy.GetWebProxy();
updateChecker.CheckUpdate();
}
*/
return updateChecker;
}
2014-03-13 22:13:02 +13:00
2015-04-15 20:58:40 +12:00
public static void CheckDownloadCounts()
{
GitHubUpdateChecker updateChecker = new GitHubUpdateChecker("ShareX", "ShareX");
updateChecker.Proxy = HelpersOptions.CurrentProxy.GetWebProxy();
string output = updateChecker.GetDownloadCounts();
Debug.WriteLine(output);
}
public static string CheckFilePath(string folder, string filename, TaskSettings taskSettings)
2014-03-13 22:13:02 +13:00
{
string filepath = Path.Combine(folder, filename);
2014-03-13 22:13:02 +13:00
if (File.Exists(filepath))
{
switch (taskSettings.ImageSettings.FileExistAction)
2014-03-13 22:13:02 +13:00
{
case FileExistAction.Ask:
using (FileExistForm form = new FileExistForm(filepath))
{
form.ShowDialog();
filepath = form.Filepath;
}
break;
case FileExistAction.UniqueName:
filepath = Helpers.GetUniqueFilePath(filepath);
break;
case FileExistAction.Cancel:
filepath = string.Empty;
break;
2014-03-13 22:13:02 +13:00
}
}
return filepath;
}
2013-11-03 23:53:49 +13:00
public static void OpenDropWindow(TaskSettings taskSettings = null)
2014-05-03 05:56:51 +12:00
{
DropForm.GetInstance(Program.Settings.DropSize, Program.Settings.DropOffset, Program.Settings.DropAlignment, Program.Settings.DropOpacity,
Program.Settings.DropHoverOpacity, taskSettings).ShowActivate();
2014-05-03 05:56:51 +12:00
}
public static void StartScreenRecording(ScreenRecordOutput outputType, ScreenRecordStartMethod startMethod, TaskSettings taskSettings = null)
2014-05-03 05:56:51 +12:00
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
ScreenRecordManager.StartStopRecording(outputType, startMethod, taskSettings);
2014-05-03 05:56:51 +12:00
}
2015-09-25 20:12:03 +12:00
public static void OpenScrollingCapture(TaskSettings taskSettings = null)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
ScrollingCaptureForm scrollingCaptureForm = new ScrollingCaptureForm(taskSettings.CaptureSettingsReference.ScrollingCaptureOptions, true);
scrollingCaptureForm.ProcessRequested += image => UploadManager.RunImageTask(image, taskSettings);
scrollingCaptureForm.ShowActivate();
2015-09-25 20:12:03 +12:00
}
2014-05-03 05:56:51 +12:00
public static void OpenAutoCapture()
{
AutoCaptureForm.Instance.ShowActivate();
}
public static void OpenWebpageCapture(TaskSettings taskSettings = null)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
WebpageCaptureForm webpageCaptureForm = new WebpageCaptureForm();
webpageCaptureForm.OnImageUploadRequested += img => UploadManager.RunImageTask(img, taskSettings);
webpageCaptureForm.OnImageCopyRequested += img =>
{
using (img)
{
ClipboardHelpers.CopyImage(img);
}
};
webpageCaptureForm.Show();
}
public static void StartAutoCapture()
{
if (!AutoCaptureForm.IsRunning)
{
AutoCaptureForm form = AutoCaptureForm.Instance;
form.Show();
form.Execute();
}
}
public static void OpenScreenshotsFolder()
{
if (Directory.Exists(Program.ScreenshotsFolder))
{
Helpers.OpenFolder(Program.ScreenshotsFolder);
}
else
{
Helpers.OpenFolder(Program.ScreenshotsParentFolder);
}
}
public static void OpenColorPicker()
2015-01-25 19:51:24 +13:00
{
new ScreenColorPicker().Show();
}
public static void OpenScreenColorPicker(TaskSettings taskSettings = null)
2014-05-03 05:56:51 +12:00
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
2015-01-25 19:51:24 +13:00
PointInfo pointInfo = SelectPointColor();
2015-01-25 19:51:24 +13:00
if (pointInfo != null)
{
2015-01-26 21:48:49 +13:00
string text = taskSettings.AdvancedSettings.ScreenColorPickerFormat;
2015-01-26 21:48:49 +13:00
text = text.Replace("$r", pointInfo.Color.R.ToString(), StringComparison.InvariantCultureIgnoreCase).
Replace("$g", pointInfo.Color.G.ToString(), StringComparison.InvariantCultureIgnoreCase).
Replace("$b", pointInfo.Color.B.ToString(), StringComparison.InvariantCultureIgnoreCase).
2015-01-27 22:11:31 +13:00
Replace("$hex", ColorHelpers.ColorToHex(pointInfo.Color), StringComparison.InvariantCultureIgnoreCase).
Replace("$x", pointInfo.Position.X.ToString(), StringComparison.InvariantCultureIgnoreCase).
Replace("$y", pointInfo.Position.Y.ToString(), StringComparison.InvariantCultureIgnoreCase);
ClipboardHelpers.CopyText(text);
2015-01-25 19:51:24 +13:00
if (Program.MainForm.niTray.Visible)
{
Program.MainForm.niTray.Tag = null;
Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", string.Format(Resources.TaskHelpers_OpenQuickScreenColorPicker_Copied_to_clipboard___0_, text), ToolTipIcon.Info);
}
}
2014-05-03 05:56:51 +12:00
}
public static void OpenRuler()
{
2014-11-27 06:48:25 +13:00
using (RectangleRegion surface = new RectangleRegion())
2014-05-03 05:56:51 +12:00
{
surface.RulerMode = true;
surface.Config.ShowTips = false;
2014-05-03 05:56:51 +12:00
surface.Config.QuickCrop = false;
surface.Config.ShowInfo = true;
2014-09-21 04:12:41 +12:00
surface.AreaManager.MinimumSize = 3;
2014-05-03 05:56:51 +12:00
surface.Prepare();
surface.ShowDialog();
}
}
public static void OpenAutomate()
{
2015-02-18 01:51:19 +13:00
AutomateForm form = AutomateForm.GetInstance(Program.Settings.AutomateScripts);
form.ShowActivate();
}
public static void StartAutomate()
{
AutomateForm form = AutomateForm.GetInstance(Program.Settings.AutomateScripts);
2015-02-18 01:51:19 +13:00
if (form.Visible)
{
if (AutomateForm.IsRunning)
{
form.Stop();
}
else
{
form.Start();
}
}
else
2015-02-18 01:51:19 +13:00
{
form.ShowActivate();
2015-02-18 01:51:19 +13:00
}
}
2014-05-03 05:56:51 +12:00
public static void OpenHashCheck()
{
new HashCheckForm().Show();
}
public static void OpenIndexFolder()
{
UploadManager.IndexFolder();
}
2015-08-04 23:47:34 +12:00
public static void OpenVideoThumbnailer(TaskSettings taskSettings = null)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
2015-08-14 09:51:58 +12:00
if (!CheckFFmpeg(taskSettings))
{
return;
}
taskSettings.ToolsSettings.VideoThumbnailOptions.DefaultOutputDirectory = taskSettings.CaptureFolder;
VideoThumbnailerForm thumbnailerForm = new VideoThumbnailerForm(taskSettings.CaptureSettings.FFmpegOptions.FFmpegPath, taskSettings.ToolsSettingsReference.VideoThumbnailOptions);
2015-08-06 21:22:07 +12:00
thumbnailerForm.ThumbnailsTaken += thumbnails =>
{
2015-08-31 22:44:23 +12:00
if (taskSettings.ToolsSettingsReference.VideoThumbnailOptions.UploadThumbnails)
2015-08-06 21:22:07 +12:00
{
foreach (VideoThumbnailInfo thumbnailInfo in thumbnails)
{
UploadManager.UploadFile(thumbnailInfo.Filepath, taskSettings);
}
}
};
2015-08-05 23:44:04 +12:00
thumbnailerForm.Show();
2015-08-04 23:47:34 +12:00
}
2014-07-17 18:58:17 +12:00
public static void OpenImageEditor(string filePath = null)
{
2014-07-17 18:58:17 +12:00
if (string.IsNullOrEmpty(filePath))
{
if (Clipboard.ContainsImage() &&
2015-08-23 03:15:41 +12:00
MessageBox.Show(Resources.TaskHelpers_OpenImageEditor_Your_clipboard_contains_image,
Resources.TaskHelpers_OpenImageEditor_Image_editor___How_to_load_image_, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
using (Image img = Clipboard.GetImage())
{
if (img != null)
{
AnnotateImage(img, null);
return;
}
}
}
2014-07-17 18:58:17 +12:00
filePath = ImageHelpers.OpenImageFileDialog();
}
if (!string.IsNullOrEmpty(filePath))
{
2014-10-19 10:48:47 +13:00
AnnotateImage(filePath);
}
}
2014-05-03 05:56:51 +12:00
public static void OpenImageEffects()
{
string filePath = ImageHelpers.OpenImageFileDialog();
Image img = null;
2014-05-03 05:56:51 +12:00
if (!string.IsNullOrEmpty(filePath))
{
img = ImageHelpers.LoadImage(filePath);
2014-05-03 05:56:51 +12:00
}
ImageEffectsForm form = new ImageEffectsForm(img);
form.EditorMode();
form.Show();
2014-05-03 05:56:51 +12:00
}
public static void OpenMonitorTest()
{
using (MonitorTestForm monitorTestForm = new MonitorTestForm())
{
monitorTestForm.ShowDialog();
}
}
public static void OpenDNSChanger()
2014-09-07 07:13:21 +12:00
{
if (Helpers.IsAdministrator())
{
new DNSChangerForm().Show();
}
else
{
RunShareXAsAdmin("-dnschanger");
}
2014-09-07 07:13:21 +12:00
}
public static void RunShareXAsAdmin(string arguments)
2014-05-03 05:56:51 +12:00
{
try
{
2014-09-07 07:13:21 +12:00
ProcessStartInfo psi = new ProcessStartInfo(Application.ExecutablePath);
psi.Arguments = arguments;
2014-05-03 05:56:51 +12:00
psi.Verb = "runas";
Process.Start(psi);
}
catch { }
}
2014-05-21 10:46:06 +12:00
public static void OpenQRCode()
{
new QRCodeForm().Show();
}
public static void OpenFTPClient()
{
if (Program.UploadersConfig != null && Program.UploadersConfig.FTPAccountList != null)
{
FTPAccount account = Program.UploadersConfig.FTPAccountList.ReturnIfValidIndex(Program.UploadersConfig.FTPSelectedImage);
if (account != null)
{
if (account.Protocol == FTPProtocol.FTP || account.Protocol == FTPProtocol.FTPS)
{
new FTPClientForm(account).Show();
}
else
{
2015-04-28 19:50:41 +12:00
MessageBox.Show(Resources.TaskHelpers_OpenFTPClient_FTP_client_only_supports_FTP_or_FTPS_, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
return;
}
}
2015-04-28 19:50:41 +12:00
MessageBox.Show(Resources.TaskHelpers_OpenFTPClient_Unable_to_find_valid_FTP_account_, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
2015-08-25 04:38:35 +12:00
public static void OpenIRCClient(TaskSettings taskSettings = null)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
2015-08-31 22:44:23 +12:00
new IRCClientForm(taskSettings.ToolsSettingsReference.IRCSettings).Show();
2015-08-25 04:38:35 +12:00
}
public static void TweetMessage()
{
if (Program.UploadersConfig != null && Program.UploadersConfig.TwitterOAuthInfoList != null)
{
OAuthInfo twitterOAuth = Program.UploadersConfig.TwitterOAuthInfoList.ReturnIfValidIndex(Program.UploadersConfig.TwitterSelectedAccount);
if (twitterOAuth != null && OAuthInfo.CheckOAuth(twitterOAuth))
{
TaskEx.Run(() =>
{
using (TwitterTweetForm twitter = new TwitterTweetForm(twitterOAuth))
{
if (twitter.ShowDialog() == DialogResult.OK && twitter.IsTweetSent)
{
if (Program.MainForm.niTray.Visible)
{
Program.MainForm.niTray.Tag = null;
Program.MainForm.niTray.ShowBalloonTip(5000, "ShareX - Twitter", Resources.TaskHelpers_TweetMessage_Tweet_successfully_sent_, ToolTipIcon.Info);
}
}
}
});
return;
}
2014-05-03 05:56:51 +12:00
}
2015-04-28 19:50:41 +12:00
MessageBox.Show(Resources.TaskHelpers_TweetMessage_Unable_to_find_valid_Twitter_account_, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information);
2014-05-03 05:56:51 +12:00
}
public static EDataType FindDataType(string filePath, TaskSettings taskSettings)
{
string ext = Helpers.GetFilenameExtension(filePath);
if (!string.IsNullOrEmpty(ext))
{
if (taskSettings.AdvancedSettings.ImageExtensions.Any(x => ext.Equals(x, StringComparison.InvariantCultureIgnoreCase)))
{
return EDataType.Image;
}
if (taskSettings.AdvancedSettings.TextExtensions.Any(x => ext.Equals(x, StringComparison.InvariantCultureIgnoreCase)))
{
return EDataType.Text;
}
}
return EDataType.File;
}
public static bool ToggleHotkeys()
{
bool result = !Program.Settings.DisableHotkeys;
Program.Settings.DisableHotkeys = result;
Program.MainForm.UpdateToggleHotkeyButton();
if (Program.MainForm.niTray.Visible)
{
Program.MainForm.niTray.Tag = null;
string balloonTipText = result ? Resources.TaskHelpers_ToggleHotkeys_Hotkeys_disabled_ : Resources.TaskHelpers_ToggleHotkeys_Hotkeys_enabled_;
Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", balloonTipText, ToolTipIcon.Info);
}
return result;
}
2015-08-14 09:51:58 +12:00
public static bool CheckFFmpeg(TaskSettings taskSettings)
{
if (!File.Exists(taskSettings.CaptureSettings.FFmpegOptions.FFmpegPath))
2015-08-14 09:51:58 +12:00
{
string ffmpegText = string.IsNullOrEmpty(taskSettings.CaptureSettings.FFmpegOptions.FFmpegPath) ? "ffmpeg.exe" : taskSettings.CaptureSettings.FFmpegOptions.FFmpegPath;
2015-08-14 09:51:58 +12:00
if (MessageBox.Show(string.Format(Resources.ScreenRecordForm_StartRecording_does_not_exist, ffmpegText),
"ShareX - " + Resources.ScreenRecordForm_StartRecording_Missing + " ffmpeg.exe", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
if (FFmpegDownloader.DownloadFFmpeg(false, DownloaderForm_InstallRequested) == DialogResult.OK)
{
Program.DefaultTaskSettings.CaptureSettings.FFmpegOptions.CLIPath = taskSettings.TaskSettingsReference.CaptureSettings.FFmpegOptions.CLIPath =
taskSettings.CaptureSettings.FFmpegOptions.CLIPath = Path.Combine(Program.ToolsFolder, "ffmpeg.exe");
#if STEAM
Program.DefaultTaskSettings.CaptureSettings.FFmpegOptions.OverrideCLIPath = taskSettings.TaskSettingsReference.CaptureSettings.FFmpegOptions.OverrideCLIPath =
taskSettings.CaptureSettings.FFmpegOptions.OverrideCLIPath = true;
#endif
2015-08-14 09:51:58 +12:00
}
}
else
{
return false;
}
}
return true;
}
private static void DownloaderForm_InstallRequested(string filePath)
{
string extractPath = Path.Combine(Program.ToolsFolder, "ffmpeg.exe");
bool result = FFmpegDownloader.ExtractFFmpeg(filePath, extractPath);
if (result)
{
MessageBox.Show(Resources.ScreenRecordForm_DownloaderForm_InstallRequested_FFmpeg_successfully_downloaded_, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(Resources.ScreenRecordForm_DownloaderForm_InstallRequested_Download_of_FFmpeg_failed_, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
2015-08-16 20:34:46 +12:00
public static void PlayCaptureSound(TaskSettings taskSettings)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
if (taskSettings.AdvancedSettings.UseCustomCaptureSound && !string.IsNullOrEmpty(taskSettings.AdvancedSettings.CustomCaptureSoundPath))
{
Helpers.PlaySoundAsync(taskSettings.AdvancedSettings.CustomCaptureSoundPath);
}
else
{
Helpers.PlaySoundAsync(Resources.CaptureSound);
}
}
public static void PlayTaskCompleteSound(TaskSettings taskSettings)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
if (taskSettings.AdvancedSettings.UseCustomTaskCompletedSound && !string.IsNullOrEmpty(taskSettings.AdvancedSettings.CustomTaskCompletedSoundPath))
2015-08-16 20:34:46 +12:00
{
Helpers.PlaySoundAsync(taskSettings.AdvancedSettings.CustomTaskCompletedSoundPath);
2015-08-16 20:34:46 +12:00
}
else
{
Helpers.PlaySoundAsync(Resources.TaskCompletedSound);
}
}
public static void PlayErrorSound(TaskSettings taskSettings)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
if (taskSettings.AdvancedSettings.UseCustomErrorSound && !string.IsNullOrEmpty(taskSettings.AdvancedSettings.CustomErrorSoundPath))
{
Helpers.PlaySoundAsync(taskSettings.AdvancedSettings.CustomErrorSoundPath);
}
else
{
Helpers.PlaySoundAsync(Resources.ErrorSound);
}
}
2013-11-03 23:53:49 +13:00
}
}