New method in archive manager and shortcut on exit command
This commit is contained in:
@@ -10,7 +10,7 @@ public class Exit : ICommandAction
|
|||||||
{
|
{
|
||||||
public string ActionName => "exit";
|
public string ActionName => "exit";
|
||||||
public string Description => "Exits the bot and saves the config. Use exit help for more info.";
|
public string Description => "Exits the bot and saves the config. Use exit help for more info.";
|
||||||
public string Usage => "exit [help|force]";
|
public string Usage => "exit [help|force (-f)]";
|
||||||
public InternalActionRunType RunType => InternalActionRunType.ON_CALL;
|
public InternalActionRunType RunType => InternalActionRunType.ON_CALL;
|
||||||
|
|
||||||
public async Task Execute(string[] args)
|
public async Task Execute(string[] args)
|
||||||
@@ -29,9 +29,10 @@ public class Exit : ICommandAction
|
|||||||
case "help":
|
case "help":
|
||||||
Console.WriteLine("Usage : exit [help|force]");
|
Console.WriteLine("Usage : exit [help|force]");
|
||||||
Console.WriteLine("help : Displays this message");
|
Console.WriteLine("help : Displays this message");
|
||||||
Console.WriteLine("force : Exits the bot without saving the config");
|
Console.WriteLine("force | -f : Exits the bot without saving the config");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "-f":
|
||||||
case "force":
|
case "force":
|
||||||
Config.Logger.Log("Exiting (FORCE)...", "Exit", LogLevel.WARNING, false);
|
Config.Logger.Log("Exiting (FORCE)...", "Exit", LogLevel.WARNING, false);
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PluginManager.Others;
|
namespace PluginManager.Others;
|
||||||
@@ -9,7 +10,7 @@ namespace PluginManager.Others;
|
|||||||
public static class ArchiveManager
|
public static class ArchiveManager
|
||||||
{
|
{
|
||||||
private static string? archiveFolder;
|
private static string? archiveFolder;
|
||||||
public static bool isInitialized { get; private set; }
|
public static bool isInitialized { get; private set; }
|
||||||
|
|
||||||
public static void Initialize()
|
public static void Initialize()
|
||||||
{
|
{
|
||||||
@@ -23,6 +24,41 @@ public static class ArchiveManager
|
|||||||
isInitialized = true;
|
isInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Read a file from a zip archive. The output is a byte array
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName">The file name in the archive</param>
|
||||||
|
/// <param name="archName">The archive location on the disk</param>
|
||||||
|
/// <returns>An array of bytes that represents the Stream value from the file that was read inside the archive</returns>
|
||||||
|
public async static Task<byte[]?> ReadStreamFromPakAsync(string fileName, string archName)
|
||||||
|
{
|
||||||
|
if (!isInitialized) throw new Exception("ArchiveManager is not initialized");
|
||||||
|
|
||||||
|
archName = archiveFolder + archName;
|
||||||
|
|
||||||
|
if (!File.Exists(archName))
|
||||||
|
throw new Exception("Failed to load file !");
|
||||||
|
|
||||||
|
byte[]? data = null;
|
||||||
|
|
||||||
|
using (var zip = ZipFile.OpenRead(archName))
|
||||||
|
{
|
||||||
|
var entry = zip.Entries.FirstOrDefault(entry => entry.FullName == fileName || entry.Name == fileName);
|
||||||
|
if (entry is null) throw new Exception("File not found in archive");
|
||||||
|
|
||||||
|
var MemoryStream = new MemoryStream();
|
||||||
|
|
||||||
|
var stream = entry.Open();
|
||||||
|
await stream.CopyToAsync(MemoryStream);
|
||||||
|
data = MemoryStream.ToArray();
|
||||||
|
|
||||||
|
stream.Close();
|
||||||
|
MemoryStream.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Read data from a file that is inside an archive (ZIP format)
|
/// Read data from a file that is inside an archive (ZIP format)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -40,19 +76,19 @@ public static class ArchiveManager
|
|||||||
{
|
{
|
||||||
string? textValue = null;
|
string? textValue = null;
|
||||||
using (var fs = new FileStream(archFile, FileMode.Open))
|
using (var fs = new FileStream(archFile, FileMode.Open))
|
||||||
using (var zip = new ZipArchive(fs, ZipArchiveMode.Read))
|
using (var zip = new ZipArchive(fs, ZipArchiveMode.Read))
|
||||||
{
|
{
|
||||||
foreach (var entry in zip.Entries)
|
foreach (var entry in zip.Entries)
|
||||||
if (entry.Name == FileName || entry.FullName == FileName)
|
if (entry.Name == FileName || entry.FullName == FileName)
|
||||||
using (var s = entry.Open())
|
using (var s = entry.Open())
|
||||||
using (var reader = new StreamReader(s))
|
using (var reader = new StreamReader(s))
|
||||||
{
|
{
|
||||||
textValue = await reader.ReadToEndAsync();
|
textValue = await reader.ReadToEndAsync();
|
||||||
reader.Close();
|
reader.Close();
|
||||||
s.Close();
|
s.Close();
|
||||||
fs.Close();
|
fs.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return textValue;
|
return textValue;
|
||||||
}
|
}
|
||||||
@@ -73,7 +109,7 @@ public static class ArchiveManager
|
|||||||
/// <param name="type">The type of progress</param>
|
/// <param name="type">The type of progress</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static async Task ExtractArchive(
|
public static async Task ExtractArchive(
|
||||||
string zip, string folder, IProgress<float> progress,
|
string zip, string folder, IProgress<float> progress,
|
||||||
UnzipProgressType type)
|
UnzipProgressType type)
|
||||||
{
|
{
|
||||||
if (!isInitialized) throw new Exception("ArchiveManager is not initialized");
|
if (!isInitialized) throw new Exception("ArchiveManager is not initialized");
|
||||||
@@ -82,7 +118,7 @@ public static class ArchiveManager
|
|||||||
{
|
{
|
||||||
if (type == UnzipProgressType.PERCENTAGE_FROM_NUMBER_OF_FILES)
|
if (type == UnzipProgressType.PERCENTAGE_FROM_NUMBER_OF_FILES)
|
||||||
{
|
{
|
||||||
var totalZIPFiles = archive.Entries.Count();
|
var totalZIPFiles = archive.Entries.Count();
|
||||||
var currentZIPFile = 0;
|
var currentZIPFile = 0;
|
||||||
foreach (var entry in archive.Entries)
|
foreach (var entry in archive.Entries)
|
||||||
{
|
{
|
||||||
@@ -97,7 +133,7 @@ public static class ArchiveManager
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Config.Logger.Log($"Failed to extract {entry.Name}. Exception: {ex.Message}",
|
Config.Logger.Log($"Failed to extract {entry.Name}. Exception: {ex.Message}",
|
||||||
"Archive Manager", LogLevel.ERROR);
|
"Archive Manager", LogLevel.ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
currentZIPFile++;
|
currentZIPFile++;
|
||||||
@@ -130,7 +166,7 @@ public static class ArchiveManager
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Config.Logger.Log($"Failed to extract {entry.Name}. Exception: {ex.Message}",
|
Config.Logger.Log($"Failed to extract {entry.Name}. Exception: {ex.Message}",
|
||||||
"Archive Manager", LogLevel.ERROR);
|
"Archive Manager", LogLevel.ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
await Task.Delay(10);
|
await Task.Delay(10);
|
||||||
@@ -140,4 +176,4 @@ public static class ArchiveManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user