2013-06-02 93 views
7

我一直在解析Skype數據庫main.db幾天,這是我還沒弄清楚的。當然,這個問題將是非常專門爲Skype main.db結構。(免責聲明)skype main.db - 聊天和對話之間的區別

看來,我所需要的必要的信息都在表ConversationsMessagesParticipants

Message表包含已經說過的實際日誌,收件人,時間戳和convo_id外鍵(儘管未強制執行)以連接到郵件所屬的Conversation

Conversation存在持有的Message的聚集和參與。

Participants表工作的許多一對多連接器表Conversations表和Contacts表之間的聯繫人。

我得到的是ChatsChatmembers表。 Chatmembers工作到Chats什麼Participants表工作到Conversations表;連接聯繫人和對話 - 或「聊天」。

Chats中的內容類似於Conversations,不同之處在於它沒有任何聚合到Message表。從Messages表映射到Chats表(消息日誌(Messages表的行)所屬的表)是不可能的。

ChatsConversations共享一個外鍵,Conversations表中有一個名爲chat_dbid列其加入到Chats表。但在Conversations表中存在的行有一個空的chat_dbid字段,並且Chats中的所有行都沒有id字段,該字段對應於Chats表中的chat_dbid字段。

Chats表格仍在更新中,我承認最近基於時間戳記和其中的成員進行的一些聊天或對話。

有誰知道Chats表的確切含義是什麼?或者說,Chats表和Conversations表有什麼區別和理由?

當我瘋狂地尋找這個時,我只能找到one like that talked about main.db structure,這不是很有幫助。

根據鏈路Chats

提供用戶在其中參與的聊天記錄。

Conversations

提供用戶在其中參與對話的列表。

他們關於聊天和對話的術語是什麼?他們有什麼不同?

這讓我瘋狂。

回答

4

昨天我也在通過skype的main.db表。以下是我的發現。

對話表格唯一標識與特定聯繫人(或您創建的組聯繫人)的對話。對話需要所有的通信:聊天消息,語音消息,文件傳輸,您對特定聯繫人進行的呼叫。大多數表格都引用了此表中的條目。 消息表convo__id, 交談表具有conv_dbid, 傳輸具有convo_id,同樣。

消息表:消息條目並不總是聊天。如果條目是聊天,則填充它的聊天名稱字段。 看來,聊天和消息有一對多的關係。聊天是按照某個標識符維護的消息的集合(很可能一天不確定)。 「type = 61」似乎是正常的消息:由用戶鍵入的消息。其他類型似乎是自動生成的消息例如。如果通話斷開,您會收到msg。

希望這會有所幫助。

2

它看起來像聊天是多餘的。消息被分組爲聊天后的聊天內容,您可以在一個對話內有幾個聊天內容,然後在聊天外部有一些消息。分組的規則還不清楚,可能是時間。

通過將一串消息的chatname字段設置爲相同的值來完成分組。聊天名稱看起來像#SenderId/$TargetId;ChatId#SenderId/ChatId,通過羣聊進行聊天。

ChatIds似乎沒有任何特定的含義,可以在不同的PC上有所不同。

不是每個聊天都會在聊天表中獲得一個條目:SELECT DISTINCT(chatname) FROM Messages給出的條目比SELECT * FROM Chats多得多。並非所有進入chatname的地方都是聊天中的聊天名稱。有時它是一個會話id(==羣聊ID或skypename)。

不同的Skype實例也將不同的同一組同步消息分組到Chats中。

所以基本上聊天並不重要,他們任意分組消息,他們不包含關於誰發送給誰的關鍵數據。

這就是我所理解的其它表的工作:

Contacts - 這是每個人,其Skypename,敲擊在數據庫中所提到的,即使你從來不知道的人(這表示什麼東西在羣聊你當時聽)。 is_permanent標記在您的聯繫人列表中。

Conversations - 這是您曾加入過的實際聯繫人和團體聊天的聯合。這就是人們應該看到的「聯繫人列表」。如果您需要聯繫人,您從未收到過消息,請添加Contacts WHERE is_permanent=1。如果你只想要目前的聯繫人,按is_bookmarked或類似的東西過濾。

似乎沒有重複和分裂。一個聯繫人=一個會話,一個羣聊=一個會話。如果您正在與一個聯繫人進行交談,並且您添加了另一個聯繫人,則以前的消息將保留在該聯繫人的對話中,而以下消息將獲得他們自己的對話。

Messages - 這是有史以來發送或接收的所有消息和事件:

  • convo_id - 始終設置,總是引用的對話。這是您如何識別郵件發送的聯繫人/羣聊。

  • chatname - 始終設置,有時會引用來自聊天室的聊天,有時是聊天中不在聊天中的聊天,有時是對話中的羣聊ID或Skype名稱。大多數情況下,這可以被忽略,或者您可以通過視覺將該消息分組。

  • author,from_name - 誰在當時發送了此消息和他們的暱稱,始終設置正確。

  • dialog_partner - 有時設置,有時不一樣,同樣具有dialog_partner - 同一條信息在不同的PC

  • participant_count非常不可靠的,不同的價值觀:不可靠的。

  • identities - 提到與事件相關的所有skypenames,有時沒有。規則不明確,不可靠。