/// <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);
            }
        }
Exemplo n.º 3
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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;
            }
        }
Exemplo n.º 6
0
        /// <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;
            }
        }
Exemplo n.º 7
0
        /// <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);
            }
        }
Exemplo n.º 10
0
        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);
                }
            }
        }
Exemplo n.º 12
0
        /// <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();
            }
        }
Exemplo n.º 13
0
        /// <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);
            }
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        /// <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);
            }
        }
Exemplo n.º 16
0
        /// <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);
                    }
                }
            }
        }