mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
69 lines
1.8 KiB
using System; |
|
using System.Collections.Concurrent; |
|
using ErsatzTV.Core.Interfaces.Locking; |
|
|
|
namespace ErsatzTV.Infrastructure.Locking |
|
{ |
|
public class EntityLocker : IEntityLocker |
|
{ |
|
private readonly ConcurrentDictionary<int, byte> _lockedMediaSources; |
|
private bool _plex; |
|
|
|
public EntityLocker() => _lockedMediaSources = new ConcurrentDictionary<int, byte>(); |
|
|
|
public event EventHandler OnLibraryChanged; |
|
|
|
public event EventHandler OnPlexChanged; |
|
|
|
public bool LockLibrary(int mediaSourceId) |
|
{ |
|
if (!_lockedMediaSources.ContainsKey(mediaSourceId) && _lockedMediaSources.TryAdd(mediaSourceId, 0)) |
|
{ |
|
OnLibraryChanged?.Invoke(this, EventArgs.Empty); |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
public bool UnlockLibrary(int mediaSourceId) |
|
{ |
|
if (_lockedMediaSources.TryRemove(mediaSourceId, out byte _)) |
|
{ |
|
OnLibraryChanged?.Invoke(this, EventArgs.Empty); |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
public bool IsLibraryLocked(int mediaSourceId) => |
|
_lockedMediaSources.ContainsKey(mediaSourceId); |
|
|
|
public bool LockPlex() |
|
{ |
|
if (!_plex) |
|
{ |
|
_plex = true; |
|
OnPlexChanged?.Invoke(this, EventArgs.Empty); |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
public bool UnlockPlex() |
|
{ |
|
if (_plex) |
|
{ |
|
_plex = false; |
|
OnPlexChanged?.Invoke(this, EventArgs.Empty); |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
public bool IsPlexLocked() => _plex; |
|
} |
|
}
|
|
|