Katteker/Creator/SetupTmplCode.cs
Holger Boerchers d383f0ef1c Initial commit
2018-03-21 20:07:40 +01:00

84 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Katteker;
namespace KattekerCreator
{
public partial class SetupTmpl
{
public string AppName
{
get => string.IsNullOrWhiteSpace(ReleaseChannel) ? _appName : $"{_appName}_{ReleaseChannel}";
set => _appName = value;
}
public string Executable { get; set; }
public string CompanyName { get; set; }
public string Description { get; set; }
public SemanticVersion Version { get; set; }
public Version LegacyVersion => Version.ToSystemVersion();
public string HelpUrl { get; set; }
public long InstallSize { get; set; }
public bool IsManaged { get; set; }
public string IconPath { get; set; }
public string SourcePath { get; set; } = string.Empty;
public List<PhysicalFile> Files { get; set; } = new List<PhysicalFile>();
private IEnumerable<string> Directories => DirectoriesToCreate();
public string UserInterface { get; set; }
public string OutFile { get; set; }
public string UninstallIcon { get; set; }
public string ReleaseChannel { get; set; }
private readonly List<DirSplit> _directoriesList = new List<DirSplit>();
private string _appName;
private IEnumerable<string> DirectoriesToCreate()
{
foreach (var physicalFile in Files)
{
var dirSplit = new DirSplit(physicalFile.TargetPath);
if (dirSplit.SplitCount > 1 && !_directoriesList.Contains(dirSplit))
{
_directoriesList.Add(dirSplit);
}
}
return _directoriesList.Select(x=> x.ToString());
}
private class DirSplit
{
private const char SplitChar = '\\';
private readonly string[] _splits;
public int SplitCount => _splits.Length;
public DirSplit(string path)
{
_splits = path.Split(SplitChar);
}
public override string ToString()
{
return string.Join(SplitChar.ToString(), _splits.Take(_splits.Length - 1));
}
public override bool Equals(object obj)
{
return string.Equals(ToString(), obj?.ToString());
}
protected bool Equals(DirSplit other)
{
return Equals(_splits, other._splits);
}
public override int GetHashCode()
{
return (_splits != null ? _splits.GetHashCode() : 0);
}
}
}
}