Skip to content

Commit a8a8cb5

Browse files
committed
Auto refresh routes option (stays off by default, since it should only be used when modifying routes)
1 parent 641ce45 commit a8a8cb5

6 files changed

Lines changed: 32 additions & 1 deletion

File tree

ArkhamDisplay/AsylumWindow.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<MenuItem Name="PrefMenuItem" Header="Preferences" Click="PrefMenuItem_Click" />
1414
<MenuItem Name="OpenRouteMenuItem" Header="Open Route Folder" Click="OpenRouteFolder" />
1515
<MenuItem Name="RefreshRoutesMenuItem" Header="Refresh Routes" Click="RefreshRoutes" />
16+
<MenuItem Name="AutoRefreshRoutesMenuItem" Header="Auto Refresh Routes" ToolTip="Automatically refresh route when changes to route files are detected.&#x0a;May have undesirable side effects. You should only use this when modifying routes. " IsCheckable="True" IsChecked="False" />
1617
<MenuItem Name="UpdateMenuItem" Header="Check for Updates" Click="CheckForUpdates" />
1718
</MenuItem>
1819
<MenuItem Header="_Game">

ArkhamDisplay/BaseWindow.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public abstract class BaseWindow : Window{
4343
private RadioButton saveSelector1;
4444
private RadioButton saveSelector2;
4545
private RadioButton saveSelector3;
46+
private MenuItem autoRefreshRoutesMenuItem;
4647

4748
public BaseWindow(Game game){
4849
this.game = game;
@@ -68,8 +69,9 @@ protected void PostInitialize(){
6869
saveSelector1 = FindName("Save1") as RadioButton;
6970
saveSelector2 = FindName("Save2") as RadioButton;
7071
saveSelector3 = FindName("Save3") as RadioButton;
72+
autoRefreshRoutesMenuItem = FindName("AutoRefreshRoutesMenuItem") as MenuItem;
7173

72-
if(stopButton == null || startButton == null || displayGrid == null || gridScroll == null || progressCounter == null || riddleCounter == null || saveSelector0 == null || saveSelector1 == null || saveSelector2 == null || saveSelector3 == null){
74+
if(stopButton == null || startButton == null || displayGrid == null || gridScroll == null || progressCounter == null || riddleCounter == null || saveSelector0 == null || saveSelector1 == null || saveSelector2 == null || saveSelector3 == null) {
7375
MessageBox.Show("Could not find all expected elements in the main window!");
7476
throw new NullReferenceException("Could not find all expected elements in the main window!");
7577
}
@@ -233,6 +235,11 @@ private void BackgroundWorkerOnProgressChanged(object sender, ProgressChangedEve
233235
protected abstract void SetCurrentRoute();
234236

235237
private void Update(){
238+
if(autoRefreshRoutesMenuItem != null && autoRefreshRoutesMenuItem.IsChecked && Data.HaveRouteFilesChangedSinceLastReload()){
239+
RefreshRoutes();
240+
return;
241+
}
242+
236243
string saveFile = Data.SaveLocations[(int)game];
237244
if(string.IsNullOrWhiteSpace(saveFile)){
238245
throw new Exception("Save file path is not valid");

ArkhamDisplay/CityWindow.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<MenuItem Name="PrefMenuItem" Header="Preferences" Click="PrefMenuItem_Click" />
1414
<MenuItem Name="OpenRouteMenuItem" Header="Open Route Folder" Click="OpenRouteFolder" />
1515
<MenuItem Name="RefreshRoutesMenuItem" Header="Refresh Routes" Click="RefreshRoutes" />
16+
<MenuItem Name="AutoRefreshRoutesMenuItem" Header="Auto Refresh Routes" ToolTip="Automatically refresh route when changes to route files are detected.&#x0a;May have undesirable side effects. You should only use this when modifying routes. " IsCheckable="True" IsChecked="False" />
1617
<MenuItem Name="UpdateMenuItem" Header="Check for Updates" Click="CheckForUpdates" />
1718
</MenuItem>
1819
<MenuItem Header="_Game">

ArkhamDisplay/Data.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ public class Data{
6767
private static volatile Dictionary<string, string> routeFiles = new Dictionary<string, string>();
6868
private static volatile Dictionary<string, Route> routes = new Dictionary<string, Route>();
6969

70+
private static DateTime lastRouteFileEditTime = DateTime.MinValue;
71+
7072
public const string GitRepoName = "ArkhamRouteTracker";
7173
public const string GitRepoOwner = "ShikenNuggets";
7274
public const string GitRoutesPath = "ArkhamDisplay/Routes";
@@ -156,6 +158,24 @@ public static void ReloadRoutes(){
156158
lock(routeFiles){
157159
routeFiles = JsonConvert.DeserializeObject<Dictionary<string, string>>(System.IO.File.ReadAllText(routeFileName));
158160
}
161+
162+
foreach (var routeFile in routeFiles){
163+
var lastWriteTime = System.IO.File.GetLastWriteTime(routeFile.Value);
164+
if (lastWriteTime > lastRouteFileEditTime){
165+
lastRouteFileEditTime = lastWriteTime;
166+
}
167+
}
168+
}
169+
170+
public static bool HaveRouteFilesChangedSinceLastReload(){
171+
foreach (var routeFile in routeFiles) {
172+
var lastWriteTime = System.IO.File.GetLastWriteTime(routeFile.Value);
173+
if (lastWriteTime > lastRouteFileEditTime) {
174+
return true;
175+
}
176+
}
177+
178+
return false;
159179
}
160180

161181
public static void SetTheme(Theme theme){

ArkhamDisplay/KnightWindow.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<MenuItem Name="PrefMenuItem" Header="Preferences" Click="PrefMenuItem_Click" />
1414
<MenuItem Name="OpenRouteMenuItem" Header="Open Route Folder" Click="OpenRouteFolder" />
1515
<MenuItem Name="RefreshRoutesMenuItem" Header="Refresh Routes" Click="RefreshRoutes" />
16+
<MenuItem Name="AutoRefreshRoutesMenuItem" Header="Auto Refresh Routes" ToolTip="Automatically refresh route when changes to route files are detected.&#x0a;May have undesirable side effects. You should only use this when modifying routes. " IsCheckable="True" IsChecked="False" />
1617
<MenuItem Name="UpdateMenuItem" Header="Check for Updates" Click="CheckForUpdates" />
1718
</MenuItem>
1819
<MenuItem Header="_Game">

ArkhamDisplay/OriginsWindow.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<MenuItem Name="PrefMenuItem" Header="Preferences" Click="PrefMenuItem_Click" />
1414
<MenuItem Name="OpenRouteMenuItem" Header="Open Route Folder" Click="OpenRouteFolder" />
1515
<MenuItem Name="RefreshRoutesMenuItem" Header="Refresh Routes" Click="RefreshRoutes" />
16+
<MenuItem Name="AutoRefreshRoutesMenuItem" Header="Auto Refresh Routes" ToolTip="Automatically refresh route when changes to route files are detected.&#x0a;May have undesirable side effects. You should only use this when modifying routes. " IsCheckable="True" IsChecked="False" />
1617
<MenuItem Name="UpdateMenuItem" Header="Check for Updates" Click="CheckForUpdates" />
1718
</MenuItem>
1819
<MenuItem Header="_Game">

0 commit comments

Comments
 (0)