public override void AwakeFromNib() { base.AwakeFromNib(); var config = ConfigManager.CurrentConfig; this.folderSelection.RemoveAllItems(); this.output.Editable = false; this.RunButton.Activated += (object sender, EventArgs e) => { var folder = config.Folders.Find(f => f.DisplayName == this.folderSelection.SelectedItem.Title); using (var dbEngine = new DBreezeEngine(folder.GetDatabasePath())) { var storage = new MetaDataStorage(dbEngine, new PathMatcher(folder.LocalPath, folder.RemotePath), false); try { storage.ValidateObjectStructure(); this.output.StringValue = string.Format("{0}: DB structure of {1} is fine", DateTime.Now, folder.GetDatabasePath()); } catch (Exception ex) { this.output.StringValue = ex.ToString(); } } }; this.DumpTree.Activated += (object sender, EventArgs e) => { this.output.StringValue = string.Empty; var folder = config.Folders.Find(f => f.DisplayName == this.folderSelection.SelectedItem.Title); using (var dbEngine = new DBreezeEngine(folder.GetDatabasePath())) { var storage = new MetaDataStorage(dbEngine, new PathMatcher(folder.LocalPath, folder.RemotePath), false); try { var ignoreStorage = new IgnoredEntitiesStorage(new IgnoredEntitiesCollection(), storage); var session = SessionFactory.NewInstance().CreateSession(folder, "DSS-DIAGNOSE-TOOL"); var remoteFolder = session.GetObjectByPath(folder.RemotePath) as IFolder; var filterAggregator = new FilterAggregator( new IgnoredFileNamesFilter(), new IgnoredFolderNameFilter(), new InvalidFolderNameFilter(), new IgnoredFoldersFilter()); var treeBuilder = new DescendantsTreeBuilder( storage, remoteFolder, new DirectoryInfoWrapper(new DirectoryInfo(folder.LocalPath)), filterAggregator, ignoreStorage); var trees = treeBuilder.BuildTrees(); var suffix = string.Format("{0}-{1}", folder.DisplayName.Replace(Path.DirectorySeparatorChar, '_'), Guid.NewGuid().ToString()); var localTree = Path.Combine(Path.GetTempPath(), string.Format("LocalTree-{0}.dot", suffix)); var remoteTree = Path.Combine(Path.GetTempPath(), string.Format("StoredTree-{0}.dot", suffix)); var storedTree = Path.Combine(Path.GetTempPath(), string.Format("RemoteTree-{0}.dot", suffix)); trees.LocalTree.ToDotFile(localTree); trees.StoredTree.ToDotFile(remoteTree); trees.RemoteTree.ToDotFile(storedTree); this.output.StringValue = string.Format("Written to:\n{0}\n{1}\n{2}", localTree, remoteTree, storedTree); } catch (Exception ex) { this.output.StringValue = ex.ToString(); } } }; foreach (var folder in config.Folders) { this.folderSelection.AddItem(folder.DisplayName); } }
public void ConstructorSetAllFilter() { var filter = new FilterAggregator(this.arg0, this.arg1, this.arg2, this.arg3); Assert.That(filter.FileNamesFilter, Is.EqualTo(this.arg0)); Assert.That(filter.FolderNamesFilter, Is.EqualTo(this.arg1)); Assert.That(filter.InvalidFolderNamesFilter, Is.EqualTo(this.arg2)); Assert.That(filter.IgnoredFolderFilter, Is.EqualTo(this.arg3)); }
public FilterViewModelBuilder( RequestModelAccessor requestModelAccessor, CategoryFilterService categoryFilterService, RouteRequestInfoAccessor routeRequestInfoAccessor, FilterAggregator filterAggregator) { _requestModelAccessor = requestModelAccessor; _categoryFilterService = categoryFilterService; _routeRequestInfoAccessor = routeRequestInfoAccessor; _filterAggregator = filterAggregator; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartObject) return null; reader.Read(); if (reader.TokenType != JsonToken.PropertyName) return null; var prop = reader.Value; if ((string) reader.Value != "filter") return null; reader.Read(); var agg = new FilterAggregator(); serializer.Populate(reader, agg); return agg; }
public static String BuildFilter(FilterAggregator aggregators) { var navBody = new StringBuilder(); foreach (var aggregator in aggregators.Filters) { navBody.Append("&"); navBody.Append(aggregator.BuildFilter()); } return(navBody.ToString()); }
public async Task GetDialogsWithOperationFiltersSuccess() { var retriveDialogsRequest = new RetrieveDialogsRequest(); var aggregator = new FilterAggregator(); aggregator.Filters.Add(new SortFilter <int>(SortOperator.Asc, () => new DialogResponse().Type)); aggregator.Filters.Add(new FieldFilterWithOperator <String>(SearchOperators.Lte, () => new DialogResponse().Id, "551d50bd535c123fc50260db")); retriveDialogsRequest.Filter = aggregator; var response = await this.client.ChatClient.GetDialogsAsync(retriveDialogsRequest); Assert.AreEqual(response.StatusCode, HttpStatusCode.OK); }
public async Task GetDialogsWithFiltersSuccess() { var retriveDialogsRequest = new RetrieveDialogsRequest(); var aggregator = new FilterAggregator(); //aggregator.Filters.Add(new DialogSortFilter<int>(SortOperator.Asc, () => new DialogResponse().Type)); aggregator.Filters.Add(new FieldFilter <int[]>(() => new DialogResponse().OccupantsIds, new int[] { 11879, 12779 })); retriveDialogsRequest.Filter = aggregator; var response = await this.client.ChatClient.GetDialogsAsync(retriveDialogsRequest); Assert.AreEqual(response.StatusCode, HttpStatusCode.OK); }
public async Task RetrieveUsersWithFilterSuccess() { var filterAgregator = new FilterAggregator(); filterAgregator.Filters.Add(new RetrieveUserFilter <String>(UserOperator.Eq, () => new User().FullName, "Eduardo")); filterAgregator.Filters.Add(new UserSortFilter <String>(SortOperator.Asc, () => new User().FullName)); var retriveUserRequest = new RetrieveUsersRequest() { Filter = filterAgregator }; var response = await this.client.UsersClient.RetrieveUsersAsync(retriveUserRequest); Assert.IsTrue(response.StatusCode == HttpStatusCode.OK); }
/// <summary> /// Retrieves all chat messages within particular dialog. It's only possible to read chat messages in dialog if current user id is in occupants_ids field or if dialog's type=1(PUBLIC_GROUP). Server will return dialog's chat messages sorted ascending by date_sent field. /// All retrieved chat messages will be marked as read after request. /// </summary> /// <param name="dialogId">Dialog ID</param> /// <returns></returns> public async Task <HttpResponse <RetrieveMessagesResponse <T> > > GetMessagesAsync <T>(string dialogId) where T : Message { if (dialogId == null) { throw new ArgumentNullException("dialogId"); } var retrieveMessagesRequest = new RetrieveMessagesRequest(); var aggregator = new FilterAggregator(); aggregator.Filters.Add(new FieldFilter <string>(() => new Message().ChatDialogId, dialogId)); retrieveMessagesRequest.Filter = aggregator; return(await GetMessagesAsync <T>(retrieveMessagesRequest)); }
public static void Main(string[] args) { var config = ConfigManager.CurrentConfig; foreach (var repoInfo in config.Folders) { using (var dbEngine = new DBreezeEngine(repoInfo.GetDatabasePath())) { var storage = new MetaDataStorage(dbEngine, new PathMatcher(repoInfo.LocalPath, repoInfo.RemotePath), false); Console.WriteLine(string.Format("Checking {0} and DB Path \"{1}\"", repoInfo.DisplayName, repoInfo.GetDatabasePath())); storage.ValidateObjectStructure(); } } foreach (var repoInfo in config.Folders) { try { using (var dbEngine = new DBreezeEngine(repoInfo.GetDatabasePath())) { var storage = new MetaDataStorage(dbEngine, new PathMatcher(repoInfo.LocalPath, repoInfo.RemotePath), false); var ignoreStorage = new IgnoredEntitiesStorage(new IgnoredEntitiesCollection(), storage); var session = SessionFactory.NewInstance().CreateSession(repoInfo, "DSS-DIAGNOSE-TOOL"); var remoteFolder = session.GetObjectByPath(repoInfo.RemotePath) as IFolder; var filterAggregator = new FilterAggregator( new IgnoredFileNamesFilter(), new IgnoredFolderNameFilter(), new InvalidFolderNameFilter(), new IgnoredFoldersFilter()); var treeBuilder = new DescendantsTreeBuilder( storage, remoteFolder, new DirectoryInfoWrapper(new DirectoryInfo(repoInfo.LocalPath)), filterAggregator, ignoreStorage); Console.WriteLine(string.Format("Creating local, stored and remote tree in \"{0}\"", Path.GetTempPath())); var trees = treeBuilder.BuildTrees(); var suffix = string.Format("{0}-{1}", repoInfo.DisplayName.Replace(Path.DirectorySeparatorChar, '_'), Guid.NewGuid().ToString()); var localTree = Path.Combine(Path.GetTempPath(), string.Format("LocalTree-{0}.dot", suffix)); var remoteTree = Path.Combine(Path.GetTempPath(), string.Format("StoredTree-{0}.dot", suffix)); var storedTree = Path.Combine(Path.GetTempPath(), string.Format("RemoteTree-{0}.dot", suffix)); trees.LocalTree.ToDotFile(localTree); trees.StoredTree.ToDotFile(remoteTree); trees.RemoteTree.ToDotFile(storedTree); Console.WriteLine(string.Format("Written to:\n{0}\n{1}\n{2}", localTree, remoteTree, storedTree)); } } catch (Exception ex) { Console.Error.WriteLine(ex.Message); } } }
public async Task <DialogTable> GetDialogAsync(int[] userIds) { var retrieveDialogsRequest = new RetrieveDialogsRequest(); var filterAgreaggator = new FilterAggregator(); filterAgreaggator.Filters.Add(new FieldFilterWithOperator <int[]>(SearchOperators.All, () => new DialogResponse().OccupantsIds, userIds)); retrieveDialogsRequest.Filter = filterAgreaggator; var response = await client.ChatClient.GetDialogsAsync(retrieveDialogsRequest); if (await HandleResponse(response, HttpStatusCode.OK) && response.Result.Items.Any()) { return(new DialogTable(response.Result.Items[0])); } return(null); }
public async Task <Dialog> GetDialogAsync(string dialogId) { var retrieveDialogsRequest = new RetrieveDialogsRequest(); var filterAgreaggator = new FilterAggregator(); filterAgreaggator.Filters.Add(new FieldFilterWithOperator <string>(SearchOperators.In, () => new DialogResponse().Id, dialogId)); retrieveDialogsRequest.Filter = filterAgreaggator; var response = await client.ChatClient.GetDialogsAsync(retrieveDialogsRequest); if (await HandleResponse(response, HttpStatusCode.OK) && response.Result.Items.Any()) { return(response.Result.Items[0]); } return(null); }
public async Task GetMessagesWithFiltersTest() { var responseDialogs = await this.client.ChatClient.GetDialogsAsync(); Assert.AreEqual(responseDialogs.StatusCode, HttpStatusCode.OK); var testDialog = responseDialogs.Result.Items.First(); var retrieveMessagesRequest = new RetrieveMessagesRequest(); var aggregator = new FilterAggregator(); aggregator.Filters.Add(new FieldFilter <string>(() => new Message().ChatDialogId, testDialog.Id)); retrieveMessagesRequest.Filter = aggregator; var responseMessages = await this.client.ChatClient.GetMessagesAsync((RetrieveMessagesRequest)retrieveMessagesRequest); Assert.AreEqual(responseMessages.StatusCode, HttpStatusCode.OK); }
public async Task <List <Message> > GetMessagesAsync(string dialogId) { var retrieveMessagesRequest = new RetrieveMessagesRequest(); var aggregator = new FilterAggregator(); aggregator.Filters.Add(new FieldFilter <string> (() => new Message().ChatDialogId, dialogId)); aggregator.Filters.Add(new SortFilter <long> (SortOperator.Desc, () => new Message().DateSent)); retrieveMessagesRequest.Filter = aggregator; var responseResult = await client.ChatClient.GetMessagesAsync(retrieveMessagesRequest); if (await HandleResponse(responseResult, HttpStatusCode.OK)) { return(responseResult.Result.Items.ToList()); } return(new List <Message>()); }
public async Task <Dialog> GetDialogAsync(int[] userIds) { var retrieveDialogsRequest = new RetrieveDialogsRequest(); var filterAgreaggator = new FilterAggregator(); //filterAgreaggator.Filters.Add(new FieldFilterWithOperator<int[]>(SearchOperators.In, () => new DialogResponse().OccupantsIds, userIds)); filterAgreaggator.Filters.Add(new FieldFilterWithOperator <int>(SearchOperators.In, () => new DialogResponse().Type, (int)DialogType.Private)); retrieveDialogsRequest.Filter = filterAgreaggator; var response = await client.ChatClient.GetDialogsAsync(retrieveDialogsRequest); if (await HandleResponse(response, HttpStatusCode.OK) && response.Result.Items.Any()) { var dialog = response.Result.Items.FirstOrDefault(d => d.OccupantsIds.Contains(userIds[0]) && d.OccupantsIds.Contains(userIds[1])); return(dialog); } return(null); }
public async Task <List <Quickblox.Sdk.Modules.UsersModule.Models.User> > GetUsersByIdsAsync(string ids) { try{ var retriveUserRequest = new RetrieveUsersRequest(); retriveUserRequest.PerPage = 100; var aggregator = new FilterAggregator(); aggregator.Filters.Add(new RetrieveUserFilter <int>(UserOperator.In, () => new Quickblox.Sdk.Modules.UsersModule.Models.User().Id, ids)); retriveUserRequest.Filter = aggregator; var response = await this.client.UsersClient.RetrieveUsersAsync(retriveUserRequest); if (await HandleResponse(response, HttpStatusCode.OK)) { return(response.Result.Items.Select(userResponse => userResponse.User).ToList()); } } catch (Exception ex) { } return(new List <Quickblox.Sdk.Modules.UsersModule.Models.User> ()); }
public async Task <List <Dialog> > GetDialogsAsync(List <DialogType> dialogTypeParams) { var retrieveDialogsRequest = new RetrieveDialogsRequest(); //TODO: change limit retrieveDialogsRequest.Limit = 25; if (dialogTypeParams != null) { var filterAgreaggator = new FilterAggregator(); var dialogTypes = string.Join(",", dialogTypeParams.Select(type => (int)type)); filterAgreaggator.Filters.Add(new FieldFilterWithOperator <int>(SearchOperators.In, () => new DialogResponse().Type, dialogTypes)); retrieveDialogsRequest.Filter = filterAgreaggator; } var response = await client.ChatClient.GetDialogsAsync(retrieveDialogsRequest); if (await HandleResponse(response, HttpStatusCode.OK)) { return(response.Result.Items.ToList()); } return(null); }
public NavigationViewModelBuilder(RequestModelAccessor requestModelAccessor, RouteRequestInfoAccessor routeRequestInfoAccessor, CategoryService categoryService, PageService pageService, UrlService urlService, PageByFieldTemplateCache <MegaMenuPageFieldTemplateCache> pageByFieldType, AuthorizationService authorizationService, FilterService filterService, ContentProcessorService contentProcessorService, FilterAggregator filterAggregator) { _requestModelAccessor = requestModelAccessor; _routeRequestInfoAccessor = routeRequestInfoAccessor; _categoryService = categoryService; _pageService = pageService; _urlService = urlService; _pageByFieldType = pageByFieldType; _authorizationService = authorizationService; _filterService = filterService; _contentProcessorService = contentProcessorService; _filterAggregator = filterAggregator; _channelSystemId = _requestModelAccessor.RequestModel.ChannelModel.SystemId; }
public FilterAggregatorDecorator( FilterAggregator parent, CategoryService categoryService, CurrencyService currencyService, UrlService urlService, SearchClientService searchClientService, RequestModelAccessor requestModelAccessor, ProductSearchServiceDecorator.SearchQueryBuilder searchQueryBuilder, FieldDefinitionService fieldDefinitionService, SearchPriceFilterService priceFilterService, AuthorizationService authorizationService) : base(categoryService, currencyService, urlService, authorizationService) { _parent = parent; _searchClientService = searchClientService; _requestModelAccessor = requestModelAccessor; _searchQueryBuilder = searchQueryBuilder; _fieldDefinitionService = fieldDefinitionService; _marketModel = new Lazy <MarketModel>(() => _requestModelAccessor.RequestModel.ChannelModel?.Channel?.MarketSystemId?.MapTo <MarketModel>()); _assortmentSystemId = new Lazy <Guid>(() => _marketModel.Value?.Market.AssortmentSystemId ?? Guid.Empty); _countrySystemId = new Lazy <Guid>(() => _requestModelAccessor.RequestModel.CountryModel.SystemId); _priceContainer = new Lazy <SearchPriceFilterService.Container>(() => priceFilterService.GetPrices()); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartObject) { return(null); } reader.Read(); if (reader.TokenType != JsonToken.PropertyName) { return(null); } var prop = reader.Value; if ((string)reader.Value != "filter") { return(null); } reader.Read(); var agg = new FilterAggregator(); serializer.Populate(reader, agg); return(agg); }
public async Task <List <MessageTable> > GetMessagesAsync(string dialogId) { List <MessageTable> messages = new List <MessageTable> (); var retrieveMessagesRequest = new RetrieveMessagesRequest(); var aggregator = new FilterAggregator(); aggregator.Filters.Add(new FieldFilter <string> (() => new Message().ChatDialogId, dialogId)); aggregator.Filters.Add(new SortFilter <long> (SortOperator.Desc, () => new Message().DateSent)); retrieveMessagesRequest.Filter = aggregator; var responseResult = await client.ChatClient.GetMessagesAsync(retrieveMessagesRequest); if (await HandleResponse(responseResult, HttpStatusCode.OK)) { foreach (var message in responseResult.Result.Items) { if (!string.IsNullOrWhiteSpace(message.MessageText)) { var chatMessage = new MessageTable(); chatMessage.Text = message.MessageText; chatMessage.DateSent = message.DateSent; chatMessage.SenderId = message.SenderId; chatMessage.MessageId = message.Id; if (message.RecipientId.HasValue) { chatMessage.RecepientId = message.RecipientId.Value; } chatMessage.DialogId = message.ChatDialogId; chatMessage.IsRead = message.Read == 1; messages.Add(chatMessage); } } } return(messages); }
public async Task LoadMessages(string dialogId) { var retrieveMessagesRequest = new RetrieveMessagesRequest(); var aggregator = new FilterAggregator(); aggregator.Filters.Add(new FieldFilter<string>(() => new Message().ChatDialogId, dialogId)); aggregator.Filters.Add(new SortFilter<long>(SortOperator.Desc, () => new Message().DateSent)); retrieveMessagesRequest.Filter = aggregator; var quickbloxClient = ServiceLocator.Locator.Get<IQuickbloxClient>(); var response = await quickbloxClient.ChatClient.GetMessagesAsync(retrieveMessagesRequest); if (response.StatusCode == HttpStatusCode.OK) { Messages.Clear(); var messageList = new List<MessageViewModel>(); for (int i = response.Result.Items.Length - 1; i >= 0; i--) // doing it in reverse order because we requested them from server in descending order { var messageViewModel = await CreateMessageViewModelFromMessage(response.Result.Items[i]); await GenerateProperNotificationMessages(messageViewModel, response.Result.Items[i]); messageList.Add(messageViewModel); } InitializeMessagesFromList(messageList); } }
public async Task<List<DialogTable>> GetDialogsAsync(List<DialogType> dialogTypeParams) { var dialogs = new List<DialogTable> (); var retrieveDialogsRequest = new RetrieveDialogsRequest(); //TODO: change limit retrieveDialogsRequest.Limit = 100; if (dialogTypeParams != null) { var filterAgreaggator = new FilterAggregator (); var dialogTypes = string.Join (",", dialogTypeParams.Select(type => (int)type)); filterAgreaggator.Filters.Add (new FieldFilterWithOperator<int> (SearchOperators.In, () => new DialogResponse ().Type, dialogTypes)); retrieveDialogsRequest.Filter = filterAgreaggator; } var response = await client.ChatClient.GetDialogsAsync(retrieveDialogsRequest); if (await HandleResponse(response, HttpStatusCode.OK)) { dialogs = response.Result.Items.Select(d => new DialogTable(d)).ToList(); } return dialogs; }
public async Task<Dialog> GetDialogAsync(string dialogId) { var retrieveDialogsRequest = new RetrieveDialogsRequest(); var filterAgreaggator = new FilterAggregator (); filterAgreaggator.Filters.Add(new FieldFilterWithOperator<string>(SearchOperators.In, () => new DialogResponse().Id, dialogId)); retrieveDialogsRequest.Filter = filterAgreaggator; var response = await client.ChatClient.GetDialogsAsync(retrieveDialogsRequest); if (await HandleResponse(response, HttpStatusCode.OK) && response.Result.Items.Any()) { return response.Result.Items[0]; } return null; }
public async Task<Dialog> GetDialogAsync(int[] userIds) { var retrieveDialogsRequest = new RetrieveDialogsRequest(); retrieveDialogsRequest.Limit = 100; var filterAgreaggator = new FilterAggregator (); filterAgreaggator.Filters.Add (new FieldFilterWithOperator<int> (SearchOperators.In, () => new DialogResponse ().Type, (int)DialogType.Private)); retrieveDialogsRequest.Filter = filterAgreaggator; var response = await client.ChatClient.GetDialogsAsync(retrieveDialogsRequest); if (await HandleResponse(response, HttpStatusCode.OK) && response.Result.Items.Any()) { var dialog = response.Result.Items.FirstOrDefault (d => d.OccupantsIds.Contains (userIds [0]) && d.OccupantsIds.Contains (userIds [1])); return dialog; } return null; }
public async Task<List<Message>> GetMessagesAsync(string dialogId) { var retrieveMessagesRequest = new RetrieveMessagesRequest (); var aggregator = new FilterAggregator (); aggregator.Filters.Add (new FieldFilter<string> (() => new Message ().ChatDialogId, dialogId)); aggregator.Filters.Add (new SortFilter<long> (SortOperator.Desc, () => new Message ().DateSent)); retrieveMessagesRequest.Filter = aggregator; var responseResult = await client.ChatClient.GetMessagesAsync (retrieveMessagesRequest); if (await HandleResponse (responseResult, HttpStatusCode.OK)) { return responseResult.Result.Items.ToList(); } return new List<Message>(); }
public async Task<List<Quickblox.Sdk.Modules.UsersModule.Models.User>> GetUsersByIdsAsync (string ids) { try{ var retriveUserRequest = new RetrieveUsersRequest(); retriveUserRequest.PerPage = 100; var aggregator = new FilterAggregator(); aggregator.Filters.Add(new RetrieveUserFilter<int>(UserOperator.In, () => new Quickblox.Sdk.Modules.UsersModule.Models.User().Id, ids)); retriveUserRequest.Filter = aggregator; var response = await this.client.UsersClient.RetrieveUsersAsync(retriveUserRequest); if (await HandleResponse(response, HttpStatusCode.OK)) { return response.Result.Items.Select(userResponse => userResponse.User).ToList(); } } catch (Exception ex) { } return new List<Quickblox.Sdk.Modules.UsersModule.Models.User> (); }
private SingleStepEventQueue CreateQueue(Mock <ISession> session, IMetaDataStorage storage, ObservableHandler observer, IFileSystemInfoFactory fsFactory = null) { var manager = new SyncEventManager(); SingleStepEventQueue queue = new SingleStepEventQueue(manager); manager.AddEventHandler(observer); var connectionScheduler = new ConnectionScheduler(new RepoInfo(), queue, Mock.Of <ISessionFactory>(), Mock.Of <IAuthenticationProvider>()); manager.AddEventHandler(connectionScheduler); var changes = new ContentChanges(session.Object, storage, queue, this.maxNumberOfContentChanges, this.isPropertyChangesSupported); manager.AddEventHandler(changes); var transformer = new ContentChangeEventTransformer(queue, storage, fsFactory); manager.AddEventHandler(transformer); var ccaccumulator = new ContentChangeEventAccumulator(session.Object, queue); manager.AddEventHandler(ccaccumulator); var remoteFetcher = new RemoteObjectFetcher(session.Object, storage); manager.AddEventHandler(remoteFetcher); var localFetcher = new LocalObjectFetcher(storage.Matcher, fsFactory); manager.AddEventHandler(localFetcher); var watcher = new Strategy.WatcherConsumer(queue); manager.AddEventHandler(watcher); var localDetection = new LocalSituationDetection(); var remoteDetection = new RemoteSituationDetection(); var transmissionManager = new ActiveActivitiesManager(); var activityAggregator = new ActivityListenerAggregator(Mock.Of <IActivityListener>(), transmissionManager); var ignoreFolderFilter = new IgnoredFoldersFilter(); var ignoreFolderNameFilter = new IgnoredFolderNameFilter(); var ignoreFileNamesFilter = new IgnoredFileNamesFilter(); var invalidFolderNameFilter = new InvalidFolderNameFilter(); var filterAggregator = new FilterAggregator(ignoreFileNamesFilter, ignoreFolderNameFilter, invalidFolderNameFilter, ignoreFolderFilter); var syncMechanism = new SyncMechanism(localDetection, remoteDetection, queue, session.Object, storage, activityAggregator, filterAggregator, isServerAbleToUpdateModificationDate: true); manager.AddEventHandler(syncMechanism); var remoteFolder = MockSessionUtil.CreateCmisFolder(); var localFolder = new Mock <IDirectoryInfo>(); var generator = new CrawlEventGenerator(storage, fsFactory); var treeBuilder = new DescendantsTreeBuilder(storage, remoteFolder.Object, localFolder.Object, filterAggregator); var notifier = new CrawlEventNotifier(queue); var crawler = new DescendantsCrawler(queue, treeBuilder, generator, notifier, Mock.Of <IActivityListener>()); manager.AddEventHandler(crawler); var permissionDenied = new GenericHandleDublicatedEventsFilter <PermissionDeniedEvent, ConfigChangedEvent>(); manager.AddEventHandler(permissionDenied); var alreadyAddedFilter = new IgnoreAlreadyHandledFsEventsFilter(storage, fsFactory); manager.AddEventHandler(alreadyAddedFilter); var ignoreContentChangesFilter = new IgnoreAlreadyHandledContentChangeEventsFilter(storage, session.Object); manager.AddEventHandler(ignoreContentChangesFilter); var delayRetryAndNextSyncEventHandler = new DelayRetryAndNextSyncEventHandler(queue); manager.AddEventHandler(delayRetryAndNextSyncEventHandler); /* This is not implemented yet * var failedOperationsFilder = new FailedOperationsFilter(queue); * manager.AddEventHandler(failedOperationsFilder); */ var reportingFilter = new ReportingFilter(queue, ignoreFolderFilter, ignoreFileNamesFilter, ignoreFolderNameFilter, invalidFolderNameFilter); manager.AddEventHandler(reportingFilter); var debugHandler = new DebugLoggingHandler(); manager.AddEventHandler(debugHandler); var movedOrRenamed = new RemoteObjectMovedOrRenamedAccumulator(queue, storage, fsFactory); manager.AddEventHandler(movedOrRenamed); return(queue); }
/// <summary> /// Initializes a new instance of the <see cref="Repository"/> class. /// </summary> /// <param name="repoInfo">Repo info.</param> /// <param name="activityListener">Activity listener.</param> /// <param name="inMemory">If set to <c>true</c> in memory.</param> /// <param name="queue">Event Queue.</param> protected Repository(RepoInfo repoInfo, ActivityListenerAggregator activityListener, bool inMemory, ICountingQueue queue) : base(repoInfo) { if (activityListener == null) { throw new ArgumentNullException("activityListener"); } this.fileSystemFactory = new FileSystemInfoFactory(); this.activityListener = activityListener; this.rootFolderMonitor = new RepositoryRootDeletedDetection(this.fileSystemFactory.CreateDirectoryInfo(this.LocalPath)); this.rootFolderMonitor.RepoRootDeleted += this.RootFolderAvailablilityChanged; if (!this.fileSystemFactory.CreateDirectoryInfo(this.LocalPath).IsExtendedAttributeAvailable()) { throw new ExtendedAttributeException("Extended Attributes are not available on the local path: " + this.LocalPath); } this.Queue = queue; this.Queue.EventManager.AddEventHandler(rootFolderMonitor); this.Queue.EventManager.AddEventHandler(new DebugLoggingHandler()); // Create Database connection this.db = new DBreezeEngine(new DBreezeConfiguration { DBreezeDataFolderName = inMemory ? string.Empty : repoInfo.GetDatabasePath(), Storage = inMemory ? DBreezeConfiguration.eStorage.MEMORY : DBreezeConfiguration.eStorage.DISK }); // Create session dependencies this.sessionFactory = SessionFactory.NewInstance(); this.authProvider = AuthProviderFactory.CreateAuthProvider(repoInfo.AuthenticationType, repoInfo.Address, this.db); // Initialize storage this.storage = new MetaDataStorage(this.db, new PathMatcher(this.LocalPath, this.RepoInfo.RemotePath), inMemory); this.fileTransmissionStorage = new FileTransmissionStorage(this.db, RepoInfo.ChunkSize); // Add ignore file/folder filter this.ignoredFoldersFilter = new IgnoredFoldersFilter { IgnoredPaths = new List <string>(repoInfo.GetIgnoredPaths()) }; this.ignoredFileNameFilter = new IgnoredFileNamesFilter { Wildcards = ConfigManager.CurrentConfig.IgnoreFileNames }; this.ignoredFolderNameFilter = new IgnoredFolderNameFilter { Wildcards = ConfigManager.CurrentConfig.IgnoreFolderNames }; this.invalidFolderNameFilter = new InvalidFolderNameFilter(); var symlinkFilter = new SymlinkFilter(); this.filters = new FilterAggregator(this.ignoredFileNameFilter, this.ignoredFolderNameFilter, this.invalidFolderNameFilter, this.ignoredFoldersFilter, symlinkFilter); this.reportingFilter = new ReportingFilter( this.Queue, this.ignoredFoldersFilter, this.ignoredFileNameFilter, this.ignoredFolderNameFilter, this.invalidFolderNameFilter, symlinkFilter); this.Queue.EventManager.AddEventHandler(this.reportingFilter); this.alreadyAddedFilter = new IgnoreAlreadyHandledFsEventsFilter(this.storage, this.fileSystemFactory); this.Queue.EventManager.AddEventHandler(this.alreadyAddedFilter); // Add handler for repo config changes this.Queue.EventManager.AddEventHandler(new GenericSyncEventHandler <RepoConfigChangedEvent>(0, this.RepoInfoChanged)); // Add periodic sync procedures scheduler this.Scheduler = new SyncScheduler(this.Queue, repoInfo.PollInterval); this.Queue.EventManager.AddEventHandler(this.Scheduler); // Add File System Watcher #if __COCOA__ this.WatcherProducer = new CmisSync.Lib.Producer.Watcher.MacWatcher(LocalPath, Queue); #else this.WatcherProducer = new NetWatcher(new FileSystemWatcher(this.LocalPath), this.Queue, this.storage); #endif this.WatcherConsumer = new WatcherConsumer(this.Queue); this.Queue.EventManager.AddEventHandler(this.WatcherConsumer); // Add transformer this.transformer = new ContentChangeEventTransformer(this.Queue, this.storage, this.fileSystemFactory); this.Queue.EventManager.AddEventHandler(this.transformer); // Add local fetcher var localFetcher = new LocalObjectFetcher(this.storage.Matcher, this.fileSystemFactory); this.Queue.EventManager.AddEventHandler(localFetcher); this.ignoredStorage = new IgnoredEntitiesStorage(new IgnoredEntitiesCollection(), this.storage); this.Queue.EventManager.AddEventHandler(new EventManagerInitializer(this.Queue, this.storage, this.fileTransmissionStorage, this.ignoredStorage, this.RepoInfo, this.filters, activityListener, this.fileSystemFactory)); this.Queue.EventManager.AddEventHandler(new DelayRetryAndNextSyncEventHandler(this.Queue)); this.connectionScheduler = new ConnectionScheduler(this.RepoInfo, this.Queue, this.sessionFactory, this.authProvider); this.Queue.EventManager.AddEventHandler(this.connectionScheduler); this.Queue.EventManager.AddEventHandler( new GenericSyncEventHandler <SuccessfulLoginEvent>( 10000, delegate(ISyncEvent e) { this.RepoStatusFlags.Connected = true; this.Status = this.RepoStatusFlags.Status; return(false); })); this.Queue.EventManager.AddEventHandler( new GenericSyncEventHandler <ConfigurationNeededEvent>( 10000, delegate(ISyncEvent e) { this.RepoStatusFlags.Warning = true; this.Status = this.RepoStatusFlags.Status; return(false); })); this.unsubscriber = this.Queue.CategoryCounter.Subscribe(this); }
/// <summary> /// Initializes a new instance of the <see cref="Repository"/> class. /// </summary> /// <param name="repoInfo">Repo info.</param> /// <param name="activityListener">Activity listener.</param> /// <param name="inMemory">If set to <c>true</c> in memory.</param> /// <param name="queue">Event Queue.</param> protected Repository(RepoInfo repoInfo, ActivityListenerAggregator activityListener, bool inMemory, IDisposableSyncEventQueue queue) { if (repoInfo == null) { throw new ArgumentNullException("Given repoInfo is null"); } if (activityListener == null) { throw new ArgumentNullException("Given activityListener is null"); } this.fileSystemFactory = new FileSystemInfoFactory(); // Initialize local variables this.RepoInfo = repoInfo; this.LocalPath = repoInfo.LocalPath; this.Name = repoInfo.DisplayName; this.RemoteUrl = repoInfo.Address; if (!this.fileSystemFactory.CreateDirectoryInfo(this.LocalPath).IsExtendedAttributeAvailable()) { throw new ExtendedAttributeException("Extended Attributes are not available on the local path: " + this.LocalPath); } this.Queue = queue; this.Queue.EventManager.AddEventHandler(new DebugLoggingHandler()); // Create Database connection this.db = new DBreezeEngine(new DBreezeConfiguration { DBreezeDataFolderName = inMemory ? string.Empty : repoInfo.GetDatabasePath(), Storage = inMemory ? DBreezeConfiguration.eStorage.MEMORY : DBreezeConfiguration.eStorage.DISK }); // Create session dependencies this.sessionFactory = SessionFactory.NewInstance(); this.authProvider = AuthProviderFactory.CreateAuthProvider(repoInfo.AuthenticationType, repoInfo.Address, this.db); // Initialize storage this.storage = new MetaDataStorage(this.db, new PathMatcher(this.LocalPath, this.RepoInfo.RemotePath)); // Add ignore file/folder filter this.ignoredFoldersFilter = new IgnoredFoldersFilter { IgnoredPaths = new List <string>(repoInfo.GetIgnoredPaths()) }; this.ignoredFileNameFilter = new IgnoredFileNamesFilter { Wildcards = ConfigManager.CurrentConfig.IgnoreFileNames }; this.ignoredFolderNameFilter = new IgnoredFolderNameFilter { Wildcards = ConfigManager.CurrentConfig.IgnoreFolderNames }; this.invalidFolderNameFilter = new InvalidFolderNameFilter(); this.filters = new FilterAggregator(this.ignoredFileNameFilter, this.ignoredFolderNameFilter, this.invalidFolderNameFilter, this.ignoredFoldersFilter); this.reportingFilter = new ReportingFilter( this.Queue, this.ignoredFoldersFilter, this.ignoredFileNameFilter, this.ignoredFolderNameFilter, this.invalidFolderNameFilter); this.Queue.EventManager.AddEventHandler(this.reportingFilter); this.alreadyAddedFilter = new IgnoreAlreadyHandledFsEventsFilter(this.storage, this.fileSystemFactory); this.Queue.EventManager.AddEventHandler(this.alreadyAddedFilter); // Add handler for repo config changes this.Queue.EventManager.AddEventHandler(new GenericSyncEventHandler <RepoConfigChangedEvent>(0, this.RepoInfoChanged)); // Add periodic sync procedures scheduler this.Scheduler = new SyncScheduler(this.Queue, repoInfo.PollInterval); this.Queue.EventManager.AddEventHandler(this.Scheduler); // Add File System Watcher #if __COCOA__ this.WatcherProducer = new CmisSync.Lib.Producer.Watcher.MacWatcher(LocalPath, Queue); #else this.WatcherProducer = new NetWatcher(new FileSystemWatcher(this.LocalPath), this.Queue, this.storage); #endif this.WatcherConsumer = new WatcherConsumer(this.Queue); this.Queue.EventManager.AddEventHandler(this.WatcherConsumer); // Add transformer this.transformer = new ContentChangeEventTransformer(this.Queue, this.storage, this.fileSystemFactory); this.Queue.EventManager.AddEventHandler(this.transformer); // Add local fetcher var localFetcher = new LocalObjectFetcher(this.storage.Matcher, this.fileSystemFactory); this.Queue.EventManager.AddEventHandler(localFetcher); this.SyncStatusChanged += delegate(SyncStatus status) { this.Status = status; }; this.Queue.EventManager.AddEventHandler(new EventManagerInitializer(this.Queue, this.storage, this.RepoInfo, this.filters, activityListener, this.fileSystemFactory)); this.Queue.EventManager.AddEventHandler(new DelayRetryAndNextSyncEventHandler(this.Queue)); this.connectionScheduler = new ConnectionScheduler(this.RepoInfo, this.Queue, this.sessionFactory, this.authProvider); this.Queue.EventManager.AddEventHandler(this.connectionScheduler); }