Example #1
0
        /// <summary>
        /// 对byte数据进行转码 。
        /// columns为列名,多个逗号隔开;encodestr为编码格式,如UTF-8,Unicode,GBK
        /// </summary>
        private void Encode(IEnumerable <dynamic> items, string columns, string encodestr)
        {
            if (String.IsNullOrEmpty(columns) || String.IsNullOrEmpty(encodestr))
            {
                return;
            }
            if (items == null)
            {
                return;
            }
            var cs     = columns.Replace(",", ",").Split(',');
            var encode = System.Text.Encoding.GetEncoding(encodestr);

            foreach (var item in items)
            {
                try
                {
                    DynamicEx obj = (DynamicEx)item;
                    foreach (var c in cs)
                    {
                        var value = obj.Get(c) as byte[];
                        obj.Set(c, encode.GetString(value).Replace("\0", ""));
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("转码异常" + e.Message);
                }
            }
        }
Example #2
0
        private void GetdbContactRemark(byte[] data, ref DynamicEx friend)
        {
            try
            {
                int index = 0;

                if (data[index++] != 0x0A)
                {
                    return;
                }

                int length = data[index++];
                if (0 != length)
                {//昵称NickName
                    var res = System.Text.Encoding.UTF8.GetString(data, index, length);
                    friend.Set("NickName", res);
                }
                index += length;

                if (index >= data.Length || data[index++] != 0x12)
                {
                    return;
                }

                length = data[index++];
                if (0 != length)
                {//修改后微信号Alias
                    var res = System.Text.Encoding.UTF8.GetString(data, index, length);
                    friend.Set("Alias", res);
                }
                index += length;

                if (index >= data.Length || data[index++] != 0x1A)
                {
                    return;
                }

                length = data[index++];
                if (0 != length)
                {//备注RemarkName
                    var res = System.Text.Encoding.UTF8.GetString(data, index, length);
                    friend.Set("RemarkName", res);
                }
                index += length;
            }
            catch
            {
            }
        }
Example #3
0
        private void GetdbContactProfile(byte[] data, ref DynamicEx friend)
        {
            try
            {
                int index = 0;
                while (index < data.Length && data[index] != 0x12)
                {
                    index++;
                }

                if (index >= data.Length || data[index++] != 0x12)
                {
                    return;
                }

                int length = data[index++];
                if (0 != length)
                {//国家Country
                    var res = System.Text.Encoding.UTF8.GetString(data, index, length);
                    friend.Set("Country", res);
                }
                index += length;

                if (index >= data.Length || data[index++] != 0x1a)
                {
                    return;
                }

                length = data[index++];
                if (0 != length)
                {//省Province
                    var res = System.Text.Encoding.UTF8.GetString(data, index, length);
                    friend.Set("Province", res);
                }
                index += length;

                if (index >= data.Length || data[index++] != 0x22)
                {
                    return;
                }

                length = data[index++];
                if (0 != length)
                {//市City
                    var res = System.Text.Encoding.UTF8.GetString(data, index, length);
                    friend.Set("City", res);
                }
                index += length;

                if (index >= data.Length || data[index++] != 0x2a)
                {
                    return;
                }

                length = data[index++];
                if (0 != length)
                {//个性签名Signature
                    var res = System.Text.Encoding.UTF8.GetString(data, index, length);
                    friend.Set("Signature", res);
                }
                index += length;
            }
            catch
            {
            }
        }
Example #4
0
        /// <summary>
        /// 获取通讯录  包括好友和群聊
        /// </summary>
        private void LoadAllContacts()
        {
            LsAllFriends      = new List <WeChatFriendShow>();
            LsAllGroupFriends = new List <WeChatGroupShow>();

            #region 从MM.sqlite的Friend表获取好友信息

            var sql = @"SELECT
                            f.*, 
                            e.*
                        FROM
                            Friend f
                        LEFT JOIN Friend_Ext e ON f.UsrName = e.UsrName";
            MainContext.UsingSafeConnection(sql, r =>
            {
                dynamic data;
                WeChatFriendShow friendInfo;

                while (r.Read())
                {
                    data = r.ToDynamic();

                    if (DynamicConvert.ToSafeString(data.UsrName).Contains("@chatroom"))
                    {
                        LsAllGroupFriends.Add(CreateWeChatGroupShow(data));
                    }
                    else
                    {
                        friendInfo = new WeChatFriendShow();
                        CreateWeChatFriendShow(data, ref friendInfo);

                        LsAllFriends.Add(friendInfo);
                    }
                }
            });

            #endregion

            #region 从WCDB_Contact.sqlite的表Friend获取好友信息

            string WCDBPath = Path.Combine(MD5AccountPath, "DB", "WCDB_Contact.sqlite");
            if (FileHelper.IsValid(WCDBPath))
            {
                List <char> listC = new List <char>();
                for (int i = 0; i < 32; i++)
                {
                    listC.Add((char)i);
                }
                listC.Add((char)127);
                var arrC = listC.ToArray();//分割字符

                using (var WCDB = new SqliteContext(WCDBPath))
                {
                    WCDB.UsingSafeConnection("SELECT * FROM Friend WHERE imgStatus != 1", r =>
                    {//imgStatus为1的记录为系统功能
                        dynamic fd;
                        DynamicEx dy;
                        WeChatFriendShow friendInfo;

                        while (r.Read())
                        {
                            fd = r.ToDynamic();

                            dy = new DynamicEx();
                            dy.Set("UsrName", fd.userName);
                            dy.Set("type", fd.type);
                            dy.Set("certificationFlag", fd.certificationFlag);
                            dy.Set("imgStatus", fd.imgStatus);
                            dy.Set("XLY_DataType", "2");

                            byte[] dbContactRemark = fd.dbContactRemark;
                            if (dbContactRemark.IsValid())
                            {//获取昵称、备注、修改后微信号
                                GetdbContactRemark(dbContactRemark, ref dy);
                            }

                            byte[] dbContactProfile = fd.dbContactProfile;
                            if (dbContactProfile.IsValid())
                            {//获取位置和签名
                                GetdbContactProfile(dbContactProfile, ref dy);
                            }

                            byte[] dbContactChatRoom = fd.dbContactChatRoom;
                            if (dbContactChatRoom.IsValid())
                            {//获取群组成员列表
                                var dArr = System.Text.Encoding.UTF8.GetString(dbContactChatRoom).Split(arrC, StringSplitOptions.RemoveEmptyEntries).ToList();
                                if (dArr.IsValid())
                                {
                                    string ConChatRoomMem   = dArr.FirstOrDefault(d => d.Contains(";"));
                                    string ConChatRoomOwner = "";
                                    if (dArr.IndexOf(ConChatRoomMem) + 1 < dArr.Count)
                                    {//群组的创建者在群组成员后面
                                        ConChatRoomOwner = dArr[dArr.IndexOf(ConChatRoomMem) + 1];
                                    }

                                    if (0 == dArr.IndexOf(ConChatRoomMem))
                                    {//如果成员的索引是0,前面会多出一个随机的字符
                                        ConChatRoomMem = ConChatRoomMem.Substring(1);
                                    }

                                    dy.Set("ConChatRoomMem", ConChatRoomMem);
                                    dy.Set("ConChatRoomOwner", ConChatRoomOwner);
                                }
                            }

                            if (DynamicConvert.ToSafeString(fd.userName).Contains("@chatroom"))
                            {
                                LsAllGroupFriends.Add(CreateWeChatGroupShow(dy));
                            }
                            else
                            {
                                friendInfo = new WeChatFriendShow();
                                CreateWeChatFriendShow(dy, ref friendInfo);

                                LsAllFriends.Add(friendInfo);
                            }
                        }
                    });
                }
            }

            #endregion
        }