private void AddingAttachmentsToDB(MessagesTable currentMessageTable, Attachments attach)
 {
     db.Attachments.InsertOnSubmit(new AttachmentTable()
     {
         AccessKey = attach.access_key,
         Aid = attach.aid,
         AttachmentsMessage = currentMessageTable,
         Artist = attach.artist,
         Created = attach.created,
         Date = attach.date,
         Description = attach.description,
         Did = attach.did,
         Duration = attach.duration,
         Ext = attach.ext,
         Height = attach.height,
         Image = attach.image,
         ImageBig = attach.image_big,
         ImageMedium = attach.image_medium,
         ImageSmall = attach.image_small,
         Link = attach.link,
         OwnerId = attach.owner_id,
         Performer = attach.performer,
         Pid = attach.pid,
         Player = attach.player,
         Size = attach.size,
         Src = attach.src,
         SrcBig = attach.src_big,
         SrcSmall = attach.src_small,
         SrcXbig = attach.src_xbig,
         SrcXxbig = attach.src_xxbig,
         Text = attach.text,
         Title = attach.title,
         Type = attach.type.ToString(),
         Url = attach.url,
         Vid = attach.vid,
         Views = attach.views,
         Width = attach.width,
         Mid = currentMessageTable.Mid
     });
     //db.SubmitChanges();
 }
        private void LoadingMessagesList(List<VkResponseData> messages, bool isApiRequest, bool saveToDB)
        {
            try
            {
                if (db.Messages != null && isApiRequest && saveToDB)
                {
                    var messagesForDelete = (from message in db.Messages where message.ChatId == chat_id select message);
                    foreach (var msg in messagesForDelete)
                    {
                        try
                        {
                            db.Attachments.DeleteAllOnSubmit((from attach in db.Attachments where attach.Mid == msg.Mid select attach));
                        }
                        catch { continue; }
                    }
                    db.Messages.DeleteAllOnSubmit(messagesForDelete);
                    db.SubmitChanges();
                }
            }
            catch { }

            for (int i = messages.Count - 1; i >= 0; i--)
            {
                var currentMessage = messages[i] as Messages;
                if (!navigatingFrom)
                {
                    if (isApiRequest && !saveToDB && (currentMessage.mid == lastMid.ToString()))
                        continue;

                    Dictionary<string, string> attachments_types = new Dictionary<string, string>();
                    string allAttachmentsString = string.Empty;

                    if (!isApiRequest && !saveToDB)
                    {
                        try
                        {
                            var attachmentFromDb = (from attachment in db.Attachments where attachment.Mid == currentMessage.mid select attachment).ToList();
                            if (attachmentFromDb != null)
                            {
                                currentMessage.attachments = new List<Attachments>();
                                foreach (var attach in attachmentFromDb)
                                {
                                    currentMessage.attachments.Add(new Attachments()
                                    {
                                        access_key = attach.AccessKey,
                                        aid = attach.Aid,
                                        artist = attach.Artist,
                                        created = attach.Created,
                                        date = attach.Date,
                                        description = attach.Description,
                                        did = attach.Did,
                                        duration = attach.Duration,
                                        ext = attach.Ext,
                                        height = attach.Height,
                                        image = attach.Image,
                                        image_big = attach.ImageBig,
                                        image_medium = attach.ImageMedium,
                                        image_small = attach.ImageSmall,
                                        link = attach.Link,
                                        owner_id = attach.OwnerId,
                                        performer = attach.Performer,
                                        pid = attach.Pid,
                                        player = attach.Player,
                                        size = attach.Size,
                                        src = attach.Src,
                                        src_big = attach.SrcBig,
                                        src_small = attach.SrcSmall,
                                        src_xbig = attach.SrcXbig,
                                        src_xxbig = attach.SrcXxbig,
                                        text = attach.Text,
                                        title = attach.Title,
                                        type = (Attachments.AttachmentType)Enum.Parse(typeof(Attachments.AttachmentType), attach.Type, true),
                                        url = attach.Url,
                                        vid = attach.Vid,
                                        views = attach.Views,
                                        width = attach.Width
                                    });
                                }
                            }
                        }
                        catch { }
                    }
                    try
                    {
                        if (currentMessage.attachments != null)
                        {
                            foreach (var attachment in currentMessage.attachments)
                            {
                                switch (attachment.type)
                                {
                                    case Attachments.AttachmentType.photo:
                                        attachments_types.Add("photo" + attachment.pid, "_" + attachment.pid);
                                        allAttachmentsString += attachment.pid + ",";
                                        break;
                                    case Attachments.AttachmentType.audio:
                                        attachments_types.Add("audio" + attachment.aid, "_" + attachment.aid);
                                        allAttachmentsString += attachment.aid + ",";
                                        break;
                                    case Attachments.AttachmentType.video:
                                        attachments_types.Add("video" + attachment.vid, "_" + attachment.vid);
                                        allAttachmentsString += attachment.vid + ",";
                                        break;
                                    case Attachments.AttachmentType.doc:
                                        attachments_types.Add("doc" + attachment.did, "_" + attachment.did);
                                        allAttachmentsString += attachment.did + ",";
                                        break;
                                }
                            }
                        }

                        messageStackpanels.Add(new ConversationTemplateItemViewModel() { Message = currentMessage.body, Mid = currentMessage.mid.ToString(), ReceivedTime = new DateTime(1970, 1, 1).AddSeconds(int.Parse(currentMessage.date)) + TimeZoneInfo.Local.BaseUtcOffset, User = currentMessage.from_id != Authorization.UserId ? false : true, Img = allAttachmentsString, Attachments = attachments_types });
                        messageListBox.Items.Add(messageStackpanels.Last().CreateMSGBox());
                        messageListBox.ScrollIntoView(messageListBox.Items[messageListBox.Items.Count - 1]);

                        if (currentMessage.attachments != null)
                            foreach (var attach in currentMessage.attachments)
                            {
                                AddingAttachmentsToListBoxItems(new List<VkResponseData>() { attach });
                            }
                    }
                    catch { }
                }
                if (isApiRequest && saveToDB)
                {
                    try
                    {
                        var currentMessageTable = new MessagesTable()
                        {
                            AdminId = currentMessage.admin_id,
                            Body = currentMessage.body,
                            ChatActive = currentMessage.chat_active,
                            ChatId = currentMessage.chat_id,
                            Date = currentMessage.date,
                            Deleted = currentMessage.deleted,
                            IsOut = currentMessage._out,
                            Mid = currentMessage.mid,
                            ReadState = currentMessage.read_state,
                            Title = currentMessage.title,
                            //Uid = currentMessage._out == "0" ? Authorization.UserId : friend.UserId,
                            UsersCount = currentMessage.users_count,
                            FromId = currentMessage.uid,
                            Latitude = currentMessage.latitude,
                            Longitude = currentMessage.longitude
                        };
                        db.Messages.InsertOnSubmit(currentMessageTable);

                        if (currentMessage.attachments != null)
                            foreach (var attach in currentMessage.attachments)
                            {
                                AddingAttachmentsToDB(currentMessageTable, attach);
                            }
                        db.SubmitChanges();
                    }
                    catch { }
                }
            }
        }