add a journal stream to get new events
This commit is contained in:
parent
9d4342a6f8
commit
1abeb7af93
@ -84,5 +84,12 @@ namespace NonaBGS.Journal {
|
||||
public JObject JSON {
|
||||
get { return this.json; }
|
||||
}
|
||||
|
||||
public override string ToString() {
|
||||
if (json == null) {
|
||||
return "";
|
||||
}
|
||||
return json.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,13 @@ namespace NonaBGS.Journal
|
||||
private static string iso8601 = "yyyyMMddTHHmmss";
|
||||
private static string iso8601_notime = "yyyyMMdd";
|
||||
|
||||
public static bool VerifyFile(string path) {
|
||||
string filename = Path.GetFileName(path);
|
||||
|
||||
var matches = fileregex.Matches(filename);
|
||||
return matches.Count != 0;
|
||||
}
|
||||
|
||||
private void SetFilename(string path) {
|
||||
string filename = Path.GetFileName(path);
|
||||
if (!File.Exists(path) || filename == null) {
|
||||
|
87
Journal/JournalStream.cs
Normal file
87
Journal/JournalStream.cs
Normal file
@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using NonaBGS.Journal;
|
||||
using System.IO;
|
||||
|
||||
namespace NonaBGS.Journal {
|
||||
public class JournalStream {
|
||||
private PlayerJournal journal = null;
|
||||
private FileSystemWatcher watcher = null;
|
||||
|
||||
private Dictionary<string, StreamReader> streams = new Dictionary<string, StreamReader>();
|
||||
|
||||
public delegate void NewJournalEntryDelegate(Entry entry);
|
||||
|
||||
public event NewJournalEntryDelegate NewJournalEntry;
|
||||
|
||||
public PlayerJournal Journal {
|
||||
get => journal;
|
||||
set => journal = value;
|
||||
}
|
||||
|
||||
public JournalStream() {
|
||||
}
|
||||
|
||||
public JournalStream(PlayerJournal journal) {
|
||||
this.journal = journal;
|
||||
Open();
|
||||
}
|
||||
|
||||
public void Open() {
|
||||
if (watcher != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
watcher = new FileSystemWatcher(journal.Location);
|
||||
|
||||
watcher.NotifyFilter = NotifyFilters.FileName |
|
||||
NotifyFilters.LastWrite |
|
||||
NotifyFilters.Size;
|
||||
|
||||
watcher.Changed += Watcher_Changed;
|
||||
watcher.Created += Watcher_Created;
|
||||
|
||||
watcher.Filter = "*.log";
|
||||
watcher.EnableRaisingEvents = true;
|
||||
}
|
||||
|
||||
public void Close() {
|
||||
if (watcher != null) {
|
||||
watcher.EnableRaisingEvents = false;
|
||||
}
|
||||
watcher = null;
|
||||
streams.Clear();
|
||||
}
|
||||
|
||||
private void Watcher_Created(object sender, FileSystemEventArgs e) {
|
||||
if (!streams.ContainsKey(e.FullPath) && JournalFile.VerifyFile(e.FullPath)) {
|
||||
streams[e.FullPath] = new StreamReader(e.FullPath);
|
||||
}
|
||||
}
|
||||
|
||||
private void Watcher_Changed(object sender, FileSystemEventArgs e) {
|
||||
if (!streams.ContainsKey(e.FullPath) && JournalFile.VerifyFile(e.FullPath)) {
|
||||
var filestream = new FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||
streams[e.FullPath] = new StreamReader(filestream);
|
||||
}
|
||||
|
||||
var stream = streams[e.FullPath];
|
||||
if (stream == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
string line;
|
||||
|
||||
while ((line = stream.ReadLine()) != null) {
|
||||
try {
|
||||
Entry entry = Entry.Parse(line);
|
||||
NewJournalEntry?.Invoke(entry);
|
||||
} catch (Exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -11,6 +11,8 @@ namespace NonaBGS.Journal {
|
||||
private List<JournalFile> journalfiles = new List<JournalFile>();
|
||||
private string basepath = null;
|
||||
|
||||
public string Location => basepath;
|
||||
|
||||
public PlayerJournal() {
|
||||
Initialise(DefaultPath);
|
||||
}
|
||||
|
@ -77,6 +77,7 @@
|
||||
<Compile Include="EDDB\Stations.cs" />
|
||||
<Compile Include="Journal\Credits.cs" />
|
||||
<Compile Include="Journal\EliteDangerous.cs" />
|
||||
<Compile Include="Journal\JournalStream.cs" />
|
||||
<Compile Include="Journal\MarketSellEntry.cs" />
|
||||
<Compile Include="Journal\MultiSellExplorationDataEntry.cs" />
|
||||
<Compile Include="Journal\RedeemVoucherEntry.cs" />
|
||||
|
Loading…
Reference in New Issue
Block a user