Decompiled source of EmailApi v0.0.5

EmailApi/EmailApi.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using CommonAPI;
using HarmonyLib;
using Reptile;
using Reptile.Phone;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
[assembly: AssemblyCompany("EmailApi")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("EmailApi")]
[assembly: AssemblyFileVersion("0.1.0.0")]
[assembly: AssemblyInformationalVersion("0.1.0")]
[assembly: AssemblyProduct("EmailApi")]
[assembly: AssemblyTitle("EmailApi")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.0.0")]
[module: UnverifiableCode]
internal static class JsonUtilityEx
{
	[Serializable]
	private class Wrapper<T>
	{
		public T[] array;
	}

	public static T[] getJsonArray<T>(string json)
	{
		return JsonUtility.FromJson<Wrapper<T>>("{ \"array\": " + json + "}").array;
	}

	public static string arrayToJson<T>(T[] array)
	{
		return JsonUtility.ToJson((object)new Wrapper<T>
		{
			array = array
		});
	}
}
namespace MoveStyler.Utility
{
	public class TextureUtil
	{
		public static Texture2D GetTextureFromBitmap(Bitmap bitmap, FilterMode filterMode = 1)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Expected O, but got Unknown
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Expected O, but got Unknown
			byte[] array = (byte[])((TypeConverter)new ImageConverter()).ConvertTo((object?)bitmap, typeof(byte[]));
			Texture2D val = new Texture2D(((Image)bitmap).Width, ((Image)bitmap).Height);
			ImageConversion.LoadImage(val, array);
			((Texture)val).filterMode = filterMode;
			val.Apply();
			return val;
		}
	}
}
namespace OutfitSwitcher
{
	public static class LoadUtil
	{
		public static readonly BindingFlags BindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

		public static Assets GetAssets(CharacterLoader instance)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			return (Assets)(((object)instance).GetType().GetField("assets", BindingFlags)?.GetValue(instance));
		}

		public static MethodInfo GetMethod(this object instance, string name)
		{
			return instance.GetType().GetMethod(name, BindingFlags);
		}

		public static void InvokeMethod(this object instance, string name, params object[] parameters)
		{
			Traverse.Create(instance).Method(name, parameters).GetValue(parameters);
		}

		public static void InvokeMethod(this object instance, string name, Type[] types, params object[] parameters)
		{
			Traverse.Create(instance).Method(name, types, (object[])null).GetValue(parameters);
		}

		public static FieldInfo GetField(this object instance, string name)
		{
			return instance.GetType().GetField(name, BindingFlags);
		}

		public static T GetComponentValue<T>(this object instance, string name) where T : Component
		{
			object? value = instance.GetField(name).GetValue(instance);
			return (T)((value is T) ? value : null);
		}

		public static T GetFieldValue<T>(this object instance, string name) where T : class
		{
			return instance.GetField(name).GetValue(instance) as T;
		}

		public static void SetField(this object instance, string name, object value)
		{
			instance.GetField(name).SetValue(instance, value);
		}
	}
}
namespace RabbitMS.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	public class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		public static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("RabbitMS.Properties.Resources", typeof(Resources).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		public static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		public static Bitmap logo_background => (Bitmap)ResourceManager.GetObject("logo_background", resourceCulture);

		public static Bitmap phoneAppIcon => (Bitmap)ResourceManager.GetObject("phoneAppIcon", resourceCulture);

		internal Resources()
		{
		}
	}
}
namespace EmailApi
{
	public static class EmailManager
	{
		private static ManualLogSource DebugLog = Logger.CreateLogSource("EmailApi EmailManager");

		private static int msgSenderID = 9001;

		private static Color msgSenderColor = new Color(1f, 0.9f, 0.9f);

		public static EmailMessage msg_tutorial;

		public static Color[] msgSenderColors = (Color[])(object)new Color[2]
		{
			new Color(1f, 1f, 1f, 1f),
			new Color(0.4863f, 0.5569f, 0.78f, 1f)
		};

		public static Color[] msgSubjectColors = (Color[])(object)new Color[2]
		{
			new Color(0.196f, 0.31f, 0.612f, 1f),
			new Color(1f, 1f, 1f, 1f)
		};

		public static Player player;

		public static Phone phone;

		public static AppEmail emailApp;

		public static List<KeyValuePair<EmailMessage, bool>> _messagesDatabase;

		public static Dictionary<string, EmailMessage> _messagesIDDatabase;

		private static EmailSave SaveState;

		private static EmailApiPlugin plugin;

		public static Dictionary<int, CustomContact> _Contacts { get; private set; }

		public static void Initialize(EmailApiPlugin _plugin)
		{
			DebugLog.LogMessage((object)"Init Email Manager");
			plugin = _plugin;
			InitLoadEmailSave();
			InitCustomContacts();
			InitEmailMessages();
		}

		private static void InitLoadEmailSave()
		{
			new EmailSave();
			_ = EmailSave.Instance.hasReadData;
		}

		private static void InitCustomContacts()
		{
			_Contacts = new Dictionary<int, CustomContact>();
		}

