Skip to content

Commit ed8d5c2

Browse files
authored
Added Track Meta data restore in case app crashes (#7)
1 parent 8769dfa commit ed8d5c2

File tree

11 files changed

+149
-17
lines changed

11 files changed

+149
-17
lines changed

TrackMaster/Controllers/OverlayController.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public IActionResult Index()
2424

2525
if (MainSettingsModel.OverlaySettings != null)
2626
{
27-
ViewBag.DisplayAlbumArt = MainSettingsModel.OverlaySettings.DisplayAlbumArt;
27+
ViewBag.DisplayAlbumArt = _dataFields.ShowArtwork = MainSettingsModel.OverlaySettings.DisplayAlbumArt;
2828
_tracklisthubContext.Clients.All.SendAsync("Overlay", MainSettingsModel.OverlaySettings.DisplayAlbumArt);
2929
}
3030

@@ -40,6 +40,7 @@ public IActionResult SaveSettings(OverlaySettingsModel overlaySettingsModel)
4040

4141
MainSettingsModel = settingsHelper.GetSettings(_dataFields.Appfullpath);
4242
settingsHelper.SetMainSettings(MainSettingsModel.TwitchCredentials, overlaySettingsModel);
43+
_dataFields.ShowArtwork = overlaySettingsModel.DisplayAlbumArt;
4344

4445
_tracklisthubContext.Clients.All.SendAsync("Overlay", overlaySettingsModel.DisplayAlbumArt);
4546

@@ -53,7 +54,7 @@ public IActionResult NowPlaying()
5354
SettingsHelper settingsHelper = new(_dataFields);
5455

5556
MainSettingsModel = settingsHelper.GetSettings(_dataFields.Appfullpath);
56-
ViewBag.DisplayAlbumArt = MainSettingsModel.OverlaySettings.DisplayAlbumArt;
57+
ViewBag.DisplayAlbumArt = _dataFields.ShowArtwork = MainSettingsModel.OverlaySettings.DisplayAlbumArt;
5758
_tracklisthubContext.Clients.All.SendAsync("Overlay", MainSettingsModel.OverlaySettings.DisplayAlbumArt);
5859

5960
return View();

TrackMaster/Helper/DataFields.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ public class DataFields
2121
//Common Data Fields
2222
public string Playername { get; set; }
2323
public string Appfullpath { get; set; }
24+
public string RestoreTrackspath { get; set; }
2425
public bool ControllerFound { get; set; } = false;
2526
public string ControllerIP { get; set; }
2627
public List<string> TrackList { get; set; } = new List<string>();
2728
public bool Player1a { get; set; } = false;
2829
public bool Player2a { get; set; } = false;
2930
public bool IsConnected { get; set; }
3031
public bool BotManuallyStopped { get; set; }
32+
public bool ShowArtwork { get; set; }
3133

3234
//Metadata Related Data Fields
3335
public string Trackpath { get; set; }
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using System.IO;
2+
using System.Text.Json;
3+
using TrackMaster.Models;
4+
5+
namespace TrackMaster.Helper
6+
{
7+
public class RestoreTrackMetadata
8+
{
9+
private string filecontent;
10+
11+
private readonly DataFields _dataFields;
12+
public RestoreTrackMetadata(DataFields dataFields)
13+
{
14+
_dataFields = dataFields;
15+
}
16+
17+
public void SetMainSettings(DataFields dataFields)
18+
{
19+
var options = new JsonSerializerOptions
20+
{
21+
WriteIndented = true
22+
};
23+
24+
RestoreTrackMetadataModel restoreTrackMetadataModel = new()
25+
{
26+
PlayersTrackMetaDataModel = dataFields
27+
};
28+
29+
filecontent = JsonSerializer.Serialize(restoreTrackMetadataModel, options);
30+
File.WriteAllText(_dataFields.RestoreTrackspath, filecontent);
31+
}
32+
33+
public RestoreTrackMetadataModel GetSettings(string settingsPath)
34+
{
35+
RestoreTrackMetadataModel restoreTrackMetadata = new();
36+
37+
var filecheck = File.Exists(settingsPath);
38+
39+
if (filecheck)
40+
{
41+
if (new FileInfo(settingsPath).Length != 0)
42+
{
43+
filecontent = File.ReadAllText(settingsPath);
44+
45+
restoreTrackMetadata = JsonSerializer.Deserialize<RestoreTrackMetadataModel>(filecontent);
46+
}
47+
}
48+
else
49+
{
50+
using StreamWriter w = File.CreateText(settingsPath);
51+
}
52+
return restoreTrackMetadata;
53+
}
54+
}
55+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Text.Json.Serialization;
2+
using TrackMaster.Helper;
3+
4+
namespace TrackMaster.Models
5+
{
6+
public class RestoreTrackMetadataModel
7+
{
8+
[JsonPropertyName("DataFields")]
9+
public DataFields PlayersTrackMetaDataModel { get; set; }
10+
}
11+
}

TrackMaster/Services/Sniffy/Sniffy.cs

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Microsoft.AspNetCore.SignalR;
1+
using ElectronNET.API.Entities;
2+
using ElectronNET.API;
3+
using Microsoft.AspNetCore.SignalR;
24
using Microsoft.Extensions.Configuration;
35
using Microsoft.Extensions.Hosting;
46
using Microsoft.Extensions.Logging;
@@ -51,6 +53,8 @@ public class Sniffy : BackgroundService
5153
private Timer _timer;
5254
private readonly DataFields _dataFields;
5355

56+
private RestoreTrackMetadataModel RestoreTrackMetadataModel;
57+
5458
#endregion
5559
public Sniffy(IConfiguration configuration, IHubContext<TrackistHub> synchub, ILogger<Sniffy> logger, DataFields dataFields)
5660
{
@@ -74,8 +78,10 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
7478
await CapturePacketsInitialAsync();
7579
}
7680

81+
RestoreTracks();
82+
7783
_timer = new(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
78-
await CapturePacketsAsync();
84+
await CapturePacketsAsync();
7985
}
8086
catch (Exception ex)
8187
{
@@ -85,11 +91,31 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
8591
Console.WriteLine($"StatusCheckerService background task is stopping.");
8692
}
8793

94+
private void RestoreTracks()
95+
{
96+
var result = GetSetRestoreTrackMetadata();
97+
98+
if (result.PlayersTrackMetaDataModel != null)
99+
{
100+
_dataFields.Trackartist1 = result.PlayersTrackMetaDataModel.Trackartist1;
101+
_dataFields.Tracktitle1 = result.PlayersTrackMetaDataModel.Tracktitle1;
102+
_dataFields.Trackpath = _dataFields.Tracktitle1 != null & _dataFields.Trackartist1 != null
103+
? _dataFields.Trackartist1 + " - " + _dataFields.Tracktitle1
104+
: _dataFields.Tracktitle1 != null & _dataFields.Trackartist1 == null ? _dataFields.Tracktitle1 : "ID - ID";
105+
106+
_dataFields.Trackartist2 = result.PlayersTrackMetaDataModel.Trackartist2;
107+
_dataFields.Tracktitle2 = result.PlayersTrackMetaDataModel.Tracktitle2;
108+
_dataFields.Trackpath2 = _dataFields.Tracktitle2 != null & _dataFields.Trackartist2 != null
109+
? _dataFields.Trackartist2 + " - " + _dataFields.Tracktitle2
110+
: _dataFields.Tracktitle2 != null & _dataFields.Trackartist2 == null ? _dataFields.Tracktitle2 : "ID - ID";
111+
}
112+
}
113+
88114
private void DoWork(object state)
89115
{
90116
OverlayChangeObserver overlayObserver = new(_dataFields);
91117
overlayObserver.MixStatusChanged += MixStatusChanged;
92-
overlayObserver.Start();
118+
overlayObserver.Start();
93119
}
94120

95121
private async Task CapturePacketsInitialAsync()
@@ -497,6 +523,10 @@ private void Player1(string result)
497523
_tracklisthubContext.Clients.All.SendAsync("PlayerOne", 10, _dataFields.Genre1);
498524

499525
trackloaded_player1 = true;
526+
527+
RestoreTrackMetadata restoreTrackMetadata = new(_dataFields);
528+
restoreTrackMetadata.SetMainSettings(_dataFields);
529+
RestoreTrackMetadataModel = restoreTrackMetadata.GetSettings(_dataFields.RestoreTrackspath);
500530
}
501531
}
502532
}
@@ -555,6 +585,11 @@ private void Player2(string result)
555585
_tracklisthubContext.Clients.All.SendAsync("PlayerTwo", 10, _dataFields.Genre2);
556586

