Files
AR-Menu/Library/PackageCache/com.unity.sharp-zip-lib@6b61f82b0cb3/Editor/Analytics/AnalyticsSender.cs
2025-11-30 08:35:03 +02:00

104 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEngine.Analytics;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace Unity.SharpZipLib.Editor {
internal static class AnalyticsSender {
#if UNITY_2019_4_OR_NEWER && UNITY_EDITOR && ENABLE_CLOUD_SERVICES_ANALYTICS
private struct EventDetail {
public string assemblyInfo;
public string packageName;
public string packageVersion;
}
internal static void SendEventInEditor(AnalyticsEvent analyticsEvent) {
if (!EditorAnalytics.enabled) {
return;
}
if (!IsEventRegistered(analyticsEvent)) {
var assembly = Assembly.GetCallingAssembly();
if (!RegisterEvent(analyticsEvent, assembly)) {
return;
}
}
if (!ShouldSendEvent(analyticsEvent)) {
return;
}
analyticsEvent.parameters.actualPackageVersion = m_registeredEvents[analyticsEvent.eventName].packageVersion;
AnalyticsResult result = EditorAnalytics.SendEventWithLimit(analyticsEvent.eventName, analyticsEvent.parameters, analyticsEvent.version);
if (result != AnalyticsResult.Ok) {
return;
}
DateTime now = DateTime.Now;
m_lastSentDateTime[analyticsEvent.eventName] = now;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
private static bool IsEventRegistered(AnalyticsEvent analyticsEvent) {
return m_registeredEvents.ContainsKey(analyticsEvent.eventName);
}
private static bool ShouldSendEvent(AnalyticsEvent analyticsEvent) {
if (!m_lastSentDateTime.ContainsKey(analyticsEvent.eventName)) {
return true;
}
DateTime lastSentDateTime = m_lastSentDateTime[analyticsEvent.eventName];
return DateTime.Now - lastSentDateTime >= analyticsEvent.minInterval;
}
private static bool RegisterEvent(AnalyticsEvent analyticsEvent, Assembly assembly) {
if (!EditorAnalytics.enabled) {
return false;
}
AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(analyticsEvent.eventName,
analyticsEvent.maxEventPerHour, analyticsEvent.maxItems, VENDOR_KEY, analyticsEvent.version);
if (result != AnalyticsResult.Ok) {
return false;
}
var eventDetails = new EventDetail {
assemblyInfo = assembly.FullName,
};
var packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssembly(assembly);
if (packageInfo != null) {
eventDetails.packageName = packageInfo.name;
eventDetails.packageVersion = packageInfo.version;
}
m_registeredEvents[analyticsEvent.eventName] = eventDetails;
return true;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
private const string VENDOR_KEY = "unity.sharp-zip-lib";
private static readonly Dictionary<string, EventDetail> m_registeredEvents = new Dictionary<string, EventDetail>();
private static readonly Dictionary<string, DateTime> m_lastSentDateTime = new Dictionary<string, DateTime>();
#else
internal static void SendEventInEditor(AnalyticsEvent analyticsEvent) { }
#endif //UNITY_EDITOR
}
} //end namespace