From 81bf363ac69e0036562434ca0e7153c3e624c8c3 Mon Sep 17 00:00:00 2001
From: Lars-Dominik Braun <lars@6xq.net>
Date: Wed, 23 May 2012 21:35:39 +0200
Subject: piano: Fix ambiguous error message/return value

Closes #263.
---
 src/libpiano/piano.c    |  4 ++++
 src/libpiano/piano.h    |  2 ++
 src/libpiano/response.c | 11 +++++++++++
 3 files changed, 17 insertions(+)

(limited to 'src/libpiano')

diff --git a/src/libpiano/piano.c b/src/libpiano/piano.c
index 9f4d7ec..47f2fa1 100644
--- a/src/libpiano/piano.c
+++ b/src/libpiano/piano.c
@@ -250,6 +250,10 @@ const char *PianoErrorToStr (PianoReturn_t ret) {
 			return "Out of memory.";
 			break;
 
+		case PIANO_RET_INVALID_LOGIN:
+			return "Wrong email address or password.";
+			break;
+
 		/* pandora error messages */
 		case PIANO_RET_P_INTERNAL:
 			return "Internal error.";
diff --git a/src/libpiano/piano.h b/src/libpiano/piano.h
index 249061b..ea21aa1 100644
--- a/src/libpiano/piano.h
+++ b/src/libpiano/piano.h
@@ -244,7 +244,9 @@ typedef enum {
 	PIANO_RET_INVALID_RESPONSE = 2,
 	PIANO_RET_CONTINUE_REQUEST = 3,
 	PIANO_RET_OUT_OF_MEMORY = 4,
+	PIANO_RET_INVALID_LOGIN = 5,
 
+	/* pandora error codes */
 	PIANO_RET_P_INTERNAL = PIANO_RET_OFFSET+0,
 	PIANO_RET_P_API_VERSION_NOT_SUPPORTED = PIANO_RET_OFFSET+11,
 	PIANO_RET_P_BIRTH_YEAR_INVALID = PIANO_RET_OFFSET+1025,
diff --git a/src/libpiano/response.c b/src/libpiano/response.c
index c3bfd6c..73b223a 100644
--- a/src/libpiano/response.c
+++ b/src/libpiano/response.c
@@ -100,6 +100,17 @@ PianoReturn_t PianoResponse (PianoHandle_t *ph, PianoRequest_t *req) {
 			ret = PIANO_RET_INVALID_RESPONSE;
 		} else {
 			ret = json_object_get_int (code)+PIANO_RET_OFFSET;
+
+			if (ret == PIANO_RET_P_INVALID_PARTNER_LOGIN &&
+					req->type == PIANO_REQUEST_LOGIN) {
+				PianoRequestDataLogin_t *reqData = req->data;
+				if (reqData->step == 1) {
+					/* return value is ambiguous, as both, partnerLogin and
+					 * userLogin return INVALID_PARTNER_LOGIN. Fix that to provide
+					 * better error messages. */
+					ret = PIANO_RET_INVALID_LOGIN;
+				}
+			}
 		}
 
 		json_object_put (j);
-- 
cgit v1.2.3