		public static CustomContact RegisterCustomContact(string contactName, int contactID, Texture2D contactImage)
		{
			CustomContact customContact = new CustomContact(contactID, contactName);
			customContact.avatar = TextureUtility.CreateSpriteFromTexture(contactImage);
			_Contacts.Add(customContact.characterID, customContact);
			DebugLog.LogMessage((object)("Added Contact " + contactName));
			return customContact;
		}

		private static void InitEmailMessages()
		{
			_messagesDatabase = new List<KeyValuePair<EmailMessage, bool>>();
			_messagesIDDatabase = new Dictionary<string, EmailMessage>();
		}

		public static void AddEmailMessage(EmailMessage email, bool checkSave = false)
		{
			_messagesDatabase.Add(new KeyValuePair<EmailMessage, bool>(email, checkSave));
			_messagesIDDatabase.Add(((Object)email).name, email);
		}

		public static EmailMessage CreateEmailMessage(string msgID, int msgSenderID, string subject, Color msgSenderColor, List<string> messages)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			EmailMessage obj = ScriptableObject.CreateInstance<EmailMessage>();
			((Object)obj).name = msgID;
			obj.characterNameIDOfSender = msgSenderID;
			obj.subject = subject;
			obj.profileBackground = msgSenderColor;
			obj.message = messages.ToArray();
			return obj;
		}

		public static void EmailNotification(string MessageID, bool setSave = true)
		{
			player = WorldHandler.instance.GetCurrentPlayer();
			phone = player.phone;
			emailApp = phone.GetAppInstance<AppEmail>();
			if (!((Object)(object)emailApp != (Object)null))
			{
				return;
			}
			if (_messagesIDDatabase.TryGetValue(MessageID, out var value))
			{
				if (setSave)
				{
					EmailSave.Instance.setMessageState(MessageID, setSave);
				}
				emailApp.PushNotification(value);
			}
			else
			{
				DebugLog.LogMessage((object)("Failed to find email of ID: " + MessageID));
			}
		}

