From 803624e21460b2c5c95d2e72c59bd9e2c82a3105 Mon Sep 17 00:00:00 2001 From: RaidMax Date: Sat, 11 Feb 2023 20:44:04 -0600 Subject: [PATCH] update auto message feed plugin to IPluginV2 --- .../AutoMessageFeedConfiguration.cs | 17 +++ .../AutomessageFeed/AutomessageFeed.csproj | 2 +- Plugins/AutomessageFeed/Configuration.cs | 18 --- Plugins/AutomessageFeed/Plugin.cs | 127 ++++++++---------- 4 files changed, 76 insertions(+), 88 deletions(-) create mode 100644 Plugins/AutomessageFeed/AutoMessageFeedConfiguration.cs delete mode 100644 Plugins/AutomessageFeed/Configuration.cs diff --git a/Plugins/AutomessageFeed/AutoMessageFeedConfiguration.cs b/Plugins/AutomessageFeed/AutoMessageFeedConfiguration.cs new file mode 100644 index 00000000..98900bb5 --- /dev/null +++ b/Plugins/AutomessageFeed/AutoMessageFeedConfiguration.cs @@ -0,0 +1,17 @@ +using SharedLibraryCore.Interfaces; + +namespace IW4MAdmin.Plugins.AutoMessageFeed; + +public class AutoMessageFeedConfiguration : IBaseConfiguration +{ + public bool EnableFeed { get; set; } + public string FeedUrl { get; set; } + public int MaxFeedItems { get; set; } + + public IBaseConfiguration Generate() + { + return this; + } + + public string Name() => "AutomessageFeedConfiguration"; +} diff --git a/Plugins/AutomessageFeed/AutomessageFeed.csproj b/Plugins/AutomessageFeed/AutomessageFeed.csproj index ccba9add..8b6a1235 100644 --- a/Plugins/AutomessageFeed/AutomessageFeed.csproj +++ b/Plugins/AutomessageFeed/AutomessageFeed.csproj @@ -10,7 +10,7 @@ - + diff --git a/Plugins/AutomessageFeed/Configuration.cs b/Plugins/AutomessageFeed/Configuration.cs deleted file mode 100644 index 829cd820..00000000 --- a/Plugins/AutomessageFeed/Configuration.cs +++ /dev/null @@ -1,18 +0,0 @@ -using SharedLibraryCore.Interfaces; - -namespace AutomessageFeed -{ - class Configuration : IBaseConfiguration - { - public bool EnableFeed { get; set; } - public string FeedUrl { get; set; } - public int MaxFeedItems { get; set; } - - public IBaseConfiguration Generate() - { - return this; - } - - public string Name() => "AutomessageFeedConfiguration"; - } -} diff --git a/Plugins/AutomessageFeed/Plugin.cs b/Plugins/AutomessageFeed/Plugin.cs index 99df7117..f5555ba3 100644 --- a/Plugins/AutomessageFeed/Plugin.cs +++ b/Plugins/AutomessageFeed/Plugin.cs @@ -1,88 +1,77 @@ using SharedLibraryCore; using SharedLibraryCore.Interfaces; -using System; using System.Threading.Tasks; using Microsoft.SyndicationFeed.Rss; -using SharedLibraryCore.Configuration; using System.Xml; using Microsoft.SyndicationFeed; using System.Collections.Generic; using SharedLibraryCore.Helpers; using System.Text.RegularExpressions; +using Microsoft.Extensions.DependencyInjection; +using SharedLibraryCore.Interfaces.Events; -namespace AutomessageFeed +namespace IW4MAdmin.Plugins.AutoMessageFeed; + +public class Plugin : IPluginV2 { - public class Plugin : IPlugin + public string Name => "Automessage Feed"; + public string Version => Utilities.GetVersionAsString(); + public string Author => "RaidMax"; + + private int _currentFeedItem; + private readonly AutoMessageFeedConfiguration _configuration; + + public static void RegisterDependencies(IServiceCollection serviceCollection) { - public string Name => "Automessage Feed"; + serviceCollection.AddConfiguration("AutomessageFeedPluginSettings"); + } - public float Version => (float)Utilities.GetVersionAsDouble(); + public Plugin(AutoMessageFeedConfiguration configuration) + { + _configuration = configuration; - public string Author => "RaidMax"; - - private int _currentFeedItem; - private readonly IConfigurationHandler _configurationHandler; - - public Plugin(IConfigurationHandlerFactory configurationHandlerFactory) + if (configuration.EnableFeed) { - _configurationHandler = configurationHandlerFactory.GetConfigurationHandler("AutomessageFeedPluginSettings"); - } - - private async Task GetNextFeedItem(Server server) - { - var items = new List(); - - using (var reader = XmlReader.Create(_configurationHandler.Configuration().FeedUrl, new XmlReaderSettings() { Async = true })) + IManagementEventSubscriptions.Load += (manager, _) => { - var feedReader = new RssFeedReader(reader); - - while (await feedReader.Read()) - { - switch (feedReader.ElementType) - { - case SyndicationElementType.Item: - var item = await feedReader.ReadItem(); - items.Add(Regex.Replace(item.Title, @"\<.+\>.*\", "")); - break; - } - } - } - - if (_currentFeedItem < items.Count && (_configurationHandler.Configuration().MaxFeedItems == 0 || _currentFeedItem < _configurationHandler.Configuration().MaxFeedItems)) - { - _currentFeedItem++; - return items[_currentFeedItem - 1]; - } - - _currentFeedItem = 0; - return Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_AUTOMESSAGEFEED_NO_ITEMS"]; - } - - public Task OnEventAsync(GameEvent E, Server S) - { - return Task.CompletedTask; - } - - public async Task OnLoadAsync(IManager manager) - { - await _configurationHandler.BuildAsync(); - if (_configurationHandler.Configuration() == null) - { - _configurationHandler.Set((Configuration)new Configuration().Generate()); - await _configurationHandler.Save(); - } - - manager.GetMessageTokens().Add(new MessageToken("FEED", GetNextFeedItem)); - } - - public Task OnTickAsync(Server S) - { - throw new NotImplementedException(); - } - - public Task OnUnloadAsync() - { - return Task.CompletedTask; + manager.GetMessageTokens().Add(new MessageToken("FEED", GetNextFeedItem)); + return Task.CompletedTask; + }; } } + + private async Task GetNextFeedItem(Server server) + { + if (!_configuration.EnableFeed) + { + return null; + } + + var items = new List(); + + using (var reader = XmlReader.Create(_configuration.FeedUrl, new XmlReaderSettings { Async = true })) + { + var feedReader = new RssFeedReader(reader); + + while (await feedReader.Read()) + { + if (feedReader.ElementType != SyndicationElementType.Item) + { + continue; + } + + var item = await feedReader.ReadItem(); + items.Add(Regex.Replace(item.Title, @"\<.+\>.*\", "")); + } + } + + if (_currentFeedItem < items.Count && (_configuration.MaxFeedItems == 0 || _currentFeedItem < _configuration.MaxFeedItems)) + { + _currentFeedItem++; + return items[_currentFeedItem - 1]; + } + + _currentFeedItem = 0; + return Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_AUTOMESSAGEFEED_NO_ITEMS"]; + } }