Skip to content

Commit

Permalink
plugin collectors
Browse files Browse the repository at this point in the history
  • Loading branch information
Eimaen committed May 4, 2023
1 parent b42d88d commit 4c6643c
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using OpenLyricsClient.Backend.Plugins;
using OpenLyricsClient.Backend.Structure.Song;
using System.Linq;
using System.Threading.Tasks;

namespace OpenLyricsClient.Backend.Collector.Artwork.Providers.Plugin
{
internal class PluginArtworkCollector : IArtworkCollector
{
public string CollectorName()
{
return "Plugin";
}

async public Task<Structure.Artwork.Artwork> GetArtwork(SongResponseObject songResponseObject)
{
Structure.Artwork.Artwork collectedData = new Structure.Artwork.Artwork();
foreach (IPlugin plugin in Core.INSTANCE.PluginManager.GetPluginsByScope(PluginScope.ArtworkCollector).OrderByDescending((IPlugin plugin) => plugin.GetCollectedArtworkQuality()))
{
Structure.Artwork.Artwork? data = await plugin.CollectArtwork(songResponseObject);
if (data != null && data != collectedData)
{
collectedData = data;
break;
}
}
return collectedData;
}

public int Quality()
{
IPlugin? plugin = Core.INSTANCE.PluginManager.GetPluginsByScope(PluginScope.ArtworkCollector).MaxBy((IPlugin plugin) => plugin.GetCollectedArtworkQuality());
if (plugin == null)
return -1;
else
return plugin.GetCollectedArtworkQuality();
}
}
}
6 changes: 4 additions & 2 deletions OpenLyricsClient/Backend/Collector/Lyrics/LyricCollector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using OpenLyricsClient.Backend.Collector.Lyrics.Providers.NetEase;
using OpenLyricsClient.Backend.Collector.Lyrics.Providers.NetEaseV2;
using OpenLyricsClient.Backend.Collector.Lyrics.Providers.OpenLyricsClient;
using OpenLyricsClient.Backend.Collector.Lyrics.Providers.Plugin;
using OpenLyricsClient.Backend.Collector.Lyrics.Providers.Textyl;
using OpenLyricsClient.Backend.Events;
using OpenLyricsClient.Backend.Events.EventArgs;
Expand Down Expand Up @@ -35,6 +36,7 @@ public LyricCollector()
this._lyricCollectors.Add(new NetEaseV2Collector());
this._lyricCollectors.Add(new TextylCollector());
this._lyricCollectors.Add(new OpenLyricsClientCollector());
this._lyricCollectors.Add(new PluginLyricsCollector());
}

public async Task CollectLyrics(SongResponseObject songResponseObject)
Expand Down Expand Up @@ -63,8 +65,8 @@ public async Task CollectLyrics(SongResponseObject songResponseObject)
if (lyricData.LyricReturnCode != LyricReturnCode.SUCCESS)
continue;

foreach (IPlugin plugin in Core.INSTANCE.PluginManager.GetPlugins().Where((plugin) => plugin.Scope.HasFlag(PluginScope.LyricsPostprocess)))
lyricData = plugin.ProcessLyrics(songResponseObject, lyricData);
foreach (IPlugin plugin in Core.INSTANCE.PluginManager.GetPluginsByScope(PluginScope.LyricsPostprocess))
lyricData = await plugin.ProcessLyrics(songResponseObject, lyricData);

Core.INSTANCE.CacheManager.WriteToCache(songResponseObject.SongRequestObject, lyricData);
return;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using OpenLyricsClient.Backend.Plugins;
using OpenLyricsClient.Backend.Structure.Lyrics;
using OpenLyricsClient.Backend.Structure.Song;
using System.Linq;
using System.Threading.Tasks;

