Files
crosslangdevstudio/Models/ConsolePackageManger.cs
2025-10-22 17:31:32 -05:00

73 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Threading.Tasks;
using Avalonia.Controls;
namespace CrossLangDevStudio.Models;
public class ConsolePackageManager : IPackageManager
{
public string Filter => "console";
private IEnumerable<string> GetFiles()
{
var path = Path.Combine(CrossLangShell.CrossLangConfigDirectory, "ConsoleApps");
if (Directory.Exists(path))
foreach (var dir in Directory.EnumerateDirectories(path))
{
var file = Path.Combine(dir, $"{Path.GetFileName(dir)}.crvm");
if (File.Exists(file)) yield return file;
}
}
public IEnumerable<CrossLangDependency> GetInstalledPackages()
{
foreach (var item in GetFiles())
{
var file = new CrossLangFile();
try
{
file.Load(item);
}
catch (Exception)
{
continue;
}
yield return new CrossLangDependency { Name = file.Name, Version = file.Version };
}
}
public async Task InstallPackageAsync(string name, CrossLangVersion version)
{
await CrossLangShell.RunCommandAsync(Environment.CurrentDirectory, "crosslang", ["install-console", name, $"--version={version.ToString()}"]);
}
public void UninstallPackage(string name)
{
foreach (var item in GetFiles())
{
var file = new CrossLangFile();
try
{
file.Load(item);
if (name == file.Name)
{
var dir = Path.GetDirectoryName(item);
if(dir is not null)
Directory.Delete(dir,true);
return;
}
}
catch (Exception)
{
continue;
}
}
}
}