package net.rdrei.android.scdl2.api.service;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import net.rdrei.android.scdl2.api.APIException;
import net.rdrei.android.scdl2.api.SoundcloudApiService;
import net.rdrei.android.scdl2.api.URLWrapper;
import roboguice.util.Ln;
import android.net.Uri;
public class DownloadService extends SoundcloudApiService {
private static final String RESOURCE_URL = "/tracks/%s/download";
/**
* Resolve a an id to a download API.
*
* @param id
* @return
* @throws APIException
*/
public Uri resolveUri(final String id) throws APIException {
final String resource = String.format(RESOURCE_URL, id);
final URLWrapper url;
try {
url = buildUrl(resource);
} catch (final MalformedURLException e) {
throw new IllegalStateException(e);
}
HttpURLConnection connection = null;
Ln.d("Opening connection at %s.", url.toString());
try {
connection = (HttpURLConnection) url.openConnection();
} catch (final IOException e) {
throw new APIException(e, -1);
}
connection.setInstanceFollowRedirects(false);
final int code;
try {
code = connection.getResponseCode();
} catch (final IOException e) {
connection.disconnect();
throw new APIException(e, -1);
}
if (code != HttpURLConnection.HTTP_MOVED_TEMP) {
connection.disconnect();
throw new APIException("Download is not available.", code);
}
final Uri uri = Uri.parse(connection.getHeaderField("Location"));
connection.disconnect();
return uri;
}
}