public static ItemType GetExtensionType(string directory) { var themeMan = Path.Combine(directory, PlaynitePaths.ThemeManifestFileName); var extMan = Path.Combine(directory, PlaynitePaths.ExtensionManifestFileName); if (File.Exists(themeMan)) { var desc = ExtensionInstaller.GetThemeManifest(themeMan); switch (desc.Mode) { case ApplicationMode.Desktop: return(ItemType.DesktopTheme); case ApplicationMode.Fullscreen: return(ItemType.FullscreenTheme); } } else if (File.Exists(extMan)) { var desc = ExtensionInstaller.GetExtensionManifest(extMan); switch (desc.Type) { case ExtensionType.GenericPlugin: return(ItemType.GenericPlugin); case ExtensionType.GameLibrary: return(ItemType.LibraryPlugin); case ExtensionType.Script: return(desc.Module.EndsWith("ps1", StringComparison.OrdinalIgnoreCase) ? ItemType.PowerShellScript : ItemType.IronPythonScript); case ExtensionType.MetadataProvider: return(ItemType.MetadataPlugin); } } return(ItemType.Uknown); }
public static string PackageExtension(string extDirectory, string targetPath) { var dirInfo = new DirectoryInfo(extDirectory); var extInfo = ExtensionInstaller.GetExtensionManifest(Path.Combine(extDirectory, PlaynitePaths.ExtensionManifestFileName)); if (extInfo.Id.IsNullOrEmpty()) { throw new Exception("Cannot package extension, ID is missing!"); } extInfo.VerifyManifest(); var packedPath = Path.Combine(targetPath, $"{Common.Paths.GetSafeFilename(extInfo.Name).Replace(' ', '_')}_{extInfo.Version.ToString().Replace(".", "_")}{PlaynitePaths.PackedExtensionFileExtention}"); FileSystem.PrepareSaveFile(packedPath); var ignoreFiles = File.ReadAllLines(Paths.ExtFileIgnoreListPath); using (var zipStream = new FileStream(packedPath, FileMode.Create)) { using (var zipFile = new ZipArchive(zipStream, ZipArchiveMode.Create)) { foreach (var file in Directory.GetFiles(extDirectory, "*.*", SearchOption.AllDirectories)) { var subName = file.Replace(extDirectory, "").TrimStart(Path.DirectorySeparatorChar); if (ignoreFiles.ContainsString(subName, StringComparison.OrdinalIgnoreCase)) { continue; } zipFile.CreateEntryFromFile(file, subName, CompressionLevel.Optimal); } } } return(packedPath); }