Exemple #1
0
        public SyncThingManager(
            ISyncThingProcessRunner processRunner,
            ISyncThingApiClientFactory apiClientFactory,
            ISyncThingEventWatcherFactory eventWatcherFactory,
            ISyncThingConnectionsWatcherFactory connectionsWatcherFactory,
            IFreePortFinder freePortFinder)
        {
            this.StartedTime = DateTime.MinValue;
            this.LastConnectivityEventTime = DateTime.MinValue;

            this.eventDispatcher  = new SynchronizedEventDispatcher(this);
            this.processRunner    = processRunner;
            this.apiClientFactory = apiClientFactory;
            this.freePortFinder   = freePortFinder;

            this.apiClient = new SynchronizedTransientWrapper <ISyncThingApiClient>(this.apiClientsLock);

            this.eventWatcher = eventWatcherFactory.CreateEventWatcher(this.apiClient);
            this.eventWatcher.DeviceConnected    += (o, e) => this.OnDeviceConnected(e);
            this.eventWatcher.DeviceDisconnected += (o, e) => this.OnDeviceDisconnected(e);
            this.eventWatcher.ConfigSaved        += (o, e) => this.ReloadConfigDataAsync();
            this.eventWatcher.EventsSkipped      += (o, e) => this.ReloadConfigDataAsync();

            this.connectionsWatcher = connectionsWatcherFactory.CreateConnectionsWatcher(this.apiClient);
            this.connectionsWatcher.TotalConnectionStatsChanged += (o, e) => this.OnTotalConnectionStatsChanged(e.TotalConnectionStats);

            this._folders         = new SyncThingFolderManager(this.apiClient, this.eventWatcher, TimeSpan.FromMinutes(10));
            this._transferHistory = new SyncThingTransferHistory(this.eventWatcher, this._folders);

            this.processRunner.ProcessStopped   += (o, e) => this.ProcessStopped(e.ExitStatus);
            this.processRunner.MessageLogged    += (o, e) => this.OnMessageLogged(e.LogMessage);
            this.processRunner.ProcessRestarted += (o, e) => this.ProcessRestarted();
            this.processRunner.Starting         += (o, e) => this.ProcessStarting();
        }
        public ConfigurationProvider(IApplicationPathsProvider paths)
        {
            this.paths           = paths;
            this.eventDispatcher = new SynchronizedEventDispatcher(this);

            this.migrations = new Func <XDocument, XDocument>[]
            {
                this.MigrateV1ToV2,
                this.MigrateV2ToV3,
            };
        }
        public SyncthingDeviceManager(SynchronizedTransientWrapper <ISyncthingApiClient> apiClient, ISyncthingEventWatcher eventWatcher, ISyncthingCapabilities capabilities)
        {
            this.eventDispatcher = new SynchronizedEventDispatcher(this);
            this.apiClient       = apiClient ?? throw new ArgumentNullException(nameof(apiClient));
            this.eventWatcher    = eventWatcher ?? throw new ArgumentNullException(nameof(eventWatcher));
            this.capabilities    = capabilities ?? throw new ArgumentNullException(nameof(capabilities));

            this.eventWatcher.DeviceConnected    += this.EventDeviceConnected;
            this.eventWatcher.DeviceDisconnected += this.EventDeviceDisconnected;
            this.eventWatcher.DevicePaused       += this.EventDevicePaused;
            this.eventWatcher.DeviceResumed      += this.EventDeviceResumed;
        }