namespace OpenLyricsClient.Backend.Collector.Lyrics.Providers.Plugin
{
internal class PluginLyricsCollector : ILyricsCollector
{
public string CollectorName()
{
return "Plugin";
}

public async Task<LyricData> GetLyrics(SongResponseObject songResponseObject)
{
LyricData collectedData = new LyricData();
foreach (IPlugin plugin in Core.INSTANCE.PluginManager.GetPluginsByScope(PluginScope.LyricsCollector).OrderByDescending((IPlugin plugin) => plugin.GetCollectedLyricsQuality()))
{
LyricData? data = await plugin.CollectLyrics(songResponseObject);
if (data != null && data != collectedData)
{
collectedData = data;
break;
}
}
return collectedData;
}

public int ProviderQuality()
{
IPlugin? plugin = Core.INSTANCE.PluginManager.GetPluginsByScope(PluginScope.LyricsCollector).MaxBy((IPlugin plugin) => plugin.GetCollectedLyricsQuality());
if (plugin == null)
return -1;
else
return plugin.GetCollectedLyricsQuality();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using OpenLyricsClient.Backend.Plugins;
using OpenLyricsClient.Backend.Structure.Song;
using System.Linq;
using System.Threading.Tasks;

namespace OpenLyricsClient.Backend.Collector.Song.Providers.Plugin
{
internal class PluginSongCollector : ISongCollector
{
public string CollectorName()
{
return "Plugin";
}

async public Task<SongResponseObject> GetSong(SongRequestObject songRequestObject)
{
SongResponseObject collectedData = new SongResponseObject();
foreach (IPlugin plugin in Core.INSTANCE.PluginManager.GetPluginsByScope(PluginScope.SongCollector).OrderByDescending((IPlugin plugin) => plugin.GetCollectedSongQuality()))
{
SongResponseObject? data = await plugin.CollectSong(songRequestObject);
if (data != null && data != collectedData)
{
collectedData = data;
break;
}
}
return collectedData;
}

public int ProviderQuality()
{
IPlugin? plugin = Core.INSTANCE.PluginManager.GetPluginsByScope(PluginScope.SongCollector).MaxBy((IPlugin plugin) => plugin.GetCollectedSongQuality());
if (plugin == null)
return -1;
else
return plugin.GetCollectedSongQuality();
}
}
}
8 changes: 7 additions & 1 deletion OpenLyricsClient/Backend/Plugins/IPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ namespace OpenLyricsClient.Backend.Plugins
public interface IPlugin
{
PluginScope Scope { get; }
LyricData ProcessLyrics(SongResponseObject songResponse, LyricData lyrics);
Task<LyricData> ProcessLyrics(SongResponseObject songResponse, LyricData lyrics);
Task<LyricData?> CollectLyrics(SongResponseObject songResponseObject);
int GetCollectedLyricsQuality();
Task<SongResponseObject?> CollectSong(SongRequestObject songRequestObject);
int GetCollectedSongQuality();
Task<Structure.Artwork.Artwork?> CollectArtwork(SongResponseObject songResponseObject);
int GetCollectedArtworkQuality();
}
}
4 changes: 3 additions & 1 deletion OpenLyricsClient/Backend/Plugins/PluginManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ public void LoadPlugins()
}
}

public List<IPlugin> GetPlugins() => _plugins;
public IEnumerable<IPlugin> GetPlugins() => _plugins;

public IEnumerable<IPlugin> GetPluginsByScope(PluginScope scope) => GetPlugins().Where((plugin) => plugin.Scope.HasFlag(scope));
}
}
9 changes: 4 additions & 5 deletions OpenLyricsClient/Backend/Plugins/PluginScope.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OpenLyricsClient.Backend.Plugins
{
Expand All @@ -11,6 +7,9 @@ public enum PluginScope
{
Dummy = 1,
LyricsPostprocess = 2,
LyricsViewRendering = 4
LyricsViewRendering = 4,
LyricsCollector = 8,
SongCollector = 16,
ArtworkCollector = 32
}
}

0 comments on commit 4c6643c

Please sign in to comment.