feat: read receipts

This commit is contained in:
timokoesters 2020-04-11 20:03:22 +02:00
parent ab8c2f1e5e
commit 3b9cadeec2
No known key found for this signature in database
GPG key ID: 24DA7517711A2BA4
4 changed files with 195 additions and 21 deletions

View file

@ -57,18 +57,23 @@ pub struct Database {
pub userid_avatarurl: sled::Tree,
pub deviceid_token: sled::Tree,
pub token_userid: sled::Tree,
pub pduid_pdu: sled::Tree, // PduId = RoomId + Since
pub pduid_pdu: sled::Tree, // PduId = 'd' + RoomId + Since (global since counter is at 'n')
pub eventid_pduid: sled::Tree,
pub roomid_pduleaves: MultiValue,
pub roomid_userids: MultiValue,
pub userid_roomids: MultiValue,
// EDUs:
pub roomlatestid_roomlatest: sled::Tree, // Read Receipts, RoomLatestId = RoomId + Since + UserId TODO: Types
pub timeofremoval_roomrelevants: MultiValue, // Typing
pub globalallid_globalall: sled::Tree, // ToDevice, GlobalAllId = UserId + Since
pub globallatestid_globallatest: sled::Tree, // Presence, GlobalLatestId = Since + Type + UserId
_db: sled::Db,
}
impl Database {
/// Tries to remove the old database but ignores all errors.
pub fn try_remove(hostname: &str) {
let mut path = ProjectDirs::from("xyz", "koesters", "matrixserver")
let mut path = ProjectDirs::from("xyz", "koesters", "conduit")
.unwrap()
.data_dir()
.to_path_buf();
@ -78,7 +83,7 @@ impl Database {
/// Load an existing database or create a new one.
pub fn load_or_create(hostname: &str) -> Self {
let mut path = ProjectDirs::from("xyz", "koesters", "matrixserver")
let mut path = ProjectDirs::from("xyz", "koesters", "conduit")
.unwrap()
.data_dir()
.to_path_buf();
@ -97,6 +102,12 @@ impl Database {
roomid_pduleaves: MultiValue(db.open_tree("roomid_pduleaves").unwrap()),
roomid_userids: MultiValue(db.open_tree("roomid_userids").unwrap()),
userid_roomids: MultiValue(db.open_tree("userid_roomids").unwrap()),
roomlatestid_roomlatest: db.open_tree("roomlatestid_roomlatest").unwrap(),
timeofremoval_roomrelevants: MultiValue(
db.open_tree("timeofremoval_roomrelevants").unwrap(),
),
globalallid_globalall: db.open_tree("globalallid_globalall").unwrap(),
globallatestid_globallatest: db.open_tree("globallatestid_globallatest").unwrap(),
_db: db,
}
}
@ -118,7 +129,7 @@ impl Database {
String::from_utf8_lossy(&v),
);
}
println!("# UserId -> Displayname:");
println!("\n# UserId -> Displayname:");
for (k, v) in self.userid_displayname.iter().map(|r| r.unwrap()) {
println!(
"{:?} -> {:?}",
@ -126,7 +137,7 @@ impl Database {
String::from_utf8_lossy(&v),
);
}
println!("# UserId -> AvatarURL:");
println!("\n# UserId -> AvatarURL:");
for (k, v) in self.userid_avatarurl.iter().map(|r| r.unwrap()) {
println!(
"{:?} -> {:?}",
@ -190,5 +201,41 @@ impl Database {
String::from_utf8_lossy(&v),
);
}
println!("\n# RoomLatestId -> RoomLatest");
for (k, v) in self.roomlatestid_roomlatest.iter().map(|r| r.unwrap()) {
println!(
"{:?} -> {:?}",
String::from_utf8_lossy(&k),
String::from_utf8_lossy(&v),
);
}
println!("\n# TimeOfRemoval -> RoomRelevants Id:");
for (k, v) in self
.timeofremoval_roomrelevants
.iter_all()
.map(|r| r.unwrap())
{
println!(
"{:?} -> {:?}",
String::from_utf8_lossy(&k),
String::from_utf8_lossy(&v),
);
}
println!("\n# GlobalAllId -> GlobalAll:");
for (k, v) in self.globalallid_globalall.iter().map(|r| r.unwrap()) {
println!(
"{:?} -> {:?}",
String::from_utf8_lossy(&k),
String::from_utf8_lossy(&v),
);
}
println!("\n# GlobalLatestId -> GlobalLatest:");
for (k, v) in self.globallatestid_globallatest.iter().map(|r| r.unwrap()) {
println!(
"{:?} -> {:?}",
String::from_utf8_lossy(&k),
String::from_utf8_lossy(&v),
);
}
}
}