using XFEExtension.NetCore.FormatExtension;
namespace XFEExtension.NetCore.XApp.Core;
///
/// XApp类
///
public class XApp
{
///
/// 应用名称
///
public string Name { get => AppInformation.AppName; }
///
/// 应用ID
///
public string ID { get => AppInformation.AppID; }
///
/// 作者的UID
///
public string AuthorUID { get => AppInformation.AuthorUID; }
///
/// XApp的信息
///
public required XAppInformation AppInformation { get; set; }
///
/// XApp的文件集合
///
public AppFileCollection AppFiles { get; set; } = [];
///
/// 程序集字符
///
public byte[]? AssemblyBytes { get; set; }
///
/// 打包为完整的XApp字典
///
///
public XFEDictionary Package()
{
var appDictionary = new XFEDictionary
{
{
"AppInformation", new XFEDictionary
{
{ "AppIcon", AppInformation.AppIcon },
{ "AppId", AppInformation.AppID },
{ "AppName", AppInformation.AppName },
{ "AppVersion", AppInformation.AppVersion.ToString() },
{ "AppDescription", AppInformation.AppDescription },
{ "Author", AppInformation.Author },
{ "AuthorUID", AppInformation.AuthorUID },
{ "Company", AppInformation.Company },
{ "AuthorEmail", AppInformation.AuthorMail },
{ "ProjectWebSite", AppInformation.ProjectWebSite },
{ "ProjectGitHub", AppInformation.ProjectGitHub }
}
},
{
"AppFiles", AppFiles.Package()
}
};
if (AssemblyBytes is not null)
appDictionary.Add("Assembly", Convert.ToBase64String(AssemblyBytes));
return appDictionary;
}
///
/// 从字典中加载App文件
///
/// 文件字典
public void LoadFiles(XFEMultiDictionary fileDictionary) => AppFiles = AppFileCollection.UnPackage(fileDictionary)!;
///
/// 从字典中解包为XApp
///
/// 字典对象或字符串
///
public static XApp UnPackage(XFEDictionary appDictionary)
{
XFEDictionary appInformation = appDictionary["AppInformation"]!;
var assemblyBase64String = appDictionary["Assembly"];
return new XApp
{
AppInformation = XAppInformation.UnPackage(appInformation),
AppFiles = AppFileCollection.UnPackage(appDictionary["AppFiles"]!) ?? [],
AssemblyBytes = assemblyBase64String is not null ? Convert.FromBase64String(assemblyBase64String) : null
};
}
}