mirror of
https://github.com/greenshot/greenshot
synced 2025-08-21 05:53:27 -07:00
Added LinqBridge and did some code cleanup.
This commit is contained in:
parent
fc192827f1
commit
7c7fd67b2a
20 changed files with 327 additions and 343 deletions
|
@ -94,8 +94,8 @@ namespace Confluence {
|
|||
public class ConfluenceConnector : IDisposable {
|
||||
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(ConfluenceConnector));
|
||||
private const string AuthFailedExceptionName = "com.atlassian.confluence.rpc.AuthenticationFailedException";
|
||||
private const string V2Failed = "AXIS";
|
||||
private static readonly ConfluenceConfiguration Config = IniConfig.GetIniSection<ConfluenceConfiguration>();
|
||||
private const string V2Failed = "AXIS";
|
||||
private static readonly ConfluenceConfiguration Config = IniConfig.GetIniSection<ConfluenceConfiguration>();
|
||||
private string _credentials;
|
||||
private DateTime _loggedInTime = DateTime.Now;
|
||||
private bool _loggedIn;
|
||||
|
@ -123,17 +123,17 @@ namespace Confluence {
|
|||
|
||||
public ConfluenceConnector(string url, int timeout) {
|
||||
_timeout = timeout;
|
||||
Init(url);
|
||||
Init(url);
|
||||
}
|
||||
|
||||
private void Init(string url) {
|
||||
_url = url;
|
||||
_confluence = new ConfluenceSoapServiceService
|
||||
{
|
||||
Url = url,
|
||||
Proxy = NetworkHelper.CreateProxy(new Uri(url))
|
||||
};
|
||||
}
|
||||
private void Init(string url) {
|
||||
_url = url;
|
||||
_confluence = new ConfluenceSoapServiceService
|
||||
{
|
||||
Url = url,
|
||||
Proxy = NetworkHelper.CreateProxy(new Uri(url))
|
||||
};
|
||||
}
|
||||
|
||||
~ConfluenceConnector() {
|
||||
Dispose(false);
|
||||
|
@ -149,11 +149,11 @@ namespace Confluence {
|
|||
_loggedInTime = DateTime.Now;
|
||||
_loggedIn = true;
|
||||
} catch (Exception e) {
|
||||
// Check if confluence-v2 caused an error, use v1 instead
|
||||
if (e.Message.Contains(V2Failed) && _url.Contains("v2")) {
|
||||
Init(_url.Replace("v2", "v1"));
|
||||
return DoLogin(user, password);
|
||||
}
|
||||
// Check if confluence-v2 caused an error, use v1 instead
|
||||
if (e.Message.Contains(V2Failed) && _url.Contains("v2")) {
|
||||
Init(_url.Replace("v2", "v1"));
|
||||
return DoLogin(user, password);
|
||||
}
|
||||
// check if auth failed
|
||||
if (e.Message.Contains(AuthFailedExceptionName)) {
|
||||
return false;
|
||||
|
@ -173,7 +173,7 @@ namespace Confluence {
|
|||
try {
|
||||
// Get the system name, so the user knows where to login to
|
||||
string systemName = _url.Replace(ConfluenceConfiguration.DEFAULT_POSTFIX1,"");
|
||||
systemName = systemName.Replace(ConfluenceConfiguration.DEFAULT_POSTFIX2, "");
|
||||
systemName = systemName.Replace(ConfluenceConfiguration.DEFAULT_POSTFIX2, "");
|
||||
CredentialsDialog dialog = new CredentialsDialog(systemName)
|
||||
{
|
||||
Name = null
|
||||
|
@ -274,49 +274,40 @@ namespace Confluence {
|
|||
return new Page(page);
|
||||
}
|
||||
|
||||
public List<Space> GetSpaceSummaries() {
|
||||
public IEnumerable<Space> GetSpaceSummaries() {
|
||||
CheckCredentials();
|
||||
RemoteSpaceSummary [] spaces = _confluence.getSpaces(_credentials);
|
||||
List<Space> returnSpaces = new List<Space>();
|
||||
foreach(RemoteSpaceSummary space in spaces) {
|
||||
returnSpaces.Add(new Space(space));
|
||||
yield return new Space(space);
|
||||
}
|
||||
returnSpaces.Sort((x, y) => string.CompareOrdinal(x.Name, y.Name));
|
||||
return returnSpaces;
|
||||
}
|
||||
|
||||
public List<Page> GetPageChildren(Page parentPage) {
|
||||
public IEnumerable<Page> GetPageChildren(Page parentPage) {
|
||||
CheckCredentials();
|
||||
List<Page> returnPages = new List<Page>();
|
||||
RemotePageSummary[] pages = _confluence.getChildren(_credentials, parentPage.Id);
|
||||
foreach(RemotePageSummary page in pages) {
|
||||
returnPages.Add(new Page(page));
|
||||
yield return new Page(page);
|
||||
}
|
||||
returnPages.Sort((x, y) => string.CompareOrdinal(x.Title, y.Title));
|
||||
return returnPages;
|
||||
}
|
||||
|
||||
public List<Page> GetPageSummaries(Space space) {
|
||||
public IEnumerable<Page> GetPageSummaries(Space space) {
|
||||
CheckCredentials();
|
||||
List<Page> returnPages = new List<Page>();
|
||||
RemotePageSummary[] pages = _confluence.getPages(_credentials, space.Key);
|
||||
foreach(RemotePageSummary page in pages) {
|
||||
returnPages.Add(new Page(page));
|
||||
yield return new Page(page);
|
||||
}
|
||||
returnPages.Sort((x, y) => string.CompareOrdinal(x.Title, y.Title));
|
||||
return returnPages;
|
||||
}
|
||||
|
||||
public List<Page> SearchPages(string query, string space) {
|
||||
public IEnumerable<Page> SearchPages(string query, string space) {
|
||||
CheckCredentials();
|
||||
List<Page> results = new List<Page>();
|
||||
foreach(RemoteSearchResult searchResult in _confluence.search(_credentials, query, 20)) {
|
||||
foreach(var searchResult in _confluence.search(_credentials, query, 20)) {
|
||||
Log.DebugFormat("Got result of type {0}", searchResult.type);
|
||||
if ("page".Equals(searchResult.type)) {
|
||||
results.Add(new Page(searchResult, space));
|
||||
if ("page".Equals(searchResult.type))
|
||||
{
|
||||
yield return new Page(searchResult, space);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Automation;
|
||||
|
||||
|
@ -140,7 +141,7 @@ namespace GreenshotConfluencePlugin {
|
|||
}
|
||||
}
|
||||
|
||||
foreach(string url in IEHelper.GetIEUrls()) {
|
||||
foreach(string url in IEHelper.GetIEUrls().Distinct()) {
|
||||
urls.Add(url);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,77 +21,68 @@
|
|||
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using Greenshot.IniFile;
|
||||
|
||||
namespace GreenshotConfluencePlugin {
|
||||
public partial class ConfluenceSearch : System.Windows.Controls.Page {
|
||||
private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ConfluenceSearch));
|
||||
private static readonly ConfluenceConfiguration config = IniConfig.GetIniSection<ConfluenceConfiguration>();
|
||||
private readonly ConfluenceUpload confluenceUpload;
|
||||
public partial class ConfluenceSearch
|
||||
{
|
||||
private static readonly ConfluenceConfiguration ConfluenceConfig = IniConfig.GetIniSection<ConfluenceConfiguration>();
|
||||
private readonly ConfluenceUpload _confluenceUpload;
|
||||
|
||||
public List<Confluence.Space> Spaces {
|
||||
get {
|
||||
return confluenceUpload.Spaces;
|
||||
}
|
||||
}
|
||||
public IEnumerable<Confluence.Space> Spaces => _confluenceUpload.Spaces;
|
||||
|
||||
private readonly ObservableCollection<Confluence.Page> pages = new ObservableCollection<Confluence.Page>();
|
||||
public ObservableCollection<Confluence.Page> Pages {
|
||||
get {
|
||||
return pages;
|
||||
}
|
||||
}
|
||||
public ObservableCollection<Confluence.Page> Pages { get; } = new ObservableCollection<Confluence.Page>();
|
||||
|
||||
public ConfluenceSearch(ConfluenceUpload confluenceUpload) {
|
||||
this.confluenceUpload = confluenceUpload;
|
||||
_confluenceUpload = confluenceUpload;
|
||||
DataContext = this;
|
||||
InitializeComponent();
|
||||
if (config.SearchSpaceKey == null) {
|
||||
SpaceComboBox.SelectedItem = Spaces[0];
|
||||
if (ConfluenceConfig.SearchSpaceKey == null) {
|
||||
SpaceComboBox.SelectedItem = Spaces.FirstOrDefault();
|
||||
} else {
|
||||
foreach(Confluence.Space space in Spaces) {
|
||||
if (space.Key.Equals(config.SearchSpaceKey)) {
|
||||
foreach(var space in Spaces) {
|
||||
if (space.Key.Equals(ConfluenceConfig.SearchSpaceKey)) {
|
||||
SpaceComboBox.SelectedItem = space;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PageListView_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) {
|
||||
private void PageListView_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) {
|
||||
SelectionChanged();
|
||||
}
|
||||
|
||||
void SelectionChanged() {
|
||||
|
||||
private void SelectionChanged() {
|
||||
if (PageListView.HasItems && PageListView.SelectedItems.Count > 0) {
|
||||
confluenceUpload.SelectedPage = (Confluence.Page)PageListView.SelectedItem;
|
||||
_confluenceUpload.SelectedPage = (Confluence.Page)PageListView.SelectedItem;
|
||||
} else {
|
||||
confluenceUpload.SelectedPage = null;
|
||||
_confluenceUpload.SelectedPage = null;
|
||||
}
|
||||
}
|
||||
|
||||
void Search_Click(object sender, RoutedEventArgs e) {
|
||||
doSearch();
|
||||
|
||||
private void Search_Click(object sender, RoutedEventArgs e) {
|
||||
DoSearch();
|
||||
}
|
||||
|
||||
void doSearch() {
|
||||
private void DoSearch() {
|
||||
string spaceKey = (string)SpaceComboBox.SelectedValue;
|
||||
config.SearchSpaceKey = spaceKey;
|
||||
List<Confluence.Page> searchResult = ConfluencePlugin.ConfluenceConnector.SearchPages(searchText.Text, spaceKey);
|
||||
pages.Clear();
|
||||
foreach(Confluence.Page page in searchResult) {
|
||||
pages.Add(page);
|
||||
ConfluenceConfig.SearchSpaceKey = spaceKey;
|
||||
Pages.Clear();
|
||||
foreach(var page in ConfluencePlugin.ConfluenceConnector.SearchPages(searchText.Text, spaceKey).OrderBy(p => p.Title)) {
|
||||
Pages.Add(page);
|
||||
}
|
||||
}
|
||||
|
||||
void SearchText_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) {
|
||||
private void SearchText_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) {
|
||||
if (e.Key == System.Windows.Input.Key.Return && Search.IsEnabled) {
|
||||
doSearch();
|
||||
e.Handled = true;
|
||||
DoSearch();
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Page_Loaded(object sender, RoutedEventArgs e) {
|
||||
|
||||
private void Page_Loaded(object sender, RoutedEventArgs e) {
|
||||
SelectionChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -18,8 +18,9 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
@ -32,96 +33,99 @@ namespace GreenshotConfluencePlugin {
|
|||
/// <summary>
|
||||
/// Interaction logic for ConfluenceTreePicker.xaml
|
||||
/// </summary>
|
||||
public partial class ConfluenceTreePicker : System.Windows.Controls.Page {
|
||||
private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ConfluenceTreePicker));
|
||||
private readonly ConfluenceConnector confluenceConnector;
|
||||
private readonly ConfluenceUpload confluenceUpload;
|
||||
private bool isInitDone = false;
|
||||
public partial class ConfluenceTreePicker
|
||||
{
|
||||
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(ConfluenceTreePicker));
|
||||
private readonly ConfluenceConnector _confluenceConnector;
|
||||
private readonly ConfluenceUpload _confluenceUpload;
|
||||
private bool _isInitDone;
|
||||
|
||||
public ConfluenceTreePicker(ConfluenceUpload confluenceUpload) {
|
||||
confluenceConnector = ConfluencePlugin.ConfluenceConnector;
|
||||
this.confluenceUpload = confluenceUpload;
|
||||
_confluenceConnector = ConfluencePlugin.ConfluenceConnector;
|
||||
_confluenceUpload = confluenceUpload;
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
void pageTreeViewItem_DoubleClick(object sender, MouseButtonEventArgs eventArgs) {
|
||||
LOG.Debug("spaceTreeViewItem_MouseLeftButtonDown is called!");
|
||||
private void pageTreeViewItem_DoubleClick(object sender, MouseButtonEventArgs eventArgs) {
|
||||
Log.Debug("spaceTreeViewItem_MouseLeftButtonDown is called!");
|
||||
TreeViewItem clickedItem = eventArgs.Source as TreeViewItem;
|
||||
if (clickedItem ==null) {
|
||||
return;
|
||||
}
|
||||
Confluence.Page page = clickedItem.Tag as Confluence.Page;
|
||||
Confluence.Page page = clickedItem?.Tag as Confluence.Page;
|
||||
if (page == null) {
|
||||
return;
|
||||
}
|
||||
if (!clickedItem.HasItems) {
|
||||
LOG.Debug("Loading pages for page: " + page.Title);
|
||||
(new Thread(() => {
|
||||
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)(() => {ShowBusy.Visibility = Visibility.Visible;}));
|
||||
List<Confluence.Page> pages = confluenceConnector.GetPageChildren(page);
|
||||
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)(() => {
|
||||
foreach(Confluence.Page childPage in pages) {
|
||||
LOG.Debug("Adding page: " + childPage.Title);
|
||||
TreeViewItem pageTreeViewItem = new TreeViewItem();
|
||||
pageTreeViewItem.Header = childPage.Title;
|
||||
pageTreeViewItem.Tag = childPage;
|
||||
clickedItem.Items.Add(pageTreeViewItem);
|
||||
pageTreeViewItem.PreviewMouseDoubleClick += new MouseButtonEventHandler(pageTreeViewItem_DoubleClick);
|
||||
pageTreeViewItem.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(pageTreeViewItem_Click);
|
||||
}
|
||||
ShowBusy.Visibility = Visibility.Collapsed;
|
||||
}));
|
||||
}
|
||||
) { Name = "Loading childpages for confluence page " + page.Title }).Start();
|
||||
if (clickedItem.HasItems)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Log.Debug("Loading pages for page: " + page.Title);
|
||||
new Thread(() => {
|
||||
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)(() => {ShowBusy.Visibility = Visibility.Visible;}));
|
||||
var pages = _confluenceConnector.GetPageChildren(page).OrderBy(p => p.Title);
|
||||
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)(() => {
|
||||
foreach(var childPage in pages) {
|
||||
Log.Debug("Adding page: " + childPage.Title);
|
||||
var pageTreeViewItem = new TreeViewItem
|
||||
{
|
||||
Header = childPage.Title,
|
||||
Tag = childPage
|
||||
};
|
||||
clickedItem.Items.Add(pageTreeViewItem);
|
||||
pageTreeViewItem.PreviewMouseDoubleClick += pageTreeViewItem_DoubleClick;
|
||||
pageTreeViewItem.PreviewMouseLeftButtonDown += pageTreeViewItem_Click;
|
||||
}
|
||||
ShowBusy.Visibility = Visibility.Collapsed;
|
||||
}));
|
||||
}) { Name = "Loading childpages for confluence page " + page.Title }.Start();
|
||||
}
|
||||
|
||||
void pageTreeViewItem_Click(object sender, MouseButtonEventArgs eventArgs) {
|
||||
LOG.Debug("pageTreeViewItem_PreviewMouseDoubleClick is called!");
|
||||
|
||||
private void pageTreeViewItem_Click(object sender, MouseButtonEventArgs eventArgs) {
|
||||
Log.Debug("pageTreeViewItem_PreviewMouseDoubleClick is called!");
|
||||
TreeViewItem clickedItem = eventArgs.Source as TreeViewItem;
|
||||
if (clickedItem ==null) {
|
||||
return;
|
||||
}
|
||||
Confluence.Page page = clickedItem.Tag as Confluence.Page;
|
||||
confluenceUpload.SelectedPage = page;
|
||||
_confluenceUpload.SelectedPage = page;
|
||||
if (page != null) {
|
||||
LOG.Debug("Page selected: " + page.Title);
|
||||
Log.Debug("Page selected: " + page.Title);
|
||||
}
|
||||
}
|
||||
|
||||
void Page_Loaded(object sender, RoutedEventArgs e) {
|
||||
confluenceUpload.SelectedPage = null;
|
||||
if (isInitDone) {
|
||||
private void Page_Loaded(object sender, RoutedEventArgs e) {
|
||||
_confluenceUpload.SelectedPage = null;
|
||||
if (_isInitDone) {
|
||||
return;
|
||||
}
|
||||
ShowBusy.Visibility = Visibility.Visible;
|
||||
(new Thread(() => {
|
||||
new Thread(() => {
|
||||
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)(() => {
|
||||
List<Space> spaces = confluenceUpload.Spaces;
|
||||
foreach (Space space in spaces) {
|
||||
TreeViewItem spaceTreeViewItem = new TreeViewItem();
|
||||
spaceTreeViewItem.Header = space.Name;
|
||||
spaceTreeViewItem.Tag = space;
|
||||
|
||||
foreach (Space space in _confluenceUpload.Spaces) {
|
||||
TreeViewItem spaceTreeViewItem = new TreeViewItem
|
||||
{
|
||||
Header = space.Name,
|
||||
Tag = space
|
||||
};
|
||||
|
||||
// Get homepage
|
||||
try {
|
||||
Confluence.Page page = confluenceConnector.GetSpaceHomepage(space);
|
||||
TreeViewItem pageTreeViewItem = new TreeViewItem();
|
||||
pageTreeViewItem.Header = page.Title;
|
||||
pageTreeViewItem.Tag = page;
|
||||
pageTreeViewItem.PreviewMouseDoubleClick += new MouseButtonEventHandler(pageTreeViewItem_DoubleClick);
|
||||
pageTreeViewItem.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(pageTreeViewItem_Click);
|
||||
Confluence.Page page = _confluenceConnector.GetSpaceHomepage(space);
|
||||
TreeViewItem pageTreeViewItem = new TreeViewItem
|
||||
{
|
||||
Header = page.Title,
|
||||
Tag = page
|
||||
};
|
||||
pageTreeViewItem.PreviewMouseDoubleClick += pageTreeViewItem_DoubleClick;
|
||||
pageTreeViewItem.PreviewMouseLeftButtonDown += pageTreeViewItem_Click;
|
||||
spaceTreeViewItem.Items.Add(pageTreeViewItem);
|
||||
ConfluenceTreeView.Items.Add(spaceTreeViewItem);
|
||||
} catch (Exception ex) {
|
||||
LOG.Error("Can't get homepage for space : " + space.Name + " (" + ex.Message + ")");
|
||||
Log.Error("Can't get homepage for space : " + space.Name + " (" + ex.Message + ")");
|
||||
}
|
||||
}
|
||||
ShowBusy.Visibility = Visibility.Collapsed;
|
||||
isInitDone = true;
|
||||
_isInitDone = true;
|
||||
}));
|
||||
}
|
||||
) { Name = "Loading spaces for confluence"}).Start();
|
||||
}) { Name = "Loading spaces for confluence"}.Start();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
@ -88,8 +89,8 @@ namespace GreenshotConfluencePlugin {
|
|||
}
|
||||
|
||||
private static DateTime _lastLoad = DateTime.Now;
|
||||
private static List<Confluence.Space> _spaces;
|
||||
public List<Confluence.Space> Spaces {
|
||||
private static IList<Confluence.Space> _spaces;
|
||||
public IList<Confluence.Space> Spaces {
|
||||
get {
|
||||
UpdateSpaces();
|
||||
while (_spaces == null) {
|
||||
|
@ -118,7 +119,7 @@ namespace GreenshotConfluencePlugin {
|
|||
// Check if load is needed
|
||||
if (_spaces == null) {
|
||||
(new Thread(() => {
|
||||
_spaces = ConfluencePlugin.ConfluenceConnector.GetSpaceSummaries();
|
||||
_spaces = ConfluencePlugin.ConfluenceConnector.GetSpaceSummaries().OrderBy(s => s.Name).ToList();
|
||||
_lastLoad = DateTime.Now;
|
||||
}) { Name = "Loading spaces for confluence"}).Start();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue