Пример #1
0
        public void TestListMember()
        {
            var instance = new ListMember {
                List = new List <string>()
            };
            var context = BuildContext(instance);
            var root    = context.Factory.CreateNodeHierarchy(context.RootNode, new GraphNodePath(context.RootNode));
            var member  = root[nameof(ListMember.List)];

            Assert.Equal(0, member.Children.Count);
            Assert.Equal(nameof(ListMember.List), member.DisplayName);
            Assert.Equal(Index.Empty, member.Index);
            Assert.True(member.IsEnumerable);
            Assert.False(member.IsReadOnly);
            Assert.True(member.IsVisible);
            Assert.Equal(nameof(ListMember.List), member.Name);
            Assert.Equal(40, member.Order);
            Assert.Equal(root, member.Parent);
            Assert.Equal(instance.List, member.Value);

            instance = new ListMember();
            context  = BuildContext(instance);
            root     = context.Factory.CreateNodeHierarchy(context.RootNode, new GraphNodePath(context.RootNode));
            member   = root[nameof(ListMember.List)];
            Assert.Equal(0, member.Children.Count);
            Assert.Equal(nameof(ListMember.List), member.DisplayName);
            Assert.Equal(Index.Empty, member.Index);
            Assert.False(member.IsEnumerable);
            Assert.False(member.IsReadOnly);
            Assert.True(member.IsVisible);
            Assert.Equal(nameof(ListMember.List), member.Name);
            Assert.Equal(40, member.Order);
            Assert.Equal(root, member.Parent);
            Assert.Equal(instance.List, member.Value);
        }
Пример #2
0
        private void navBarItem5_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            ListMember form = ListMember.GetForm();

            form.MdiParent = this;
            form.Show();
            form.Activate();
        }
Пример #3
0
        public void RemoveLast()
        {
            ListMember <TKey, TValue> pointer = head;

            for (int i = 0; i < length - 2; i++)
            {
                pointer = pointer.next;
            }
            pointer.next = null;
            length--;
        }
