MVP completed: Hook into Playlistmanager to post updates to beatleader maps owned by the user

This commit is contained in:
pleb
2026-04-19 08:20:15 -07:00
parent f9a0e1669f
commit 7879e03cc5
7 changed files with 222 additions and 177 deletions
+19 -19
View File
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using BeatSaberPlaylistsLib.Types;
using IPA;
using PlaylistManager.Utilities;
using IPALogger = IPA.Logging.Logger;
namespace Setlist
@@ -16,6 +17,9 @@ namespace Setlist
/// </summary>
internal static IPALogger Log { get; private set; }
/// <summary>Set after the ownership scan resolves the platform user id; used when syncing after PlaylistManager adds a song.</summary>
internal static string CachedPlatformUserId { get; set; }
[Init]
public Plugin(IPALogger logger)
{
@@ -28,6 +32,10 @@ namespace Setlist
{
try
{
SetlistSyncHost.Ensure();
Events.playlistSongAdded += OnPlaylistSongAdded;
var playlists = BeatSaberPlaylistsLib.PlaylistManager.DefaultManager.GetAllPlaylists(
includeChildren: true,
out AggregateException loadErrors);
@@ -50,25 +58,11 @@ namespace Setlist
var entries = new List<(IPlaylist Playlist, string Title, bool HasSyncUrl, string BeatLeaderGuid, string OwnerId)>();
foreach (var playlist in playlists)
{
var hasSyncUrl = false;
string syncUrl = null;
if (playlist.TryGetCustomData("syncURL", out var syncObj) && syncObj is string url)
{
syncUrl = url;
hasSyncUrl = !string.IsNullOrWhiteSpace(url);
}
string ownerId = null;
if (playlist.TryGetCustomData("owner", out var ownerObj) && ownerObj is string o)
{
ownerId = string.IsNullOrWhiteSpace(o) ? null : o.Trim();
}
string blGuid = null;
if (hasSyncUrl && BeatLeaderPlaylistOwnership.TryExtractBeatLeaderPlaylistGuid(syncUrl, out var g))
{
blGuid = g;
}
BeatLeaderPlaylistOwnership.TryReadBeatLeaderMetadata(
playlist,
out var hasSyncUrl,
out var blGuid,
out var ownerId);
entries.Add((playlist, playlist.Title, hasSyncUrl, blGuid, ownerId));
}
@@ -84,6 +78,12 @@ namespace Setlist
[OnExit]
public void OnApplicationQuit()
{
Events.playlistSongAdded -= OnPlaylistSongAdded;
}
private void OnPlaylistSongAdded(IPlaylistSong song, IPlaylist playlist)
{
SetlistSyncHost.Instance?.StartPostOwnedBeatLeaderPlaylist(playlist, Log);
}
/// <summary>