aboutsummaryrefslogtreecommitdiff
path: root/db.c
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2017-03-16 21:06:11 +0100
committertomsmeding <tom.smeding@gmail.com>2017-03-16 21:06:57 +0100
commit047e1828901b5b08cd538a7b11c0de2149606797 (patch)
tree9249612fe9bb88bf3063733744a6c02c391e5739 /db.c
parenta441b302c2c11c291df60fe642ec0d51646218dd (diff)
Basic message sending
TODO: broadcast to all online fd's of a user? TODO: close users that aren't reachable in a broadcast?
Diffstat (limited to 'db.c')
-rw-r--r--db.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/db.c b/db.c
index fa7603c..828c081 100644
--- a/db.c
+++ b/db.c
@@ -85,6 +85,37 @@ bool db_is_member(i64 roomid,i64 userid){
return success;
}
+struct db_user_list db_get_members(i64 roomid){
+ sqlite3_stmt *stmt;
+ SQLITE(prepare_v2,database,
+ "select U.id, U.name "
+ "from Users as U, Members as M "
+ "where M.room = ? and M.user = U.id"
+ ,-1,&stmt,NULL);
+ SQLITE(bind_int64,stmt,1,roomid);
+
+ struct db_user_list ul;
+ i64 cap=4;
+ ul.count=0;
+ ul.list=malloc(cap,struct db_name_id);
+
+ int ret;
+ while((ret=sqlite3_step(stmt))==SQLITE_ROW){
+ if(ul.count==cap){
+ cap*=2;
+ ul.list=realloc(ul.list,cap,struct db_name_id);
+ }
+ ul.list[ul.count].id=sqlite3_column_int64(stmt,0);
+ ul.list[ul.count].name=strdup((const char*)sqlite3_column_text(stmt,1));
+ ul.count++;
+ }
+
+ if(ret!=SQLITE_DONE)die_sqlite("sqlite3_step");
+ SQLITE(finalize,stmt);
+
+ return ul;
+}
+
i64 db_find_room(const char *name){
sqlite3_stmt *stmt;
SQLITE(prepare_v2,database,"select id from Rooms where name = ?",-1,&stmt,NULL);