Files
UVtools/UVtools.GUI/Forms/FrmInstallPEProfiles.cs
T
Tiago Conceição 4208f49fe5 v0.8.4.1
* (Add) Tool - Modify print parameters: Value unit to confirmation text
* (Change) Tool - Modify print parameters: Maximum allowed exposure times from 255s to 1000s (#69)
* (Change) On operations, instead of partial backup a whole backup is made, this allow cancel operations which changes layer count and other structure changes
* (Improvement) PrusaSlicer profile manager: Files are now checked against checksum instead write time to prevent trigger an false update when using MSI installer
* (Fix) Tool - Layer Import: Allow cancel operation
* (Fix) Tool - Layer Import: When importing layers that increase the total layer count of the file program stays forever on progress
* (Fix) Tool - Layer Clone: Layer information was the same as heights, fixed to show the result of operation in layers
* (Fix) Tool - Pattern: Unable to use an anchor
2020-10-10 01:27:26 +01:00

171 lines
6.2 KiB
C#

/*
* GNU AFFERO GENERAL PUBLIC LICENSE
* Version 3, 19 November 2007
* Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
* Everyone is permitted to copy and distribute verbatim copies
* of this license document, but changing it is not allowed.
*/
using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using UVtools.Core.Objects;
namespace UVtools.GUI.Forms
{
public partial class FrmInstallPEProfiles : Form
{
private PEProfileFolder[] Profiles { get; }
public FrmInstallPEProfiles()
{
InitializeComponent();
Profiles = new[]
{
new PEProfileFolder(PEProfileFolder.FolderType.Print, lvPrintProfiles, lbPrintProfilesCount),
new PEProfileFolder(PEProfileFolder.FolderType.Printer, lvPrinterProfiles, lbPrinterProfilesCount)
};
Init();
}
private void Init()
{
foreach (var profile in Profiles)
{
DirectoryInfo di = new DirectoryInfo(profile.SourcePath);
var files = di.GetFiles("*.ini");
byte installedCount = 0;
byte updateCount = 0;
profile.ListView.BeginUpdate();
profile.ListView.Items.Clear();
foreach (var fileInfo in files)
{
ListViewItem item = new ListViewItem
{
Text = Path.GetFileNameWithoutExtension(fileInfo.Name),
Tag = fileInfo
};
var targetFile = $"{profile.TargetPath}{Path.DirectorySeparatorChar}{fileInfo.Name}";
FileInfo targetFileInfo = new FileInfo(targetFile);
if (targetFileInfo.Exists)
{
installedCount++;
if (targetFileInfo.Length != fileInfo.Length || !StaticObjects.GetHashSha256(targetFileInfo.FullName).SequenceEqual(StaticObjects.GetHashSha256(fileInfo.FullName)))
//if (targetFileInfo.Length != fileInfo.Length || targetFileInfo.LastWriteTime != fileInfo.LastWriteTime)
{
item.ForeColor = Color.Red;
item.Checked = true;
updateCount++;
}
else
{
item.ForeColor = Color.Green;
}
}
else if (ReferenceEquals(profile.ListView, lvPrintProfiles))
{
item.Checked = true;
}
profile.ListView.Items.Add(item);
}
profile.ListView.EndUpdate();
profile.LabelCount.Text = $"{updateCount} Update(s) | {installedCount} Installed | {profile.ListView.Items.Count} Profiles";
}
}
#region Events
private void EventClick(object sender, EventArgs e)
{
if (ReferenceEquals(sender, btnRefreshProfiles))
{
Init();
return;
}
if (ReferenceEquals(sender, btnPrintProfilesSelectAll) ||
ReferenceEquals(sender, btnPrintProfilesUnselectAll) ||
ReferenceEquals(sender, btnPrinterProfilesSelectAll) ||
ReferenceEquals(sender, btnPrinterProfilesUnselectAll))
{
bool isChecked = ReferenceEquals(sender, btnPrintProfilesSelectAll) ||
ReferenceEquals(sender, btnPrinterProfilesSelectAll);
ListView lv = ReferenceEquals(sender, btnPrintProfilesSelectAll) || ReferenceEquals(sender,
btnPrintProfilesUnselectAll) ? lvPrintProfiles : lvPrinterProfiles;
lv.BeginUpdate();
foreach (ListViewItem item in lv.Items)
{
item.Checked = isChecked;
}
lv.EndUpdate();
return;
}
if (ReferenceEquals(sender, btnInstall))
{
var result = MessageBox.Show(
"This action will install and override the following profiles into PrusaSlicer:\n" +
"---------- PRINT PROFILES ----------\n" +
Profiles[0].SelectedFiles +
"--------- PRINTER PROFILES ---------\n" +
Profiles[1].SelectedFiles +
"---------------\n" +
"Click 'Yes' to continue\n" +
"Click 'No' to cancel this operation",
"Install printers into PrusaSlicer", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (result != DialogResult.Yes)
{
return;
}
ushort count = 0;
try
{
foreach (var profile in Profiles)
{
foreach (ListViewItem item in profile.ListView.Items)
{
if (!item.Checked) continue;
var fi = item.Tag as FileInfo;
fi.CopyTo($"{profile.TargetPath}{Path.DirectorySeparatorChar}{fi.Name}", true);
count++;
}
}
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "Unable to install the profiles", MessageBoxButtons.OK, MessageBoxIcon.Error);
DialogResult = DialogResult.Abort;
return;
}
DialogResult = DialogResult.OK;
MessageBox.Show(
$"Profiles ({count}) were installed.\nRestart PrusaSlicer and check if profiles are present.",
"Operation Completed", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
#endregion
}
}