Skip to content

Commit 8152b3b

Browse files
committed
Add RoomTicker struct for representing tickers
It's nicer to work with than a 2D array.
1 parent 2e776cc commit 8152b3b

File tree

8 files changed

+100
-77
lines changed

8 files changed

+100
-77
lines changed

src/db.d

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ module soulfind.db;
88

99
import soulfind.defines : blue, default_max_users, default_motd, default_port,
1010
default_private_mode, log_db, log_user, norm,
11-
RoomMemberType, RoomType, SearchFilterType;
11+
RoomMemberType, RoomTicker, RoomType,
12+
SearchFilterType, UserStats;
1213
import std.array : Appender;
1314
import std.conv : ConvException, text, to;
1415
import std.datetime : Clock, days, Duration, SysTime, UTC;
@@ -79,17 +80,6 @@ enum tickers_table = "tickers";
7980
enum search_filters_table = "search_filters";
8081
enum search_query_table = "temp.search_query";
8182

82-
struct SdbUserStats
83-
{
84-
bool exists;
85-
uint upload_speed;
86-
uint shared_files;
87-
uint shared_folders;
88-
89-
bool updating_speed;
90-
bool updating_shared;
91-
}
92-
9383
final class SdbException : Exception
9484
{
9585
this(string msg, string file = __FILE__, size_t line = __LINE__) {
@@ -749,15 +739,15 @@ final class Sdb
749739
return SysTime.fromUnixTime(banned_until, UTC());
750740
}
751741

752-
SdbUserStats user_stats(string username)
742+
UserStats user_stats(string username)
753743
{
754744
enum sql = text(
755745
"SELECT speed,files,folders",
756746
" FROM ", users_table,
757747
" WHERE username = ?;"
758748
);
759749
const res = query(sql, [username]);
760-
auto user_stats = SdbUserStats();
750+
auto user_stats = UserStats();
761751

762752
if (res.length > 0) {
763753
const record = res[0];
@@ -775,7 +765,7 @@ final class Sdb
775765
return user_stats;
776766
}
777767

778-
void user_update_stats(string username, SdbUserStats stats)
768+
void user_update_stats(string username, UserStats stats)
779769
{
780770
Appender!(string[]) fields;
781771
Appender!(string[]) parameters;
@@ -1029,18 +1019,26 @@ final class Sdb
10291019
return username;
10301020
}
10311021

1032-
string[][] room_tickers(string room_name)
1022+
RoomTicker[] room_tickers(string room_name)
10331023
{
1024+
Appender!(RoomTicker[]) tickers;
10341025
enum sql = text(
10351026
"SELECT username, content FROM ", tickers_table,
10361027
" WHERE room = ?",
10371028
" ORDER BY rowid;"
10381029
);
1039-
return query(sql, [room_name]);
1030+
1031+
const res = query(sql, [room_name]);
1032+
foreach (ref record ; res) {
1033+
const username = record[0], content = record[1];
1034+
tickers ~= RoomTicker(room_name, username, content);
1035+
}
1036+
return tickers[];
10401037
}
10411038

1042-
string[][] user_tickers(RoomType type)(string username)
1039+
RoomTicker[] user_tickers(RoomType type)(string username)
10431040
{
1041+
Appender!(RoomTicker[]) tickers;
10441042
auto sql = text(
10451043
"SELECT t.room, t.content FROM ", tickers_table, " t",
10461044
" JOIN ", rooms_table, " r ON t.room = r.room",
@@ -1054,7 +1052,12 @@ final class Sdb
10541052
}
10551053
sql ~= " ORDER BY t.rowid;";
10561054

1057-
return query(sql, parameters);
1055+
const res = query(sql, parameters);
1056+
foreach (ref record ; res) {
1057+
const room_name = record[0], content = record[1];
1058+
tickers ~= RoomTicker(room_name, username, content);
1059+
}
1060+
return tickers[];
10581061
}
10591062

10601063
ulong num_room_tickers(string room_name)

src/defines.d

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,6 @@ import std.string : join, split;
1111

1212
// Constants
1313

14-
enum RoomType : int
15-
{
16-
any = -2,
17-
non_existent = -1,
18-
_public = 0,
19-
_private = 1
20-
}
21-
22-
enum RoomMemberType : int
23-
{
24-
any = -2,
25-
non_existent = -1,
26-
normal = 0,
27-
operator = 1
28-
}
29-
30-
enum SearchFilterType : uint
31-
{
32-
server = 0,
33-
client = 1
34-
}
35-
3614
enum VERSION = __DATE__.split.join("-");
3715
enum default_db_filename = "soulfind.db";
3816
enum default_port = 2242;
@@ -64,6 +42,52 @@ enum server_username = "server";
6442
enum exit_message = "A la prochaine...";
6543

6644

45+
// Types
46+
47+
enum RoomType : int
48+
{
49+
any = -2,
50+
non_existent = -1,
51+
_public = 0,
52+
_private = 1
53+
}
54+
55+
enum RoomMemberType : int
56+
{
57+
any = -2,
58+
non_existent = -1,
59+
normal = 0,
60+
operator = 1
61+
}
62+
63+
enum SearchFilterType : uint
64+
{
65+
server = 0,
66+
client = 1
67+
}
68+
69+
70+
// Structs
71+
72+
struct RoomTicker
73+
{
74+
string room_name;
75+
string username;
76+
string content;
77+
}
78+
79+
struct UserStats
80+
{
81+
bool exists;
82+
uint upload_speed;
83+
uint shared_files;
84+
uint shared_folders;
85+
86+
bool updating_speed;
87+
bool updating_shared;
88+
}
89+
90+
6791
// Terminal Colors
6892

6993
enum norm = "\033[0m"; // reset to normal

src/server/cmdhandler.d

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -446,9 +446,8 @@ final class CommandHandler
446446
output ~= text("\nTickers (", tickers.length, "):");
447447

448448
foreach (ref ticker ; tickers) {
449-
const username = ticker[0], content = ticker[1];
450-
output ~= text("\n [", username, "] ");
451-
output ~= content;
449+
output ~= text("\n [", ticker.username, "] ");
450+
output ~= ticker.content;
452451
}
453452

454453
return output[];
@@ -630,10 +629,10 @@ final class CommandHandler
630629
);
631630

632631
if (tickers.length > 0) {
633-
foreach (ticker ; tickers) {
634-
const room_name = ticker[0], content = ticker[1];
635-
output ~= text("\n [", room_name, "] ", content);
636-
}
632+
foreach (ticker ; tickers)
633+
output ~= text(
634+
"\n [", ticker.room_name, "] ", ticker.content
635+
);
637636
}
638637

639638
return output[];
@@ -712,10 +711,10 @@ final class CommandHandler
712711
if (tickers.length > 0) {
713712
auto first = true;
714713
foreach (ticker ; tickers) {
715-
const room_name = ticker[0], content = ticker[1];
716714
if (!first) output ~= ",";
717715
output ~= text(
718-
"\n \"", room_name, "\": \"", content, "\""
716+
"\n \"", ticker.room_name, "\": \"",
717+
ticker.content, "\""
719718
);
720719
first = false;
721720
}

src/server/messages.d

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
module soulfind.server.messages;
77
@safe:
88

9-
import soulfind.defines : blue, log_msg, norm;
9+
import soulfind.defines : blue, log_msg, norm, RoomTicker;
1010
import soulfind.server.user : User;
1111
import std.array : Appender;
1212
import std.bitmanip : Endian, nativeToLittleEndian, peek;
@@ -122,7 +122,7 @@ enum WishlistInterval = 104;
122122
enum SimilarUsers = 110;
123123
enum ItemRecommendations = 111;
124124
enum ItemSimilarUsers = 112;
125-
enum RoomTicker = 113;
125+
enum RoomTickers = 113;
126126
enum RoomTickerAdd = 114;
127127
enum RoomTickerRemove = 115;
128128
enum SetRoomTicker = 116;
@@ -1483,19 +1483,17 @@ final class SItemSimilarUsers : SMessage
14831483
}
14841484
}
14851485