557587
trackloaded_player2 = true;
588+
589+
RestoreTrackMetadata restoreTrackMetadata = new(_dataFields);
590+
591+
restoreTrackMetadata.SetMainSettings(_dataFields);
592+
RestoreTrackMetadataModel = restoreTrackMetadata.GetSettings(_dataFields.RestoreTrackspath);
558593
}
559594
}
560595
}
@@ -701,12 +736,12 @@ private void MixStatusChanged(object sender, OverlayChangeObserver.MixStatusChan
701736
{
702737
if (e.Player1)
703738
{
704-
_tracklisthubContext.Clients.All.SendAsync("NowPlaying", _dataFields.Trackartist1, _dataFields.Tracktitle1, _dataFields.Albumartid1);
739+
_tracklisthubContext.Clients.All.SendAsync("NowPlaying", _dataFields.Trackartist1, _dataFields.Tracktitle1, _dataFields.Albumartid1, _dataFields.ShowArtwork);
705740
TrackHistory(_dataFields.Trackpath);
706741
}
707742
if (e.Player2)
708743
{
709-
_tracklisthubContext.Clients.All.SendAsync("NowPlaying", _dataFields.Trackartist2, _dataFields.Tracktitle2, _dataFields.Albumartid2);
744+
_tracklisthubContext.Clients.All.SendAsync("NowPlaying", _dataFields.Trackartist2, _dataFields.Tracktitle2, _dataFields.Albumartid2, _dataFields.ShowArtwork);
710745
TrackHistory(_dataFields.Trackpath2);
711746
}
712747
}
@@ -741,5 +776,23 @@ public static string GetAssemblyVersion()
741776
return infoVersion.InformationalVersion;
742777
}
743778
}
779+
780+
private RestoreTrackMetadataModel GetSetRestoreTrackMetadata()
781+
{
782+
RestoreTrackMetadata restoreTrackMetadata = new(_dataFields);
783+
784+
if (HybridSupport.IsElectronActive)
785+
{
786+
string path = Electron.App.GetPathAsync(PathName.UserData).Result;
787+
_dataFields.RestoreTrackspath = path + @"\TrackMetadata.json";
788+
return restoreTrackMetadata.GetSettings(_dataFields.RestoreTrackspath);
789+
}
790+
else
791+
{
792+
var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
793+
_dataFields.RestoreTrackspath = appDataPath + @"\Electron\TrackMetadata.json";
794+
return restoreTrackMetadata.GetSettings(_dataFields.RestoreTrackspath);
795+
}
796+
}
744797
}
745798
}

