You've already forked onecmonitor
mirror of
https://github.com/akpaevj/onecmonitor.git
synced 2025-11-27 22:28:17 +02:00
32 lines
1.3 KiB
C#
32 lines
1.3 KiB
C#
using System.IO.Compression;
|
|
using System.Xml.Serialization;
|
|
|
|
namespace OneSwiss.OneScript;
|
|
|
|
public abstract class OneScriptPackageReader
|
|
{
|
|
public static OpmMetadata? Unzip(string filePath, string destination)
|
|
{
|
|
var temp = Directory.CreateTempSubdirectory().FullName;
|
|
|
|
using var ospxStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
|
ZipFile.ExtractToDirectory(ospxStream, temp);
|
|
|
|
var opmMetadataPath = Path.Combine(temp, "opm-metadata.xml");
|
|
if (!File.Exists(opmMetadataPath))
|
|
throw new Exception("opm-metadata.xml не обнаружен");
|
|
|
|
using var metadataStream = new FileStream(opmMetadataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
|
var serializer = new XmlSerializer(typeof(OpmMetadata));
|
|
var metadata = serializer.Deserialize(metadataStream) as OpmMetadata;
|
|
|
|
var contentPath = Path.Combine(temp, "content.zip");
|
|
if (!File.Exists(contentPath))
|
|
throw new Exception("content.zip не обнаружен");
|
|
|
|
using var contentStream = new FileStream(contentPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
|
ZipFile.ExtractToDirectory(contentStream, destination);
|
|
|
|
return metadata;
|
|
}
|
|
} |