mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2024-12-28 17:31:48 +01:00
66 lines
2.2 KiB
C#
66 lines
2.2 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.ObjectModel;
|
|
using System.Threading;
|
|
using System.Windows.Data;
|
|
|
|
namespace DS4WinWPF.DS4Forms.ViewModels
|
|
{
|
|
public class LogViewModel
|
|
{
|
|
//private object _colLockobj = new object();
|
|
private ReaderWriterLockSlim _logListLocker = new ReaderWriterLockSlim();
|
|
private ObservableCollection<LogItem> logItems = new ObservableCollection<LogItem>();
|
|
|
|
public ObservableCollection<LogItem> LogItems => logItems;
|
|
|
|
public ReaderWriterLockSlim LogListLocker => _logListLocker;
|
|
|
|
public LogViewModel(DS4Windows.ControlService service)
|
|
{
|
|
string version = DS4Windows.Global.exeversion;
|
|
logItems.Add(new LogItem { Datetime = DateTime.Now, Message = $"DS4Windows version {version}" });
|
|
//logItems.Add(new LogItem { Datetime = DateTime.Now, Message = "DS4Windows version 2.0" });
|
|
//BindingOperations.EnableCollectionSynchronization(logItems, _colLockobj);
|
|
BindingOperations.EnableCollectionSynchronization(logItems, _logListLocker, LogLockCallback);
|
|
service.Debug += AddLogMessage;
|
|
DS4Windows.AppLogger.GuiLog += AddLogMessage;
|
|
}
|
|
|
|
private void LogLockCallback(IEnumerable collection, object context, Action accessMethod, bool writeAccess)
|
|
{
|
|
if (writeAccess)
|
|
{
|
|
_logListLocker.EnterWriteLock();
|
|
}
|
|
else
|
|
{
|
|
_logListLocker.EnterReadLock();
|
|
}
|
|
|
|
accessMethod?.Invoke();
|
|
|
|
if (writeAccess)
|
|
{
|
|
_logListLocker.ExitWriteLock();
|
|
}
|
|
else
|
|
{
|
|
_logListLocker.ExitReadLock();
|
|
}
|
|
}
|
|
|
|
private void AddLogMessage(object sender, DS4Windows.DebugEventArgs e)
|
|
{
|
|
LogItem item = new LogItem { Datetime = e.Time, Message = e.Data, Warning = e.Warning };
|
|
_logListLocker.EnterWriteLock();
|
|
logItems.Add(item);
|
|
_logListLocker.ExitWriteLock();
|
|
//lock (_colLockobj)
|
|
//{
|
|
// logItems.Add(item);
|
|
//}
|
|
}
|
|
}
|
|
}
|