1486-
final class SRoomTicker : SMessage
1486+
final class SRoomTickers : SMessage
14871487
{
1488-
this(string room_name, string[][] tickers) scope
1488+
this(string room_name, RoomTicker[] tickers) scope
14891489
{
1490-
super(RoomTicker);
1490+
super(RoomTickers);
14911491

14921492
write!string(room_name);
14931493
write!uint(cast(uint) tickers.length);
1494-
foreach (ref ticker ; tickers)
1495-
{
1496-
const username = ticker[0], content = ticker[1];
1497-
write!string(username);
1498-
write!string(content);
1494+
foreach (ref ticker ; tickers) {
1495+
write!string(ticker.username);
1496+
write!string(ticker.content);
14991497
}
15001498
}
15011499
}

src/server/room.d

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ module soulfind.server.room;
99
import soulfind.db : Sdb;
1010
import soulfind.defines : blue, log_msg, max_chat_message_length,
1111
max_room_ticker_length, max_room_tickers, norm,
12-
RoomType;
12+
RoomTicker, RoomType;
1313
import soulfind.server.conns : Logging;
1414
import soulfind.server.messages;
1515
import soulfind.server.user : User;
@@ -59,7 +59,7 @@ final class Room
5959
scope join_room_msg = new SJoinRoom(
6060
name, users, db.get_room_owner(name), null
6161
);
62-
scope tickers_msg = new SRoomTicker(name, tickers);
62+
scope tickers_msg = new SRoomTickers(name, tickers);
6363

6464
send_to_all(joined_room_msg);
6565
user.send_message(join_room_msg);
@@ -184,7 +184,7 @@ final class Room
184184
return db.get_ticker(name, username);
185185
}
186186

