예제 #1
0
        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);
            }
        }
예제 #2
0
        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));
        }
예제 #3
0
 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;
		}
예제 #5
0
        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());
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        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);
        }
예제 #9
0
        /// <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));
        }
예제 #10
0
        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);
        }
예제 #12
0
        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);
        }
예제 #13
0
        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);
        }
예제 #14
0
        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>());
        }
예제 #15
0
        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);
        }
예제 #16
0
        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> ());
        }
예제 #17
0
        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);
        }
예제 #18
0
 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;
 }
예제 #19
0
 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());
 }
예제 #20
0
        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);
            }
        }
예제 #23
0
		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;
		}
예제 #24
0
		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;
		}
예제 #25
0
		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;
		}
예제 #26
0
		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>();
		}
예제 #27
0
		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> ();
		}
예제 #28
0
        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);
        }
예제 #29
0
        /// <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);
        }
예제 #30
0
        /// <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);
        }