		public static void EmailNotificationDelayed(string MessageID, bool setSave = true, float delay = 2f)
		{
			plugin.DelayEmailNotification(MessageID, setSave, delay);
		}
	}
	public struct CustomContact
	{
		public int characterID;

		public string characterName;

		public Sprite avatar;

		public Guid associatedCharacterGuid;

		public int CompareTo(Contact other)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			return characterID.CompareTo(other.characterID);
		}

		public CustomContact(int characterID, string characterName)
		{
			this.characterID = characterID;
			this.characterName = characterName;
			avatar = null;
			associatedCharacterGuid = Guid.Empty;
		}
	}
	[HarmonyPatch(typeof(AppEmail))]
	public class PhoneAppEmailPatch
	{
		private static ManualLogSource DebugLog = Logger.CreateLogSource("EmailApi AppEmail Patch");

		[HarmonyPostfix]
		[HarmonyPatch("RefreshList")]
		public static void RefreshListpatch(AppEmail __instance, ref List<EmailMessage> ___m_Emails, ref EmailScrollView ___m_CardsScroll)
		{
			___m_Emails.Reverse();
			foreach (KeyValuePair<EmailMessage, bool> item in EmailManager._messagesDatabase)
			{
				if ((EmailSave.Instance.getMessageState(((Object)item.Key).name) || !item.Value) && !___m_Emails.Contains(item.Key))
				{
					___m_Emails.Add(item.Key);
				}
			}
			___m_Emails.Reverse();
			((PhoneScroll)___m_CardsScroll).UpdateListContent(___m_Emails.Count);
		}

		[HarmonyPrefix]
		[HarmonyPatch("PushNotification")]
		public static bool PushNotificationPatch(AppEmail __instance, EmailMessage email)
		{
			if (email.characterNameIDOfSender > 9000)
			{
				if (EmailManager._Contacts.TryGetValue(email.characterNameIDOfSender, out var value))
				{
					EmailManager.phone.PushNotification((App)(object)__instance, value.characterName, (AUnlockable)(object)email);
				}
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(EmailCard))]
	public class EmailCardPatch
	{
		private static ManualLogSource DebugLog = Logger.CreateLogSource("EmailApi EmailCard");

		[HarmonyPrefix]
		[HarmonyPatch("SetContent")]
		public static bool SetContentpatch(EmailCard __instance, AUnlockable content, ref Image ___m_ProfilePicture, ref Image ___m_BackgroundImage)
		{
			EmailMessage val = (EmailMessage)(object)((content is EmailMessage) ? content : null);
			if ((Object)(object)val != (Object)null && val.characterNameIDOfSender > 9000)
			{
				PropertyInfo property = typeof(EmailCard).GetProperty("AssignedContent", BindingFlags.Instance | BindingFlags.Public);
				property = property.DeclaringType.GetProperty(property.Name);
				property.SetValue(__instance, content);
				TextMeshProUGUI subjectLabel = __instance.m_SubjectLabel;
				TextMeshProUGUI senderLabel = __instance.m_SenderLabel;
				((TMP_Text)subjectLabel).text = val.subject;
				string text = val.characterNameIDOfSender.ToString();
				if (EmailManager._Contacts.TryGetValue(val.characterNameIDOfSender, out var value))
				{
					text = value.characterName;
					___m_ProfilePicture.sprite = value.avatar;
					__instance.m_SenderColors = EmailManager.msgSenderColors;
					__instance.m_SubjectColors = EmailManager.msgSubjectColors;
				}
				((TMP_Text)senderLabel).text = text;
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(EmailMessagePanel))]
	internal class EmailMessagePanelPatch
	{
		private static ManualLogSource DebugLog = Logger.CreateLogSource("EmailApi EmailCard");

		[HarmonyPrefix]
		[HarmonyPatch("SetContent")]
		public static bool SetContentpatch(EmailMessagePanel __instance, EmailMessage email, ref int ___messageCurrentPage, ref int ___messagePageCount, ref EmailMessage ___currentEmail, ref TextMeshProUGUI ___senderText, ref TextMeshProUGUI ___subjectText, ref TextMeshProUGUI ___messageArea, ref Image ___senderAvatar)
		{
			if (email.characterNameIDOfSender > 9000)
			{
				___messageCurrentPage = 0;
				___messagePageCount = email.message.Length;
				___currentEmail = email;
				((TMP_Text)___senderText).text = email.characterNameIDOfSender.ToString();
				((TMP_Text)___subjectText).text = email.subject;
				if (EmailManager._Contacts.TryGetValue(email.characterNameIDOfSender, out var value))
				{
					((TMP_Text)___senderText).text = value.characterName;
					___senderAvatar.sprite = value.avatar;
				}
				((Component)___messageArea).gameObject.SetActive(false);
				return false;
			}
			return true;
		}
	}
	public class EmailSave : CustomSaveData
	{
		private static ManualLogSource DebugLog = Logger.CreateLogSource("EmailApi Email Manager Save");

		private readonly Dictionary<string, bool> messageStates;

		public bool hasReadData;

		public static EmailSave Instance { get; private set; }

		public EmailSave()
			: base("EmailApi", "{0}_msg.data", (SaveLocations)1)
		{
			Instance = this;
			messageStates = new Dictionary<string, bool>();
			DebugLog.LogMessage((object)"Start Email Save");
			DebugLog.LogMessage((object)base.Filename);
		}

		public void setMessageState(string messageName, bool state)
		{
			if (messageStates.ContainsKey(messageName))
			{
				messageStates[messageName] = state;
				((CustomSaveData)Instance).Save();
			}
			else
			{
				messageStates.Add(messageName, state);
				((CustomSaveData)Instance).Save();
			}
		}

		public bool getMessageState(string messageName)
		{
			if (messageStates.ContainsKey(messageName))
			{
				return messageStates[messageName];
			}
			return false;
		}

		public override void Initialize()
		{
			DebugLog.LogMessage((object)"EmailManager Init");
			messageStates.Clear();
		}

		public override void Read(BinaryReader reader)
		{
			reader.ReadByte();
			int num = reader.ReadInt32();
			for (int i = 0; i < num; i++)
			{
				string key = reader.ReadString();
				bool value = reader.ReadBoolean();
				if (!messageStates.ContainsKey(key))
				{
					messageStates.Add(key, value);
				}
			}
			hasReadData = true;
		}

		public override void Write(BinaryWriter writer)
		{
			writer.Write((byte)0);
			writer.Write(messageStates.Count);
			foreach (KeyValuePair<string, bool> messageState in messageStates)
			{
				writer.Write(messageState.Key);
				writer.Write(messageState.Value);
			}
		}
	}
	[BepInPlugin("EmailApi", "EmailApi", "0.1.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class EmailApiPlugin : BaseUnityPlugin
	{
		public const string CharacterAPIGuid = "com.Viliger.CharacterAPI";

		private const string CommonAPIGUID = "CommonAPI";

		public EmailApiPlugin Instance;

		private static ManualLogSource DebugLog = Logger.CreateLogSource("EmailApi Plugin");

		private void Awake()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			((BaseUnityPlugin)this).Logger.LogMessage((object)"EmailApi v0.1.0 starting...");
			new Harmony("EmailApi").PatchAll();
			Instance = this;
			((BaseUnityPlugin)this).Logger.LogMessage((object)"Init Email Save");
			EmailManager.Initialize(this);
		}

		public void DelayEmailNotification(string messageID, bool save, float delay)
		{
			((MonoBehaviour)this).StartCoroutine(DelayEmailRoutine(messageID, save, delay));
		}

		private IEnumerator DelayEmailRoutine(string messageID, bool save, float delay)
		{
			yield return (object)new WaitForSeconds(delay);
			EmailManager.EmailNotification(messageID, save);
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "EmailApi";

		public const string PLUGIN_NAME = "EmailApi";

		public const string PLUGIN_VERSION = "0.1.0";
	}
}