Exemple #4
0
        public SyncthingDeviceManager(SynchronizedTransientWrapper <ISyncthingApiClient> apiClient, ISyncthingEventWatcher eventWatcher, ISyncthingCapabilities capabilities)
        {
            this.eventDispatcher = new SynchronizedEventDispatcher(this);
            this.apiClient       = apiClient;
            this.eventWatcher    = eventWatcher;
            this.capabilities    = capabilities;

            this.eventWatcher.DeviceConnected    += this.EventDeviceConnected;
            this.eventWatcher.DeviceDisconnected += this.EventDeviceDisconnected;
            this.eventWatcher.DevicePaused       += this.EventDevicePaused;
            this.eventWatcher.DeviceResumed      += this.EventDeviceResumed;
        }
        public SyncthingDeviceManager(SynchronizedTransientWrapper<ISyncthingApiClient> apiClient, ISyncthingEventWatcher eventWatcher, ISyncthingCapabilities capabilities)
        {
            this.eventDispatcher = new SynchronizedEventDispatcher(this);
            this.apiClient = apiClient;
            this.eventWatcher = eventWatcher;
            this.capabilities = capabilities;

            this.eventWatcher.DeviceConnected += this.EventDeviceConnected;
            this.eventWatcher.DeviceDisconnected += this.EventDeviceDisconnected;
            this.eventWatcher.DevicePaused += this.EventDevicePaused;
            this.eventWatcher.DeviceResumed += this.EventDeviceResumed;
        }
        public AlertsManager(ISyncthingManager syncthingManager, IConflictFileWatcher conflictFileWatcher, IMeteredNetworkManager meteredNetworkManager)
        {
            this.syncthingManager      = syncthingManager;
            this.conflictFileWatcher   = conflictFileWatcher;
            this.meteredNetworkManager = meteredNetworkManager;
            this.eventDispatcher       = new SynchronizedEventDispatcher(this);

            this.syncthingManager.Folders.FolderErrorsChanged += this.FolderErrorsChanged;

            this.conflictFileWatcher.ConflictedFilesChanged += this.ConflictFilesChanged;

            this.meteredNetworkManager.PausedDevicesChanged += this.PausedDevicesChanged;
        }
        public SyncThingFolderManager(
            SynchronizedTransientWrapper<ISyncThingApiClient> apiClient,
            ISyncThingEventWatcher eventWatcher,
            TimeSpan ignoresFetchTimeout)
        {
            this.eventDispatcher = new SynchronizedEventDispatcher(this);
            this.apiClient = apiClient;
            this.ignoresFetchTimeout = ignoresFetchTimeout;

            this.eventWatcher = eventWatcher;
            this.eventWatcher.SyncStateChanged += (o, e) => this.FolderSyncStateChanged(e);
            this.eventWatcher.ItemStarted += (o, e) => this.ItemStarted(e.Folder, e.Item);
            this.eventWatcher.ItemFinished += (o, e) => this.ItemFinished(e.Folder, e.Item);
        }
Exemple #8
0
        public SyncthingFolderManager(
            SynchronizedTransientWrapper <ISyncthingApiClient> apiClient,
            ISyncthingEventWatcher eventWatcher)
        {
            this.eventDispatcher = new SynchronizedEventDispatcher(this);
            this.apiClient       = apiClient;

            this.eventWatcher = eventWatcher;
            this.eventWatcher.SyncStateChanged    += (o, e) => this.FolderSyncStateChanged(e);
            this.eventWatcher.FolderStatusChanged += (o, e) => this.FolderStatusChanged(e.FolderId, e.FolderStatus);
            this.eventWatcher.ItemStarted         += (o, e) => this.ItemStarted(e.Folder, e.Item);
            this.eventWatcher.ItemFinished        += (o, e) => this.ItemFinished(e.Folder, e.Item);
            this.eventWatcher.FolderErrorsChanged += (o, e) => this.FolderErrorsChangedEvt(e.FolderId, e.Errors);
        }
        public ConfigurationProvider(IApplicationPathsProvider paths, IFilesystemProvider filesystemProvider)
        {
            this.paths           = paths;
            this.filesystem      = filesystemProvider;
            this.eventDispatcher = new SynchronizedEventDispatcher(this);

            this.migrations = new Func <XDocument, XDocument>[]
            {
                this.MigrateV1ToV2,
                this.MigrateV2ToV3,
                this.MigrateV3ToV4,
                this.MigrateV4ToV5,
            };
        }
        public SyncThingFolderManager(
            SynchronizedTransientWrapper <ISyncThingApiClient> apiClient,
            ISyncThingEventWatcher eventWatcher,
            TimeSpan ignoresFetchTimeout)
        {
            this.eventDispatcher     = new SynchronizedEventDispatcher(this);
            this.apiClient           = apiClient;
            this.ignoresFetchTimeout = ignoresFetchTimeout;

            this.eventWatcher = eventWatcher;
            this.eventWatcher.SyncStateChanged += (o, e) => this.FolderSyncStateChanged(e);
            this.eventWatcher.ItemStarted      += (o, e) => this.ItemStarted(e.Folder, e.Item);
            this.eventWatcher.ItemFinished     += (o, e) => this.ItemFinished(e.Folder, e.Item);
        }
        public SyncthingTransferHistory(ISyncthingEventWatcher eventWatcher, ISyncthingFolderManager folderManager)
        {
            this.eventDispatcher = new SynchronizedEventDispatcher(this);

            this.eventWatcher  = eventWatcher;
            this.folderManager = folderManager;

            this.eventWatcher.ItemStarted  += this.ItemStarted;
            this.eventWatcher.ItemFinished += this.ItemFinished;
            this.eventWatcher.ItemDownloadProgressChanged += this.ItemDownloadProgressChanged;

            // We can't use the EventWatcher to watch for folder sync state change events: events could be skipped.
            // The folder manager knows how to listen to skipped event notifications, and refresh the folder states appropriately
            this.folderManager.SyncStateChanged += this.SyncStateChanged;
        }