TrackMaster/Services/TwitchServices/TwitchBot.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@ public class TwitchBot : ITimerHostedService
3838

3939
public TwitchBot(IHubContext<TrackistHub> synchub, ILogger<TwitchBot> logger, DataFields dataFields)
4040
{
41-
if (_instance == null)
42-
{
43-
_instance = this;
44-
}
41+
_instance ??= this;
4542
_tracklisthubContext = synchub;
4643
_dataFields = dataFields;
4744
_logger = logger;
@@ -51,7 +48,7 @@ public Task StartAsync(CancellationToken cancellationToken)
5148
{
5249
_logger.LogInformation("TwitchBot Service is Starting");
5350

54-
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
51+
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(20));
5552

5653
return Task.CompletedTask;
5754
}

TrackMaster/Startup.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ public void ConfigureServices(IServiceCollection services)
3434
services.AddSingleton(Configuration);
3535
services.AddSingleton<IHostedService, Sniffy>();
3636
services.AddSingleton<DataFieldsInstance>();
37-
services.AddHostedService<TwitchBot>();
38-
3937
services.AddSingleton<ITimerHostedService, TwitchBot>(serviceProvider =>
4038
{
4139
return TwitchBot.Instance;

TrackMaster/TrackMaster.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<UserSecretsId>ffa0c55e-2a05-43d7-83e5-fc6f0904350b</UserSecretsId>
55
<AssemblyVersion></AssemblyVersion>
66
<FileVersion></FileVersion>
7-
<Version>0.7.0-Alpha</Version>
7+
<Version>0.7.1-Alpha</Version>
88
</PropertyGroup>
99
<ItemGroup>
1010
<PackageReference Include="ElectronNET.API" Version="13.5.1" />

TrackMaster/TrackMetadata.json

Whitespace-only changes.

TrackMaster/electron.manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"appId": "com.TrackMaster.app",
1313
"productName": "TrackMaster",
1414
"copyright": "Copyright © 2022",
15-
"buildVersion": "0.7.0-Alpha",
15+
"buildVersion": "0.7.1-Alpha",
1616
"compression": "maximum",
1717
"directories": {
1818
"output": "../../../bin/Desktop"

0 commit comments

Comments
 (0)