Skip to content

Commit 0917bb3

Browse files
committed
db.d: add del_user_tickers() method
1 parent 4c0dc0c commit 0917bb3

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

src/db.d

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,25 @@ final class Database
10141014
return true;
10151015
}
10161016

1017+
void del_user_tickers(RoomType type)(string username)
1018+
{
1019+
auto sql = text(
1020+
"DELETE FROM ", tickers_table,
1021+
" WHERE username = ? AND room IN (",
1022+
" SELECT r.room FROM ", rooms_table, " r",
1023+
" WHERE r.room = ", tickers_table, ".room"
1024+
);
1025+
auto parameters = [username];
1026+
1027+
if (type != RoomType.any) {
1028+
sql ~= " AND r.type = ?";
1029+
parameters ~= [text(cast(int) type)];
1030+
}
1031+
sql ~= ");";
1032+
1033+
query(sql, parameters);
1034+
}
1035+
10171036
string del_oldest_ticker(string room_name)
10181037
{
10191038
enum sql = text(

src/server/server.d

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -444,14 +444,13 @@ final class Server
444444

445445
void del_user_tickers(RoomType type)(string username)
446446
{
447-
// Joined rooms
447+
db.del_user_tickers!type(username);
448+
449+
// Send ticker removal messages in joined rooms
450+
enum permanent = false;
448451
foreach (ref room ; rooms)
449452
if (type == RoomType.any || room.type == type)
450-
room.del_ticker(username);
451-
452-
// Stored rooms
453-
foreach (ref ticker ; db.user_tickers!type(username))
454-
db.del_ticker(ticker.room_name, username);
453+
room.del_ticker(username, permanent);
455454
}
456455

457456
Room get_room(string room_name)

0 commit comments

Comments
 (0)