diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj
index a414a6ddb..688c9aad9 100644
--- a/Artemis/Artemis/Artemis.csproj
+++ b/Artemis/Artemis/Artemis.csproj
@@ -325,6 +325,7 @@
+
diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs
index 1b05445cd..c7b9787e3 100644
--- a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs
+++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs
@@ -1,6 +1,7 @@
using Artemis.Managers;
using Artemis.Models;
using Artemis.Settings;
+using Artemis.Utilities;
using Artemis.Utilities.Memory;
using Caliburn.Micro;
using Newtonsoft.Json;
@@ -62,7 +63,7 @@ namespace Artemis.Modules.Games.RocketLeague
return;
}
- MemoryHelpers.GetPointers();
+ Updater.GetPointers();
var version = JsonConvert
.DeserializeObject(Offsets.Default.RocketLeague)
.GameVersion;
diff --git a/Artemis/Artemis/Utilities/Memory/MemoryHelpers.cs b/Artemis/Artemis/Utilities/Memory/MemoryHelpers.cs
index 61df97f21..a36f3eb9c 100644
--- a/Artemis/Artemis/Utilities/Memory/MemoryHelpers.cs
+++ b/Artemis/Artemis/Utilities/Memory/MemoryHelpers.cs
@@ -43,35 +43,5 @@ namespace Artemis.Utilities.Memory
}
return address;
}
-
- public static void GetPointers()
- {
- if (!General.Default.EnablePointersUpdate)
- return;
-
- try
- {
- var jsonClient = new WebClient();
- // Random number to get around cache issues
- var rand = new Random(DateTime.Now.Millisecond);
- var json =
- jsonClient.DownloadString(
- "https://raw.githubusercontent.com/SpoinkyNL/Artemis/master/pointers.json?random=" + rand.Next());
-
- // Get a list of pointers
- var pointers = JsonConvert.DeserializeObject>(json);
- // Assign each pointer to the settings file
- var rlPointers = JsonConvert.SerializeObject(pointers.FirstOrDefault(p => p.Game == "RocketLeague"));
- if (rlPointers != null)
- {
- Offsets.Default.RocketLeague = rlPointers;
- Offsets.Default.Save();
- }
- }
- catch (Exception)
- {
- // ignored
- }
- }
}
}
\ No newline at end of file
diff --git a/Artemis/Artemis/Utilities/Updater.cs b/Artemis/Artemis/Utilities/Updater.cs
new file mode 100644
index 000000000..ba1585175
--- /dev/null
+++ b/Artemis/Artemis/Utilities/Updater.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Net;
+using System.Windows.Forms;
+using Artemis.Models;
+using Artemis.Settings;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Artemis.Utilities
+{
+ public static class Updater
+ {
+ public static int CurrentVersion = 100;
+
+ public static void CheckForUpdate()
+ {
+ var newRelease = IsUpdateAvailable();
+ if (newRelease == null)
+ return;
+
+ var viewUpdate =
+ MessageBox.Show(
+ $"A new version of Artemis is available, version {newRelease["tag_name"].Value()}.\n" +
+ "Do you wish to view the update on GitHub now?\n\n" +
+ "Note: You can disable update notifications in the settings menu", "Artemis - Update available",
+ MessageBoxButtons.YesNo, MessageBoxIcon.Information);
+ if (viewUpdate == DialogResult.Yes)
+ Process.Start(new ProcessStartInfo(newRelease["html_url"].Value()));
+ }
+
+ public static JObject IsUpdateAvailable()
+ {
+ if (!General.Default.EnablePointersUpdate)
+ return null;
+
+ try
+ {
+ var jsonClient = new WebClient();
+
+ // GitHub trips if we don't add a user agent
+ jsonClient.Headers.Add("user-agent",
+ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
+
+ // Random number to get around cache issues
+ var rand = new Random(DateTime.Now.Millisecond);
+ var json =
+ jsonClient.DownloadString("https://api.github.com/repos/SpoinkyNL/Artemis/releases/latest?random=" +
+ rand.Next());
+
+ // Get a list of pointers
+ var release = JsonConvert.DeserializeObject(json);
+
+ // Parse a version number string to an int
+ var remoteVersion = int.Parse(release["tag_name"].Value().Replace(".", ""));
+
+ return remoteVersion > CurrentVersion ? release : null;
+ }
+ catch (Exception)
+ {
+ return null;
+ }
+ }
+
+ public static void GetPointers()
+ {
+ if (!General.Default.EnablePointersUpdate)
+ return;
+
+ try
+ {
+ var jsonClient = new WebClient();
+
+ // Random number to get around cache issues
+ var rand = new Random(DateTime.Now.Millisecond);
+ var json =
+ jsonClient.DownloadString(
+ "https://raw.githubusercontent.com/SpoinkyNL/Artemis/master/pointers.json?random=" + rand.Next());
+
+ // Get a list of pointers
+ var pointers = JsonConvert.DeserializeObject>(json);
+ // Assign each pointer to the settings file
+ var rlPointers = JsonConvert.SerializeObject(pointers.FirstOrDefault(p => p.Game == "RocketLeague"));
+ if (rlPointers != null)
+ {
+ Offsets.Default.RocketLeague = rlPointers;
+ Offsets.Default.Save();
+ }
+ }
+ catch (Exception)
+ {
+ // ignored
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs b/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
index 426754abb..25b25a4c2 100644
--- a/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
+++ b/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
@@ -1,7 +1,13 @@
using System;
-using System.Windows;
+using System.Diagnostics;
+using System.Threading.Tasks;
+using System.Windows.Forms;
using Artemis.Events;
+using Artemis.Utilities;
using Caliburn.Micro;
+using Newtonsoft.Json.Linq;
+using Application = System.Windows.Application;
+using Screen = Caliburn.Micro.Screen;
namespace Artemis.ViewModels
{
@@ -10,6 +16,7 @@ namespace Artemis.ViewModels
private readonly ShellViewModel _shellViewModel;
private readonly IWindowManager _windowManager;
+ private bool _checkedForUpdate;
private bool _enabled;
private string _toggleText;
/*
@@ -27,6 +34,7 @@ namespace Artemis.ViewModels
_shellViewModel = shellViewModel;
_shellViewModel.MainManager.Events.Subscribe(this);
_shellViewModel.MainManager.EnableProgram();
+ _checkedForUpdate = false;
// TODO: Check if show on startup is enabled, if so, show window.
}
@@ -85,6 +93,13 @@ namespace Artemis.ViewModels
if (!CanShowWindow)
return;
+ if (!_checkedForUpdate)
+ {
+ _checkedForUpdate = true;
+ var updateTask = new Task(Updater.CheckForUpdate);
+ updateTask.Start();
+ }
+
// manually show the next window view-model
_windowManager.ShowWindow(_shellViewModel);
@@ -92,6 +107,7 @@ namespace Artemis.ViewModels
NotifyOfPropertyChange(() => CanHideWindow);
}
+
public void HideWindow()
{
if (!CanHideWindow)