mirror of
https://onedev.site.tesses.net/crosslang/crosslangdevstudio
synced 2026-02-08 09:15:45 +00:00
70 lines
2.2 KiB
C#
70 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using Avalonia.Controls;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace CrossLangDevStudio.Models;
|
|
|
|
public class ProjectPackageManager : IPackageManager
|
|
{
|
|
public ProjectPackageManager(string path)
|
|
{
|
|
Path = path;
|
|
}
|
|
public string Path { get; init; }
|
|
public string Filter => "lib,compile_tool";
|
|
|
|
public IEnumerable<CrossLangDependency> GetInstalledPackages()
|
|
{
|
|
var cfg = JsonConvert.DeserializeObject<CrossLangConfig>(File.ReadAllText(Path));
|
|
if (cfg is not null)
|
|
{
|
|
foreach (var item in cfg.Dependencies)
|
|
{
|
|
yield return item;
|
|
}
|
|
}
|
|
}
|
|
|
|
public async Task InstallPackageAsync(string name, CrossLangVersion version)
|
|
{
|
|
var cfg = JsonConvert.DeserializeObject<CrossLangConfig>(await File.ReadAllTextAsync(Path)) ?? new CrossLangConfig();
|
|
cfg.Dependencies ??= new List<CrossLangDependency>();
|
|
bool has = false;
|
|
foreach (var item in cfg.Dependencies)
|
|
{
|
|
if (item.Name == name)
|
|
{
|
|
has = true;
|
|
if(version.CompareTo(item.Version) > 0)
|
|
item.Version = version;
|
|
break;
|
|
}
|
|
}
|
|
if (!has) cfg.Dependencies.Add(new CrossLangDependency { Name = name, Version = version });
|
|
await File.WriteAllTextAsync(Path, JsonConvert.SerializeObject(cfg, Formatting.Indented, new JsonSerializerSettings(){NullValueHandling= NullValueHandling.Ignore}));
|
|
|
|
}
|
|
|
|
|
|
|
|
public void UninstallPackage(string name)
|
|
{
|
|
var cfg = JsonConvert.DeserializeObject<CrossLangConfig>(File.ReadAllText(Path)) ?? new CrossLangConfig();
|
|
cfg.Dependencies ??= new List<CrossLangDependency>();
|
|
|
|
foreach (var item in cfg.Dependencies)
|
|
{
|
|
if (item.Name == name)
|
|
{
|
|
cfg.Dependencies.Remove(item);
|
|
|
|
break;
|
|
}
|
|
}
|
|
File.WriteAllText(Path, JsonConvert.SerializeObject(cfg, Formatting.Indented,new JsonSerializerSettings(){NullValueHandling= NullValueHandling.Ignore}));
|
|
}
|
|
} |