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 }; } }