Added a prototype for a new TFS integration.

This commit is contained in:
Robin 2018-04-25 15:59:12 +02:00
commit 3bfd54bad3
20 changed files with 1212 additions and 1 deletions

View file

@ -0,0 +1,34 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using Newtonsoft.Json;
namespace Greenshot.Addon.Tfs.Entities
{
[JsonObject]
public class Attributes
{
[JsonProperty("comment")]
public string Comment { get; set; }
}
}

View file

@ -0,0 +1,41 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using Newtonsoft.Json;
namespace Greenshot.Addon.Tfs.Entities
{
/// <summary>
/// Container for items returned from the api
/// </summary>
[JsonObject]
public class CreateAttachmentResult
{
[JsonProperty("id")]
public string id { get; set; }
[JsonProperty("url")]
public Uri Url { get; set; }
}
}

View file

@ -0,0 +1,42 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using Newtonsoft.Json;
namespace Greenshot.Addon.Tfs.Entities
{
/// <summary>
/// Container for a test with Extension data
/// </summary>
[JsonObject]
public class Operation
{
[JsonProperty("op")]
public string OperationType { get; set; }
[JsonProperty("path")]
public string Path { get; set; }
[JsonProperty("value")]
public Value Value { get; set; }
}
}

View file

@ -0,0 +1,41 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using Newtonsoft.Json;
namespace Greenshot.Addon.Tfs.Entities
{
[JsonObject]
public class Value
{
[JsonProperty("rel")]
public string Relation { get; set; }
[JsonProperty("url")]
public Uri Url { get; set; }
[JsonProperty("attributes")]
public Attributes Attributes { get; set; }
}
}

View file

@ -0,0 +1,38 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using Newtonsoft.Json;
namespace Greenshot.Addon.Tfs.Entities
{
[JsonObject]
public class WorkItemFields
{
[JsonProperty("System.Title")]
public string Title { get; set; }
[JsonProperty("System.WorkItemType")]
public string WorkItemType { get; set; }
}
}

View file

@ -0,0 +1,37 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using System.Collections.Generic;
using Newtonsoft.Json;
namespace Greenshot.Addon.Tfs.Entities
{
[JsonObject]
public class WorkItemList
{
[JsonProperty("count")]
public int Count { get; set; }
[JsonProperty("value")]
public IList<WorkItem> Items { get; set; }
}
}

View file

@ -0,0 +1,35 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using System.Collections.Generic;
using Newtonsoft.Json;
namespace Greenshot.Addon.Tfs.Entities
{
[JsonObject]
public class WorkItemQueryResult
{
[JsonProperty("workItems")]
public IList<WorkItem> Items { get; set; }
}
}

View file

@ -0,0 +1,44 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using Newtonsoft.Json;
namespace Greenshot.Addon.Tfs.Entities
{
[JsonObject]
public class WorkItem
{
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("rev")]
public int Reversion { get; set; }
[JsonProperty("url")]
public Uri Url { get; set; }
[JsonProperty("fields")]
public WorkItemFields Fields { get; set; }
}
}

View file