187-
private string[][] tickers()
187+
private RoomTicker[] tickers()
188188
{
189189
return db.room_tickers(name);
190190
}

src/server/server.d

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -450,10 +450,8 @@ final class Server
450450
room.del_ticker(username);
451451

452452
// Stored rooms
453-
foreach (ref ticker ; db.user_tickers!type(username)) {
454-
const room_name = ticker[0];
455-
db.del_ticker(room_name, username);
456-
}
453+
foreach (ref ticker ; db.user_tickers!type(username))
454+
db.del_ticker(ticker.room_name, username);
457455
}
458456

459457
Room get_room(string room_name)

src/server/user.d

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
module soulfind.server.user;
77
@safe:
88

9-
import soulfind.db : Sdb, SdbUserStats;
9+
import soulfind.db : Sdb;
1010
import soulfind.defines : blue, bold, log_user, login_timeout,
1111
max_interest_length, max_room_name_length,
1212
max_user_interests, max_username_length, norm,
1313
pbkdf2_iterations, red, RoomMemberType, RoomType,
1414
server_username, speed_weight, user_check_interval,
15-
VERSION, wish_interval, wish_interval_privileged;
15+
UserStats, VERSION, wish_interval,
16+
wish_interval_privileged;
1617
import soulfind.pwhash : create_salt, hash_password_async,
1718
verify_password_async;
1819
import soulfind.server.conns : Logging, UserConnection;
@@ -420,7 +421,7 @@ final class User
420421
);
421422
server.send_to_watching(username, msg);
422423

423-
auto stats = SdbUserStats();
424+
auto stats = UserStats();
424425
stats.upload_speed = upload_speed;
425426
stats.updating_speed = true;
426427

@@ -432,7 +433,7 @@ final class User
432433
shared_files = new_files;
433434
shared_folders = new_folders;
434435

435-
auto stats = SdbUserStats();
436+
auto stats = UserStats();
436437
stats.shared_files = new_files;
437438
stats.shared_folders = new_folders;
438439
stats.updating_shared = true;

src/setup/setup.d

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -602,10 +602,10 @@ final class Setup
602602
);
603603

604604
if (tickers.length > 0) {
605-
foreach (ticker ; tickers) {
606-
const room_name = ticker[0], content = ticker[1];
607-
output ~= text("\n\t [", room_name, "] ", content);
608-
}
605+
foreach (ticker ; tickers)
606+
output ~= text(
607+
"\n\t [", ticker.room_name, "] ", ticker.content
608+
);
609609
}
610610

611611
writeln(output[]);
@@ -667,10 +667,10 @@ final class Setup
667667
if (tickers.length > 0) {
668668
auto first = true;
669669
foreach (ticker ; tickers) {
670-
const room_name = ticker[0], content = ticker[1];
671670
if (!first) output ~= ",";
672671
output ~= text(
673-
"\n \"", room_name, "\": \"", content, "\""
672+
"\n \"", ticker.room_name, "\": \"",
673+
ticker.content, "\""
674674
);
675675
first = false;
676676
}

0 commit comments

Comments
 (0)