Пример #4
0
 public TValue this[TKey s]
 {
     get
     {
         ListMember <TKey, TValue> pointer = head;
         for (int i = 0; i < length - 1 && !pointer.Key.Equals(s); i++)
         {
             pointer = pointer.next;
         }
         if (pointer != null && pointer.Key.Equals(s))
         {
             return(pointer.value);
         }
         else
         {
             return(default);
Пример #5
0
        public void Add(TKey key, TValue value)
        {
            var tmp = new ListMember <TKey, TValue>()
            {
                Key = key, value = value, next = null
            };

            if (length == 0)
            {
                head = tmp;
            }
            else
            {
                ListMember <TKey, TValue> pointer = head;
                for (int i = 0; i < length - 1; i++)
                {
                    pointer = pointer.next;
                }
                pointer.next = tmp;
            }
            length++;
        }
Пример #6
0
        public static async Task ExecuteAllMethods(ICakeMailRestClient client, string userKey, long clientId, TextWriter log, CancellationToken cancellationToken)
        {
            await log.WriteLineAsync("\n***** LISTS *****").ConfigureAwait(false);

            var lists = await client.Lists.GetListsAsync(userKey, ListStatus.Active, null, ListsSortBy.Name, SortDirection.Descending, null, null, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"All lists retrieved. Count = {lists.Count()}").ConfigureAwait(false);

            var listsCount = await client.Lists.GetCountAsync(userKey, ListStatus.Active, null, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"Lists count = {listsCount}").ConfigureAwait(false);

            var listId = await client.Lists.CreateAsync(userKey, "Dummy list", "Bob Smith", "*****@*****.**", true, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"New list created. Id: {listId}").ConfigureAwait(false);

            var updated = await client.Lists.UpdateAsync(userKey, listId, name : "Updated name", clientId : clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"List updated: {(updated ? "success" : "failed")}").ConfigureAwait(false);

            var list = await client.Lists.GetAsync(userKey, listId, false, false, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"List retrieved: Name = {list.Name}").ConfigureAwait(false);

            await client.Lists.AddFieldAsync(userKey, listId, "MyCustomField1", FieldType.Integer, clientId).ConfigureAwait(false);

            await client.Lists.AddFieldAsync(userKey, listId, "MyCustomField2", FieldType.DateTime, clientId).ConfigureAwait(false);

            await client.Lists.AddFieldAsync(userKey, listId, "MyCustomField3", FieldType.Text, clientId).ConfigureAwait(false);

            await client.Lists.AddFieldAsync(userKey, listId, "MyCustomField4", FieldType.Memo, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"Custom fields added to the list").ConfigureAwait(false);

            var fields = await client.Lists.GetFieldsAsync(userKey, listId, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"List contains the following fields: {string.Join(", ", fields.Select(f => f.Name))}").ConfigureAwait(false);

            var subscriberCustomFields = new Dictionary <string, object>()
            {
                { "MyCustomField1", 12345 },
                { "MyCustomField2", DateTime.UtcNow },
                { "MyCustomField3", "qwerty" }
            };
            var listMemberId = await client.Lists.SubscribeAsync(userKey, listId, "*****@*****.**", true, true, subscriberCustomFields, clientId).ConfigureAwait(false);

            await log.WriteLineAsync("One member added to the list").ConfigureAwait(false);

            var query       = "`email`=\"[email protected]\"";
            var subscribers = await client.Lists.GetMembersAsync(userKey, listId, query : query, clientId : clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"Subscribers retrieved: {subscribers.Count()}").ConfigureAwait(false);

            var subscriber = await client.Lists.GetMemberAsync(userKey, listId, listMemberId, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"Subscriber retrieved: {subscriber.Email}").ConfigureAwait(false);

            var member1 = new ListMember
            {
                Email        = "*****@*****.**",
                CustomFields = new Dictionary <string, object>
                {
                    { "MyCustomField1", 12345 },
                    { "MyCustomField2", DateTime.UtcNow },
                    { "MyCustomField3", "qwerty" }
                }
            };
            var member2 = new ListMember
            {
                Email        = "*****@*****.**",
                CustomFields = new Dictionary <string, object>
                {
                    { "MyCustomField1", 98765 },
                    { "MyCustomField2", DateTime.MinValue },
                    { "MyCustomField3", "azerty" }
                }
            };
            var importResult = await client.Lists.ImportAsync(userKey, listId, new[] { member1, member2 }, false, false, clientId).ConfigureAwait(false);

            await log.WriteLineAsync("Two members imported into the list").ConfigureAwait(false);

            var members = await client.Lists.GetMembersAsync(userKey, listId, null, null, null, null, null, null, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"All list members retrieved. Count = {members.Count()}").ConfigureAwait(false);

            var membersCount = await client.Lists.GetMembersCountAsync(userKey, listId, null, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"Members count = {membersCount}").ConfigureAwait(false);

            var customFieldsToUpdate = new Dictionary <string, object>
            {
                { "MyCustomField1", 555555 },
                { "MyCustomField3", "zzzzzzzzzzzzzzzzzzzzzzzzzz" }
            };
            var memberUpdated = await client.Lists.UpdateMemberAsync(userKey, listId, 1, customFieldsToUpdate, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"Member updated: {(memberUpdated ? "success" : "failed")}").ConfigureAwait(false);

            var logs = await client.Lists.GetLogsAsync(userKey, listId, LogType.Open, false, false, null, null, null, null, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"Retrieved 'Opens'. Count = {logs.Count()}").ConfigureAwait(false);

            var firstSegmentId = await client.Segments.CreateAsync(userKey, listId, "Segment #1", "(`email` LIKE \"aa%\")", clientId).ConfigureAwait(false);

            var secondSegmentId = await client.Segments.CreateAsync(userKey, listId, "Segment #2", "(`email` LIKE \"bb%\")", clientId).ConfigureAwait(false);

            await log.WriteLineAsync("Two segments created").ConfigureAwait(false);

            var segments = await client.Segments.GetSegmentsAsync(userKey, listId, 0, 0, true, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"Segments retrieved. Count = {segments.Count()}").ConfigureAwait(false);

            var firstSegmentDeleted = await client.Segments.DeleteAsync(userKey, firstSegmentId, clientId).ConfigureAwait(false);

            await log.WriteLineAsync("First segment deleted").ConfigureAwait(false);

            var secondSegmentDeleted = await client.Segments.DeleteAsync(userKey, secondSegmentId, clientId).ConfigureAwait(false);

            await log.WriteLineAsync("Second segment deleted").ConfigureAwait(false);

            var deleted = await client.Lists.DeleteAsync(userKey, listId, clientId).ConfigureAwait(false);

            await log.WriteLineAsync($"List deleted: {(deleted ? "success" : "failed")}").ConfigureAwait(false);
        }
Пример #7
0
        /// <summary>
        /// Sets up the execution logic for all the DelegateCommands in the ViewModel
        /// </summary>
        private void SetupCommands()
        {
            // Register user when they login the very first time.
            RegisterCommand = new DelegateCommand(async() =>
            {
                // Show validation fail flyout
                if (string.IsNullOrWhiteSpace(User.Name) ||
                    string.IsNullOrWhiteSpace(User.City) ||
                    string.IsNullOrWhiteSpace(User.State))
                {
                    flyoutProvider.ShowRegisterValidationFlyout();
                    return;
                }
                await profilesTable.InsertAsync(User);
                DisplayRegistrationForm = false;
                RegisterDeviceAsync();
                LoadListsAsync(true);
                LoadInvitesAsync();
            }, true);

            // Shows the flyout for user to create a new list the first time
            ShowNewUserNewListCommand = new DelegateCommand(() =>
            {
                flyoutProvider.ShowNewUserNewListFlyout();
            }, false);

            // Shows the flyout for user to enter the new list name
            ShowNewListCommand = new DelegateCommand(() =>
            {
                flyoutProvider.ShowNewListFlyout();
            }, false);

            // Creates a new list in the backend with the user as the owner
            NewListCommand = new DelegateCommand(async() =>
            {
                if (String.IsNullOrWhiteSpace(NewListName))
                {
                    flyoutProvider.ShowNameRequiredFlyout();
                    return;
                }
                ListMember membership = new ListMember
                {
                    Name   = NewListName,
                    UserId = App.MobileService.CurrentUser.UserId,
                };
                NewListName = String.Empty;
                await listMembersTable.InsertAsync(membership);
                Lists.Add(membership);
                ShowList(Lists.IndexOf(membership));
                flyoutProvider.HideNewListFlyout();
            });

            // Shows the flyout with all the lists having user as the owner
            ShowChooseListCommand = new DelegateCommand(() =>
            {
                flyoutProvider.ShowChooseListFlyout();
            });

            // Opens the list as selected by the user
            SelectListCommand = new DelegateCommand <ListMember>(listMember =>
            {
                ShowList(Lists.IndexOf(listMember));
            });

            // Asks the user for confirmation before leaving list
            ConfirmLeaveListCommand = new DelegateCommand(() =>
            {
                flyoutProvider.ShowLeaveListConfirmationFlyout();
            });

            // Removes the user as the owner of the list
            LeaveListCommand = new DelegateCommand(async() =>
            {
                await listMembersTable.DeleteAsync(CurrentList);
                Lists.Remove(CurrentList);
                ShowList(0);
                flyoutProvider.HideLeaveListConfirmationFlyout();
            });

            // Shows the floyout where the user can add the name of an item in a list
            ShowAddItemCommand = new DelegateCommand(() =>
            {
                flyoutProvider.ShowAddItemFlyout();
            }, false);

            // Adds an item in the list in the backend
            AddItemCommand = new DelegateCommand(async() =>
            {
                if (String.IsNullOrWhiteSpace(NewItemText))
                {
                    flyoutProvider.ShowDescriptionRequiredFlyout();
                    return;
                }
                var item = new Item
                {
                    Text      = NewItemText,
                    ListId    = CurrentList.ListId,
                    CreatedBy = User.Name,
                };
                NewItemText = String.Empty;
                await itemsTable.InsertAsync(item);
                Items.Add(item);
            });

            // Removes an item from a list when Remove Items button is pressed
            RemoveItemsCommand = new DelegateCommand(async() =>
            {
                foreach (Item item in selectedItems)
                {
                    try
                    {
                        await itemsTable.DeleteAsync(item);
                    }
                    catch (MobileServiceInvalidOperationException exc)
                    {
                        // a 404 is an expected scenario here, another user
                        // has most likely deleted the item whilst we've been
                        // viewing.
                        if (exc.Response.StatusCode != HttpStatusCode.NotFound)
                        {
                            ShowError("Another user deleted the item already.");
                        }
                    }
                    Items.Remove(item);
                }
            }, false);

            // Refreshes a list when Refresh Items button is pressed
            // this will populate any items added by any other list owner elsewhere
            RefreshCommand = new DelegateCommand(() =>
            {
                LoadSettingsAsync();
                LoadInvitesAsync();
                if (CurrentList != null)
                {
                    LoadListsAsync();
                    LoadItemsAsync();
                }
            }, false);

            // Searches for a user in the backend
            ShowUserSearchCommand = new DelegateCommand(() =>
            {
                var inviteUserViewModel = new InviteUserViewModel(this, profilesTable);
                flyoutProvider.ShowInviteUserFlyout(inviteUserViewModel);
            }, false);

            // Shows all the available invites for the user
            ViewInvitesCommand = new DelegateCommand(() =>
            {
                var viewInvitesViewModel = new ViewInvitesViewModel(this, invitesTable);
                flyoutProvider.ShowViewInvitesFlyout(viewInvitesViewModel);
            }, false);
        }