mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2024-11-26 19:14:20 +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);
|
|||
|
//}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|