@ -0,0 +1,198 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\CommonProject.properties" />
<PropertyGroup>
<ProjectGuid>{8B3643A5-AFED-49FF-8D66-6348FB102EB2}</ProjectGuid>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<RootNamespace>Greenshot.Addon.Tfs</RootNamespace>
<AssemblyName>Greenshot.Addon.Tfs</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<AppDesignerFolder>Properties</AppDesignerFolder>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RunPostBuildEvent>Always</RunPostBuildEvent>
<TargetFrameworkProfile />
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<ItemGroup>
<ProjectReference Include="..\Greenshot.Gfx\Greenshot.Gfx.csproj">
<Project>{f041c685-eb96-4ed1-9ace-0f5bd836610f}</Project>
<Name>Greenshot.Gfx</Name>
</ProjectReference>
<ProjectReference Include="..\Greenshot.Addons\Greenshot.Addons.csproj">
<Project>{5B924697-4DCD-4F98-85F1-105CB84B7341}</Project>
<Name>Greenshot.Addons</Name>
</ProjectReference>
<Reference Include="Caliburn.Micro, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8e5891231f2ed21f, processorArchitecture=MSIL">
<HintPath>..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll</HintPath>
</Reference>
<Reference Include="Caliburn.Micro.Platform, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8e5891231f2ed21f, processorArchitecture=MSIL">
<HintPath>..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll</HintPath>
</Reference>
<Reference Include="Caliburn.Micro.Platform.Core, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8e5891231f2ed21f, processorArchitecture=MSIL">
<HintPath>..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll</HintPath>
</Reference>
<Reference Include="CommonServiceLocator, Version=2.0.3.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
<HintPath>..\packages\CommonServiceLocator.2.0.3\lib\net45\CommonServiceLocator.dll</HintPath>
</Reference>
<Reference Include="ControlzEx, Version=3.0.2.4, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Addons, Version=0.5.56.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Addons.0.5.56\lib\net45\Dapplo.Addons.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Addons.Bootstrapper, Version=0.5.56.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Addons.Bootstrapper.0.5.56\lib\net45\Dapplo.Addons.Bootstrapper.dll</HintPath>
</Reference>
<Reference Include="Dapplo.CaliburnMicro, Version=0.5.28.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.CaliburnMicro.0.5.28\lib\net45\Dapplo.CaliburnMicro.dll</HintPath>
</Reference>
<Reference Include="Dapplo.CaliburnMicro.Configuration, Version=0.5.28.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.CaliburnMicro.Configuration.0.5.28\lib\net45\Dapplo.CaliburnMicro.Configuration.dll</HintPath>
</Reference>
<Reference Include="Dapplo.CaliburnMicro.Dapp, Version=0.5.28.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.CaliburnMicro.Dapp.0.5.28\lib\net45\Dapplo.CaliburnMicro.Dapp.dll</HintPath>
</Reference>
<Reference Include="Dapplo.CaliburnMicro.Menu, Version=0.5.28.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.CaliburnMicro.Menu.0.5.28\lib\net45\Dapplo.CaliburnMicro.Menu.dll</HintPath>
</Reference>
<Reference Include="Dapplo.CaliburnMicro.Security, Version=0.5.28.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.CaliburnMicro.Security.0.5.28\lib\net45\Dapplo.CaliburnMicro.Security.dll</HintPath>
</Reference>
<Reference Include="Dapplo.CaliburnMicro.Translations, Version=0.5.28.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.CaliburnMicro.Translations.0.5.28\lib\net45\Dapplo.CaliburnMicro.Translations.dll</HintPath>
</Reference>
<Reference Include="Dapplo.HttpExtensions, Version=0.8.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.HttpExtensions.0.8.35\lib\net45\Dapplo.HttpExtensions.dll</HintPath>
</Reference>
<Reference Include="Dapplo.HttpExtensions.JsonNet, Version=0.8.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.HttpExtensions.JsonNet.0.8.35\lib\net45\Dapplo.HttpExtensions.JsonNet.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Ini, Version=0.5.24.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Ini.0.5.24\lib\net45\Dapplo.Ini.dll</HintPath>
</Reference>
<Reference Include="Dapplo.InterfaceImpl, Version=0.2.12.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Language, Version=0.5.24.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Language.0.5.24\lib\net45\Dapplo.Language.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Log, Version=1.2.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Utils, Version=1.0.158.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Utils.1.0.158\lib\net45\Dapplo.Utils.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.0.5.54\lib\net45\Dapplo.Windows.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows.Common, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.Common.0.5.54\lib\net45\Dapplo.Windows.Common.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows.DesktopWindowsManager, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.54\lib\net45\Dapplo.Windows.DesktopWindowsManager.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows.Dpi, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.Dpi.0.5.54\lib\net45\Dapplo.Windows.Dpi.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows.Gdi32, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.Gdi32.0.5.54\lib\net45\Dapplo.Windows.Gdi32.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows.Input, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.Input.0.5.54\lib\net45\Dapplo.Windows.Input.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows.Kernel32, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.Kernel32.0.5.54\lib\net45\Dapplo.Windows.Kernel32.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows.Messages, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.Messages.0.5.54\lib\net45\Dapplo.Windows.Messages.dll</HintPath>
</Reference>
<Reference Include="Dapplo.Windows.User32, Version=0.5.54.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Dapplo.Windows.User32.0.5.54\lib\net45\Dapplo.Windows.User32.dll</HintPath>
</Reference>
<Reference Include="MahApps.Metro, Version=1.6.1.4, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MahApps.Metro.1.6.1\lib\net45\MahApps.Metro.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Core, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.Core.3.1.1\lib\net45\System.Reactive.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Reactive.Interfaces, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.Interfaces.3.1.1\lib\net45\System.Reactive.Interfaces.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Reactive.Linq, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.Linq.3.1.1\lib\net45\System.Reactive.Linq.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.VisualBasic" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Runtime.Caching" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Entities\Attributes.cs" />
<Compile Include="Entities\Item.cs" />
<Compile Include="Entities\Operation.cs" />
<Compile Include="Entities\Value.cs" />
<Compile Include="Entities\WorkItemList.cs" />
<Compile Include="Entities\WorkItemQueryResult.cs" />
<Compile Include="Entities\WorkItemFields.cs" />
<Compile Include="Entities\WorkItem.cs" />
<Compile Include="ITfsConfiguration.cs" />
<Compile Include="ITfsLanguage.cs" />
<Compile Include="TfsClient.cs" />
<Compile Include="TfsDestination.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ViewModels\TfsConfigViewModel.cs" />
<None Include="packages.config" />
<None Include="Languages\language_tfsplugin-en-US.xml" />
<EmbeddedResource Include="vsts.png" />
</ItemGroup>
<ItemGroup>
<Page Include="Views\TfsConfigView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<ItemGroup />
<PropertyGroup>
<PostBuildEvent>
mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Plugins\$(ProjectName)"
copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName)" "$(SolutionDir)Greenshot\bin\$(Configuration)\Plugins\$(ProjectName)\*.gsp"
copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Plugins\$(ProjectName)\"
mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\Plugins\$(ProjectName)"
copy "$(ProjectDir)Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\Plugins\$(ProjectName)\"
</PostBuildEvent>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,51 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
#region Usings
using System;
using System.ComponentModel;
using Dapplo.Ini;
using Dapplo.Ini.Converters;
using Dapplo.InterfaceImpl.Extensions;
using Greenshot.Addons.Core;
#endregion
namespace Greenshot.Addon.Tfs
{
[IniSection("Tfs")]
[Description("Greenshot Tfs Addon configuration")]
public interface ITfsConfiguration : IIniSection, IDestinationFileConfiguration, ITransactionalProperties, INotifyPropertyChanged
{
[Description("After upload copy OneDrive link to clipboard.")]
[DefaultValue("true")]
bool AfterUploadLinkToClipBoard { get; set; }
[Description("The URI to your TFS system.")]
Uri TfsUri { get; set; }
[TypeConverter(typeof(StringEncryptionTypeConverter))]
string ApiKey { get; set; }
}
}

