Ejemplo n.º 1
0
        public Dialogue FindDialogue(long thread_id)
        {
            if (_TotalDialogueSet.IsContain(thread_id))
            {
                return(_TotalDialogueSet[thread_id]);
            }

            return(null);
        }
Ejemplo n.º 2
0
        //MMS DB 조회하여 address, thread_id만 수집한 목록을 반환함.
        private DialogueSet LoadMMSMetaDatas()
        {
            DialogueSet dialogueSet = new DialogueSet();

            ContentResolver cr  = Application.Context.ContentResolver;
            Uri             uri = Uri.Parse("content://mms/");

            string[] projection = new string[] { "DISTINCT thread_id", "_id", "ct_t" };
            string   selection  = "thread_id IS NOT NULL) GROUP BY (thread_id";
            ICursor  cursor     = cr.Query(uri, projection, selection, null, null);

            if (cursor != null)
            {
                if (cursor.Count > 0)
                {
                    while (cursor.MoveToNext())
                    {
                        string id        = cursor.GetString(cursor.GetColumnIndex("_id"));
                        string mmsType   = cursor.GetString(cursor.GetColumnIndex("ct_t"));
                        long   thread_id = cursor.GetLong(cursor.GetColumnIndexOrThrow("thread_id"));
                        if ("application/vnd.wap.multipart.related".Equals(mmsType) || "application/vnd.wap.multipart.mixed".Equals(mmsType))
                        {
                            //this is MMS
                            Dialogue objDialogue = new Dialogue();
                            objDialogue.Thread_id = thread_id;
                            objDialogue.Address   = GetAddress(id);

                            if (!dialogueSet.IsContain(thread_id))
                            {
                                dialogueSet.DialogueList.Add(thread_id, objDialogue);
                            }
                            else
                            {
                                System.Diagnostics.Debug.WriteLine("DEBUG : LoadMMSMetaDatas duplication thread_id");
                            }
                        }
                        else
                        {
                            //this is SMS
                            //throw new Exception("알 수 없는 MMS 유형");
                        }
                    }
                }
                cursor.Close();
            }
            return(dialogueSet);
        }
Ejemplo n.º 3
0
        //연락처에 없는 대화 중 수신 메시지만 메모리에 올린다. inboxType으로 송신/수신 메시지만 불러오는것도 가능.
        public void LoadUnknownMetaDatas()
        {
            //SMS, MMS 메타데이터(주소와 thread_id)만 수집
            DialogueSet smsMetaDatas = LoadSMSMetaDatas();
            DialogueSet mmsMetaDatas = LoadMMSMetaDatas();

            //mms메타데이터와 smsMetaData를 병합, sms메타데이터 리스트에 mms메타데이터를 넣는다.
            foreach (Dialogue objDialogue in mmsMetaDatas.DialogueList.Values)
            {
                //mms만 있는 경우 리스트에 추가
                if (!smsMetaDatas.IsContain(objDialogue.Thread_id))
                {
                    smsMetaDatas.DialogueList.Add(objDialogue.Thread_id, objDialogue);
                }
                //mms와 sms가 둘다 있는 경우 sms 리스트에 mms를 하나씩 추가함.
                else
                {
                    foreach (MultiMediaMessage mms in objDialogue.TextMessageList)
                    {
                        smsMetaDatas.DialogueList[objDialogue.Thread_id].Add(mms);
                    }
                }
            }

            //연락처에 없는 놈들만 찾는다.
            foreach (Dialogue objDialogue in smsMetaDatas.DialogueList.Values)
            {
                if (ContactDBManager.Get().GetContactDataByAddress(objDialogue.Address, false) == null)
                {
                    if (!_UnknownDialogueSet.IsContain(objDialogue.Thread_id))
                    {
                        _UnknownDialogueSet.DialogueList.Add(objDialogue.Thread_id, objDialogue);
                    }
                    else
                    {
                        _UnknownDialogueSet.DialogueList[objDialogue.Thread_id] = objDialogue;
                    }
                }
            }
        }
Ejemplo n.º 4
0
        //-------------------------------------------------------------
        //처음사용자용

        //SMS DB 조회하여 address, thread_id만 수집한 목록을 반환함.
        private DialogueSet LoadSMSMetaDatas()
        {
            DialogueSet dialogueSet = new DialogueSet();

            ContentResolver cr = Application.Context.ContentResolver;

            Uri uri = Uri.Parse("content://sms/");

            string[] projection = { "DISTINCT address", "thread_id" };
            string   selection  = "address IS NOT NULL) GROUP BY (address";
            ICursor  cursor     = cr.Query(uri, projection, selection, null, null);

            if (cursor != null)
            {
                if (cursor.Count > 0)
                {
                    while (cursor.MoveToNext())
                    {
                        string address   = cursor.GetString(cursor.GetColumnIndexOrThrow("address"));
                        long   thread_id = cursor.GetLong(cursor.GetColumnIndexOrThrow("thread_id"));

                        Dialogue objDialogue = new Dialogue();
                        objDialogue.Address   = address;
                        objDialogue.Thread_id = thread_id;

                        if (!dialogueSet.IsContain(thread_id))
                        {
                            dialogueSet.DialogueList.Add(thread_id, objDialogue);
                        }
                        else
                        {
                            System.Diagnostics.Debug.WriteLine("DEBUG : LoadSMSMetaDatas duplication thread_id");
                        }
                    }
                }
                cursor.Close();
            }
            return(dialogueSet);
        }