File name substitution WIP

This commit is contained in:
Ben Olden-Cooligan 2015-08-02 17:28:31 -04:00
parent 488e58deaa
commit 0494a0de93
2 changed files with 49 additions and 0 deletions

View File

@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace NAPS2.ImportExport
{
public class FileNameSubstitution
{
private static readonly Dictionary<string, Func<string>> Subs = new Dictionary<string, Func<string>>
{
{ "$(YYYY)", () => DateTime.Now.ToString("yyyy") }
};
private static readonly Regex NumberSubPattern = new Regex(@"\$\{n+\}");
public string SubstituteFileName(string fileNameWithPath, int numberSkip = 0, int autoNumberDigits = 0)
{
// Most subs don't need a special case
string result = Subs.Aggregate(fileNameWithPath, (current, sub) => current.Replace(sub.Key, sub.Value()));
// One does, however
var match = NumberSubPattern.Match(result);
if (match.Success)
{
result = NumberSubPattern.Replace(result, "");
result = SubNumber(result, match.Index, match.Length - 3, numberSkip);
}
else if (autoNumberDigits > 0)
{
result = SubNumber(result, result.Length - Path.GetExtension(result).Length, autoNumberDigits, numberSkip);
}
return result;
}
private string SubNumber(string path, int insertionIndex, int minDigits, int skip)
{
string result;
int i = skip;
do
{
++i;
result = path.Insert(insertionIndex, i.ToString("D" + minDigits));
} while (File.Exists(result));
return result;
}
}
}

View File

@ -88,6 +88,7 @@
<Compile Include="Config\ProfileManager.cs" />
<Compile Include="Config\UserConfig.cs" />
<Compile Include="Config\UserConfigManager.cs" />
<Compile Include="ImportExport\FileNameSubstitution.cs" />
<Compile Include="ImportExport\Email\EmailSettings.cs" />
<Compile Include="ImportExport\Email\EmailSettingsContainer.cs" />
<Compile Include="ImportExport\Pdf\IPdfPasswordProvider.cs" />