Exemple #12
0
        public ConfigurationProvider(IApplicationPathsProvider paths, IFilesystemProvider filesystemProvider, IPathTransformer pathTransformer)
        {
            this.paths           = paths;
            this.filesystem      = filesystemProvider;
            this.pathTransformer = pathTransformer;
            this.eventDispatcher = new SynchronizedEventDispatcher(this);

            this.migrations = new Func <XDocument, XDocument>[]
            {
                this.MigrateV1ToV2,
                this.MigrateV2ToV3,
                this.MigrateV3ToV4,
                this.MigrateV4ToV5,
                this.MigrateV5ToV6,
                this.MigrateV6ToV7,
                this.MigrateV7ToV8,
                this.MigrateV8ToV9,
                this.MigrateV9ToV10,
            };
        }
Exemple #13
0
        public SyncThingManager(
            ISyncThingProcessRunner processRunner,
            ISyncThingApiClientFactory apiClientFactory,
            ISyncThingEventWatcherFactory eventWatcherFactory,
            ISyncThingConnectionsWatcherFactory connectionsWatcherFactory)
        {
            this.StartedTime = DateTime.MinValue;
            this.LastConnectivityEventTime = DateTime.MinValue;

            this.eventDispatcher           = new SynchronizedEventDispatcher(this);
            this.processRunner             = processRunner;
            this.apiClientFactory          = apiClientFactory;
            this.eventWatcherFactory       = eventWatcherFactory;
            this.connectionsWatcherFactory = connectionsWatcherFactory;

            this.processRunner.ProcessStopped   += (o, e) => this.ProcessStopped(e.ExitStatus);
            this.processRunner.MessageLogged    += (o, e) => this.OnMessageLogged(e.LogMessage);
            this.processRunner.ProcessRestarted += (o, e) => this.ProcessRestarted();
            this.processRunner.Starting         += (o, e) => this.ProcessStarting();
        }
