commit f0fb01fd9c9206be5d014f735796be53d1a96aff
parent 95740c319f3b65aeaf02ea1d964f4437d36e2d41
Author: Kyle Milz <kyle@0x30.net>
Date: Sun, 24 Jan 2016 20:06:19 -0700
sl: send back more information in list_join response
Diffstat:
2 files changed, 31 insertions(+), 20 deletions(-)
diff --git a/server/sl b/server/sl
@@ -266,7 +266,7 @@ sub msg_list_update {
my ($err, $dev, $list) = unpack_request($db, $request, 'device_id', 'list');
return make_error($err) if ($err);
- $err = list_number_valid($db, $list->{num});
+ ($err) = list_number_valid($db, $list->{num});
return make_error($err) if ($err);
# Check that the device is in the list it wants to update
@@ -317,8 +317,8 @@ sub msg_list_join {
my ($err, $dev, $list_num) = unpack_request($db, $request, 'device_id', 'list_num');
return make_error($err) if ($err);
- $err = list_number_valid($db, $list_num);
- return make_error($err) if ($err);
+ my ($list_err, undef, $list_name, $list_date) = list_number_valid($db, $list_num);
+ return make_error($list_err) if ($list_err);
$log->print("device '$dev->{fp}'\n");
$log->print("list '$list_num'\n");
@@ -334,15 +334,19 @@ sub msg_list_join {
return make_error("the device is already part of this list");
}
+ $db->{list_members_phnums}->execute($list_num);
+ my $members_ref = $db->{list_members_phnums}->fetchall_arrayref();
+ # $members_ref comes back as an array of arrays, flatten it
+ my @members = map {@$_} @$members_ref;
+
my $list = {
num => $list_num,
- # XXX: we should return the following here too
- # name => $list_name,
- # date => $list_date,
- # items_complete => 0,
- # items_total => 0,
- # members => [ $phnum ],
- # num_members => 1
+ name => $list_name,
+ date => $list_date,
+ items_complete => 0,
+ items_total => 0,
+ members => \@members,
+ num_members => scalar(@members)
};
return make_ok( { list => $list } );
}
@@ -353,7 +357,7 @@ sub msg_list_leave {
my ($err, $dev, $list_num) = unpack_request($db, $request, 'device_id', 'list_num');
return make_error($err) if ($err);
- $err = list_number_valid($db, $list_num);
+ ($err) = list_number_valid($db, $list_num);
return make_error($err) if ($err);
$log->print("device '$dev->{fp}'\n");
@@ -592,21 +596,21 @@ sub list_number_valid {
unless (defined $list_num) {
$log->print("list number key not found\n");
- return "the client did not send a list number";
+ return ("the client did not send a list number");
}
unless (looks_like_number($list_num)) {
$log->print("'$list_num' is not a number\n");
- return "the client sent a list number that was not a number";
+ return ("the client sent a list number that was not a number");
}
$db->{list_select}->execute($list_num);
- unless ($db->{list_select}->fetchrow_array()) {
- $log->print("unknown list number '$list_num'\n");
- return "the client sent an unknown list number";
+ if (my @row = $db->{list_select}->fetchrow_array()) {
+ return (undef, @row);
}
- return;
+ $log->print("unknown list number '$list_num'\n");
+ return ("the client sent an unknown list number");
}
sub make_error {
diff --git a/server/tests/list_join/test.pl b/server/tests/list_join/test.pl
@@ -1,7 +1,6 @@
#!/usr/bin/perl -I../
use strict;
use warnings;
-
use client;
use test;
@@ -15,12 +14,20 @@ $B->friend_add($A->phnum());
# A creates a new list
my $list_name = "this is a new list";
$A->list_add($list_name);
+my $list_num = $A->lists(0)->{num};
# B joins A's list
-$B->list_join($A->lists(0)->{num});
+my $response = $B->list_join($list_num);
+my $list = $response->{list};
+fail_num_ne 'list num mismatch', $list->{num}, $list_num;
+fail_msg_ne 'this is a new list', $list->{name};
+fail_num_ne 'date mismatch', $list->{date}, 0;
+fail_num_ne 'items complete mismatch', $list->{items_complete}, 0;
+fail_num_ne 'items total mismatch', $list->{items_total}, 0;
+fail_num_ne 'num members mismatch', $list->{num_members}, 2;
# B requests its lists to make sure its committed to the list
-my ($list) = $B->lists_get();
+($list) = $B->lists_get();
# Verify what we get from server
my $stored_list = $A->lists(0);