• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

abatar1 / CyclicalFileWatcher / 15519075363

08 Jun 2025 01:43PM UTC coverage: 55.263% (+1.8%) from 53.509%
15519075363

push

github

abatar1
minor improvements

29 of 66 branches covered (43.94%)

Branch coverage included in aggregate %.

11 of 19 new or added lines in 4 files covered. (57.89%)

2 existing lines in 1 file now uncovered.

160 of 276 relevant lines covered (57.97%)

3.02 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

50.0
/src/CyclicalFileWatcher/CyclicalFileWatcher.cs
1
using System;
2
using System.Threading;
3
using System.Threading.Tasks;
4
using FileWatcher.Base;
5
using FileWatcher.Internals;
6

7
namespace FileWatcher;
8

9
/// <summary>
10
/// Represents a cyclical file watcher that monitors file changes and allows subscribing
11
/// to file state updates. This class facilitates managing file states, retrieving the
12
/// latest file information, and providing mechanisms to handle file updates asynchronously.
13
/// </summary>
14
/// <typeparam name="TFileStateContent">
15
/// The type of content for file state management. It must implement the <see cref="IFileStateContent"/> interface.
16
/// </typeparam>
17
public sealed class CyclicalFileWatcher<TFileStateContent> : IFileWatcher<TFileStateContent>
18
    where TFileStateContent : IFileStateContent
19
{
20
    private readonly IFileStateManager<TFileStateContent> _fileStateManager;
21
    private readonly FileSubscriptionManager<TFileStateContent> _subscriptionManager;
22
    private readonly IFileStateStorageRepository<TFileStateContent> _repository;
23
    
24
    public CyclicalFileWatcher(IFileStateManagerConfiguration configuration)
×
25
    {
26
        _subscriptionManager = new FileSubscriptionManager<TFileStateContent>();
×
27
        var fileProxy = new FileSystemProxy();
×
NEW
28
        _repository = new FileStateStorageRepository<TFileStateContent>(fileProxy);
×
29
        var lockProvider = new ReadWriteLockProvider();
×
NEW
30
        var processor = new FileWatchProcessor<TFileStateContent>(configuration, _subscriptionManager, lockProvider, _repository);
×
NEW
31
        _fileStateManager = new FileStateManager<TFileStateContent>(_repository, processor, lockProvider, fileProxy);
×
UNCOV
32
    }
×
33
    
34
    internal CyclicalFileWatcher(IFileStateManagerConfiguration configuration, 
1✔
35
        IFileStateStorageRepository<TFileStateContent> repository, 
1✔
36
        IFileSystemProxy fileSystemProxy)
1✔
37
    {
38
        _repository = repository;
1✔
39
        _subscriptionManager = new FileSubscriptionManager<TFileStateContent>();
1✔
40
        var lockProvider = new ReadWriteLockProvider();
1✔
41
        var processor = new FileWatchProcessor<TFileStateContent>(configuration, _subscriptionManager, lockProvider, _repository);
1✔
42
        _fileStateManager = new FileStateManager<TFileStateContent>(_repository, processor, lockProvider, fileSystemProxy);
1✔
43
    }
1✔
44

45
    public Task WatchAsync(IFileWatcherParameters<TFileStateContent> parameters, CancellationToken cancellationToken)
46
    {
47
        return _fileStateManager.WatchAsync(parameters, cancellationToken);
1✔
48
    }
49
    
50
    public Task<IFileState<TFileStateContent>> GetAsync(string filePath, string fileKey, CancellationToken cancellationToken)
51
    {
52
        return _fileStateManager.GetAsync(filePath, fileKey, cancellationToken);
3✔
53
    }
54
    
55
    public Task<IFileState<TFileStateContent>> GetLatestAsync(string filePath, CancellationToken cancellationToken)
56
    {
57
        return _fileStateManager.GetLatestAsync(filePath, cancellationToken);
1✔
58
    }
59

60
    public Task<FileSubscription> SubscribeAsync(string filePath, Func<IFileState<TFileStateContent>, Task> actionOnUpdate, CancellationToken cancellationToken)
61
    {
62
        return _subscriptionManager.SubscribeAsync(filePath, actionOnUpdate, cancellationToken);
×
63
    }
64

65
    public Task UnsubscribeAsync(FileSubscription subscription, CancellationToken cancellationToken)
66
    {
67
        return _subscriptionManager.UnsubscribeAsync(subscription, cancellationToken);
×
68
    }
69
    
70
    public async ValueTask DisposeAsync()
71
    {
72
        await _fileStateManager.DisposeAsync();
1✔
73
        await _subscriptionManager.DisposeAsync();
×
NEW
74
        await _repository.DisposeAsync();
×
UNCOV
75
    }
×
76
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc