private void lsb1_SelectionChanged(object sender, SelectionChangedEventArgs e) { WeChatFriendShow accout = lsb1.SelectedValue as WeChatFriendShow; TreeNode nodes = lsb1.DataContext as TreeNode; if (accout == null || nodes == null) { return; } var selNode = nodes.TreeNodes.FirstOrDefault(t => t.Text == accout.Nick); var views = DataViewPluginAdapter.Instance.GetView("微信", selNode.Type); tbdetail.Items.Clear(); foreach (var v in views) { v.SelectedDataChanged += OnSelectedDataChanged; TabItem ti = new TabItem() { Header = v.PluginInfo.Name }; ti.Content = v.GetControl(new DataViewPluginArgument() { CurrentNode = selNode }); tbdetail.Items.Add(ti); } OnSelectedDataChanged?.Invoke(lsb1.SelectedValue); }
/// <summary> /// 选择了某个联系人,在右侧显示对话 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lsb1_SelectionChanged(object sender, SelectionChangedEventArgs e) { DataViewPluginArgument arg = lsb1.DataContext as DataViewPluginArgument; if (arg == null) { return; } WeChatFriendShow accout = lsb1.SelectedItem as WeChatFriendShow; TreeNode nodes = arg.CurrentData as TreeNode; if (accout == null || nodes == null) { return; } var selNode = nodes.TreeNodes.FirstOrDefault(t => t.Text == accout.Nick); //获取选择的好友 var views = DataViewPluginAdapter.Instance.GetView(arg.DataSource.PluginInfo.Guid, selNode.Type, new DataViewConfigure() { IsDefaultGridViewVisibleWhenMultiviews = true }); tbdetail.Items.Clear(); foreach (var v in views) //生成消息列表显示视图列表 { v.SelectedDataChanged += OnSelectedDataChanged; tbdetail.Items.Add(v.ToControl(new DataViewPluginArgument() { CurrentData = selNode, DataSource = arg.DataSource })); } tbdetail.SelectedIndex = tbdetail.HasItems ? 0 : -1; OnSelectedDataChanged?.Invoke(lsb1.SelectedValue); }
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { WeChatFriendShow accout = values[0] as WeChatFriendShow; TreeNode nodes = values[1] as TreeNode; if (accout == null || nodes == null) { return(null); } return(nodes.TreeNodes.FirstOrDefault(t => t.Text == accout.Nick)); }
private void GetFriendInfo(string xmlText, ref WeChatFriendShow friendInfo) { if (xmlText.IsInvalid()) { return; } var xml = new XmlDocument(); try { xml.LoadXml("<Root>" + xmlText + "</Root>"); } catch { return; } friendInfo.HeadUrl = GetXmlNodeValueByKey(xml, "HeadImgHDUrl"); //friendInfo.WeiBoAddr = string.Format("{0}({1})", GetXmlNodeValueByKey(xml, "weibonickname"), GetXmlNodeValueByKey(xml, "weiboaddress")); friendInfo.Address = string.Format("{0}-{1}-{2}", GetXmlNodeValueByKey(xml, "country"), GetXmlNodeValueByKey(xml, "province"), GetXmlNodeValueByKey(xml, "city")); //friendInfo.QQ = GetXmlNodeValueByKey(xml, "qquin"); //friendInfo.QQNick = GetXmlNodeValueByKey(xml, "qqnickname"); }
/// <summary> /// 构建好友信息 /// </summary> /// <param name="data"></param> /// <param name="friendInfo"></param> private void CreateWeChatFriendShow(dynamic data, ref WeChatFriendShow friendInfo) { friendInfo.DataState = DynamicConvert.ToEnumByValue <EnumDataState>(data.XLY_DataType, EnumDataState.Normal); friendInfo.WeChatId = DynamicConvert.ToSafeString(data.UsrName); friendInfo.WeChatAccout = DynamicConvert.ToSafeString(data.Alias); friendInfo.Nick = DynamicConvert.ToSafeString(data.NickName); friendInfo.Email = DynamicConvert.ToSafeString(data.Email); friendInfo.Mobile = DynamicConvert.ToSafeString(data.Mobile); friendInfo.Remark = DynamicConvert.ToSafeString(data.ConRemark); friendInfo.Signature = DynamicConvert.ToSafeString(data.Signature); if (DynamicConvert.ToSafeString(data.Sex) == "1") { friendInfo.Gender = EnumSex.Male; } else { friendInfo.Gender = EnumSex.Female; } friendInfo.FriendType = GetFriendType(friendInfo.WeChatId, DynamicConvert.ToSafeString(data.certificationFlag), DynamicConvert.ToSafeString(data.imgStatus), DynamicConvert.ToSafeString(data.type)); GetFriendInfo(DynamicConvert.ToSafeString(data.ConStrRes2), ref friendInfo); if (friendInfo.Remark.IsInvalid()) { friendInfo.Remark = DynamicConvert.ToSafeString(data.RemarkName); } if (friendInfo.Address.IsInvalid()) { friendInfo.Address = string.Format("{0}-{1}-{2}", DynamicConvert.ToSafeString(data.Country), DynamicConvert.ToSafeString(data.Province), DynamicConvert.ToSafeString(data.City)); } friendInfo.HeadPng = GetHeadImage(friendInfo.WeChatId); }
/// <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 }