View file

@ -0,0 +1,50 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
#region Usings
using System.ComponentModel;
using Dapplo.Language;
#endregion
namespace Greenshot.Addon.Tfs
{
[Language("Tfs")]
public interface ITfsLanguage : ILanguage, INotifyPropertyChanged
{
string CommunicationWait { get; }
string LabelUrl { get; }
string LabelApiKey { get; }
string SettingsTitle { get; }
string UploadFailure { get; }
string UploadMenuItem { get; }
string UsePageLink { get; }
}
}

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<language>
<resources prefix="Tfs">
<resource name="communication_wait">Communicating with TFS. Please wait...</resource>
<resource name="label_link_type">Link Type</resource>
<resource name="settings_title">TFS settings</resource>
<resource name="upload_failure">An error occured while uploading to TFS:</resource>
<resource name="upload_menu_item">Upload to TFS</resource>
<resource name="label_url">Url</resource>
<resource name="label_apikey">Api Key</resource>
</resources>
</language>

View file

@ -0,0 +1,54 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
#region Usings
using System.Reflection;
using System.Runtime.InteropServices;
#endregion
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Greenshot.Addon.Tfs")]
[assembly: AssemblyDescription("A plugin to upload screenshots to Tfs")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Greenshot")]
[assembly: AssemblyProduct("Tfs plugin")]
[assembly: AssemblyCopyright("Copyright (C) Greenshot 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]
// The assembly version, replaced by build scripts
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View file

@ -0,0 +1,186 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Dapplo.HttpExtensions;
using Dapplo.HttpExtensions.Factory;
using Dapplo.HttpExtensions.JsonNet;
using Greenshot.Addon.Tfs.Entities;
using Greenshot.Addons.Core;
using Greenshot.Addons.Extensions;
using Greenshot.Addons.Interfaces;
using Newtonsoft.Json.Linq;
namespace Greenshot.Addon.Tfs
{
/// <summary>
/// This capsulates the TFS api calls
/// </summary>
[Export]
public class TfsClient
{
private readonly ICoreConfiguration _coreConfiguration;
private readonly ITfsConfiguration _tfsConfiguration;
private readonly HttpBehaviour _tfsHttpBehaviour;
[ImportingConstructor]
public TfsClient(
ICoreConfiguration coreConfiguration,
ITfsConfiguration tfsConfiguration,
INetworkConfiguration networkConfiguration)
{
_coreConfiguration = coreConfiguration;
_tfsConfiguration = tfsConfiguration;
_tfsHttpBehaviour = new HttpBehaviour
{
HttpSettings = networkConfiguration,
JsonSerializer = new JsonNetJsonSerializer()
};
}
public bool CanUpdate => _tfsConfiguration.TfsUri != null && !string.IsNullOrEmpty(_tfsConfiguration.ApiKey);
public IDictionary<long, WorkItem> WorkItems { get; } = new Dictionary<long, WorkItem>();
public async Task UpdateWorkItems()
{
if (!CanUpdate)
{
return;
}
var workItems = await GetOwnWorkitems();
foreach (var workItem in workItems.Items)
{
WorkItems[workItem.Id] = workItem;
}
}
/// <summary>
/// Retrieve the own workitems
/// </summary>
/// <returns>WorkItemList</returns>
public async Task<WorkItemList> GetOwnWorkitems()
{
_tfsHttpBehaviour.MakeCurrent();
Uri apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0");
var client = HttpClientFactory.Create(_tfsConfiguration.TfsUri).SetBasicAuthorization("", _tfsConfiguration.ApiKey);
var workitemsQueryUri = apiUri.AppendSegments("wit", "wiql");
var wiql = new JObject { { "query", "Select [System.Id] FROM WorkItems WHERE [System.AssignedTo] = @me" } };
var queryResult = await client.PostAsync<HttpResponse<WorkItemQueryResult, string>>(workitemsQueryUri, wiql);
if (queryResult.HasError)
{
throw new Exception(queryResult.ErrorResponse);
}
var workItemsUri = apiUri.AppendSegments("wit", "workItems").ExtendQuery("ids", string.Join(",",queryResult.Response.Items.Select(item => item.Id)));
var result = await client.GetAsAsync<HttpResponse<WorkItemList, string>>(workItemsUri);
if (result.HasError)
{
throw new Exception(result.ErrorResponse);
}
return result.Response;
}
/// <summary>
/// See <a href="https://docs.microsoft.com/en-us/rest/api/vsts/wit/attachments/create">here</a>
/// </summary>
/// <param name="surface">ISurface to attach</param>
/// <returns></returns>
public async Task<CreateAttachmentResult> CreateAttachment(ISurface surface)
{
_tfsHttpBehaviour.MakeCurrent();
var client = HttpClientFactory.Create(_tfsConfiguration.TfsUri).SetBasicAuthorization("", _tfsConfiguration.ApiKey);
Uri apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0");
var filename = surface.GenerateFilename(_coreConfiguration, _tfsConfiguration);
var attachmentUri = apiUri.AppendSegments("wit", "attachments").ExtendQuery("fileName", filename);
using (var imageStream = new MemoryStream())
{
surface.WriteToStream(imageStream, _coreConfiguration, _tfsConfiguration);
imageStream.Position = 0;
using (var content = new StreamContent(imageStream))
{
content.SetContentType("application/octet-stream");
var createAttachmentresult = await client.PostAsync<HttpResponse<CreateAttachmentResult, string>>(attachmentUri, content);
if (createAttachmentresult.HasError)
{
throw new Exception(createAttachmentresult.ErrorResponse);
}
return createAttachmentresult.Response;
}
}
}
/// <summary>
/// Link the WorkItem and the attachment that was created
/// </summary>
/// <param name="workItem">WorkItem</param>
/// <param name="attachmentResult">CreateAttachmentResult</param>
/// <param name="comment">string with optional comment</param>
public async Task LinkAttachment(WorkItem workItem, CreateAttachmentResult attachmentResult, string comment = "Attached screenshot from Greenshot")
{
_tfsHttpBehaviour.MakeCurrent();
var client = HttpClientFactory.Create(_tfsConfiguration.TfsUri).SetBasicAuthorization("", _tfsConfiguration.ApiKey);
Uri apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0");
// https://docs.microsoft.com/en-us/rest/api/vsts/wit/work%20items/update#add_an_attachment
var linkAttachmentUri = apiUri.AppendSegments("wit", "workItems", workItem.Id);
var linkAttachmentRequest = new List<Operation>
{
new Operation
{
OperationType = "add",
Path = "/relations/-",
Value = new Value
{
Relation = "AttachedFile",
Url = attachmentResult.Url,
Attributes = new Attributes
{
Comment = comment
}
}
}
};
var content = HttpContentFactory.Create(linkAttachmentRequest);
content.SetContentType("application/json-patch+json");
var result = await client.PatchAsync<HttpResponse<string, string>>(linkAttachmentUri, content);
if (result.HasError)
{
throw new Exception(result.ErrorResponse);
}
}
}
}

View file

@ -0,0 +1,193 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
#region Usings
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Dapplo.Addons.Bootstrapper.Resolving;
using Dapplo.Log;
using Greenshot.Addon.Tfs.Entities;
using Greenshot.Addons.Addons;
using Greenshot.Addons.Controls;
using Greenshot.Addons.Core;
using Greenshot.Addons.Interfaces;
using Greenshot.Gfx;
#endregion
namespace Greenshot.Addon.Tfs
{
/// <summary>
/// Description of OneDriveDestination.
/// </summary>
[Destination("Tfs")]
public class TfsDestination : AbstractDestination
{
private static readonly LogSource Log = new LogSource();
private readonly ITfsConfiguration _tfsConfiguration;
private readonly ITfsLanguage _tfsLanguage;
private readonly TfsClient _tfsClient;
private readonly WorkItem _workItem;
[ImportingConstructor]
public TfsDestination(
ITfsConfiguration tfsConfiguration,
ITfsLanguage tfsLanguage,
TfsClient tfsClient)
{
_tfsConfiguration = tfsConfiguration;
_tfsLanguage = tfsLanguage;
_tfsClient = tfsClient;
var ignoreTask = _tfsClient.UpdateWorkItems();
}
public TfsDestination(
ITfsConfiguration tfsConfiguration,
ITfsLanguage tfsLanguage,
TfsClient tfsClient, WorkItem workItem) : this(tfsConfiguration, tfsLanguage, tfsClient)
{
_workItem = workItem;
}
public override bool IsActive => base.IsActive && _tfsClient.CanUpdate;
public override bool IsDynamic => true;
public override IEnumerable<IDestination> DynamicDestinations()
{
var workitems = _tfsClient.WorkItems.Values;
if (workitems.Count == 0)
{
yield break;
}
foreach (var workitem in workitems)
{
yield return new TfsDestination(_tfsConfiguration, _tfsLanguage, _tfsClient, workitem)
{
CoreConfiguration = CoreConfiguration,
GreenshotLanguage = GreenshotLanguage
};
}
}
public override string Description
{
get
{
if (_workItem?.Fields?.Title == null)
{
return _tfsLanguage.UploadMenuItem;
}
// Format the title of this destination
return _workItem.Id + ": " + _workItem.Fields.Title.Substring(0, Math.Min(20, _workItem.Fields.Title.Length));
}
}
public override Bitmap DisplayIcon
{
get
{
// TODO: Optimize this
var embeddedResource = GetType().Assembly.FindEmbeddedResources(@".*vsts\.png").FirstOrDefault();
using (var bitmapStream = GetType().Assembly.GetEmbeddedResourceAsStream(embeddedResource))
{
return BitmapHelper.FromStream(bitmapStream);
}
}
}
public override async Task<ExportInformation> ExportCaptureAsync(bool manuallyInitiated, ISurface surface,
ICaptureDetails captureDetails)
{
if (_workItem == null)
{
return new ExportInformation(Designation, Description)
{
ExportMade = false
};
}
var uploadUrl = await Upload(_workItem, surface);
var exportInformation = new ExportInformation(Designation, Description)
{
ExportMade = uploadUrl != null,
Uri = uploadUrl?.AbsoluteUri
};
ProcessExport(exportInformation, surface);
return exportInformation;
}
/// <summary>
/// Upload the capture to Tfs
/// </summary>
/// <param name="workItem">WorkItem</param>
/// <param name="surfaceToUpload">ISurface</param>
/// <returns>Uri</returns>
private async Task<Uri> Upload(WorkItem workItem, ISurface surfaceToUpload)
{
try
{
Uri response;
var cancellationTokenSource = new CancellationTokenSource();
using (var pleaseWaitForm = new PleaseWaitForm("OneDrive plug-in", _tfsLanguage.CommunicationWait,
cancellationTokenSource))
{
pleaseWaitForm.Show();
try
{
var result = await _tfsClient.CreateAttachment(surfaceToUpload);
await _tfsClient.LinkAttachment(workItem, result);
response = result.Url;
}
finally
{
pleaseWaitForm.Close();
}
}
if (_tfsConfiguration.AfterUploadLinkToClipBoard)
{
ClipboardHelper.SetClipboardData(response.ToString());
}
return response;
}
catch (Exception e)
{
Log.Error().WriteLine(e, "Error uploading.");
MessageBox.Show(_tfsLanguage.UploadFailure + " " + e.Message);
}
return null;
}
}
}

View file

@ -0,0 +1,84 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using System.ComponentModel.Composition;
using System.Reactive.Disposables;
using Dapplo.CaliburnMicro.Configuration;
using Dapplo.CaliburnMicro.Extensions;
using Greenshot.Addons;
using Greenshot.Addons.Core;
using Greenshot.Addons.ViewModels;
namespace Greenshot.Addon.Tfs.ViewModels
{
[Export(typeof(IConfigScreen))]
public sealed class TfsConfigViewModel : SimpleConfigScreen
{
/// <summary>
/// Here all disposables are registered, so we can clean the up
/// </summary>
private CompositeDisposable _disposables;
[Import]
public ITfsConfiguration TfsConfiguration { get; set; }
[Import]
public ITfsLanguage TfsLanguage { get; set; }
[Import]
public IGreenshotLanguage GreenshotLanguage { get; set; }
[Import]
public TfsClient TfsClient { get; private set; }
[Import]
public FileConfigPartViewModel FileConfigPartViewModel { get; private set; }
public override void Initialize(IConfig config)
{
FileConfigPartViewModel.DestinationFileConfiguration = TfsConfiguration;
// Prepare disposables
_disposables?.Dispose();
// Place this config viewmodel under the Destinations parent
ParentId = nameof(ConfigIds.Destinations);
// Make sure Commit/Rollback is called on the IUiConfiguration
config.Register(TfsConfiguration);
// automatically update the DisplayName
_disposables = new CompositeDisposable
{
TfsLanguage.CreateDisplayNameBinding(this, nameof(ITfsLanguage.SettingsTitle))
};
base.Initialize(config);
}
protected override void OnDeactivate(bool close)
{
var ignoreTask = TfsClient.UpdateWorkItems();
_disposables.Dispose();
base.OnDeactivate(close);
}
}
}

View file

@ -0,0 +1,26 @@
<UserControl x:Class="Greenshot.Addon.Tfs.Views.TfsConfigView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Greenshot.Addon.Tfs.ViewModels"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance viewModels:TfsConfigViewModel,IsDesignTimeCreatable=False}"
>
<StackPanel>
<GroupBox Header="{Binding TfsLanguage.SettingsTitle}">
<StackPanel>
<ContentControl x:Name="FileConfigPartViewModel"/>
<CheckBox IsChecked="{Binding TfsConfiguration.AfterUploadLinkToClipBoard}" Content="{Binding TfsLanguage.UsePageLink}"/>
<DockPanel LastChildFill="True">
<Label Content="{Binding TfsLanguage.LabelUrl}" Width="100" />
<TextBox Text="{Binding TfsConfiguration.TfsUri}" />
</DockPanel>
<DockPanel LastChildFill="True">
<Label Content="{Binding TfsLanguage.LabelApiKey}" Width="100" />
<TextBox Text="{Binding TfsConfiguration.ApiKey}" />
</DockPanel>
</StackPanel>
</GroupBox>
</StackPanel>
</UserControl>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Caliburn.Micro" version="3.2.0" targetFramework="net452" />
<package id="Caliburn.Micro.Core" version="3.2.0" targetFramework="net452" />
<package id="CommonServiceLocator" version="2.0.3" targetFramework="net452" />
<package id="Dapplo.Addons" version="0.5.56" targetFramework="net452" />
<package id="Dapplo.Addons.Bootstrapper" version="0.5.56" targetFramework="net452" />
<package id="Dapplo.CaliburnMicro" version="0.5.28" targetFramework="net452" />
<package id="Dapplo.CaliburnMicro.Configuration" version="0.5.28" targetFramework="net452" />
<package id="Dapplo.CaliburnMicro.Dapp" version="0.5.28" targetFramework="net452" />
<package id="Dapplo.CaliburnMicro.Menu" version="0.5.28" targetFramework="net452" />
<package id="Dapplo.CaliburnMicro.Security" version="0.5.28" targetFramework="net452" />
<package id="Dapplo.CaliburnMicro.Translations" version="0.5.28" targetFramework="net452" />
<package id="Dapplo.HttpExtensions" version="0.8.35" targetFramework="net452" />
<package id="Dapplo.HttpExtensions.JsonNet" version="0.8.35" targetFramework="net452" />
<package id="Dapplo.Ini" version="0.5.24" targetFramework="net452" />
<package id="Dapplo.InterfaceImpl" version="0.2.12" targetFramework="net452" />
<package id="Dapplo.Language" version="0.5.24" targetFramework="net452" />
<package id="Dapplo.Log" version="1.2.1" targetFramework="net452" />
<package id="Dapplo.Utils" version="1.0.158" targetFramework="net452" />
<package id="Dapplo.Windows" version="0.5.54" targetFramework="net452" />
<package id="Dapplo.Windows.Common" version="0.5.54" targetFramework="net452" />
<package id="Dapplo.Windows.DesktopWindowsManager" version="0.5.54" targetFramework="net452" />
<package id="Dapplo.Windows.Dpi" version="0.5.54" targetFramework="net452" />
<package id="Dapplo.Windows.Gdi32" version="0.5.54" targetFramework="net452" />
<package id="Dapplo.Windows.Input" version="0.5.54" targetFramework="net452" />
<package id="Dapplo.Windows.Kernel32" version="0.5.54" targetFramework="net452" />
<package id="Dapplo.Windows.Messages" version="0.5.54" targetFramework="net452" />
<package id="Dapplo.Windows.User32" version="0.5.54" targetFramework="net452" />
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net452" />
<package id="System.Reactive.Core" version="3.1.1" targetFramework="net45" />
<package id="System.Reactive.Interfaces" version="3.1.1" targetFramework="net45" />
<package id="System.Reactive.Linq" version="3.1.1" targetFramework="net45" />
</packages>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2036
VisualStudioVersion = 15.0.27130.2027
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot", "Greenshot\Greenshot.csproj", "{CD642BF4-D815-4D67-A0B5-C69F0B8231AF}"
EndProject
@ -50,6 +50,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Gfx.Experimental"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.OneDrive", "Greenshot.Addon.OneDrive\Greenshot.Addon.OneDrive.csproj", "{B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Tfs", "Greenshot.Addon.Tfs\Greenshot.Addon.Tfs.csproj", "{8B3643A5-AFED-49FF-8D66-6348FB102EB2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -222,6 +224,14 @@ Global
{B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|Any CPU.Build.0 = Release|Any CPU
{B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|x86.ActiveCfg = Release|x86
{B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|x86.Build.0 = Release|x86
{8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|x86.ActiveCfg = Debug|x86
{8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|x86.Build.0 = Debug|x86
{8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|Any CPU.Build.0 = Release|Any CPU
{8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|x86.ActiveCfg = Release|x86
{8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE