using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using PluginManager.Online.Helpers;
using PluginManager.Others;
using OperatingSystem = PluginManager.Others.OperatingSystem;
namespace PluginManager.Online;
public class PluginsManager
{
///
/// The Plugin Manager constructor
///
/// The link to the file where all plugins are stored
/// The link to the file where all plugin versions are stored
public PluginsManager(string plink, string vlink)
{
PluginsLink = plink;
VersionsLink = vlink;
}
///
/// The default Plugin Manager constructor. It uses the default links.
///
public PluginsManager()
{
PluginsLink = "https://raw.githubusercontent.com/andreitdr/SethPlugins/releases/PluginsList";
VersionsLink = "https://raw.githubusercontent.com/andreitdr/SethPlugins/releases/Versions";
}
///
/// The URL of the server
///
public string PluginsLink { get; }
public string VersionsLink { get; }
///
/// The method to load all plugins
///
///
public async Task> GetAvailablePlugins()
{
Config.Logger.Log("Got data from " + VersionsLink, this, LogLevel.INFO);
try
{
var list = await ServerCom.ReadTextFromURL(PluginsLink);
var lines = list.ToArray();
var data = new List();
var op = Functions.GetOperatingSystem();
var len = lines.Length;
for (var i = 0; i < len; i++)
{
if (lines[i].Length <= 2)
continue;
var content = lines[i].Split(',');
var display = new string[4]; // 4 columns
if (op == OperatingSystem.WINDOWS)
{
if (content[4].Contains("Windows"))
{
display[0] = content[0];
display[1] = content[1];
display[2] = content[2];
display[3] =
(await GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0"))
.ToShortString();
data.Add(display);
}
}
else if (op == OperatingSystem.LINUX)
{
if (content[4].Contains("Linux"))
{
display[0] = content[0];
display[1] = content[1];
display[2] = content[2];
display[3] =
(await GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0"))
.ToShortString();
data.Add(display);
}
}
}
data.Add(new[] { "-", "-", "-", "-" });
return data;
}
catch (Exception exception)
{
Config.Logger.Log("Failed to execute command: listplugs\nReason: " + exception.Message, this,
LogLevel.ERROR);
}
return null;
}
public async Task GetVersionOfPackageFromWeb(string pakName)
{
var data = await ServerCom.ReadTextFromURL(VersionsLink);
foreach (var item in data)
{
if (item.StartsWith("#"))
continue;
var split = item.Split(',');
if (split[0] == pakName)
{
Config.Logger.Log("Searched for " + pakName + " and found " + split[1] + " as version.", LogLevel.INFO);
return new VersionString(split[1]);
}
}
return null;
}
///
/// The method to get plugin information by its name
///
/// The plugin name
///
public async Task GetPluginLinkByName(string name)
{
try
{
var list = await ServerCom.ReadTextFromURL(PluginsLink);
var lines = list.ToArray();
var len = lines.Length;
for (var i = 0; i < len; i++)
{
var contents = lines[i].Split(',');
if (contents[0].ToLowerInvariant() == name.ToLowerInvariant())
{
if (contents.Length == 6)
return new[] { contents[2], contents[3], contents[5] };
if (contents.Length == 5)
return new[] { contents[2], contents[3], string.Empty };
throw new Exception("Failed to download plugin. Invalid Argument Length");
}
}
}
catch (Exception exception)
{
Config.Logger.Log("Failed to execute command: listplugs\nReason: " + exception.Message, this,
LogLevel.ERROR);
}
return null;
}
}