Exemple #14
0
        public SyncthingManager(
            ISyncthingProcessRunner processRunner,
            ISyncthingApiClientFactory apiClientFactory,
            ISyncthingEventWatcherFactory eventWatcherFactory,
            ISyncthingConnectionsWatcherFactory connectionsWatcherFactory,
            IFreePortFinder freePortFinder)
        {
            this.StartedTime = DateTime.MinValue;
            this.LastConnectivityEventTime = DateTime.MinValue;

            this.ApiKey = this.GenerateApiKey();

            this.eventDispatcher  = new SynchronizedEventDispatcher(this);
            this.processRunner    = processRunner;
            this.apiClientFactory = apiClientFactory;
            this.freePortFinder   = freePortFinder;

            this.apiClient = new SynchronizedTransientWrapper <ISyncthingApiClient>(this.apiClientsLock);

            this.eventWatcher = eventWatcherFactory.CreateEventWatcher(this.apiClient);
            this.eventWatcher.DeviceConnected    += (o, e) => this.LastConnectivityEventTime = DateTime.UtcNow;
            this.eventWatcher.DeviceDisconnected += (o, e) => this.LastConnectivityEventTime = DateTime.UtcNow;
            this.eventWatcher.ConfigSaved        += (o, e) => this.ReloadConfigDataAsync();
            this.eventWatcher.EventsSkipped      += (o, e) => this.ReloadConfigDataAsync();
            this.eventWatcher.DeviceRejected     += (o, e) => this.OnDeviceRejected(e.DeviceId, e.Address);
            this.eventWatcher.FolderRejected     += (o, e) => this.OnFolderRejected(e.DeviceId, e.FolderId);

            this.connectionsWatcher = connectionsWatcherFactory.CreateConnectionsWatcher(this.apiClient);
            this.connectionsWatcher.TotalConnectionStatsChanged += (o, e) => this.OnTotalConnectionStatsChanged(e.TotalConnectionStats);

            this._folders         = new SyncthingFolderManager(this.apiClient, this.eventWatcher);
            this._devices         = new SyncthingDeviceManager(this.apiClient, this.eventWatcher, this.Capabilities);
            this._transferHistory = new SyncthingTransferHistory(this.eventWatcher, this._folders);
            this._debugFacilities = new SyncthingDebugFacilitiesManager(this.apiClient, this.Capabilities);

            this.processRunner.ProcessStopped   += (o, e) => this.ProcessStopped(e.ExitStatus);
            this.processRunner.MessageLogged    += (o, e) => this.OnMessageLogged(e.LogMessage);
            this.processRunner.ProcessRestarted += (o, e) => this.ProcessRestarted();
            this.processRunner.Starting         += (o, e) => this.ProcessStarting();
        }
        public SyncthingManager(
            ISyncthingProcessRunner processRunner,
            ISyncthingApiClientFactory apiClientFactory,
            ISyncthingEventWatcherFactory eventWatcherFactory,
            ISyncthingConnectionsWatcherFactory connectionsWatcherFactory,
            IFreePortFinder freePortFinder)
        {
            this.StartedTime = DateTime.MinValue;
            this.LastConnectivityEventTime = DateTime.MinValue;

            this.eventDispatcher = new SynchronizedEventDispatcher(this);
            this.processRunner = processRunner;
            this.apiClientFactory = apiClientFactory;
            this.freePortFinder = freePortFinder;

            this.apiClient = new SynchronizedTransientWrapper<ISyncthingApiClient>(this.apiClientsLock);

            this.eventWatcher = eventWatcherFactory.CreateEventWatcher(this.apiClient);
            this.eventWatcher.DeviceConnected += (o, e) => this.LastConnectivityEventTime = DateTime.UtcNow;
            this.eventWatcher.DeviceDisconnected += (o, e) => this.LastConnectivityEventTime = DateTime.UtcNow;
            this.eventWatcher.ConfigSaved += (o, e) => this.ReloadConfigDataAsync();
            this.eventWatcher.EventsSkipped += (o, e) => this.ReloadConfigDataAsync();

            this.connectionsWatcher = connectionsWatcherFactory.CreateConnectionsWatcher(this.apiClient);
            this.connectionsWatcher.TotalConnectionStatsChanged += (o, e) => this.OnTotalConnectionStatsChanged(e.TotalConnectionStats);

            this._folders = new SyncthingFolderManager(this.apiClient, this.eventWatcher, TimeSpan.FromMinutes(10));
            this._devices = new SyncthingDeviceManager(this.apiClient, this.eventWatcher, this.Capabilities);
            this._transferHistory = new SyncthingTransferHistory(this.eventWatcher, this._folders);
            this._debugFacilities = new SyncthingDebugFacilitiesManager(this.apiClient, this.Capabilities);

            this.processRunner.ProcessStopped += (o, e) => this.ProcessStopped(e.ExitStatus);
            this.processRunner.MessageLogged += (o, e) => this.OnMessageLogged(e.LogMessage);
            this.processRunner.ProcessRestarted += (o, e) => this.ProcessRestarted();
            this.processRunner.Starting += (o, e) => this.ProcessStarting();
        }