-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmodels.py
More file actions
116 lines (100 loc) · 3.26 KB
/
Copy pathmodels.py
File metadata and controls
116 lines (100 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime
@dataclass(frozen=True)
class MediaAttachment:
"""Serializable descriptor for a media file associated with a message."""
raw_path: str
url: str
mime_type: str
kind: str
file_name: str
available: bool
def to_dict(self) -> dict[str, str | bool]:
"""Convert media attachment data into JSON-ready dict form."""
return {
"raw_path": self.raw_path,
"url": self.url,
"mime_type": self.mime_type,
"kind": self.kind,
"file_name": self.file_name,
"available": self.available,
}
@dataclass(frozen=True)
class ChatSummary:
"""Sidebar chat list item loaded from `ZWACHATSESSION`."""
chat_id: int
chat_name: str
contact_jid: str
unread_count: int
last_message_date: datetime | None
last_message_text: str
is_group: bool
is_archived: bool
is_pinned: bool
avatar_path: str | None
def to_dict(self) -> dict[str, str | int | bool | None]:
"""Convert chat summary into JSON-ready dict form."""
return {
"chat_id": self.chat_id,
"chat_name": self.chat_name,
"contact_jid": self.contact_jid,
"unread_count": self.unread_count,
"last_message_date": self.last_message_date.isoformat() if self.last_message_date else None,
"last_message_text": self.last_message_text,
"is_group": self.is_group,
"is_archived": self.is_archived,
"is_pinned": self.is_pinned,
"avatar_path": self.avatar_path,
}
@dataclass(frozen=True)
class MessageSearchResult:
"""Sidebar search item for one matching message."""
chat_id: int
chat_name: str
contact_jid: str
message_id: int
message_date: datetime | None
snippet: str
sender_name: str
is_group: bool
def to_dict(self) -> dict[str, str | int | bool | None]:
"""Convert search result into JSON-ready dict form."""
return {
"chat_id": self.chat_id,
"chat_name": self.chat_name,
"contact_jid": self.contact_jid,
"message_id": self.message_id,
"message_date": self.message_date.isoformat() if self.message_date else None,
"snippet": self.snippet,
"sender_name": self.sender_name,
"is_group": self.is_group,
}
@dataclass(frozen=True)
class MessageItem:
"""Message row loaded from `ZWAMESSAGE` and related tables."""
message_id: int
chat_id: int
message_date: datetime | None
is_from_me: bool
message_type: int
message_status: int
text: str
sender_name: str
sender_jid: str | None
media_path: str | None
media_hd_path: str | None
media_file_size: int | None
vcard_name: str | None
vcard_value: str | None
parent_message_id: int | None
parent_message_type: int | None
parent_message_status: int | None
parent_is_from_me: bool | None
parent_text: str | None
parent_sender_name: str | None
parent_sender_jid: str | None
parent_media_path: str | None
parent_vcard_name: str | None
parent_vcard_value: str | None
media_metadata: bytes | None