mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-07-04 09:22:57 +00:00
56 lines
2.2 KiB
C#
56 lines
2.2 KiB
C#
|
using System.IO.Compression;
|
||
|
|
||
|
namespace AIStudio.Tools.PluginSystem;
|
||
|
|
||
|
public static partial class PluginFactory
|
||
|
{
|
||
|
public static async Task<bool> TryDownloadingConfigPluginAsync(Guid configPlugId, string configServerUrl, CancellationToken cancellationToken = default)
|
||
|
{
|
||
|
if (!IS_INITIALIZED)
|
||
|
return false;
|
||
|
|
||
|
LOG.LogInformation($"Downloading configuration plugin with ID: {configPlugId} from server: {configServerUrl}");
|
||
|
var tempDownloadFile = Path.GetTempFileName();
|
||
|
try
|
||
|
{
|
||
|
using var httpClient = new HttpClient();
|
||
|
var response = await httpClient.GetAsync($"{configServerUrl}/{configPlugId}.zip", cancellationToken);
|
||
|
if (response.IsSuccessStatusCode)
|
||
|
{
|
||
|
await using var tempFileStream = File.Create(tempDownloadFile);
|
||
|
await response.Content.CopyToAsync(tempFileStream, cancellationToken);
|
||
|
|
||
|
var pluginDirectory = Path.Join(CONFIGURATION_PLUGINS_ROOT, configPlugId.ToString());
|
||
|
if(Directory.Exists(pluginDirectory))
|
||
|
Directory.Delete(pluginDirectory, true);
|
||
|
|
||
|
Directory.CreateDirectory(pluginDirectory);
|
||
|
ZipFile.ExtractToDirectory(tempDownloadFile, pluginDirectory);
|
||
|
|
||
|
LOG.LogInformation($"Configuration plugin with ID='{configPlugId}' downloaded and extracted successfully to '{pluginDirectory}'.");
|
||
|
}
|
||
|
else
|
||
|
LOG.LogError($"Failed to download the enterprise configuration plugin. HTTP Status: {response.StatusCode}");
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
LOG.LogError(e, "An error occurred while downloading or extracting the enterprise configuration plugin.");
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
if (File.Exists(tempDownloadFile))
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
File.Delete(tempDownloadFile);
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
LOG.LogError(e, "Failed to delete the temporary download file.");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
}
|