This repository has been archived on 2022-08-05. You can view files and clone it, but cannot push or open issues or pull requests.
UpTool2/UpToolLib/Tool/AppExtras.cs

80 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using UpToolLib.DataStructures;
namespace UpToolLib.Tool
{
public static class AppExtras
{
public static Process RunApp(App app) =>
Process.Start(
new ProcessStartInfo
{
FileName = Path.Combine(app.dataPath, app.MainFile),
WorkingDirectory = app.dataPath
});
public static void Update(App app, bool overwrite)
{
Remove(app, overwrite);
AppInstall.Install(app, overwrite);
}
public static void Remove(App app, bool deleteAll)
{
string tmp = PathTool.tempPath;
if (Directory.Exists(tmp))
Directory.Delete(tmp, true);
Directory.CreateDirectory(tmp);
if (File.Exists(Path.Combine(app.appPath, "package.zip")))
{
ZipFile.ExtractToDirectory(Path.Combine(app.appPath, "package.zip"), tmp);
Process.Start(new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = $"/C \"{Path.Combine(tmp, "Remove.bat")}\"",
WorkingDirectory = Path.Combine(app.appPath, "app"),
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
}).WaitForExit();
if (!deleteAll) CheckDirecory(Path.Combine(tmp, "Data"), app.dataPath);
Directory.Delete(tmp, true);
}
if (File.Exists(app.infoPath))
File.Delete(app.infoPath);
if (File.Exists(Path.Combine(app.appPath, "package.zip")))
File.Delete(Path.Combine(app.appPath, "package.zip"));
if (deleteAll || (Directory.Exists(app.dataPath) &&
Directory.GetFiles(app.dataPath).Length + Directory.GetDirectories(app.dataPath).Length ==
0))
Directory.Delete(app.appPath, true);
}
private static void CheckDirecory(string tmp, string app)
{
foreach (string file in Directory.GetFiles(tmp))
{
string tmp1 = Path.Combine(app, Path.GetFileName(file));
if (File.Exists(tmp1))
File.Delete(tmp1);
}
foreach (string directory in Directory.GetDirectories(tmp))
CheckDirecory(directory, Path.Combine(app, Path.GetFileName(directory)));
if (Directory.Exists(app) && Directory.GetFiles(app).Length + Directory.GetDirectories(app).Length == 0)
Directory.Delete(app);
}
public static App[] FindApps(string identifier)
{
Dictionary<Guid, App> tmp = GlobalVariables.Apps;
IEnumerable<KeyValuePair<Guid, App>> tmp1 = tmp.Where(s => s.Key.ToString().StartsWith(identifier));
tmp1 = tmp1.Concat(tmp.Where(s => s.Value.Name.Contains(identifier)));
tmp1 = tmp1.Concat(tmp.Where(s => s.Value.Description.Contains(identifier)));
return tmp1.Select(s => s.Value).ToArray();
}
}
}