package com.ved.musicmapapp.providers;
import java.io.IOException;
import java.net.URLEncoder;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.util.Log;
import android.util.Pair;
import com.facebook.android.Util;
import com.ved.musicmapapp.services.UpdateLocationService;
import com.ved.musicmapapp.utils.Statics;
import com.ved.musicmapapp.utils.Utils;
import com.ved.musicmapapp.utils.XMLParse;
public abstract class GetTrackPreview extends
AsyncTask<Void, Void, Pair<String, String>> {
public static final String _7DIGITAL_API_LINK = "http://api.7digital.com/1.2/";
public static final String _7DIGITAL_API_TRACK_SEARCH = "track/search";
public static final String _7DIGITAL_API_KEY = "7dvgzk7twy2f";
public static final String _7DIGITAL_API_TRACK_VIEW = "track/preview";
public static final String _7DIGITAL_API_TRACK_DETAIL = "track/details";
private String mError;
private ProgressDialog mProgressDialog;
private Context context;
private String track;
private String artist;
private boolean showDialog;
int itemCount = 0;
public GetTrackPreview(Activity context, String track, String artist, boolean showDialog) {
Log.i("check","In GetTrackPreview");
mError = null;
mProgressDialog = new ProgressDialog(context);
mProgressDialog.setMessage("Getting track link...");
mProgressDialog.setCancelable(true);
mProgressDialog
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
GetTrackPreview.this.cancel(true);
}
});
this.context = context;
this.track = track;
if(!artist.toLowerCase().contains("unknown")){
this.artist = artist;
}
else{
this.artist="";
}
this.showDialog = showDialog;
}
@Override
protected Pair<String, String> doInBackground(Void... params) {
try {
StringBuilder url = new StringBuilder(_7DIGITAL_API_LINK);
url.append(_7DIGITAL_API_TRACK_SEARCH);
url.append("?pageSize=50&q=" + URLEncoder.encode(track.trim(), "UTF-8") + "+" + URLEncoder.encode(artist.trim(), "UTF-8"));
url.append("&oauth_consumer_key=" + _7DIGITAL_API_KEY);
// Pair<Double, Double> loc = UpdateLocationService.getLastLocation(context);
// String country = Utils.getCountryName(context, loc.first, loc.second);//
String country = context.getResources().getConfiguration().locale.getCountry();
if (country != null && country.length() > 0)
url.append("&country=" + country);
Log.e("check","url for trackID:/// "+url);
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 20000;
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
int timeoutSocket = 20000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpGet httpGet = new HttpGet(url.toString());
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
String xml = EntityUtils.toString(httpEntity);
Pair<String, String> trackDetail = getTrackId(xml);
if (itemCount == 0 && trackDetail == null) {
mError = "Track not found";
return null;
}
else if(itemCount > 0 && trackDetail == null){
trackDetail = getFirstTrackId(xml);
}
return trackDetail;
} catch (Exception e) {
e.printStackTrace();
mError = "Network unavailable!";
}
return null;
}
@Override
protected void onPreExecute() {
if (showDialog) {
mProgressDialog.show();
}
super.onPreExecute();
}
@Override
protected void onPostExecute(Pair<String, String> result) {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
// Error
if (result == null) {
onError(mError);
} else {
onSucess(result);
}
super.onPostExecute(result);
}
public abstract void onSucess(Pair<String, String> trackDetail);
public abstract void onError(String error);
private Pair<String, String> getTrackId(String resultXml) {
Document doc = XMLParse.getDomElement(resultXml);
if (doc == null) {
return null;
}
String trackId = null, linkToBuySong = null;
boolean isFound = false;
Node results = doc.getFirstChild().getFirstChild();
NodeList childNodes = results.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
if (childNodes.item(i).getNodeName().equals("totalItems")) {
itemCount = Integer.parseInt(childNodes.item(i).getTextContent());
if (itemCount == 0) {
return null;
}
} else if (childNodes.item(i).getNodeName().equals("searchResult")) {
NodeList resultNodes = childNodes.item(i).getChildNodes();
for (int j = 0; j < resultNodes.getLength(); j++) {
if (resultNodes.item(j).getNodeName().equals("track")) {
trackId = resultNodes.item(j).getAttributes().item(0).getTextContent();
NodeList trackNodes = resultNodes.item(j).getChildNodes();
String title = "";
for (int k = 0; k < trackNodes.getLength(); k++) {
if (trackNodes.item(k).getNodeName().equals("title")) {
title = trackNodes.item(k).getTextContent();
/*if (!trackNodes.item(k).getTextContent().toLowerCase().contains(track.toLowerCase()) && Statics.similarText(trackNodes.item(k).getTextContent(),track) < 75) {
break;
}*/
} else if (trackNodes.item(k).getNodeName().equals("artist")) {
String artistName = trackNodes.item(k).getChildNodes().item(0).getTextContent();
if (artistName.toLowerCase().contains(artist.toLowerCase()) || Statics.similarText(artistName, artist) >= 75)
{
Log.d("Track", title + " - " + artistName);
isFound = true;
}
} else if (trackNodes.item(k).getNodeName().equals("url")) {
linkToBuySong = trackNodes.item(k).getTextContent();
// break;
}
}
}
if (isFound) {
break;
}
}
}
if (isFound) {
break;
}
}
if (!isFound) {
return null;
}
Log.e("check","trackId:// "+trackId+" linkToBuySong ://"+linkToBuySong);
return new Pair<String, String>(trackId, linkToBuySong);
}
private Pair<String, String> getFirstTrackId(String resultXml) {
Document doc = XMLParse.getDomElement(resultXml);
if (doc == null) {
return null;
}
String trackId = null, linkToBuySong = null;
boolean isFound = false;
Node results = doc.getFirstChild().getFirstChild();
NodeList childNodes = results.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
if (childNodes.item(i).getNodeName().equals("totalItems")) {
// itemCount = Integer.parseInt(childNodes.item(i).getTextContent());
// if (itemCount == 0) {
// return null;
// }
} else if (childNodes.item(i).getNodeName().equals("searchResult")) {
NodeList resultNodes = childNodes.item(i).getChildNodes();
for (int j = 0; j < resultNodes.getLength(); j++) {
if (resultNodes.item(j).getNodeName().equals("track")) {
trackId = resultNodes.item(j).getAttributes().item(0).getTextContent();
NodeList trackNodes = resultNodes.item(j).getChildNodes();
String title = "";
for (int k = 0; k < trackNodes.getLength(); k++) {
if (trackNodes.item(k).getNodeName().equals("title")) {
title = trackNodes.item(k).getTextContent();
} else if (trackNodes.item(k).getNodeName().equals("artist")) {
String artistName = trackNodes.item(k).getChildNodes().item(0).getTextContent();
// if (artistName.toLowerCase().contains(artist.toLowerCase()) || Statics.similarText(artistName, artist) >= 75)
{
Log.d("Track", title + " - " + artistName);
isFound = true;
}
} else if (trackNodes.item(k).getNodeName().equals("url")) {
linkToBuySong = trackNodes.item(k).getTextContent();
break;
// break;
}
}
}
if (isFound) {
break;
}
}
}
if (isFound) {
break;
}
}
if (!isFound) {
return null;
}
Log.e("check","trackId:// "+trackId+" linkToBuySong ://"+linkToBuySong);
return new Pair<String, String>(trackId, linkToBuySong);
}
@Override
protected void onCancelled() {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
super.onCancelled();
}
}