mirror of
https://github.com/greenshot/greenshot
synced 2025-07-30 03:30:02 -07:00
Updated the jira code, in the hope to solve BUG-2122
This commit is contained in:
parent
5bdfcd5306
commit
e08985fd6f
5 changed files with 45 additions and 45 deletions
|
@ -34,16 +34,16 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Dapplo.HttpExtensions, Version=0.6.10.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Dapplo.HttpExtensions, Version=0.6.17.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Dapplo.HttpExtensions.0.6.10\lib\net45\Dapplo.HttpExtensions.dll</HintPath>
|
<HintPath>..\packages\Dapplo.HttpExtensions.0.6.17\lib\net45\Dapplo.HttpExtensions.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Dapplo.Jira, Version=0.3.4.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Dapplo.Jira, Version=0.5.8.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Dapplo.Jira.0.3.4\lib\net45\Dapplo.Jira.dll</HintPath>
|
<HintPath>..\packages\Dapplo.Jira.0.5.8\lib\net45\Dapplo.Jira.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Dapplo.Log, Version=1.0.22.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Dapplo.Log, Version=1.0.23.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Dapplo.Log.1.0.22\lib\net45\Dapplo.Log.dll</HintPath>
|
<HintPath>..\packages\Dapplo.Log.1.0.23\lib\net45\Dapplo.Log.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="log4net">
|
<Reference Include="log4net">
|
||||||
|
|
|
@ -33,11 +33,11 @@ namespace GreenshotJiraPlugin
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class IssueTypeBitmapCache : AsyncMemoryCache<IssueType, Bitmap>
|
public class IssueTypeBitmapCache : AsyncMemoryCache<IssueType, Bitmap>
|
||||||
{
|
{
|
||||||
private readonly JiraApi _jiraApi;
|
private readonly IJiraClient _jiraClient;
|
||||||
|
|
||||||
public IssueTypeBitmapCache(JiraApi jiraApi)
|
public IssueTypeBitmapCache(IJiraClient jiraClient)
|
||||||
{
|
{
|
||||||
_jiraApi = jiraApi;
|
_jiraClient = jiraClient;
|
||||||
// Set the expire timeout to an hour
|
// Set the expire timeout to an hour
|
||||||
ExpireTimeSpan = TimeSpan.FromHours(4);
|
ExpireTimeSpan = TimeSpan.FromHours(4);
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ namespace GreenshotJiraPlugin
|
||||||
|
|
||||||
protected override async Task<Bitmap> CreateAsync(IssueType issueType, CancellationToken cancellationToken = new CancellationToken())
|
protected override async Task<Bitmap> CreateAsync(IssueType issueType, CancellationToken cancellationToken = new CancellationToken())
|
||||||
{
|
{
|
||||||
return await _jiraApi.GetUriContentAsync<Bitmap>(issueType.IconUri, cancellationToken).ConfigureAwait(false);
|
return await _jiraClient.Server.GetUriContentAsync<Bitmap>(issueType.IconUri, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ using GreenshotPlugin.Core;
|
||||||
|
|
||||||
namespace GreenshotJiraPlugin {
|
namespace GreenshotJiraPlugin {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This encapsulates the JiraApi to make it possible to change as less old Greenshot code as needed
|
/// This encapsulates the JiraClient to make it possible to change as less old Greenshot code as needed
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class JiraConnector : IDisposable {
|
public class JiraConnector : IDisposable {
|
||||||
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(JiraConnector));
|
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(JiraConnector));
|
||||||
|
@ -48,7 +48,7 @@ namespace GreenshotJiraPlugin {
|
||||||
private DateTimeOffset _loggedInTime = DateTimeOffset.MinValue;
|
private DateTimeOffset _loggedInTime = DateTimeOffset.MinValue;
|
||||||
private bool _loggedIn;
|
private bool _loggedIn;
|
||||||
private readonly int _timeout;
|
private readonly int _timeout;
|
||||||
private JiraApi _jiraApi;
|
private IJiraClient _jiraClient;
|
||||||
private IssueTypeBitmapCache _issueTypeBitmapCache;
|
private IssueTypeBitmapCache _issueTypeBitmapCache;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -60,7 +60,7 @@ namespace GreenshotJiraPlugin {
|
||||||
{
|
{
|
||||||
if (args.PropertyName == nameof(CoreConfig.IconSize))
|
if (args.PropertyName == nameof(CoreConfig.IconSize))
|
||||||
{
|
{
|
||||||
JiraPlugin.Instance.JiraConnector._jiraApi?.Behaviour.SetConfig(new SvgConfiguration { Width = CoreConfig.IconSize.Width, Height = CoreConfig.IconSize.Height });
|
JiraPlugin.Instance.JiraConnector._jiraClient?.Behaviour.SetConfig(new SvgConfiguration { Width = CoreConfig.IconSize.Width, Height = CoreConfig.IconSize.Height });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ namespace GreenshotJiraPlugin {
|
||||||
/// Dispose, logout the users
|
/// Dispose, logout the users
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Dispose() {
|
public void Dispose() {
|
||||||
if (_jiraApi != null)
|
if (_jiraClient != null)
|
||||||
{
|
{
|
||||||
Task.Run(async () => await LogoutAsync()).Wait();
|
Task.Run(async () => await LogoutAsync()).Wait();
|
||||||
}
|
}
|
||||||
|
@ -103,21 +103,21 @@ namespace GreenshotJiraPlugin {
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
_jiraApi = new JiraApi(new Uri(JiraConfig.Url));
|
_jiraClient = JiraClient.Create(new Uri(JiraConfig.Url));
|
||||||
_jiraApi.Behaviour.SetConfig(new SvgConfiguration { Width = CoreConfig.IconSize.Width, Height = CoreConfig.IconSize.Height });
|
_jiraClient.Behaviour.SetConfig(new SvgConfiguration { Width = CoreConfig.IconSize.Width, Height = CoreConfig.IconSize.Height });
|
||||||
|
|
||||||
_issueTypeBitmapCache = new IssueTypeBitmapCache(_jiraApi);
|
_issueTypeBitmapCache = new IssueTypeBitmapCache(_jiraClient);
|
||||||
LoginInfo loginInfo;
|
LoginInfo loginInfo;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
loginInfo = await _jiraApi.Session.StartAsync(user, password, cancellationToken);
|
loginInfo = await _jiraClient.Session.StartAsync(user, password, cancellationToken);
|
||||||
Monitor = new JiraMonitor();
|
Monitor = new JiraMonitor();
|
||||||
await Monitor.AddJiraInstanceAsync(_jiraApi, cancellationToken);
|
await Monitor.AddJiraInstanceAsync(_jiraClient, cancellationToken);
|
||||||
|
|
||||||
var favIconUri = _jiraApi.JiraBaseUri.AppendSegments("favicon.ico");
|
var favIconUri = _jiraClient.JiraBaseUri.AppendSegments("favicon.ico");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
FavIcon = await _jiraApi.GetUriContentAsync<Bitmap>(favIconUri, cancellationToken);
|
FavIcon = await _jiraClient.Server.GetUriContentAsync<Bitmap>(favIconUri, cancellationToken);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -177,10 +177,10 @@ namespace GreenshotJiraPlugin {
|
||||||
/// End the session, if there was one
|
/// End the session, if there was one
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task LogoutAsync(CancellationToken cancellationToken = default(CancellationToken)) {
|
public async Task LogoutAsync(CancellationToken cancellationToken = default(CancellationToken)) {
|
||||||
if (_jiraApi != null && _loggedIn)
|
if (_jiraClient != null && _loggedIn)
|
||||||
{
|
{
|
||||||
Monitor.Dispose();
|
Monitor.Dispose();
|
||||||
await _jiraApi.Session.EndAsync(cancellationToken);
|
await _jiraClient.Session.EndAsync(cancellationToken);
|
||||||
_loggedIn = false;
|
_loggedIn = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,7 @@ namespace GreenshotJiraPlugin {
|
||||||
public async Task<IList<Filter>> GetFavoriteFiltersAsync(CancellationToken cancellationToken = default(CancellationToken))
|
public async Task<IList<Filter>> GetFavoriteFiltersAsync(CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
await CheckCredentialsAsync(cancellationToken);
|
await CheckCredentialsAsync(cancellationToken);
|
||||||
return await _jiraApi.Filter.GetFavoritesAsync(cancellationToken).ConfigureAwait(false);
|
return await _jiraClient.Filter.GetFavoritesAsync(cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -222,7 +222,7 @@ namespace GreenshotJiraPlugin {
|
||||||
await CheckCredentialsAsync(cancellationToken);
|
await CheckCredentialsAsync(cancellationToken);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return await _jiraApi.Issue.GetAsync(issueKey, cancellationToken).ConfigureAwait(false);
|
return await _jiraClient.Issue.GetAsync(issueKey, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@ -244,7 +244,7 @@ namespace GreenshotJiraPlugin {
|
||||||
{
|
{
|
||||||
content.WriteToStream(memoryStream);
|
content.WriteToStream(memoryStream);
|
||||||
memoryStream.Seek(0, SeekOrigin.Begin);
|
memoryStream.Seek(0, SeekOrigin.Begin);
|
||||||
await _jiraApi.Attachment.AttachAsync(issueKey, memoryStream, content.Filename, content.ContentType, cancellationToken).ConfigureAwait(false);
|
await _jiraClient.Attachment.AttachAsync(issueKey, memoryStream, content.Filename, content.ContentType, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ namespace GreenshotJiraPlugin {
|
||||||
public async Task AddCommentAsync(string issueKey, string body, string visibility = null, CancellationToken cancellationToken = default(CancellationToken))
|
public async Task AddCommentAsync(string issueKey, string body, string visibility = null, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
await CheckCredentialsAsync(cancellationToken);
|
await CheckCredentialsAsync(cancellationToken);
|
||||||
await _jiraApi.Issue.AddCommentAsync(issueKey, body, visibility, cancellationToken).ConfigureAwait(false);
|
await _jiraClient.Issue.AddCommentAsync(issueKey, body, visibility, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -270,7 +270,7 @@ namespace GreenshotJiraPlugin {
|
||||||
public async Task<IList<Issue>> SearchAsync(Filter filter, CancellationToken cancellationToken = default(CancellationToken))
|
public async Task<IList<Issue>> SearchAsync(Filter filter, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
{
|
{
|
||||||
await CheckCredentialsAsync(cancellationToken);
|
await CheckCredentialsAsync(cancellationToken);
|
||||||
var searchResult = await _jiraApi.Issue.SearchAsync(filter.Jql, 20, new[] { "summary", "reporter", "assignee", "created", "issuetype" }, cancellationToken).ConfigureAwait(false);
|
var searchResult = await _jiraClient.Issue.SearchAsync(filter.Jql, 20, new[] { "summary", "reporter", "assignee", "created", "issuetype" }, cancellationToken).ConfigureAwait(false);
|
||||||
return searchResult.Issues;
|
return searchResult.Issues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,7 +288,7 @@ namespace GreenshotJiraPlugin {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the base uri
|
/// Get the base uri
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Uri JiraBaseUri => _jiraApi.JiraBaseUri;
|
public Uri JiraBaseUri => _jiraClient.JiraBaseUri;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Is the user "logged in?
|
/// Is the user "logged in?
|
||||||
|
|
|
@ -42,8 +42,8 @@ namespace GreenshotJiraPlugin
|
||||||
private static readonly LogSource Log = new LogSource();
|
private static readonly LogSource Log = new LogSource();
|
||||||
private readonly Regex _jiraKeyPattern = new Regex(@"[A-Z][A-Z0-9]+\-[0-9]+");
|
private readonly Regex _jiraKeyPattern = new Regex(@"[A-Z][A-Z0-9]+\-[0-9]+");
|
||||||
private readonly WindowsTitleMonitor _monitor;
|
private readonly WindowsTitleMonitor _monitor;
|
||||||
private readonly IList<JiraApi> _jiraInstances = new List<JiraApi>();
|
private readonly IList<IJiraClient> _jiraInstances = new List<IJiraClient>();
|
||||||
private readonly IDictionary<string, JiraApi> _projectJiraApiMap = new Dictionary<string, JiraApi>();
|
private readonly IDictionary<string, IJiraClient> _projectJiraClientMap = new Dictionary<string, IJiraClient>();
|
||||||
private readonly int _maxEntries;
|
private readonly int _maxEntries;
|
||||||
// TODO: Add issues from issueHistory (JQL -> Where.IssueKey.InIssueHistory())
|
// TODO: Add issues from issueHistory (JQL -> Where.IssueKey.InIssueHistory())
|
||||||
private IDictionary<string, JiraDetails> _recentJiras = new Dictionary<string, JiraDetails>();
|
private IDictionary<string, JiraDetails> _recentJiras = new Dictionary<string, JiraDetails>();
|
||||||
|
@ -93,10 +93,10 @@ namespace GreenshotJiraPlugin
|
||||||
/// Retrieve the API belonging to a JiraDetails
|
/// Retrieve the API belonging to a JiraDetails
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="jiraDetails"></param>
|
/// <param name="jiraDetails"></param>
|
||||||
/// <returns>JiraAPI</returns>
|
/// <returns>IJiraClient</returns>
|
||||||
public JiraApi GetJiraApiForKey(JiraDetails jiraDetails)
|
public IJiraClient GetJiraClientForKey(JiraDetails jiraDetails)
|
||||||
{
|
{
|
||||||
return _projectJiraApiMap[jiraDetails.ProjectKey];
|
return _projectJiraClientMap[jiraDetails.ProjectKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -117,7 +117,7 @@ namespace GreenshotJiraPlugin
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="jiraInstance"></param>
|
/// <param name="jiraInstance"></param>
|
||||||
/// <param name="token"></param>
|
/// <param name="token"></param>
|
||||||
public async Task AddJiraInstanceAsync(JiraApi jiraInstance, CancellationToken token = default(CancellationToken))
|
public async Task AddJiraInstanceAsync(IJiraClient jiraInstance, CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
_jiraInstances.Add(jiraInstance);
|
_jiraInstances.Add(jiraInstance);
|
||||||
var projects = await jiraInstance.Project.GetAllAsync(cancellationToken: token).ConfigureAwait(false);
|
var projects = await jiraInstance.Project.GetAllAsync(cancellationToken: token).ConfigureAwait(false);
|
||||||
|
@ -125,9 +125,9 @@ namespace GreenshotJiraPlugin
|
||||||
{
|
{
|
||||||
foreach (var project in projects)
|
foreach (var project in projects)
|
||||||
{
|
{
|
||||||
if (!_projectJiraApiMap.ContainsKey(project.Key))
|
if (!_projectJiraClientMap.ContainsKey(project.Key))
|
||||||
{
|
{
|
||||||
_projectJiraApiMap.Add(project.Key, jiraInstance);
|
_projectJiraClientMap.Add(project.Key, jiraInstance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,10 +142,10 @@ namespace GreenshotJiraPlugin
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
JiraApi jiraApi;
|
IJiraClient jiraClient;
|
||||||
if (_projectJiraApiMap.TryGetValue(jiraDetails.ProjectKey, out jiraApi))
|
if (_projectJiraClientMap.TryGetValue(jiraDetails.ProjectKey, out jiraClient))
|
||||||
{
|
{
|
||||||
var issue = await jiraApi.Issue.GetAsync(jiraDetails.JiraKey).ConfigureAwait(false);
|
var issue = await jiraClient.Issue.GetAsync(jiraDetails.JiraKey).ConfigureAwait(false);
|
||||||
jiraDetails.JiraIssue = issue;
|
jiraDetails.JiraIssue = issue;
|
||||||
}
|
}
|
||||||
// Send event
|
// Send event
|
||||||
|
@ -179,9 +179,9 @@ namespace GreenshotJiraPlugin
|
||||||
var projectKey = jiraKeyParts[0];
|
var projectKey = jiraKeyParts[0];
|
||||||
var jiraId = jiraKeyParts[1];
|
var jiraId = jiraKeyParts[1];
|
||||||
|
|
||||||
JiraApi jiraApi;
|
IJiraClient jiraClient;
|
||||||
// Check if we have a JIRA instance with a project for this key
|
// Check if we have a JIRA instance with a project for this key
|
||||||
if (_projectJiraApiMap.TryGetValue(projectKey, out jiraApi))
|
if (_projectJiraClientMap.TryGetValue(projectKey, out jiraClient))
|
||||||
{
|
{
|
||||||
// We have found a project for this _jira key, so it must be a valid & known JIRA
|
// We have found a project for this _jira key, so it must be a valid & known JIRA
|
||||||
JiraDetails currentJiraDetails;
|
JiraDetails currentJiraDetails;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Dapplo.HttpExtensions" version="0.6.10" targetFramework="net45" />
|
<package id="Dapplo.HttpExtensions" version="0.6.17" targetFramework="net45" />
|
||||||
<package id="Dapplo.Jira" version="0.3.4" targetFramework="net45" />
|
<package id="Dapplo.Jira" version="0.5.8" targetFramework="net45" />
|
||||||
<package id="Dapplo.Log" version="1.0.22" targetFramework="net45" />
|
<package id="Dapplo.Log" version="1.0.23" targetFramework="net45" />
|
||||||
<package id="LibZ.Tool" version="1.2.0.0" targetFramework="net45" />
|
<package id="LibZ.Tool" version="1.2.0.0" targetFramework="net45" />
|
||||||
<package id="Svg" version="2.3.0" targetFramework="net45" />
|
<package id="Svg" version="2.3.0" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
Loading…
Add table
Add a link
Reference in a new issue