73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using Terraria;
|
|
|
|
namespace TShockAPI.PluginUpdater
|
|
{
|
|
class PluginUpdaterThread
|
|
{
|
|
private TSPlayer invoker;
|
|
public PluginUpdaterThread(TSPlayer player)
|
|
{
|
|
invoker = player;
|
|
PluginVersionCheck.PluginUpdate += PluginUpdate;
|
|
HandleUpdate();
|
|
}
|
|
|
|
private void HandleUpdate()
|
|
{
|
|
foreach(PluginContainer cont in ProgramServer.Plugins)
|
|
new Thread(PluginVersionCheck.CheckPlugin).Start(cont.Plugin);
|
|
}
|
|
|
|
private int Updates = 0;
|
|
private void PluginUpdate(UpdateArgs args)
|
|
{
|
|
Updates++;
|
|
if(args.Success && String.IsNullOrEmpty(args.Error))
|
|
{
|
|
invoker.SendSuccessMessage(String.Format("{0} was downloaded successfully.", args.Plugin.Name));
|
|
}
|
|
else if(args.Success)
|
|
{
|
|
invoker.SendSuccessMessage(String.Format("{0} was skipped. Reason: {1}", args.Plugin.Name, args.Error));
|
|
}
|
|
else
|
|
{
|
|
invoker.SendSuccessMessage(String.Format("{0} failed to downloaded. Error: {1}", args.Plugin.Name, args.Error));
|
|
}
|
|
|
|
if(Updates >= Terraria.ProgramServer.Plugins.Count)
|
|
{
|
|
PluginVersionCheck.PluginUpdate -= PluginUpdate;
|
|
|
|
invoker.SendSuccessMessage("All plugins have been downloaded. Now copying them to the plugin folder...");
|
|
|
|
string folder = Path.Combine(TShock.SavePath, "UpdatedPlugins");
|
|
string dest = Path.Combine(TShock.SavePath, "..", "ServerPlugins");
|
|
|
|
foreach (string dir in Directory.GetDirectories(folder, "*", System.IO.SearchOption.AllDirectories))
|
|
{
|
|
string new_folder = dest + dir.Substring(folder.Length);
|
|
if (!Directory.Exists(new_folder))
|
|
Directory.CreateDirectory(new_folder);
|
|
}
|
|
|
|
foreach (string file_name in Directory.GetFiles(folder, "*.*", System.IO.SearchOption.AllDirectories))
|
|
{
|
|
TSPlayer.Server.SendSuccessMessage(String.Format("Copied {0}", file_name));
|
|
File.Copy(file_name, dest + file_name.Substring(folder.Length), true);
|
|
}
|
|
|
|
|
|
Directory.Delete(folder, true);
|
|
|
|
invoker.SendSuccessMessage("All plugins have been processed. Restart the server to have access to the new plugins.");
|
|
}
|
|
}
|
|
}
|
|
}
|