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"];
+ }
}