Exemple #1
0
        private async Task RefreshImChannels(bool force = false)
        {
            if (!force && ImChannels.Any())
            {
                return;
            }

            if (BusyStart != null)
            {
                BusyStart();
            }

            ImChannels.Clear();

            var members = await _slackClient.GetMembers();

            var ims = await _slackClient.GetImChannels();

            var imsVm = new List <SlackItem>();

            // todo move isDeleted flag to slack client
            foreach (var c in ims.Where(im => !im.is_user_deleted))
            {
                var m = members.FirstOrDefault(mem => mem.id == c.user)
                        ?? new Member {
                    real_name = c.user, profile = new Profile {
                        image_48 = "Assets/MediumGray.png", title = ""
                    }
                };
                imsVm.Add(new SlackItem(c.id, m.real_name, m.profile.title, m.real_name, null, m.profile.image_48));
            }

            foreach (var item in imsVm.OrderBy(c => c.Title))
            {
                ImChannels.Add(item);
            }

            if (BusyStop != null)
            {
                BusyStop();
            }
        }
        public async Task RefreshMessages()
        {
            if (BusyStart != null)
            {
                BusyStart();
            }

            List <Message> messages;
            var            query = new MessageQuery {
                Oldest = _latest
            };

            if (ChannelId.StartsWith("D"))
            {
                messages = await _slackClient.GetImMessages(ChannelId, query);
            }
            else
            {
                messages = await _slackClient.GetChannelMessages(ChannelId, query);
            }

            // update dates on older ones if this isn't the first load
            if (!_firstLoad && Messages.Any())
            {
                foreach (var m in Messages)
                {
                    // remove NEW msg from older ones (temporary hack)...
                    if (m.Title.StartsWith("[NEW!] "))
                    {
                        m.Title = m.Title.Replace("[NEW!] ", "");
                    }

                    // re-Humanize the time stamp
                    var dt = JavascriptDateTimeConverter.JsonToDate(m.Ts).ToLocalTime();
                    m.SubTitle = dt.Humanize(false);
                }
            }

            if (messages.Any())
            {
                _latest = messages[0].ts + 1;
                messages.RemoveAll(m => m.hidden);
                messages.Reverse();

                var members = await _slackClient.GetMembers();

                foreach (var message in messages)
                {
                    var userId = message.user;
                    var member = members.FirstOrDefault(mem => mem.id == userId)
                                 ?? new Member {
                        real_name = message.username, profile = new Profile {
                            title = ""
                        }
                    };

                    var title = "{0}{1}".FormatWith(_firstLoad ? "" : "[NEW!] ", member.real_name);
                    var dt    = JavascriptDateTimeConverter.JsonToDate(message.ts).ToLocalTime();

                    Messages.Insert(0, new SlackItem
                    {
                        Ts       = message.ts,
                        Title    = title,
                        SubTitle = dt.Humanize(false),
                        Content  = message.text
                    });
                }
            }

            _firstLoad = false;

            if (BusyStop != null)
            {
                BusyStop();
            }
        }