automated updating of currency
This commit is contained in:
		@@ -12,6 +12,7 @@ using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Net.Http;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
 | 
			
		||||
@@ -23,7 +24,8 @@ namespace NadekoBot.Modules.Searches
 | 
			
		||||
        public class UnitConverterCommands
 | 
			
		||||
        {
 | 
			
		||||
            private Logger _log;
 | 
			
		||||
 | 
			
		||||
            private static Timer _timer;
 | 
			
		||||
            public static TimeSpan Span = new TimeSpan(12, 0, 0);
 | 
			
		||||
            public UnitConverterCommands()
 | 
			
		||||
            {
 | 
			
		||||
                _log = LogManager.GetCurrentClassLogger();
 | 
			
		||||
@@ -52,55 +54,43 @@ namespace NadekoBot.Modules.Searches
 | 
			
		||||
                {
 | 
			
		||||
                    _log.Warn("Could not load units: " + e.Message);
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                
 | 
			
		||||
                
 | 
			
		||||
                _timer = new Timer(new TimerCallback(UpdateCurrency), null, 0,(int)Span.TotalMilliseconds);
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public void UpdateCurrency(object stateInfo)
 | 
			
		||||
            {
 | 
			
		||||
                var currencyRates = UpdateCurrencyRates().Result;
 | 
			
		||||
                var unitTypeString = "currency";
 | 
			
		||||
                using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
                {
 | 
			
		||||
                    var toRemove = Units.Where(u => u.UnitType == unitTypeString);
 | 
			
		||||
                    Units.RemoveAll(u => u.UnitType == unitTypeString);
 | 
			
		||||
                    uow.ConverterUnits.RemoveRange(toRemove.ToArray());
 | 
			
		||||
                    var baseType = new ConvertUnit()
 | 
			
		||||
                    {
 | 
			
		||||
                        Triggers = new[] { currencyRates.Base },
 | 
			
		||||
                        Modifier = decimal.One,
 | 
			
		||||
                        UnitType = unitTypeString
 | 
			
		||||
                    };
 | 
			
		||||
                    uow.ConverterUnits.Add(baseType);
 | 
			
		||||
                    uow.ConverterUnits.AddRange(currencyRates.ConversionRates.Select(u => new ConvertUnit()
 | 
			
		||||
                    {
 | 
			
		||||
                        InternalTrigger = u.Key,
 | 
			
		||||
                        Modifier = u.Value,
 | 
			
		||||
                        UnitType = unitTypeString
 | 
			
		||||
                    }).ToArray());
 | 
			
		||||
                    uow.Complete();
 | 
			
		||||
                }
 | 
			
		||||
                _log.Info("Updated Currency");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public List<ConvertUnit> Units { get; set; }
 | 
			
		||||
 | 
			
		||||
            [Command("updatecur")]
 | 
			
		||||
            [RequireContext(ContextType.Guild)]
 | 
			
		||||
            public async Task UpdateCurrency(IUserMessage msg)
 | 
			
		||||
            {
 | 
			
		||||
                var channel = msg.Channel as IGuildChannel;
 | 
			
		||||
                var currencyRates = await UpdateCurrencyRates();
 | 
			
		||||
                var unitTypeString = "currency";
 | 
			
		||||
                var baseType = new ConvertUnit()
 | 
			
		||||
                {
 | 
			
		||||
                    Triggers = new[] { currencyRates.Base },
 | 
			
		||||
                    Modifier = decimal.One,
 | 
			
		||||
                    UnitType = unitTypeString
 | 
			
		||||
                };
 | 
			
		||||
                var baseIndex = Units.FindIndex(x => x.UnitType == "currency" && x.Modifier == baseType.Modifier);
 | 
			
		||||
                if (baseIndex == -1)
 | 
			
		||||
                    Units.Add(baseType);
 | 
			
		||||
                else
 | 
			
		||||
                    Units[baseIndex] = baseType;
 | 
			
		||||
                using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (var rate in currencyRates.ConversionRates)
 | 
			
		||||
                    {
 | 
			
		||||
                        var u = new ConvertUnit()
 | 
			
		||||
                        {
 | 
			
		||||
                            Triggers = new[] { rate.Key },
 | 
			
		||||
                            UnitType = unitTypeString,
 | 
			
		||||
                            Modifier = rate.Value
 | 
			
		||||
                        };
 | 
			
		||||
                        var lower = u.Triggers.First().ToLowerInvariant();
 | 
			
		||||
                        var toUpdate = Units.FindIndex(x => x.UnitType == "currency" && x.Triggers.First().ToLowerInvariant() == lower);
 | 
			
		||||
                        if (toUpdate == -1)
 | 
			
		||||
                        {
 | 
			
		||||
                            Units.Add(u);
 | 
			
		||||
                            uow.ConverterUnits.Add(u);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            Units[toUpdate] = u;
 | 
			
		||||
                            uow.ConverterUnits.Update(u);
 | 
			
		||||
                        }
 | 
			
		||||
                        uow.Complete();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                await msg.Reply("done");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            [LocalizedCommand, LocalizedDescription, LocalizedSummary]
 | 
			
		||||
            [RequireContext(ContextType.Guild)]
 | 
			
		||||
            public async Task ConvertListE(IUserMessage msg) //extended and bugged list
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user