package org.wheelmap.android.net;
import android.net.Uri;
import org.wheelmap.android.model.api.ApiResponse;
import org.wheelmap.android.model.api.MeasurementImageUploadResponse;
import org.wheelmap.android.model.api.MeasurementInfo;
import org.wheelmap.android.model.api.MeasurementInfoWrapper;
import java.io.File;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Response;
import rx.Observable;
import rx.functions.Func1;
public class WheelmapApi {
private WheelmapRestService apiService;
WheelmapApi(WheelmapRestService apiService) {
this.apiService = apiService;
}
public Observable<ApiResponse> uploadImage(long wmId, Uri uri) {
File file = new File(uri.getPath());
RequestBody fbody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("photo", file.getName(), fbody);
return apiService.uploadImage(wmId, part)
.compose(ApiUtils.<ApiResponse>failRequestAsError());
}
public Observable<MeasurementImageUploadResponse> uploadMeasurementImage(long wmId, Uri uri) {
File file = new File(uri.getPath());
RequestBody fbody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("photo", file.getName(), fbody);
return apiService.uploadMeasurementImage(wmId, part)
.compose(ApiUtils.<MeasurementImageUploadResponse>failRequestAsError());
}
public Observable<Void> uploadMeasurementMetaData(long wmId, MeasurementImageUploadResponse image, MeasurementInfo measurementInfo) {
return apiService.uploadMeasurementMetaData(wmId, image.id(), MeasurementInfoWrapper.create(measurementInfo))
.flatMap(new Func1<Response<Void>, Observable<Void>>() {
@Override
public Observable<Void> call(Response<Void> response) {
if (response.isSuccessful()) {
return Observable.just(null);
}
return Observable.error(new Exception("Status code" + response.code()));
}
});
}
}