Decompiled source of Media Playlist Mod v1.0.0

BonelabMediaPlaylist.dll

Decompiled a day ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BoneLib;
using BoneLib.BoneMenu;
using BonelabMediaPlaylist;
using MelonLoader;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(MediaPlaylistMod), "Media Playlist", "1.0.0", "Subat", null)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("BonelabMediaPlaylist")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BonelabMediaPlaylist")]
[assembly: AssemblyTitle("BonelabMediaPlaylist")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace BonelabMediaPlaylist
{
	public class MediaPlaylistMod : MelonMod
	{
		private string configPath;

		private Dictionary<string, string> playlist = new Dictionary<string, string>();

		private Page mainCategory;

		private Page playlistCategory;

		public override void OnInitializeMelon()
		{
			configPath = Path.Combine(MelonUtils.UserDataDirectory, "media_playlist.txt");
			SetupDefaultConfig();
			LoadPlaylist();
			Hooking.OnLevelLoaded += OnLevelInit;
		}

		private void OnLevelInit(LevelInfo levelInfo)
		{
			SetupBoneMenu();
		}

		private void SetupDefaultConfig()
		{
			if (!Directory.Exists(MelonUtils.UserDataDirectory))
			{
				Directory.CreateDirectory(MelonUtils.UserDataDirectory);
			}
			if (!File.Exists(configPath))
			{
				string contents = "# Format: Name=URL\nRickRoll=https://youtube.com\nLofiBeats=https://youtube.com";
				File.WriteAllText(configPath, contents);
			}
		}

		private void LoadPlaylist()
		{
			playlist.Clear();
			if (!File.Exists(configPath))
			{
				return;
			}
			string[] array = File.ReadAllLines(configPath);
			foreach (string text in array)
			{
				if (string.IsNullOrWhiteSpace(text) || text.StartsWith("#"))
				{
					continue;
				}
				string[] array2 = text.Split(new char[1] { '=' }, 2);
				if (array2.Length == 2)
				{
					string key = array2[0].Trim();
					string value = array2[1].Trim();
					if (!playlist.ContainsKey(key))
					{
						playlist.Add(key, value);
					}
				}
			}
		}

		private void SetupBoneMenu()
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			if (mainCategory == null)
			{
				mainCategory = Page.Root.CreatePage("Media Playlist", Color.cyan, 0, true);
				playlistCategory = mainCategory.CreatePage("My Links", Color.white, 0, true);
				BuildPlaylistMenu();
				mainCategory.CreateFunction("Reload playlist.txt", Color.yellow, (Action)delegate
				{
					LoadPlaylist();
					BuildPlaylistMenu();
					MelonLogger.Msg("Playlist reloaded!");
				});
			}
		}

		private void BuildPlaylistMenu()
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			playlistCategory.RemoveAll();
			if (playlist.Count == 0)
			{
				playlistCategory.CreateFunction("[No links found in file]", Color.red, (Action)null);
				return;
			}
			foreach (KeyValuePair<string, string> item in playlist)
			{
				playlistCategory.CreateFunction(item.Key, Color.green, (Action)delegate
				{
					GUIUtility.systemCopyBuffer = item.Value;
					MelonLogger.Msg("Copied: " + item.Value);
				});
			}
		}
	}
}