From aa4a870d1df23af1c26d5b675c278a08a1b8d2ec Mon Sep 17 00:00:00 2001
From: Christian Pointner <equinox@helsinki.at>
Date: Sat, 12 Dec 2015 03:58:55 +0100
Subject: add_cart and add_cut now correctly parse the response


diff --git a/src/helsinki.at/rhimport/importer.go b/src/helsinki.at/rhimport/importer.go
index 749c895..7c85fdd 100644
--- a/src/helsinki.at/rhimport/importer.go
+++ b/src/helsinki.at/rhimport/importer.go
@@ -132,7 +132,7 @@ func NewImportResult(rdres *RDWebResult) *ImportResult {
 	return res
 }
 
-func add_cart(ctx *ImportContext) (result *RDWebResult, err error) {
+func add_cart(ctx *ImportContext) (result interface{}, err error) {
 	var b bytes.Buffer
 	w := multipart.NewWriter(&b)
 
@@ -157,11 +157,20 @@ func add_cart(ctx *ImportContext) (result *RDWebResult, err error) {
 		}
 	}
 	w.Close()
-	return send_post_request(ctx.Config.RDXportEndpoint, &b, w.FormDataContentType())
-	// TODO: on success this returns   <cartAdd>...</cartAdd>
+
+	var res *http.Response
+	if res, err = send_post_request(ctx.Config.RDXportEndpoint, &b, w.FormDataContentType()); err != nil {
+		return
+	}
+	defer res.Body.Close()
+
+	if res.StatusCode != http.StatusOK {
+		return NewRDWebResultFromXML(res.Body)
+	}
+	return NewRDCartAddFromXML(res.Body)
 }
 
-func add_cut(ctx *ImportContext) (result *RDWebResult, err error) {
+func add_cut(ctx *ImportContext) (result interface{}, err error) {
 	var b bytes.Buffer
 	w := multipart.NewWriter(&b)
 
@@ -178,8 +187,17 @@ func add_cut(ctx *ImportContext) (result *RDWebResult, err error) {
 		return
 	}
 	w.Close()
-	return send_post_request(ctx.Config.RDXportEndpoint, &b, w.FormDataContentType())
-	// TODO: on success this returns   <cutAdd>...</cutAdd>
+
+	var res *http.Response
+	if res, err = send_post_request(ctx.Config.RDXportEndpoint, &b, w.FormDataContentType()); err != nil {
+		return
+	}
+	defer res.Body.Close()
+
+	if res.StatusCode != http.StatusOK {
+		return NewRDWebResultFromXML(res.Body)
+	}
+	return NewRDCutAddFromXML(res.Body)
 }
 
 func remove_cart(ctx *ImportContext) (result *RDWebResult, err error) {
@@ -199,10 +217,16 @@ func remove_cart(ctx *ImportContext) (result *RDWebResult, err error) {
 		return
 	}
 	w.Close()
-	return send_post_request(ctx.Config.RDXportEndpoint, &b, w.FormDataContentType())
+
+	var res *http.Response
+	if res, err = send_post_request(ctx.Config.RDXportEndpoint, &b, w.FormDataContentType()); err != nil {
+		return
+	}
+	defer res.Body.Close()
+	return NewRDWebResultFromXML(res.Body)
 }
 
-func send_post_request(url string, b *bytes.Buffer, contenttype string) (result *RDWebResult, err error) {
+func send_post_request(url string, b *bytes.Buffer, contenttype string) (res *http.Response, err error) {
 	var req *http.Request
 	if req, err = http.NewRequest("POST", url, b); err != nil {
 		return
@@ -212,14 +236,10 @@ func send_post_request(url string, b *bytes.Buffer, contenttype string) (result
 	}
 
 	client := &http.Client{}
-	var res *http.Response
 	if res, err = client.Do(req); err != nil {
 		return
 	}
-	defer res.Body.Close()
-
-	// TODO: some commands might return something else...
-	return NewRDWebResultFromXML(res.Body)
+	return
 }
 
 func import_audio_create_request(ctx *ImportContext, easy *curl.CURL) (form *curl.Form, err error) {
-- 
cgit v0.10.2