using Microsoft.AppCenter; using Microsoft.AppCenter.Analytics; using Microsoft.AppCenter.Crashes; using System; using System.Collections.Generic; using System.Diagnostics; using System.Net.Http; using System.Threading.Tasks; using Windows.ApplicationModel; using Windows.Storage; namespace FoxTube { public static class Metrics { static readonly ApplicationDataContainer storage = ApplicationData.Current.RoamingSettings; static readonly Stopwatch sw = new Stopwatch(); public static TimeSpan Uptime { get => (TimeSpan?)storage.Values["Metrics.SpentTime"] ?? TimeSpan.FromSeconds(0); set => storage.Values["Metrics.SpentTime"] = value; } public static string CurrentVersion { get { PackageVersion v = Package.Current.Id.Version; return $"{v.Major}.{v.Minor}.{v.Revision}.{v.Build}"; } } public static void StartSession() { sw.Start(); AppCenter.Start("45774462-9ea7-438a-96fc-03982666f39e", typeof(Analytics), typeof(Crashes)); AppCenter.SetCountryCode(Settings.Region); } public static void EndSession() { sw.Stop(); Uptime += sw.Elapsed; AddEvent("Session closed", ("Duration", sw.Elapsed.ToString()), ("Spend time total", Uptime.ToString())); } public static void AddEvent(string eventName, params (string key, string value)[] details) { Dictionary parameters = new Dictionary(); foreach (var (key, value) in details) parameters.Add(key, value); Analytics.TrackEvent(eventName, parameters.Count > 0 ? parameters : null); } public static async Task SendExtendedData(string packageTitle, string content) { // TODO: Add backend using(HttpClient client = new HttpClient()) { HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://xfox111.net/FoxTube/AddMetrics"); Dictionary body = new Dictionary { { "Title", packageTitle }, { "Content", content }, { "Version", CurrentVersion } }; request.Content = new FormUrlEncodedContent(body); HttpResponseMessage response = await client.SendAsync(request); return await response.Content.ReadAsStringAsync(); } } } }