private List <SLMessage> ExtractChannelsHistory(dynamic data)
        {
            List <SLMessage> messageList        = new List <SLMessage>();
            bool             convertationResult = false;

            dynamic messages = DictionaryExtension.TryGetValue(data, "messages", out convertationResult);

            foreach (dynamic item in messages)
            {
                SLMessage message = new SLMessage();
                message.type = DictionaryExtension.TryGetValue(item, "type", out convertationResult);
                message.text = DictionaryExtension.TryGetValue(item, "text", out convertationResult);
                //TODO: message.file_description
                message.user_id = DictionaryExtension.TryGetValue(item, "user", out convertationResult);
                message.upload  = DictionaryExtension.TryGetValue(item, "upload", out convertationResult);
                message.ts      = DictionaryExtension.TryGetValue(item, "ts", out convertationResult);
                messageList.Add(message);
            }

            messageList.OrderBy(message => DateTimeHelper.DateTimeFromSLMessage(message)).ToList().Reverse();
            return(messageList);
        }
        private bool IsResponseStatusOk(dynamic data, ref string error)
        {
            bool    convertationResult = false;
            dynamic dataOk             = DictionaryExtension.TryGetValue(data, "ok", out convertationResult);

            if (dataOk != null)
            {
                if (dataOk == true)
                {
                    return(true);
                }
                else
                {
                    error = DictionaryExtension.TryGetValue(data, "error", out convertationResult);
                    if (error != null)
                    {
                        if (error.Equals("not_authed"))
                        {
                            //MessageBox.Show("No authentication token provided.");
                        }
                        else if (error.Equals("invalid_auth"))
                        {
                            //MessageBox.Show("Invalid authentication token.");
                        }
                        else if (error.Equals("account_inactive"))
                        {
                            //MessageBox.Show("Authentication token is for a deleted user or team.");
                        }
                    }
                }
            }
            else
            {
                error = "There is no \"ok\" key in response";
            }
            return(false);
        }
        private List <SLGroup> ExtractGroupsList(dynamic data)
        {
            List <SLGroup> groupList          = new List <SLGroup>();
            bool           convertationResult = false;

            dynamic groups = DictionaryExtension.TryGetValue(data, "groups", out convertationResult);

            foreach (dynamic item in groups)
            {
                SLGroup group = new SLGroup();
                group.id          = DictionaryExtension.TryGetValue(item, "id", out convertationResult);
                group.name        = DictionaryExtension.TryGetValue(item, "name", out convertationResult);
                group.is_group    = DictionaryExtension.TryGetValue(item, "is_group", out convertationResult);
                group.created     = DictionaryExtension.TryGetValue(item, "created", out convertationResult);
                group.creator_id  = DictionaryExtension.TryGetValue(item, "creator", out convertationResult);
                group.is_archived = DictionaryExtension.TryGetValue(item, "is_archived", out convertationResult);

                var membersData = DictionaryExtension.TryGetValue(item, "members", out convertationResult);
                if (membersData != null)
                {
                    foreach (string member_id in membersData)
                    {
                        group.members_ids.Add(member_id);
                    }
                }

                var topicData = DictionaryExtension.TryGetValue(item, "topic", out convertationResult);
                if (topicData != null)
                {
                    group.topic.creator_id = DictionaryExtension.TryGetValue(topicData, "creator", out convertationResult);
                    group.topic.value      = DictionaryExtension.TryGetValue(topicData, "value", out convertationResult);
                    group.topic.last_set   = DictionaryExtension.TryGetValue(topicData, "last_set", out convertationResult);
                }
                groupList.Add(group);
            }
            return(groupList);
        }
        private List <SLChannel> ExtractChannelsList(dynamic data)
        {
            List <SLChannel> channelsList = new List <SLChannel>();
            bool             convertationResult;

            dynamic groups = DictionaryExtension.TryGetValue(data, "channels", out convertationResult);

            foreach (dynamic item in groups)
            {
                SLChannel channel = new SLChannel();
                channel.id          = DictionaryExtension.TryGetValue(item, "id", out convertationResult);
                channel.name        = DictionaryExtension.TryGetValue(item, "name", out convertationResult);
                channel.is_channel  = DictionaryExtension.TryGetValue(item, "is_channel", out convertationResult);
                channel.created     = DictionaryExtension.TryGetValue(item, "created", out convertationResult);
                channel.creator_id  = DictionaryExtension.TryGetValue(item, "creator", out convertationResult);
                channel.is_archived = DictionaryExtension.TryGetValue(item, "is_archived", out convertationResult);

                var membersData = DictionaryExtension.TryGetValue(item, "members", out convertationResult);
                if (membersData != null)
                {
                    foreach (string member_id in membersData)
                    {
                        channel.members_ids.Add(member_id);
                    }
                }

                var topicData = DictionaryExtension.TryGetValue(item, "topic", out convertationResult);
                if (topicData != null)
                {
                    channel.topic.creator_id = DictionaryExtension.TryGetValue(topicData, "creator", out convertationResult);
                    channel.topic.value      = DictionaryExtension.TryGetValue(topicData, "value", out convertationResult);
                    channel.topic.last_set   = DictionaryExtension.TryGetValue(topicData, "last_set", out convertationResult);
                }
                channelsList.Add(channel);
            }
            return(channelsList);
        }
        private List <SLMessage> ExtractGroupsHistory(dynamic data)
        {
            List <SLMessage> messageList        = new List <SLMessage>();
            bool             convertationResult = false;

            dynamic messages = DictionaryExtension.TryGetValue(data, "messages", out convertationResult);

            foreach (dynamic item in messages)
            {
                SLMessage message = new SLMessage();
                message.type = DictionaryExtension.TryGetValue(item, "type", out convertationResult);
                message.text = DictionaryExtension.TryGetValue(item, "text", out convertationResult);

                var fileData = DictionaryExtension.TryGetValue(item, "file", out convertationResult);
                if (fileData != null)
                {
                    message.file_description.id        = DictionaryExtension.TryGetValue(fileData, "id", out convertationResult);
                    message.file_description.timestamp = DictionaryExtension.TryGetValue(fileData, "timestamp", out convertationResult);
                    message.file_description.name      = DictionaryExtension.TryGetValue(fileData, "name", out convertationResult);
                    message.file_description.title     = DictionaryExtension.TryGetValue(fileData, "title", out convertationResult);
                    message.file_description.mimetype  = DictionaryExtension.TryGetValue(fileData, "mimetype", out convertationResult);
                    message.file_description.filetype  = DictionaryExtension.TryGetValue(fileData, "filetype", out convertationResult);
                    message.file_description.user_id   = DictionaryExtension.TryGetValue(fileData, "user", out convertationResult);
                    //message.file_description.pretty_type = DictionaryExtension.TryGetValue(fileData, "pretty_type", out convertationResult);
                    //message.file_description.editable = DictionaryExtension.TryGetValue(fileData, "editable", out convertationResult);
                    //message.file_description.size = DictionaryExtension.TryGetValue(fileData, "size", out convertationResult);
                    //message.file_description.mode = DictionaryExtension.TryGetValue(fileData, "mode", out convertationResult);
                    //message.file_description.is_external = DictionaryExtension.TryGetValue(fileData, "is_external", out convertationResult);
                    //message.file_description.external_type = DictionaryExtension.TryGetValue(fileData, "external_type", out convertationResult);
                    //message.file_description.is_public = DictionaryExtension.TryGetValue(fileData, "is_public", out convertationResult);
                    //message.file_description.public_url_shared = DictionaryExtension.TryGetValue(fileData, "public_url_shared", out convertationResult);
                    //message.file_description.url = DictionaryExtension.TryGetValue(fileData, "url", out convertationResult);
                    //message.file_description.url_download = DictionaryExtension.TryGetValue(fileData, "url_download", out convertationResult);
                    //message.file_description.url_private = DictionaryExtension.TryGetValue(fileData, "url_private", out convertationResult);
                    //message.file_description.url_private_download = DictionaryExtension.TryGetValue(fileData, "url_private_download", out convertationResult);
                    //message.file_description.permalink = DictionaryExtension.TryGetValue(fileData, "permalink", out convertationResult);
                    //message.file_description.permalink_public = DictionaryExtension.TryGetValue(fileData, "permalink_public", out convertationResult);
                    //message.file_description.edit_link = DictionaryExtension.TryGetValue(fileData, "editlink", out convertationResult);
                    //message.file_description.preview = DictionaryExtension.TryGetValue(fileData, "preview", out convertationResult);
                    //message.file_description.preview_highlight = DictionaryExtension.TryGetValue(fileData, "preview_highlight", out convertationResult);
                    //message.file_description.lines = DictionaryExtension.TryGetValue(fileData, "lines", out convertationResult);
                    //message.file_description.lines_more = DictionaryExtension.TryGetValue(fileData, "lines_more", out convertationResult);

                    //var channelsData = DictionaryExtension.TryGetValue(fileData, "channels", out convertationResult);
                    //if (channelsData != null)
                    //{
                    //    foreach (string channel_id in channelsData)
                    //    {
                    //        message.file_description.channels_ids.Add(channel_id);
                    //    }
                    //}

                    //var groupsData = DictionaryExtension.TryGetValue(fileData, "groups", out convertationResult);
                    //if (groupsData != null)
                    //{
                    //    foreach (string group_id in channelsData)
                    //    {
                    //        message.file_description.groups_ids.Add(group_id);
                    //    }
                    //}

                    //var imsData = DictionaryExtension.TryGetValue(fileData, "ims", out convertationResult);
                    //if (imsData != null)
                    //{
                    //    foreach (string ims_id in imsData)
                    //    {
                    //        message.file_description.ims_ids.Add(ims_id);
                    //    }
                    //}

                    //message.file_description.comments_count = DictionaryExtension.TryGetValue(fileData, "comments_count", out convertationResult);
                }

                message.user_id = DictionaryExtension.TryGetValue(item, "user", out convertationResult);
                message.upload  = DictionaryExtension.TryGetValue(item, "upload", out convertationResult);
                message.ts      = DictionaryExtension.TryGetValue(item, "ts", out convertationResult);
                messageList.Add(message);
            }

            messageList.OrderBy(message => DateTimeHelper.DateTimeFromSLMessage(message)).ToList().Reverse();
            return(messageList);
        }