mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-02 18:26:27 +13:00
Merge branch 'master' into youtube-uploader
This commit is contained in:
commit
21a813bb6f
25 changed files with 103 additions and 80 deletions
|
@ -27,6 +27,7 @@ You should have received a copy of the GNU General Public License
|
||||||
using Shell32;
|
using Shell32;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using File = System.IO.File;
|
using File = System.IO.File;
|
||||||
using Folder = Shell32.Folder;
|
using Folder = Shell32.Folder;
|
||||||
|
|
||||||
|
@ -114,8 +115,9 @@ private static string GetShortcutTargetPath(string shortcutPath)
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Shell shell = new ShellClass();
|
Type t = Type.GetTypeFromProgID("Shell.Application");
|
||||||
Folder folder = shell.NameSpace(directory);
|
object shell = Activator.CreateInstance(t);
|
||||||
|
Folder folder = (Folder)t.InvokeMember("NameSpace", BindingFlags.InvokeMethod, null, shell, new object[] { directory });
|
||||||
FolderItem folderItem = folder.ParseName(filename);
|
FolderItem folderItem = folder.ParseName(filename);
|
||||||
|
|
||||||
if (folderItem != null)
|
if (folderItem != null)
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net462" />
|
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
|
@ -93,7 +93,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Design" />
|
<Reference Include="System.Design" />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net462" />
|
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
|
@ -66,7 +66,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net462" />
|
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
|
@ -41,7 +41,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net462" />
|
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
|
@ -29,7 +29,7 @@ You should have received a copy of the GNU General Public License
|
||||||
|
|
||||||
namespace ShareX.ScreenCaptureLib
|
namespace ShareX.ScreenCaptureLib
|
||||||
{
|
{
|
||||||
internal class ButtonObject : DrawableObject
|
internal class ImageEditorButton : ImageEditorControl
|
||||||
{
|
{
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
public Color ButtonColor { get; set; }
|
public Color ButtonColor { get; set; }
|
|
@ -29,7 +29,7 @@ You should have received a copy of the GNU General Public License
|
||||||
|
|
||||||
namespace ShareX.ScreenCaptureLib
|
namespace ShareX.ScreenCaptureLib
|
||||||
{
|
{
|
||||||
internal abstract class DrawableObject
|
internal abstract class ImageEditorControl
|
||||||
{
|
{
|
||||||
public event MouseEventHandler MouseDown, MouseUp;
|
public event MouseEventHandler MouseDown, MouseUp;
|
||||||
public event Action MouseEnter, MouseLeave;
|
public event Action MouseEnter, MouseLeave;
|
|
@ -31,7 +31,7 @@ You should have received a copy of the GNU General Public License
|
||||||
|
|
||||||
namespace ShareX.ScreenCaptureLib
|
namespace ShareX.ScreenCaptureLib
|
||||||
{
|
{
|
||||||
internal class ImageEditorScrollbar : DrawableObject
|
internal class ImageEditorScrollbar : ImageEditorControl
|
||||||
{
|
{
|
||||||
public Orientation Orientation { get; set; }
|
public Orientation Orientation { get; set; }
|
||||||
public int Thickness { get; set; } = 15;
|
public int Thickness { get; set; } = 15;
|
||||||
|
|
|
@ -28,7 +28,7 @@ You should have received a copy of the GNU General Public License
|
||||||
|
|
||||||
namespace ShareX.ScreenCaptureLib
|
namespace ShareX.ScreenCaptureLib
|
||||||
{
|
{
|
||||||
internal class ResizeNode : DrawableObject
|
internal class ResizeNode : ImageEditorControl
|
||||||
{
|
{
|
||||||
public const int DefaultSize = 13;
|
public const int DefaultSize = 13;
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ public override void OnCreating()
|
||||||
Point pos = InputManager.ClientMousePosition;
|
Point pos = InputManager.ClientMousePosition;
|
||||||
Rectangle = new Rectangle(pos.X, pos.Y, 1, 1);
|
Rectangle = new Rectangle(pos.X, pos.Y, 1, 1);
|
||||||
|
|
||||||
if (Manager.IsCornerMoving && LoadImageFile(AnnotationOptions.LastImageFilePath, true))
|
if (Manager.IsCtrlModifier && LoadImageFile(AnnotationOptions.LastImageFilePath, true))
|
||||||
{
|
{
|
||||||
OnCreated();
|
OnCreated();
|
||||||
Manager.IsMoving = true;
|
Manager.IsMoving = true;
|
||||||
|
|
|
@ -51,7 +51,7 @@ public override void OnCreating()
|
||||||
Point pos = InputManager.ClientMousePosition;
|
Point pos = InputManager.ClientMousePosition;
|
||||||
Rectangle = new Rectangle(pos.X, pos.Y, 1, 1);
|
Rectangle = new Rectangle(pos.X, pos.Y, 1, 1);
|
||||||
|
|
||||||
if (Manager.IsCornerMoving && LoadSticker(AnnotationOptions.LastStickerPath, AnnotationOptions.StickerSize))
|
if (Manager.IsCtrlModifier && LoadSticker(AnnotationOptions.LastStickerPath, AnnotationOptions.StickerSize))
|
||||||
{
|
{
|
||||||
OnCreated();
|
OnCreated();
|
||||||
Manager.IsMoving = true;
|
Manager.IsMoving = true;
|
||||||
|
|
|
@ -158,6 +158,7 @@ private set
|
||||||
public bool IsPanning { get; set; }
|
public bool IsPanning { get; set; }
|
||||||
public bool IsResizing { get; set; }
|
public bool IsResizing { get; set; }
|
||||||
// Is holding Ctrl?
|
// Is holding Ctrl?
|
||||||
|
public bool IsCtrlModifier { get; private set; }
|
||||||
public bool IsCornerMoving { get; private set; }
|
public bool IsCornerMoving { get; private set; }
|
||||||
// Is holding Shift?
|
// Is holding Shift?
|
||||||
public bool IsProportionalResizing { get; private set; }
|
public bool IsProportionalResizing { get; private set; }
|
||||||
|
@ -178,7 +179,7 @@ private set
|
||||||
|
|
||||||
public AnnotationOptions AnnotationOptions => Options.AnnotationOptions;
|
public AnnotationOptions AnnotationOptions => Options.AnnotationOptions;
|
||||||
|
|
||||||
internal List<DrawableObject> DrawableObjects { get; private set; }
|
internal List<ImageEditorControl> DrawableObjects { get; private set; }
|
||||||
internal ResizeNode[] ResizeNodes { get; private set; }
|
internal ResizeNode[] ResizeNodes { get; private set; }
|
||||||
|
|
||||||
private bool nodesVisible;
|
private bool nodesVisible;
|
||||||
|
@ -229,7 +230,7 @@ public ShapeManager(RegionCaptureForm form)
|
||||||
Form = form;
|
Form = form;
|
||||||
Options = form.Options;
|
Options = form.Options;
|
||||||
|
|
||||||
DrawableObjects = new List<DrawableObject>();
|
DrawableObjects = new List<ImageEditorControl>();
|
||||||
ResizeNodes = new ResizeNode[9];
|
ResizeNodes = new ResizeNode[9];
|
||||||
|
|
||||||
for (int i = 0; i < ResizeNodes.Length; i++)
|
for (int i = 0; i < ResizeNodes.Length; i++)
|
||||||
|
@ -282,7 +283,7 @@ private void form_Shown(object sender, EventArgs e)
|
||||||
|
|
||||||
private void form_LostFocus(object sender, EventArgs e)
|
private void form_LostFocus(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
IsCornerMoving = IsProportionalResizing = IsSnapResizing = false;
|
ResetModifiers();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void form_MouseDown(object sender, MouseEventArgs e)
|
private void form_MouseDown(object sender, MouseEventArgs e)
|
||||||
|
@ -410,7 +411,17 @@ private void form_KeyDown(object sender, KeyEventArgs e)
|
||||||
switch (e.KeyCode)
|
switch (e.KeyCode)
|
||||||
{
|
{
|
||||||
case Keys.ControlKey:
|
case Keys.ControlKey:
|
||||||
IsCornerMoving = true;
|
if (!IsCtrlModifier && !IsCornerMoving)
|
||||||
|
{
|
||||||
|
if (IsCreating || IsResizing)
|
||||||
|
{
|
||||||
|
IsCornerMoving = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IsCtrlModifier = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Keys.ShiftKey:
|
case Keys.ShiftKey:
|
||||||
IsProportionalResizing = true;
|
IsProportionalResizing = true;
|
||||||
|
@ -638,6 +649,7 @@ private void form_KeyUp(object sender, KeyEventArgs e)
|
||||||
switch (e.KeyCode)
|
switch (e.KeyCode)
|
||||||
{
|
{
|
||||||
case Keys.ControlKey:
|
case Keys.ControlKey:
|
||||||
|
IsCtrlModifier = false;
|
||||||
IsCornerMoving = false;
|
IsCornerMoving = false;
|
||||||
break;
|
break;
|
||||||
case Keys.ShiftKey:
|
case Keys.ShiftKey:
|
||||||
|
@ -856,7 +868,7 @@ private void EndPanning()
|
||||||
|
|
||||||
internal void UpdateObjects()
|
internal void UpdateObjects()
|
||||||
{
|
{
|
||||||
DrawableObject[] objects = DrawableObjects.OrderByDescending(x => x.Order).ToArray();
|
ImageEditorControl[] objects = DrawableObjects.OrderByDescending(x => x.Order).ToArray();
|
||||||
|
|
||||||
Point position = InputManager.ClientMousePosition;
|
Point position = InputManager.ClientMousePosition;
|
||||||
|
|
||||||
|
@ -864,7 +876,7 @@ internal void UpdateObjects()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < objects.Length; i++)
|
for (int i = 0; i < objects.Length; i++)
|
||||||
{
|
{
|
||||||
DrawableObject obj = objects[i];
|
ImageEditorControl obj = objects[i];
|
||||||
|
|
||||||
if (obj.Visible)
|
if (obj.Visible)
|
||||||
{
|
{
|
||||||
|
@ -895,7 +907,7 @@ internal void UpdateObjects()
|
||||||
{
|
{
|
||||||
if (InputManager.IsMouseReleased(MouseButtons.Left))
|
if (InputManager.IsMouseReleased(MouseButtons.Left))
|
||||||
{
|
{
|
||||||
foreach (DrawableObject obj in objects)
|
foreach (ImageEditorControl obj in objects)
|
||||||
{
|
{
|
||||||
if (obj.IsDragging)
|
if (obj.IsDragging)
|
||||||
{
|
{
|
||||||
|
@ -908,7 +920,7 @@ internal void UpdateObjects()
|
||||||
|
|
||||||
internal void DrawObjects(Graphics g)
|
internal void DrawObjects(Graphics g)
|
||||||
{
|
{
|
||||||
foreach (DrawableObject obj in DrawableObjects)
|
foreach (ImageEditorControl obj in DrawableObjects)
|
||||||
{
|
{
|
||||||
if (obj.Visible)
|
if (obj.Visible)
|
||||||
{
|
{
|
||||||
|
@ -1262,6 +1274,11 @@ private void DeleteAllShapes()
|
||||||
DeselectCurrentShape();
|
DeselectCurrentShape();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ResetModifiers()
|
||||||
|
{
|
||||||
|
IsCtrlModifier = IsCornerMoving = IsProportionalResizing = IsSnapResizing = false;
|
||||||
|
}
|
||||||
|
|
||||||
private void ClearTools()
|
private void ClearTools()
|
||||||
{
|
{
|
||||||
foreach (BaseTool tool in ToolShapes)
|
foreach (BaseTool tool in ToolShapes)
|
||||||
|
@ -1278,13 +1295,16 @@ public BaseShape GetIntersectShape()
|
||||||
|
|
||||||
public BaseShape GetIntersectShape(Point position)
|
public BaseShape GetIntersectShape(Point position)
|
||||||
{
|
{
|
||||||
for (int i = Shapes.Count - 1; i >= 0; i--)
|
if (!IsCtrlModifier)
|
||||||
{
|
{
|
||||||
BaseShape shape = Shapes[i];
|
for (int i = Shapes.Count - 1; i >= 0; i--)
|
||||||
|
|
||||||
if (shape.ShapeType == CurrentTool && shape.Intersects(position))
|
|
||||||
{
|
{
|
||||||
return shape;
|
BaseShape shape = Shapes[i];
|
||||||
|
|
||||||
|
if (shape.ShapeType == CurrentTool && shape.Intersects(position))
|
||||||
|
{
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class CropTool : BaseTool
|
||||||
|
|
||||||
public override bool LimitRectangleToInsideCanvas { get; } = true;
|
public override bool LimitRectangleToInsideCanvas { get; } = true;
|
||||||
|
|
||||||
private ButtonObject confirmButton, cancelButton;
|
private ImageEditorButton confirmButton, cancelButton;
|
||||||
private Size buttonSize = new Size(80, 40);
|
private Size buttonSize = new Size(80, 40);
|
||||||
private int buttonOffset = 15;
|
private int buttonOffset = 15;
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ public override void OnDraw(Graphics g)
|
||||||
|
|
||||||
public override void OnCreated()
|
public override void OnCreated()
|
||||||
{
|
{
|
||||||
confirmButton = new ButtonObject()
|
confirmButton = new ImageEditorButton()
|
||||||
{
|
{
|
||||||
Text = "\u2714",
|
Text = "\u2714",
|
||||||
ButtonColor = Color.ForestGreen,
|
ButtonColor = Color.ForestGreen,
|
||||||
|
@ -87,7 +87,7 @@ public override void OnCreated()
|
||||||
confirmButton.MouseLeave += () => Manager.Form.SetDefaultCursor();
|
confirmButton.MouseLeave += () => Manager.Form.SetDefaultCursor();
|
||||||
Manager.DrawableObjects.Add(confirmButton);
|
Manager.DrawableObjects.Add(confirmButton);
|
||||||
|
|
||||||
cancelButton = new ButtonObject()
|
cancelButton = new ImageEditorButton()
|
||||||
{
|
{
|
||||||
Text = "\u2716",
|
Text = "\u2716",
|
||||||
ButtonColor = Color.FromArgb(227, 45, 45),
|
ButtonColor = Color.FromArgb(227, 45, 45),
|
||||||
|
|
|
@ -125,7 +125,7 @@
|
||||||
<Compile Include="Forms\StickerPackForm.Designer.cs">
|
<Compile Include="Forms\StickerPackForm.Designer.cs">
|
||||||
<DependentUpon>StickerPackForm.cs</DependentUpon>
|
<DependentUpon>StickerPackForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="RegionHelpers\ButtonObject.cs" />
|
<Compile Include="RegionHelpers\ImageEditorButton.cs" />
|
||||||
<Compile Include="RegionHelpers\ImageEditorScrollbar.cs" />
|
<Compile Include="RegionHelpers\ImageEditorScrollbar.cs" />
|
||||||
<Compile Include="RegionHelpers\ScrollbarManager.cs" />
|
<Compile Include="RegionHelpers\ScrollbarManager.cs" />
|
||||||
<Compile Include="Shapes\AnnotationOptions.cs" />
|
<Compile Include="Shapes\AnnotationOptions.cs" />
|
||||||
|
@ -203,7 +203,7 @@
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Shapes\ShapeManager.cs" />
|
<Compile Include="Shapes\ShapeManager.cs" />
|
||||||
<Compile Include="RegionHelpers\DrawableObject.cs" />
|
<Compile Include="RegionHelpers\ImageEditorControl.cs" />
|
||||||
<Compile Include="Forms\RegionCaptureForm.cs">
|
<Compile Include="Forms\RegionCaptureForm.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -1793,8 +1793,6 @@ private void InitializeComponent()
|
||||||
// cbFirebaseIsShort
|
// cbFirebaseIsShort
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.cbFirebaseIsShort, "cbFirebaseIsShort");
|
resources.ApplyResources(this.cbFirebaseIsShort, "cbFirebaseIsShort");
|
||||||
this.cbFirebaseIsShort.Checked = true;
|
|
||||||
this.cbFirebaseIsShort.CheckState = System.Windows.Forms.CheckState.Checked;
|
|
||||||
this.cbFirebaseIsShort.Name = "cbFirebaseIsShort";
|
this.cbFirebaseIsShort.Name = "cbFirebaseIsShort";
|
||||||
this.cbFirebaseIsShort.UseVisualStyleBackColor = true;
|
this.cbFirebaseIsShort.UseVisualStyleBackColor = true;
|
||||||
this.cbFirebaseIsShort.CheckedChanged += new System.EventHandler(this.cbFirebaseIsShort_CheckedChanged);
|
this.cbFirebaseIsShort.CheckedChanged += new System.EventHandler(this.cbFirebaseIsShort_CheckedChanged);
|
||||||
|
|
|
@ -98,14 +98,14 @@
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="FluentFTP, Version=19.1.2.0, Culture=neutral, PublicKeyToken=f4af092b1d8df44f, processorArchitecture=MSIL">
|
<Reference Include="FluentFTP, Version=19.1.3.0, Culture=neutral, PublicKeyToken=f4af092b1d8df44f, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\FluentFTP.19.1.2\lib\net45\FluentFTP.dll</HintPath>
|
<HintPath>..\packages\FluentFTP.19.1.3\lib\net45\FluentFTP.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MegaApiClient, Version=1.6.3.409, Culture=neutral, PublicKeyToken=0480d311efbeb4e2, processorArchitecture=MSIL">
|
<Reference Include="MegaApiClient, Version=1.6.3.424, Culture=neutral, PublicKeyToken=0480d311efbeb4e2, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\MegaApiClient.1.6.3-master-409\lib\net46\MegaApiClient.dll</HintPath>
|
<HintPath>..\packages\MegaApiClient.1.6.3\lib\net46\MegaApiClient.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
|
<Reference Include="Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll</HintPath>
|
<HintPath>..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll</HintPath>
|
||||||
|
@ -115,6 +115,7 @@
|
||||||
<Reference Include="System.Design" />
|
<Reference Include="System.Design" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
<Reference Include="System.IO.Compression.FileSystem" />
|
<Reference Include="System.IO.Compression.FileSystem" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
<Reference Include="System.Numerics" />
|
<Reference Include="System.Numerics" />
|
||||||
<Reference Include="System.Runtime.Serialization" />
|
<Reference Include="System.Runtime.Serialization" />
|
||||||
<Reference Include="System.ServiceModel.Web" />
|
<Reference Include="System.ServiceModel.Web" />
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
/* https://github.com/matthewburnett */
|
/* https://github.com/matthewburnett */
|
||||||
|
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using ShareX.HelpersLib;
|
|
||||||
using ShareX.UploadersLib.Properties;
|
using ShareX.UploadersLib.Properties;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Web;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace ShareX.UploadersLib.URLShorteners
|
namespace ShareX.UploadersLib.URLShorteners
|
||||||
|
@ -16,7 +14,7 @@ public class FirebaseDynamicLinksURLShortenerService : URLShortenerService
|
||||||
|
|
||||||
public override Icon ServiceIcon => Resources.Firebase;
|
public override Icon ServiceIcon => Resources.Firebase;
|
||||||
|
|
||||||
public override bool CheckConfig(UploadersConfig config)
|
public override bool CheckConfig(UploadersConfig config)
|
||||||
{
|
{
|
||||||
return !string.IsNullOrEmpty(config.FirebaseWebAPIKey) && !string.IsNullOrEmpty(config.FirebaseDynamicLinkDomain);
|
return !string.IsNullOrEmpty(config.FirebaseWebAPIKey) && !string.IsNullOrEmpty(config.FirebaseDynamicLinkDomain);
|
||||||
}
|
}
|
||||||
|
@ -34,23 +32,29 @@ public override URLShortener CreateShortener(UploadersConfig config, TaskReferen
|
||||||
public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpFirebaseDynamicLinks;
|
public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpFirebaseDynamicLinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class FirebaseRequest
|
||||||
|
{
|
||||||
|
public DynamicLinkInfo dynamicLinkInfo { get; set; }
|
||||||
|
public Suffix suffix { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DynamicLinkInfo
|
||||||
|
{
|
||||||
|
public string dynamicLinkDomain { get; set; }
|
||||||
|
public string link { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Suffix
|
||||||
|
{
|
||||||
|
public string option { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class FirebaseResponse
|
public class FirebaseResponse
|
||||||
{
|
{
|
||||||
public string shortLink { get; set; }
|
public string shortLink { get; set; }
|
||||||
public string previewLink { get; set; }
|
public string previewLink { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class FirebaseRequest
|
|
||||||
{
|
|
||||||
public string longDynamicLink { get; set; }
|
|
||||||
public FirebaseRequestSuffix suffix { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class FirebaseRequestSuffix
|
|
||||||
{
|
|
||||||
public string option { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public sealed class FirebaseDynamicLinksURLShortener : URLShortener
|
public sealed class FirebaseDynamicLinksURLShortener : URLShortener
|
||||||
{
|
{
|
||||||
public string WebAPIKey { get; set; }
|
public string WebAPIKey { get; set; }
|
||||||
|
@ -61,9 +65,16 @@ public override UploadResult ShortenURL(string url)
|
||||||
{
|
{
|
||||||
UploadResult result = new UploadResult { URL = url };
|
UploadResult result = new UploadResult { URL = url };
|
||||||
|
|
||||||
string RequestUrl = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks";
|
FirebaseRequest request = new FirebaseRequest
|
||||||
string longDynamicLink = URLHelpers.ForcePrefix(DynamicLinkDomain + ".app.goo.gl/?link=" + HttpUtility.UrlEncode(url));
|
{
|
||||||
string option;
|
dynamicLinkInfo = new DynamicLinkInfo
|
||||||
|
{
|
||||||
|
dynamicLinkDomain = DynamicLinkDomain + ".app.goo.gl",
|
||||||
|
link = url
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
string requesturl = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks";
|
||||||
|
|
||||||
Dictionary<string, string> args = new Dictionary<string, string>
|
Dictionary<string, string> args = new Dictionary<string, string>
|
||||||
{
|
{
|
||||||
|
@ -72,24 +83,15 @@ public override UploadResult ShortenURL(string url)
|
||||||
|
|
||||||
if (IsShort)
|
if (IsShort)
|
||||||
{
|
{
|
||||||
option = "SHORT";
|
request.suffix = new Suffix
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
option = "UNGUESSABLE";
|
|
||||||
}
|
|
||||||
|
|
||||||
FirebaseRequest request = new FirebaseRequest
|
|
||||||
{
|
|
||||||
longDynamicLink = longDynamicLink,
|
|
||||||
suffix = new FirebaseRequestSuffix
|
|
||||||
{
|
{
|
||||||
option = option
|
option = "SHORT"
|
||||||
}
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
string json = JsonConvert.SerializeObject(request);
|
string requestjson = JsonConvert.SerializeObject(request);
|
||||||
result.Response = SendRequest(HttpMethod.POST, RequestUrl, json, ContentTypeJSON, args);
|
|
||||||
|
result.Response = SendRequest(HttpMethod.POST, requesturl, requestjson, ContentTypeJSON, args);
|
||||||
result.ShortenedURL = JsonConvert.DeserializeObject<FirebaseResponse>(result.Response).shortLink;
|
result.ShortenedURL = JsonConvert.DeserializeObject<FirebaseResponse>(result.Response).shortLink;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -441,7 +441,7 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
|
||||||
|
|
||||||
public string FirebaseWebAPIKey = "";
|
public string FirebaseWebAPIKey = "";
|
||||||
public string FirebaseDynamicLinkDomain = "";
|
public string FirebaseDynamicLinkDomain = "";
|
||||||
public bool FirebaseIsShort = true;
|
public bool FirebaseIsShort = false;
|
||||||
|
|
||||||
#endregion Firebase Dynamic Links
|
#endregion Firebase Dynamic Links
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="FluentFTP" version="19.1.2" targetFramework="net462" />
|
<package id="FluentFTP" version="19.1.3" targetFramework="net462" />
|
||||||
<package id="MegaApiClient" version="1.6.3-master-409" targetFramework="net462" />
|
<package id="MegaApiClient" version="1.6.3" targetFramework="net462" />
|
||||||
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net462" />
|
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||||
<package id="SSH.NET" version="2016.1.0" targetFramework="net462" />
|
<package id="SSH.NET" version="2016.1.0" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
|
@ -98,7 +98,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.VisualBasic" />
|
<Reference Include="Microsoft.VisualBasic" />
|
||||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core">
|
<Reference Include="System.Core">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net462" />
|
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||||
<package id="ZXing.Net" version="0.16.2" targetFramework="net462" />
|
<package id="ZXing.Net" version="0.16.2" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
Loading…
Reference in a new issue