1
0
mirror of https://github.com/chylex/Code-Statistics.git synced 2024-11-24 21:42:45 +01:00
Code-Statistics/CodeStatistics/Forms/Input/GitHubForm.cs

149 lines
5.1 KiB
C#

using System;
using System.Windows.Forms;
using CodeStatistics.Data;
using CodeStatistics.Forms.Utils;
using CodeStatistics.Input.Methods;
namespace CodeStatistics.Forms.Input{
sealed partial class GitHubForm : Form{
public GitHub GitHub { get; private set; }
private readonly Timer timer = new Timer{
Interval = 350,
Enabled = false,
};
public GitHubForm(){
InitializeComponent();
labelRepository.Text = Lang.Get["LoadGitHubRepositoryName"];
labelBranch.Text = Lang.Get["LoadGitHubBranch"];
btnDownload.Text = Lang.Get["LoadGitHubDownload"];
btnCancel.Text = Lang.Get["LoadGitHubCancel"];
if (Program.Config.NoGui){
Opacity = 0;
}
Disposed += (sender, args) => {
if (GitHub != null)GitHub.Dispose();
timer.Dispose();
};
timer.Tick += timer_Tick;
}
private void OnLoad(object sender, EventArgs e){
ActiveControl = textBoxRepository;
listBranches.SelectedText = GitHub.DefaultBranch;
}
private void btnDownload_Click(object sender, EventArgs e){
GitHub = new GitHub(textBoxRepository.Text){
Branch = (string)listBranches.SelectedItem
};
DialogResult = DialogResult.OK;
Close();
}
private void textBoxRepository_TextChanged(object sender, EventArgs e){
btnDownload.Enabled = false;
timer.Stop();
timer.Start();
}
private void listBranches_SelectedValueChanged(object sender, EventArgs e){
if (listBranches.SelectedItem is ItemBranchTechnical){
listBranches.SelectedIndex = -1;
}
}
private void timer_Tick(object sender, EventArgs e){
timer.Stop();
if (GitHub.IsRepositoryValid(textBoxRepository.Text)){
listBranches.Items.Add(new ItemBranchTechnical("LoadGitHubBranchLoading"));
GitHub github = new GitHub(textBoxRepository.Text);
GitHub.DownloadStatus status = github.RetrieveBranchList((branches, ex) => this.InvokeSafe(() => {
github.Dispose();
listBranches.Items.Clear();
if (ex != null){
btnDownload.Enabled = false;
listBranches.Items.Add(new ItemBranchTechnical("LoadGitHubBranchFailure"));
#if MONO
Exception testEx = ex.InnerException;
while(testEx != null){
if (testEx.GetType().FullName == "Mono.Security.Protocol.Tls.TlsException"){
if (MessageBox.Show(Lang.Get["LoadGitHubTrustError"], Lang.Get["LoadGitHubError"], MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes){
using(System.Diagnostics.Process process = System.Diagnostics.Process.Start("mozroots", "--import --ask-remove --quiet")){
if (process != null){
process.WaitForExit();
}
}
timer_Tick(timer, new EventArgs());
}
break;
}
testEx = testEx.InnerException;
}
#endif
return;
}
if (branches == null){
btnDownload.Enabled = false;
return;
}
foreach(string branch in branches){
listBranches.Items.Add(branch);
if (branch == listBranches.Text){
listBranches.SelectedIndex = listBranches.Items.Count-1;
}
}
btnDownload.Enabled = true;
}));
switch(status){
case GitHub.DownloadStatus.NoInternet:
MessageBox.Show(Lang.Get["LoadGitHubNoInternet"], Lang.Get["LoadGitHubError"], MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
case GitHub.DownloadStatus.NoConnection:
MessageBox.Show(Lang.Get["LoadGitHubNoEstablishedConnection"], Lang.Get["LoadGitHubError"], MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
}
}
private void btnCancel_Click(object sender, EventArgs e){
DialogResult = DialogResult.Cancel;
Close();
}
private class ItemBranchTechnical{
private readonly string str;
public ItemBranchTechnical(string langKey){
this.str = Lang.Get[langKey];
}
public override string ToString(){
return str;
}
}
}
}