using PaintDotNet.Base.SettingModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PaintDotNet.Base.CommTool
{
///
/// 命名规则辅助工具类
///
public static class NamingRuleHelper
{
private static ConfigModel configModel;
private static string ruleName;
private static string ruleGain;
///
/// 按命名规则生成名字
///
///
///
public static string GetNameFromXml(ConfigModel model, string ruleName,string ruleGain)
{
string nameStr = "";
if (model != null)
{
configModel = model;
if (!string.IsNullOrEmpty(configModel.NameFormat) && configModel.NameFormat.IndexOf('%') != -1)
nameStr = SplitStringToRuleList();
else
nameStr = "pic" + GetContinueNum();
}
else
nameStr = "pic" + GetContinueNum();
NamingRuleHelper.ruleName = ruleName;
NamingRuleHelper.ruleGain = ruleGain;
return nameStr;
}
///
/// 将字符串拆分为规则格式的list
///
///
private static string SplitStringToRuleList()
{
List indexList = new List();
int index = 0;
foreach (char c in configModel.NameFormat)
{
if (c.Equals('%'))
indexList.Add(index);
index++;
}
if (indexList.Count > 0)
{
List ruleList = new List();
for (int i = 0; i < indexList.Count; i++)
{
if (i == indexList.Count - 1)
ruleList.Add(configModel.NameFormat.Substring(indexList[i]));
else
ruleList.Add(configModel.NameFormat.Substring(indexList[i], indexList[i + 1] - indexList[i]));
}
return JointToName(ruleList);
}
else
return "pic" + GetContinueNum();
}
///
/// 拼接出符合规则的
///
///
private static string JointToName(List ruleList)
{
if(ruleList.Count > 0)
{
//ConfigModel config =
string nameStr = "";
foreach(string str in ruleList)
{
switch (str)
{
case "%P":
if (!string.IsNullOrEmpty(configModel.NamePrefix))
nameStr += configModel.NamePrefix;
break;
case "%I":
nameStr += GetContinueNum();
break;
case "%h":
nameStr += DateTime.Now.ToString("HH");
break;
case "%m":
nameStr += DateTime.Now.ToString("mm");
break;
case "%s":
nameStr += DateTime.Now.ToString("ss");
break;
case "%Y":
nameStr += DateTime.Now.ToString("yyyy");
break;
case "%M":
nameStr += DateTime.Now.ToString("MM");
break;
case "%D":
nameStr += DateTime.Now.ToString("dd");
break;
case "%G":
nameStr += Guid.NewGuid().ToString();
break;
case "%U":
nameStr += Environment.UserName;
break;
case "%N":
nameStr += ruleName;
break;
case "%E":
nameStr += ruleGain;
break;
case "%T1":
nameStr += configModel.Txt1;
break;
case "%T2":
nameStr += configModel.Txt2;
break;
case "%T3":
nameStr += configModel.Txt3;
break;
case "%Z1":
nameStr += configModel.CharZ1;
break;
case "%Z2":
nameStr += configModel.CharZ2;
break;
}
}
return nameStr;
}
else
return "pic" + GetContinueNum();
}
///
/// 获取并格式化延续数值
///
///
private static string GetContinueNum()
{
string continueNum = configModel.ContinueNum.ToString();
if (configModel.NumberNum > continueNum.Length)
return continueNum.PadLeft(configModel.NumberNum, '0');
else
return continueNum;
}
}
}