Part of the GZip system. **INCOMPLETE**
This commit is contained in:
parent
9928f7d62f
commit
9738599088
@ -3,6 +3,59 @@
|
|||||||
[Module("compress")]
|
[Module("compress")]
|
||||||
public static class CompressionModule
|
public static class CompressionModule
|
||||||
{
|
{
|
||||||
|
[Command("gz")]
|
||||||
|
[Command("gzip")]
|
||||||
|
public static void CompressGzip(string source, string? destination = null,
|
||||||
|
CompressionLevel level = CompressionLevel.Optimal)
|
||||||
|
{
|
||||||
|
if (destination is null)
|
||||||
|
{
|
||||||
|
string full = Path.GetFullPath(source);
|
||||||
|
string name = Path.GetFileNameWithoutExtension(full);
|
||||||
|
string folder = Program.Shell!.WorkingDirectory;
|
||||||
|
destination ??= $"{folder}\\{name}.gz";
|
||||||
|
}
|
||||||
|
|
||||||
|
string absSource = Path.GetFullPath(source),
|
||||||
|
localDest = Path.GetRelativePath(Program.Shell!.WorkingDirectory, destination);
|
||||||
|
|
||||||
|
if (File.Exists(source))
|
||||||
|
{
|
||||||
|
if (File.Exists(destination)) throw new($"File already exists at \"{localDest}\"");
|
||||||
|
string message = $"Compressing file at \"{source}\" into \"{localDest}\"...";
|
||||||
|
Write(message);
|
||||||
|
|
||||||
|
FileStream writer = new(localDest, FileMode.CreateNew);
|
||||||
|
FileStream reader = new(absSource, FileMode.Open);
|
||||||
|
GZipStream gzip = new(writer, level);
|
||||||
|
|
||||||
|
LoadingBarStart();
|
||||||
|
|
||||||
|
const int bufferSize = 1024;
|
||||||
|
byte[] buffer = new byte[bufferSize];
|
||||||
|
for (int i = 0; i < reader.Length; i += bufferSize)
|
||||||
|
{
|
||||||
|
int size = reader.Read(buffer, 0, bufferSize);
|
||||||
|
gzip.Write(buffer, 0, size);
|
||||||
|
gzip.Flush();
|
||||||
|
|
||||||
|
LoadingBarSet((float)i / gzip.Length, ConsoleColor.Magenta);
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadingBarEnd();
|
||||||
|
|
||||||
|
gzip.Close();
|
||||||
|
reader.Close();
|
||||||
|
writer.Close();
|
||||||
|
|
||||||
|
Console.CursorLeft = 0;
|
||||||
|
Console.CursorTop -= (message.Length / Console.BufferWidth) + 1;
|
||||||
|
Write(new string(' ', message.Length), newLine: false);
|
||||||
|
}
|
||||||
|
else if (Directory.Exists(source)) throw new("The GZip format can only compress 1 file.");
|
||||||
|
else throw new("No file located at \"source\"");
|
||||||
|
}
|
||||||
|
|
||||||
[Command("zip")]
|
[Command("zip")]
|
||||||
public static void CompressZip(string source, string? destination = null,
|
public static void CompressZip(string source, string? destination = null,
|
||||||
CompressionLevel level = CompressionLevel.Optimal, string comment = "")
|
CompressionLevel level = CompressionLevel.Optimal, string comment = "")
|
||||||
@ -24,7 +77,7 @@ public static class CompressionModule
|
|||||||
string message = $"Compressing file at \"{source}\" into \"{localDest}\"...";
|
string message = $"Compressing file at \"{source}\" into \"{localDest}\"...";
|
||||||
Write(message);
|
Write(message);
|
||||||
|
|
||||||
Stream writer = new FileStream(destination, FileMode.CreateNew);
|
FileStream writer = new(destination, FileMode.CreateNew);
|
||||||
ZipArchive archive = new(writer, ZipArchiveMode.Create);
|
ZipArchive archive = new(writer, ZipArchiveMode.Create);
|
||||||
if (!string.IsNullOrWhiteSpace(comment)) archive.Comment = comment;
|
if (!string.IsNullOrWhiteSpace(comment)) archive.Comment = comment;
|
||||||
|
|
||||||
@ -43,7 +96,7 @@ public static class CompressionModule
|
|||||||
|
|
||||||
Write($"Compressing folder at \"{source}\" into \"{localDest}\"...");
|
Write($"Compressing folder at \"{source}\" into \"{localDest}\"...");
|
||||||
|
|
||||||
Stream writer = new FileStream(destination, FileMode.CreateNew);
|
FileStream writer = new(destination, FileMode.CreateNew);
|
||||||
ZipArchive archive = new(writer, ZipArchiveMode.Create);
|
ZipArchive archive = new(writer, ZipArchiveMode.Create);
|
||||||
if (!string.IsNullOrWhiteSpace(comment)) archive.Comment = comment;
|
if (!string.IsNullOrWhiteSpace(comment)) archive.Comment = comment;
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@ public class Shell
|
|||||||
{
|
{
|
||||||
public const string Author = "That_One_Nerd";
|
public const string Author = "That_One_Nerd";
|
||||||
public const string Name = "SrcMod";
|
public const string Name = "SrcMod";
|
||||||
public const string Version = "Alpha 0.3.0";
|
public const string Version = "Alpha 0.3";
|
||||||
|
|
||||||
public readonly string? ShellDirectory;
|
public readonly string? ShellDirectory;
|
||||||
|
|
||||||
@ -170,10 +170,13 @@ public class Shell
|
|||||||
if (command.NameId.Trim().ToLower() != commandName) continue;
|
if (command.NameId.Trim().ToLower() != commandName) continue;
|
||||||
int start = module.NameIsPrefix ? 2 : 1;
|
int start = module.NameIsPrefix ? 2 : 1;
|
||||||
string[] args = parts.GetRange(start, parts.Count - start).ToArray();
|
string[] args = parts.GetRange(start, parts.Count - start).ToArray();
|
||||||
|
|
||||||
|
#if RELEASE
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
#endif
|
||||||
command.Invoke(args);
|
command.Invoke(args);
|
||||||
|
#if RELEASE
|
||||||
}
|
}
|
||||||
catch (TargetInvocationException ex)
|
catch (TargetInvocationException ex)
|
||||||
{
|
{
|
||||||
@ -185,6 +188,7 @@ public class Shell
|
|||||||
Write($"[ERROR] {ex.Message}", ConsoleColor.Red);
|
Write($"[ERROR] {ex.Message}", ConsoleColor.Red);
|
||||||
if (LoadingBarEnabled) LoadingBarEnd();
|
if (LoadingBarEnabled) LoadingBarEnd();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user