/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } using (var context = new SqliteContext(MainDbPath)) { var dataList = context.Find("SELECT duration,duration_type,type,number,name,date from calls ORDER BY _id"); foreach (var calllogdata in dataList) { Call callTemp = new Call(); callTemp.DataState = EnumDataState.Normal; callTemp.DurationSecond = DynamicConvert.ToSafeInt(calllogdata.duration); callTemp.Number = DynamicConvert.ToSafeString(calllogdata.number); callTemp.Name = DynamicConvert.ToSafeString(calllogdata.name); callTemp.StartDate = new DateTime(1970, 1, 1).AddSeconds(DynamicConvert.ToSafeLong(calllogdata.date) / 1000).AddHours(8); switch ((int)DynamicConvert.ToSafeInt(calllogdata.type)) { case 2: callTemp.Type = 0 == callTemp.DurationSecond ? EnumCallType.MissedCallOut : EnumCallType.CallOut; break; default: callTemp.Type = 0 == callTemp.DurationSecond ? EnumCallType.MissedCallIn : EnumCallType.CallIn; break; } datasource.Items.Add(callTemp); } } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } var list = JArray.Parse(System.IO.File.ReadAllText(MainDbPath)); foreach (JObject call in list) { var item = new Call(); item.DataState = EnumDataState.Normal; item.Number = call["number"].ToSafeString(); // 号码过滤,验证号码长度 if (!DataParseHelper.ValidateNumber(item.Number)) { continue; } item.Name = call["name"].ToSafeString(); int duration = 0, type = 0; long date = 0; int.TryParse(call["duration"].ToSafeString(), out duration); int.TryParse(call["type"].ToSafeString(), out type); long.TryParse(call["date"].ToSafeString(), out date); item.DurationSecond = duration; switch (type) { case 1: item.Type = 0 == duration ? EnumCallType.MissedCallIn : EnumCallType.CallIn; break; case 2: item.Type = 0 == duration ? EnumCallType.MissedCallOut : EnumCallType.CallOut; break; case 3: item.Type = EnumCallType.MissedCallIn; item.DurationSecond = 0; break; default: item.Type = EnumCallType.None; break; } item.StartDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(date / 1000).AddHours(8); datasource.Items.Add(item); } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { List <Call> list = new List <Call>(); list.AddRange(GetFromLog()); list.AddRange(GetFromDefault()); foreach (var item in list) { datasource.Items.Add(item); } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } XmlDocument doc = new XmlDocument(); doc.Load(MainDbPath); foreach (XmlNode node in doc.SelectSingleNode("calls_parent").SelectNodes("calls_child")) { Call callTmp = new Call(); callTmp.DataState = EnumDataState.Normal; callTmp.Number = GetXmlNodeAttributeValue(node, "number"); callTmp.Name = GetXmlNodeAttributeValue(node, "name"); callTmp.DurationSecond = int.Parse(GetXmlNodeAttributeValue(node, "duration")); string date = GetXmlNodeAttributeValue(node, "date"); callTmp.StartDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(UInt64.Parse(date) / 1000).AddHours(8); switch (GetXmlNodeAttributeValue(node, "type")) { case "1": //呼入 callTmp.Type = EnumCallType.CallIn; break; case "2": //呼出 if (callTmp.DurationSecond == 0) { callTmp.Type = EnumCallType.MissedCallOut; } else { callTmp.Type = EnumCallType.CallOut; } break; case "3": //未接 callTmp.Type = EnumCallType.MissedCallIn; break; default: callTmp.Type = EnumCallType.None; break; } datasource.Items.Add(callTmp); } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { SqliteContext mainContext = null; SqliteContext callsContext = null; try { List <dynamic> list = new List <dynamic>(); if (FileHelper.IsValid(MainDbPath)) { var rMainDbFile = SqliteRecoveryHelper.DataRecovery(MainDbPath, @"chalib\com.android.providers.contacts\contacts2.db.charactor", "calls", true); mainContext = new SqliteContext(rMainDbFile); var ls = mainContext.Find("SELECT * FROM calls"); if (ls.IsValid()) { list.AddRange(ls); } } if (FileHelper.IsValid(CallsDbPath)) { var rMainDbFile = SqliteRecoveryHelper.DataRecovery(CallsDbPath, @"chalib\com.android.providers.contacts\contacts2.db.charactor", "calls", true); callsContext = new SqliteContext(rMainDbFile); var ls = callsContext.Find("SELECT * FROM calls"); if (ls.IsValid()) { list.AddRange(ls); } } var items = new List <Call>(); TryParseCall(items, list); foreach (var item in items) { datasource.Items.Add(item); } } finally { mainContext?.Dispose(); callsContext?.Dispose(); mainContext = null; callsContext = null; } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } SqliteContext mainContext = null; try { //主数据库对象 var mainDbPath = SqliteRecoveryHelper.DataRecovery(MainDbPath, @"chalib\IOS_Call\call_history.db.charactor", "call", true); mainContext = new SqliteContext(mainDbPath); mainContext.UsingSafeConnection("SELECT * FROM call", r => { Call call; dynamic callObj; while (r.Read()) { callObj = r.ToDynamic(); call = new Call(); call.DataState = DynamicConvert.ToEnumByValue(callObj.XLY_DataType, EnumDataState.Normal); call.Number = DataParseHelper.NumberToStu(DynamicConvert.ToSafeString(callObj.address)); // 号码过滤,验证号码长度 if (!DataParseHelper.ValidateNumber(call.Number)) { continue; } call.DurationSecond = DynamicConvert.ToSafeInt(callObj.duration); call.StartDate = DynamicConvert.ToSafeDateTime(callObj.date); call.Type = GetCallStatus(DynamicConvert.ToSafeInt(callObj.flags), call.DurationSecond); datasource.Items.Add(call); } }); } finally { mainContext?.Dispose(); mainContext = null; } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } var names = GetNumberName(ContactDbPath); DataContractJsonSerializer dcJs = new DataContractJsonSerializer(typeof(List <VivoSMSModel>)); using (FileStream fs = new FileStream(MainDbPath, FileMode.Open)) { var readDatas = dcJs.ReadObject(fs) as List <VivoSMSModel>; foreach (var item in readDatas) { if (ValidateEntityItem(item)) { SMS tmpSMS = new SMS(); tmpSMS.DataState = EnumDataState.Normal; tmpSMS.Number = item.address; tmpSMS.SmsState = int.Parse(item.type) == 1 ? EnumSMSState.ReceiveSMS : EnumSMSState.SendSMS; if (names.Keys.Contains(tmpSMS.Number)) { tmpSMS.ContactName = names[tmpSMS.Number]; } else if (names.Keys.Contains(tmpSMS.Number.TrimStart("+86"))) { tmpSMS.ContactName = names[tmpSMS.Number.TrimStart("+86")]; } else if (names.Keys.Contains("+86" + tmpSMS.Number)) { tmpSMS.ContactName = names["+86" + tmpSMS.Number]; } double dateTmp = double.Parse(item.date) / 1000; tmpSMS.StartDate = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1).AddSeconds(dateTmp)); tmpSMS.ReadState = int.Parse(item.status) == -1 ? EnumReadState.Read : EnumReadState.Unread; tmpSMS.Content = item.body; datasource.Items.Add(tmpSMS); } } } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } SqliteContext context = null; SqliteContext contactcontext = null; try { context = new SqliteContext(MainDbPath); if (FileHelper.IsValid(ContactDbPath)) { contactcontext = new SqliteContext(ContactDbPath); } var calllogList = context.Find(new SQLiteString("SELECT number,date,duration,type,ring_times FROM calls_tb")); foreach (var calllogdata in calllogList) { Call callTmp = new Call(); callTmp.Number = DynamicConvert.ToSafeString(calllogdata.number); callTmp.Name = FindName(contactcontext, callTmp.Number); callTmp.Type = ConvertToEnumCallType(DynamicConvert.ToSafeString(calllogdata.type), DynamicConvert.ToSafeString(calllogdata.duration)); callTmp.DataState = EnumDataState.Normal; callTmp.StartDate = new DateTime(1970, 1, 1).AddSeconds(DynamicConvert.ToSafeLong(calllogdata.date) / 1000).AddHours(8); callTmp.DurationSecond = DynamicConvert.ToSafeInt(calllogdata.duration); datasource.Items.Add(callTmp); } } catch { } finally { context?.Dispose(); contactcontext?.Dispose(); context = null; contactcontext = null; } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } string allText = System.IO.File.ReadAllText(MainDbPath); var arrData = allText.Split(new string[] { "BEGIN:CALLLOG", "END:CALLLOG" }, StringSplitOptions.RemoveEmptyEntries); foreach (var d in arrData) { var datas = d.Trim('\r', '\n').Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); if (datas.IsInvalid()) { continue; } Call call = new Call(); call.DataState = EnumDataState.Normal; call.Number = datas.FirstOrDefault(s => s.StartsWith("X-NUMBER:")).TrimStart("X-NUMBER:"); call.DurationSecond = int.Parse(datas.FirstOrDefault(s => s.StartsWith("X-DURATION:")).TrimStart("X-DURATION:")); call.StartDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(UInt64.Parse(datas.FirstOrDefault(s => s.StartsWith("X-DATE:")).TrimStart("X-DATE:")) / 1000).AddHours(8); switch (datas.FirstOrDefault(s => s.StartsWith("X-TYPE:")).TrimStart("X-TYPE:")) { case "1": call.Type = call.DurationSecond > 0 ? EnumCallType.CallIn : EnumCallType.MissedCallIn; break; case "2": call.Type = call.DurationSecond > 0 ? EnumCallType.CallOut : EnumCallType.MissedCallOut; break; case "3": call.Type = EnumCallType.MissedCallIn; break; } datasource.Items.Add(call); } }
public override object Execute(object arg, IAsyncTaskProgress progress) { CallDataSource ds = null; try { var pi = PluginInfo as DataParsePluginInfo; ds = new CallDataSource(pi.SaveDbPath); var dbPath = pi.SourcePath[0].Local; var dbFile = Path.Combine(dbPath, "CallHistory.storedata"); if (!FileHelper.IsValidDictory(dbPath) || !FileHelper.IsValid(dbFile)) { if (FileHelper.IsValidDictory(pi.SourcePath[2].Local)) { var db1File = Path.Combine(pi.SourcePath[2].Local, "call_history.db"); if (!FileHelper.IsValid(db1File)) { var paser = new IOSCallDataParseCoreV1_0(db1File); paser.BuildData(ds); } } } else { var paser = new IOSCallDataParseCoreV2_0(dbFile, Path.Combine(pi.SourcePath[1].Local, "AddressBook.sqlitedb")); paser.BuildData(ds); } } catch (Exception ex) { LoggerManagerSingle.Instance.Error("提取IOS通话记录数据出错!", ex); } finally { ds?.BuildParent(); } return(ds); }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (FileHelper.IsValid(MainDbPath)) { var list = FileParse(MainDbPath); foreach (var item in list) { datasource.Items.Add(item); } } if (FileHelper.IsValid(ContactDbPath)) { var list = FileParse(ContactDbPath); foreach (var item in list) { datasource.Items.Add(item); } } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } XmlSerializer xml = new XmlSerializer(typeof(CallLog)); using (FileStream fs = File.OpenRead(DealXml(MainDbPath))) { var lstCallDatas = xml.Deserialize(fs) as CallLog; foreach (var item in lstCallDatas.listDatas) { int typeTmp; long dateTmp; int durationTmp; // 号码过滤,验证号码长度 if (!DataParseHelper.ValidateNumber(item.number)) { continue; } if (int.TryParse(item.type, out typeTmp) && long.TryParse(item.date, out dateTmp) && int.TryParse(item.duration, out durationTmp)) { Call callTmp = new Call(); callTmp.Number = item.number; callTmp.Name = item.name; callTmp.Type = ConvertToEnumCallType(typeTmp, durationTmp > 0); callTmp.DataState = EnumDataState.Normal; callTmp.StartDate = new DateTime(1970, 1, 1).AddSeconds(dateTmp / 1000).AddHours(8); callTmp.DurationSecond = durationTmp; datasource.Items.Add(callTmp); } } fs.Close(); } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } var lstDatas = File.ReadLines(MainDbPath); SMS smsTmp = new SMS(); foreach (var item in lstDatas) { if (item.Equals("END:VMSG")) { datasource.Items.Add(smsTmp); smsTmp = new SMS(); smsTmp.DataState = EnumDataState.Normal; } CreateSMS(item, ref smsTmp); } }
public override object Execute(object arg, IAsyncTaskProgress progress) { CallDataSource ds = null; try { var pi = PluginInfo as DataParsePluginInfo; ds = new CallDataSource(pi.SaveDbPath); var contactsPath = pi.SourcePath[0].Local; if (!FileHelper.IsValidDictory(contactsPath)) { return(ds); } var contacts2dbFile = Path.Combine(contactsPath, "contacts2.db"); if (!FileHelper.IsValid(contacts2dbFile)) { return(ds); } var paser = new AndroidCallDataParseCoreV1_0(contacts2dbFile, null); paser.BuildData(ds); } catch (System.Exception ex) { Framework.Log4NetService.LoggerManagerSingle.Instance.Error("提取安卓通话记录数据出错!", ex); } finally { ds?.BuildParent(); } return(ds); }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } string allText = System.IO.File.ReadAllText(MainDbPath); var arrData = allText.Split(new string[] { "BEGIN:VMSG", "END:VMSG" }, StringSplitOptions.RemoveEmptyEntries); foreach (var d in arrData) { var datas = d.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); if (datas.IsInvalid()) { continue; } SMS sms = new SMS(); sms.DataState = EnumDataState.Normal; //号码 string temp = datas.FirstOrDefault(s => s.StartsWith("TEL:")); if (temp.IsValid() && Regex.IsMatch(temp, @"\+{0,1}\d+")) { sms.Number = Regex.Match(temp, @"\+{0,1}\d+").Value; } //类型 temp = datas.FirstOrDefault(s => s.StartsWith("RECEVIE_Date:")); if (temp.Contains("Thursday, January 1, 1970 8:00:00 AM")) {//自己发送的短信,接收时间永远是这个值 sms.SmsState = EnumSMSState.SendSMS; } else { sms.SmsState = EnumSMSState.ReceiveSMS; } //时间和内容 int beginBody = datas.IndexOf("BEGIN:VBODY"); int endBody = datas.IndexOf("END:VBODY"); if (endBody - beginBody < 2) {//至少2行,第一行是发送时间,第二行开始是消息内容 continue; } sms.StartDate = GetDateTime(datas[beginBody + 1].TrimStart("Date:")); sms.Content = string.Join("\r\n", datas.Skip(beginBody + 2).Take(endBody - beginBody - 2)); //是否已读 temp = datas.FirstOrDefault(s => s.StartsWith("CP_READ:")); if (temp == "CP_READ:0") { sms.ReadState = EnumReadState.Unread; } else { sms.ReadState = EnumReadState.Read; } datasource.Items.Add(sms); } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } SqliteContext mainContext = null; try { //主数据库对象 var mainDbPath = SqliteRecoveryHelper.DataRecovery(MainDbPath, "", "ZCALLRECORD", true); mainContext = new SqliteContext(mainDbPath); IEnumerable <dynamic> addressDynamicList = null; if (FileHelper.IsValid(AddrDbPath)) { var addressDbPath = SqliteRecoveryHelper.DataRecovery(AddrDbPath, @"chalib\IOS_Contact\AddressBook.sqlitedb.charactor", "ABMultiValue,ABPerson", true); SqliteContext addrContext = new SqliteContext(addressDbPath); addressDynamicList = addrContext.Find("select p.[value],p.[record_id],v.[Last],v.[ROWID] from ABMultiValue p left join ABPerson v on p.[record_id]=v.[ROWID] where p.[property]=3"); addrContext.Dispose(); addrContext = null; } mainContext.UsingSafeConnection("select XLY_DataType,ZDURATION,Z_OPT,ZDURATION,ZORIGINATED,cast(ZADDRESS as varchar) as number, cast(ZDATE as DATETIME) as phonetime from ZCALLRECORD", r => { Call call; dynamic callObj; while (r.Read()) { callObj = r.ToDynamic(); call = new Call(); call.Number = DataParseHelper.NumberToStu(DynamicConvert.ToSafeString(callObj.number)); // 号码过滤,验证号码长度 if (!DataParseHelper.ValidateNumber(call.Number)) { continue; } if (addressDynamicList.IsValid()) { var addressname = addressDynamicList.FirstOrDefault(o => DynamicConvert.ToSafeString(o.value).Replace("-", "").Equals(callObj.number)); if (addressname != null) { call.Name = FragmentHelper.RemoveNullityDataNew(DynamicConvert.ToSafeString(addressname.Last)); } } call.DataState = DynamicConvert.ToEnumByValue(callObj.XLY_DataType, EnumDataState.Normal); call.DurationSecond = DynamicConvert.ToSafeInt(callObj.ZDURATION); string time = DynamicConvert.ToSafeString(callObj.phonetime).Insert(0, "1"); double opertime = time.ToDouble() - 21692848; call.StartDate = DynamicConvert.ToSafeDateTime(opertime); call.Type = GetCallV10Status(DynamicConvert.ToSafeInt(callObj.ZORIGINATED), call.DurationSecond); datasource.Items.Add(call); } }); } finally { mainContext?.Dispose(); mainContext = null; } }
/// <summary> /// 解析数据 /// </summary> /// <param name="datasource"></param> public void BuildData(CallDataSource datasource) { if (!FileHelper.IsValid(MainDbPath)) { return; } using (var context = new SqliteContext(MainDbPath)) { using (var contactDb = new SqliteContext(ContactDbPath)) { var smsList = context.Find(new SQLiteString("SELECT address,date,body,type,read FROM sms_tb")); foreach (var smsData in smsList) { SMS smsTemp = new SMS(); smsTemp.Content = DynamicConvert.ToSafeString(smsData.body); smsTemp.Number = DynamicConvert.ToSafeString(smsData.address); smsTemp.Number = smsTemp.Number.TrimStart("+86"); smsTemp.ContactName = FindName(contactDb, smsTemp.Number); smsTemp.StartDate = new DateTime(1970, 1, 1).AddSeconds(DynamicConvert.ToSafeLong(smsData.date) / 1000).AddHours(8); string type = DynamicConvert.ToSafeString(smsData.type); switch (type) { case "1": smsTemp.SmsState = EnumSMSState.ReceiveSMS; string read = DynamicConvert.ToSafeString(smsData.read); switch (read) { case "1": smsTemp.ReadState = EnumReadState.Read; //smsTemp.SmsReadState = LanguageHelper.Get("LANGKEY_YiDu_01076"); break; case "0": smsTemp.ReadState = EnumReadState.Unread; //smsTemp.SmsReadState = LanguageHelper.Get("LANGKEY_WeiDu_01077"); break; } break; case "2": smsTemp.SmsState = EnumSMSState.SendSMS; break; case "3": smsTemp.SmsState = EnumSMSState.DraftSMS; break; case "5": smsTemp.SmsState = EnumSMSState.SendSMS; break; default: smsTemp.SmsState = EnumSMSState.None; break; } smsTemp.DataState = EnumDataState.Normal; datasource.Items.Add(smsTemp); } var smsListA = context.Find(new SQLiteString("SELECT send_msg_status,msg_content,msg_date,address FROM table_broadcastchat_tb")); foreach (var smsData in smsListA) { SMS smsTemp = new SMS(); smsTemp.Content = DynamicConvert.ToSafeString(smsData.msg_content); smsTemp.Number = DynamicConvert.ToSafeString(smsData.address); smsTemp.Number = smsTemp.Number.TrimStart("+86"); smsTemp.ContactName = FindName(contactDb, smsTemp.Number); smsTemp.StartDate = new DateTime(1970, 1, 1).AddSeconds(DynamicConvert.ToSafeLong(smsData.msg_date) / 1000).AddHours(8); string type = DynamicConvert.ToSafeString(smsData.send_msg_status); switch (type) { case "2": //群发 case "5": //群发 smsTemp.SmsState = EnumSMSState.SendSMS; break; case "3": //发送 smsTemp.SmsState = EnumSMSState.SendSMS; break; case "8": //草稿箱 smsTemp.SmsState = EnumSMSState.DraftSMS; break; default: smsTemp.SmsState = EnumSMSState.None; break; } smsTemp.DataState = EnumDataState.Normal; datasource.Items.Add(smsTemp); } } } }