2023-04-03 11:04:31 +08:00

130 lines
3.7 KiB
C#

using System;
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace BFEditor.Resource
{
public class BadRes
{
public string assetPath;
public string badLog;
/// <summary>
/// 添加一个异常日志
/// </summary>
public void AddBadLog(string log)
{
if (string.IsNullOrEmpty(badLog))
{
badLog = log;
}
else
{
badLog += "\n" + log;
}
}
}
public static class ResourceCheckControll
{
// 异常资源列表
static List<BadRes> badList;
/// <summary>
/// 执行检查
/// </summary>
public static List<BadRes> DoCheck(List<BFMainChecker> checkers)
{
badList = new List<BadRes>();
foreach (var checker in checkers)
{
checker.DoCheck();
}
return badList;
}
public static void AddBadRes(BadRes badRes)
{
badList.Add(badRes);
Debug.LogWarning(string.Format("检查不通过 path {0}, log {1}", badRes.assetPath, badRes.badLog));
}
/// <summary>
/// 修正异常资源
/// </summary>
public static void FixBadRes(BadRes badRes)
{
var importer = ResourceProcessConfig.GetFixImporter(badRes.assetPath);
if (importer != null)
{
importer.DoImport(badRes.assetPath, true);
}
else
{
Debug.LogWarning("没有找的对应的importer");
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
/// <summary>
/// 提供给命令行调用
/// </summary>
public static void CheckResCommandLineMode()
{
var checkers = ResourceProcessConfig.GetAllCheckers();
var badResList = DoCheck(checkers);
SendCheckMail(badResList);
}
/// <summary>
/// 发送检查邮件
/// </summary>
public static void SendCheckMail(List<BadRes> list)
{
var mailDefaultCfg = new MailSendConfig();
mailDefaultCfg.smtpAddress = "smtphm.qiye.163.com";
mailDefaultCfg.port = 25;
mailDefaultCfg.sender = ResourceProcessConfig.BF_CLIENT_MAIL;
mailDefaultCfg.senderPassword = ResourceProcessConfig.BF_CLIENT_MAIL_PASSWARD;
mailDefaultCfg.receivers = new string[]
{
"xi_chen@juzugame.com",
};
var path = WriteLogToFile(list);
var content = File.ReadAllText(path);
BFEditorUtils.SendMail(mailDefaultCfg, "BF资源检查提醒", content);
}
static string WriteLogToFile(List<BadRes> list)
{
var fileDir = Application.dataPath.Remove(Application.dataPath.Length - 6, 6) + "Log";
if (!Directory.Exists(fileDir))
{
Directory.CreateDirectory(fileDir);
}
var filePath = fileDir + "/" + "资源检查_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".txt";
var sb = new StringBuilder();
if (list.Count == 0)
{
sb.Append("没有异常资源");
}
else
{
for (int i = 0; i < list.Count; i++)
{
sb.AppendLine(string.Format("resource path: {0}, log : \n {1}", list[i].assetPath, list[i].badLog));
}
}
BFEditorUtils.CreateFile(filePath, sb.ToString());
return filePath;
}
}
}