start a big rework

This commit is contained in:
Schedel Pascal
2024-06-19 15:01:27 +02:00
parent c9216ac79b
commit 77ddd2a72a
25 changed files with 599 additions and 1697 deletions

View File

@@ -1,9 +1,9 @@
using global::System.IO;
using Microsoft.VisualBasic.CompilerServices;
using Microsoft.VisualBasic.CompilerServices;
using Pilz.Updating.Administration.Discord;
using Pilz.Updating.Administration.Packaging;
using Pilz.Updating.Administration.Integrations;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using Telerik.WinControls;
@@ -14,22 +14,17 @@ namespace Pilz.Updating.Administration.GUI;
public partial class UpdateManagerWindow
{
// C o n s t a n t s
private const string FILTER_UPDATEINFO_CONFIGURATION = "JSON (*.json)|*.json";
private const string FILTER_UPDATEPROJECT = "Update-Info-Konfiguration (*.udic)|*.udic";
private const string FILTER_UPDATEPACKAGE = "ZIP-Archiv (*.zip)|*.zip";
private const string FILTER_PACKAGE_TEMPLATE = "Update-Paket-Vorlagen (*.udpt)|*.udpt";
private const string FILTER_PACKAGE_ZIP_PACKAGE = "ZIP-Paket (*.zip)|*.zip";
private const string FILTER_PACKAGE_ADDON = "Anwendungserweiterung (*.dll)|*.dll";
private const string FILTER_UPDATEINFO_CONFIGURATION = "Json file (*.json)|*.json";
private const string FILTER_UPDATEPROJECT = "Project file (*.udic)|*.udic";
private const string FILTER_UPDATEPACKAGE = "Zip archiv (*.zip)|*.zip";
// F i e l d s
private string curProjectFilePath;
private UpdateServerManager manager = null;
private DiscordBot discordBot = null;
private readonly UpdatePackageManager packageManager = new UpdatePackageManager();
private string curPackageTemplatePath = string.Empty;
// P r o p e r t i e s
@@ -58,20 +53,11 @@ public partial class UpdateManagerWindow
radWaitingBar_PackageLoading.StopWaiting();
}
private void ProgressPackagingControls(bool enabled)
{
if (enabled)
radWaitingBar_PackageCreation.StartWaiting();
else
radWaitingBar_PackageCreation.StopWaiting();
}
private void SetEnabledUiControls(bool enabled, bool setProjectOptionsAlwayToTrue = false)
{
radRibbonBarGroup_Options.Enabled = enabled || setProjectOptionsAlwayToTrue;
radButtonElement_SaveProject.Enabled = enabled || setProjectOptionsAlwayToTrue;
radRibbonBarGroup_Configuration.Enabled = enabled;
radRibbonBarGroup_NewPackage.Enabled = enabled;
}
private async Task CreateNewProject(string filePath)
@@ -110,11 +96,10 @@ public partial class UpdateManagerWindow
{
manager = new UpdateServerManager(General.CurProject.UpdateServerConfig);
if (await manager.LoadInfoFromServer())
if (manager.Config.GitLabSnippetConfig.Enabled && await manager.ReadInfoFromGitLabSnippet())
{
await LoadPackageList();
LoadPackageList();
LoadUpdateInstallerInfos();
hasError = false;
}
else
@@ -136,27 +121,27 @@ public partial class UpdateManagerWindow
ProgressControls(false);
}
private async Task LoadPackageList()
private void LoadPackageList()
{
ProgressControls(true);
radListView_Packages.BeginUpdate();
radListView_Packages.Items.Clear();
foreach (var pkgVersion in await manager.GetUpdatePackagesList())
foreach (var pkg in manager.UpdateInfo.Packages)
{
var name = manager.GetPackageDescription(pkgVersion).name;
var name = pkg.Name;
var cells = new List<string>
{
string.IsNullOrEmpty(name) ? "<Kein Titel>" : name,
pkgVersion.Version.ToString(),
pkgVersion.Channel.ToString(),
pkgVersion.Build.ToString(),
"Ja"
string.IsNullOrEmpty(name) ? "<No title>" : name,
pkg.Version.Version.ToString(),
pkg.Version.Channel.ToString(),
pkg.Version.Build.ToString(),
"Yes"
};
var item = new ListViewDataItem(String.Empty, cells.ToArray())
var item = new ListViewDataItem(string.Empty, [.. cells])
{
Tag = pkgVersion
Tag = pkg
};
radListView_Packages.Items.Add(item);
@@ -174,79 +159,61 @@ public partial class UpdateManagerWindow
radTextBoxControl_DownloadURL.Text = manager.UpdateInfo.UpdateInstallerLink;
}
private ApplicationVersion GetSelectedPackageVersion()
private UpdatePackageInfo GetSelectedPackage()
{
return radListView_Packages.SelectedItem?.Tag as ApplicationVersion;
return radListView_Packages.SelectedItem?.Tag as UpdatePackageInfo;
}
private async Task<bool> UploadPackage(string filePath)
private bool CreatePackage(string filePath)
{
var success = false;
var resVersion = EditApplicationVersion();
var pkg = new UpdatePackageInfo();
var canceld = EditPackageMeta(pkg);
if (!resVersion.canceled)
if (!canceld)
manager.UpdateInfo.Packages.Add(pkg);
return !canceld;
}
private bool EditPackageMeta(UpdatePackageInfo pkg)
{
var frm = new PackageMetaEditor
{
ProgressControls(true);
if (await manager.UploadPackage(filePath, resVersion.newVersion))
success = true;
ProgressControls(false);
await SaveInfoToServer();
}
return success;
}
private (ApplicationVersion newVersion, bool canceled) EditApplicationVersion()
{
return EditApplicationVersion(new ApplicationVersion());
}
private (ApplicationVersion newVersion, bool canceled) EditApplicationVersion(ApplicationVersion inputVersion)
{
var frm = new ApplicationVersionInput()
{
Version = inputVersion.Version,
Channel = inputVersion.Channel,
Build = inputVersion.Build
Version = pkg.Version.Version,
Channel = pkg.Version.Channel,
Build = pkg.Version.Build,
Packagelink = pkg.Packagelink
};
if (frm.ShowDialog(this) == DialogResult.OK)
return (new ApplicationVersion(frm.Version, frm.Build, frm.Channel), false);
else
return (inputVersion, true);
if (frm.ShowDialog(this) != DialogResult.OK)
return false;
pkg.Version.Version = frm.Version;
pkg.Version.Build = frm.Build;
pkg.Version.Channel = frm.Channel;
pkg.Packagelink = frm.Packagelink;
return true;
}
private async Task<bool> DeletePackage(ApplicationVersion version)
private bool DeletePackage(UpdatePackageInfo pkg)
{
ProgressControls(true);
bool success = await manager.DeletePackage(version);
var success = manager.UpdateInfo.Packages.Remove(pkg);
ProgressControls(false);
return success;
}
private async Task<bool> SaveInfoToServer()
{
if (!manager.Config.GitLabSnippetConfig.Enabled)
return false;
ProgressControls(true);
bool success = await manager.SaveInfoToServer();
var success = await manager.SaveInfoToGitLabSnippet();
ProgressControls(false);
return success;
}
private async Task<bool> ChangePackageVersion(ApplicationVersion version)
{
bool success = false;
var (newVersion, canceled) = EditApplicationVersion(version);
if (!canceled)
{
ProgressControls(true);
success = await manager.ChangePackageVersion(version, newVersion);
ProgressControls(false);
}
return success;
}
// G u i
private void UpdateManagerWindow_Shown(object sender, EventArgs e)
@@ -269,8 +236,7 @@ public partial class UpdateManagerWindow
private void UpdateManagerWindow_FormClosing(object sender, FormClosingEventArgs e)
{
if (discordBot is object)
discordBot.Stop();
discordBot?.Stop();
}
private async void ButtonItem_NewProject_Click(object sender, EventArgs e)
@@ -313,52 +279,31 @@ public partial class UpdateManagerWindow
await SaveInfoToServer();
}
private async void ButtonItem_ExportUpdateConfiguration_Click(object sender, EventArgs e)
private void ButtonItem_ExportUpdateConfiguration_Click(object sender, EventArgs e)
{
var sfd_UpdateAdministration_UpdateConfiguration = new RadSaveFileDialog()
{
Filter = FILTER_UPDATEINFO_CONFIGURATION
};
if (sfd_UpdateAdministration_UpdateConfiguration.ShowDialog(this) == DialogResult.OK)
await manager.SaveInfoToFile(sfd_UpdateAdministration_UpdateConfiguration.FileName);
manager.SaveInfoToFile(sfd_UpdateAdministration_UpdateConfiguration.FileName);
}
private async void ButtonItem_CreateAndUploadPackage_Click(object sender, EventArgs e)
private void ButtonItem_CreateAndUploadPackage_Click(object sender, EventArgs e)
{
var success = false;
if (await ExportTempUpdatePackage())
if (CreatePackage(TempPackageFilePath))
{
if (await UploadPackage(TempPackageFilePath))
{
await LoadPackageList();
success = true;
}
LoadPackageList();
return;
}
if (!success)
RadMessageBox.Show(this, My.Resources.UpdatingAdministrationLangRes.MsgBox_PkgExportSuccess, My.Resources.UpdatingAdministrationLangRes.MsgBox_PkgExportSuccess_Titel, MessageBoxButtons.OK, RadMessageIcon.Info);
RadMessageBox.Show(this, My.Resources.UpdatingAdministrationLangRes.MsgBox_PkgExportSuccess, My.Resources.UpdatingAdministrationLangRes.MsgBox_PkgExportSuccess_Titel, MessageBoxButtons.OK, RadMessageIcon.Info);
}
private async void ButtonItem_UploadExistingPackage_Click(object sender, EventArgs e)
private void ButtonItem_RemovePackage_Click(object sender, EventArgs e)
{
var ofd_UpdateAdministration_UpdatePackage = new RadOpenFileDialog()
{
Filter = FILTER_UPDATEPACKAGE
};
if (ofd_UpdateAdministration_UpdatePackage.ShowDialog(this) == DialogResult.OK)
{
if (await UploadPackage(ofd_UpdateAdministration_UpdatePackage.FileName))
await LoadPackageList();
}
}
private async void ButtonItem_RemovePackage_Click(object sender, EventArgs e)
{
var version = GetSelectedPackageVersion();
if (await DeletePackage(version))
await LoadPackageList();
if (DeletePackage(GetSelectedPackage()))
LoadPackageList();
}
private void TextBoxX_UpdateInstallerDownloadUrl_TextChanged(object sender, EventArgs e)
@@ -371,10 +316,9 @@ public partial class UpdateManagerWindow
if (discordBot == null)
LoadDiscordBot();
if (discordBot is object)
if (discordBot is not null)
{
var version = GetSelectedPackageVersion();
var pkg = manager.GetUpdatePackageInfo(version);
var pkg = GetSelectedPackage();
var frm = new DiscordPostDialog(discordBot, pkg);
frm.ShowDialog(this);
}
@@ -384,7 +328,7 @@ public partial class UpdateManagerWindow
private void LoadDiscordBot()
{
if (discordBot is object)
if (discordBot is not null)
discordBot.Stop();
discordBot = new DiscordBot(General.CurProject.DiscordBotConfig);
@@ -410,31 +354,28 @@ public partial class UpdateManagerWindow
discordBot = null;
}
private async void ButtonItem_ChangeVersion_Click(object sender, EventArgs e)
private void ButtonItem_ChangeVersion_Click(object sender, EventArgs e)
{
var version = GetSelectedPackageVersion();
if (await ChangePackageVersion(version))
{
await SaveInfoToServer();
await LoadPackageList();
}
if (EditPackageMeta(GetSelectedPackage()))
LoadPackageList();
}
private async void ButtonItem_EditDescription_Click(object sender, EventArgs e)
{
var version = GetSelectedPackageVersion();
var desc = manager.GetPackageDescription(version);
var pkg = GetSelectedPackage();
var frm = new PackageDescriptionEditor()
var frm = new PackageDescriptionEditor
{
Titel = desc.name,
Description = desc.description,
DescriptionType = desc.descriptionType
Titel = pkg.Name,
Description = pkg.Notes.Content,
DescriptionType = pkg.Notes.ContentType
};
if (frm.ShowDialog(this) == DialogResult.OK)
{
manager.SetPackageDescription(version, frm.Titel, frm.Description, frm.DescriptionType);
pkg.Name = frm.Titel;
pkg.Notes.Content = frm.Description;
pkg.Notes.ContentType = frm.DescriptionType;
await SaveInfoToServer();
}
}
@@ -475,252 +416,5 @@ public partial class UpdateManagerWindow
private void RadPageView1_SelectedPageChanged(object sender, EventArgs e)
{
var selPage = radPageView1.SelectedPage;
if (selPage == radPageViewPage_Extensions)
{
radRibbonBarGroup_PackageFiles.Visibility = ElementVisibility.Collapsed;
radRibbonBarGroup_PackageExtensions.Visibility = ElementVisibility.Visible;
}
else if (selPage == radPageViewPage_Packaging)
{
radRibbonBarGroup_PackageFiles.Visibility = ElementVisibility.Visible;
radRibbonBarGroup_PackageExtensions.Visibility = ElementVisibility.Collapsed;
}
}
// F e a t u r e s - P a c k a g i n g
private void ShowAllPackageTemplateConfig()
{
ShowPackageFiles();
ShowPackageExtensions();
}
private void ShowPackageFiles()
{
radTreeView_PackagingFiles.BeginUpdate();
radTreeView_PackagingFiles.Nodes.Clear();
if (!string.IsNullOrEmpty(packageManager.FilesToCopyPath))
{
Action<RadTreeNodeCollection, string> nodeCreation = null;
nodeCreation = (parentCollection, p) =>
{
bool isDir = (File.GetAttributes(p) & FileAttributes.Directory) == FileAttributes.Directory;
var n = new RadTreeNode()
{
Tag = p,
Text = radTreeView_PackagingFiles.Nodes == parentCollection ? p : Path.GetFileName(p),
ImageIndex = isDir ? 0 : 1
};
parentCollection.Add(n);
if (isDir)
{
var dirInfo = new DirectoryInfo(p);
dirInfo.EnumerateDirectories().ForEach(di => nodeCreation(n.Nodes, di.FullName));
dirInfo.EnumerateFiles().ForEach(fi => nodeCreation(n.Nodes, fi.FullName));
}
};
nodeCreation(radTreeView_PackagingFiles.Nodes, packageManager.FilesToCopyPath);
}
radTreeView_PackagingFiles.EndUpdate();
}
private void ShowPackageExtensions()
{
radListView_Extensions.BeginUpdate();
radListView_Extensions.Items.Clear();
foreach (string fAddOn in packageManager.GetAllUpdateInstallerÁddOn())
{
var cells = new List<string>
{
Path.GetFileName(fAddOn),
Path.GetDirectoryName(fAddOn)
};
var item = new ListViewDataItem(string.Empty, cells.ToArray())
{
Tag = fAddOn
};
radListView_Extensions.Items.Add(item);
}
radListView_Extensions.EndUpdate();
}
private IEnumerable<string> GetSelectedUpdateInstallAddOns()
{
var list = new List<string>();
foreach (var item in radListView_Extensions.SelectedItems)
list.Add(Conversions.ToString(item.Tag));
return list;
}
private void NewPackageTemplate()
{
packageManager.NewTemplate();
curPackageTemplatePath = string.Empty;
ShowAllPackageTemplateConfig();
}
private void OpenPackageTemplate()
{
var ofd_UpdateAdmin_LoadTemplate = new RadOpenFileDialog() { Filter = FILTER_PACKAGE_TEMPLATE };
if (ofd_UpdateAdmin_LoadTemplate.ShowDialog() == DialogResult.OK)
{
packageManager.LoadTemplate(ofd_UpdateAdmin_LoadTemplate.FileName);
curPackageTemplatePath = ofd_UpdateAdmin_LoadTemplate.FileName;
ShowAllPackageTemplateConfig();
}
}
private void SavePackageTemplate()
{
if (string.IsNullOrEmpty(curPackageTemplatePath))
{
SavePackageTemplateAs();
}
else
{
packageManager.SaveTemplate(curPackageTemplatePath);
}
}
private void SavePackageTemplateAs()
{
var sfd_UpdateAdmin_SaveTemplate = new RadSaveFileDialog() { Filter = FILTER_PACKAGE_TEMPLATE };
if (sfd_UpdateAdmin_SaveTemplate.ShowDialog() == DialogResult.OK)
{
packageManager.SaveTemplate(sfd_UpdateAdmin_SaveTemplate.FileName);
curPackageTemplatePath = sfd_UpdateAdmin_SaveTemplate.FileName;
}
}
private void SelectPackageFileFolder()
{
var ofd_UpdateAdmin_PkgFileFolder = new RadOpenFolderDialog();
if (ofd_UpdateAdmin_PkgFileFolder.ShowDialog() == DialogResult.OK)
{
packageManager.FilesToCopyPath = ofd_UpdateAdmin_PkgFileFolder.FileName;
ShowPackageFiles();
}
}
private void RemovePackageFileFolder()
{
packageManager.FilesToCopyPath = string.Empty;
ShowPackageFiles();
}
private async Task<bool> ExportUpdatePackage(string filePath)
{
bool success = false;
ProgressPackagingControls(true);
try
{
await Task.Run(() => packageManager.ExportPackage(filePath));
success = true;
}
catch (Exception)
{
success = false;
}
ProgressPackagingControls(false);
return success;
}
private async Task<bool> ExportTempUpdatePackage()
{
var filePath = Path.GetTempFileName();
bool res = await ExportUpdatePackage(filePath);
if (res) TempPackageFilePath = filePath;
return res;
}
private void AddUpdateInstallerExtension()
{
var ofd_UpdateAdmin_AddExtension = new RadOpenFileDialog()
{
MultiSelect = true,
Filter = FILTER_PACKAGE_ADDON
};
if (ofd_UpdateAdmin_AddExtension.ShowDialog() == DialogResult.OK)
{
foreach (string f in ofd_UpdateAdmin_AddExtension.FileNames)
{
if (!packageManager.AddUpdateInstallerAddOn(f))
{
RadMessageBox.Show(My.Resources.UpdatingAdministrationLangRes.MsgBox_ErrorAddingInstallerAddOn, My.Resources.UpdatingAdministrationLangRes.MsgBox_Error_Titel, MessageBoxButtons.OK, RadMessageIcon.Error);
}
}
}
}
private void RemoveUpdateInstallerExtension()
{
foreach (string fAddOn in GetSelectedUpdateInstallAddOns())
packageManager.RemoveUpdateInstallerAddOn(fAddOn);
}
// G u i - P a c k a g i n g
private void ButtonItem_Pkg_NewTemplate_Click(object sender, EventArgs e)
{
NewPackageTemplate();
}
private void ButtonItem_Pkg_OpenTemplate_Click(object sender, EventArgs e)
{
OpenPackageTemplate();
}
private void ButtonItem_Pkg_SaveTemplate_Click(object sender, EventArgs e)
{
SavePackageTemplate();
}
private void ButtonItem_Pkg_SaveTemplateAs_Click(object sender, EventArgs e)
{
SavePackageTemplateAs();
}
private void ButtonItem_Pkg_SelectFileFolder_Click(object sender, EventArgs e)
{
SelectPackageFileFolder();
}
private void ButtonItem_Pkg_RemoveFileFolder_Click(object sender, EventArgs e)
{
RemovePackageFileFolder();
}
private async void ButtonItem_Pkg_Export_Click(object sender, EventArgs e)
{
var sfd_UpdateAdmin_ExportPkg = new RadSaveFileDialog()
{
Filter = FILTER_PACKAGE_ZIP_PACKAGE
};
if (sfd_UpdateAdmin_ExportPkg.ShowDialog() == DialogResult.OK)
{
if (await ExportUpdatePackage(sfd_UpdateAdmin_ExportPkg.FileName))
RadMessageBox.Show(this, My.Resources.UpdatingAdministrationLangRes.MsgBox_PkgExportSuccess, My.Resources.UpdatingAdministrationLangRes.MsgBox_PkgExportSuccess_Titel, MessageBoxButtons.OK, RadMessageIcon.Info);
}
}
private void ButtonItem_Pkg_AddExtension_Click(object sender, EventArgs e)
{
AddUpdateInstallerExtension();
}
private void ButtonItem_Pkg_RemoveExtension_Click(object sender, EventArgs e)
{
RemoveUpdateInstallerExtension();
}
}