package com.ved.musicmapapp.providers;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.ved.musicmapapp.Objects.Playlist;
import com.ved.musicmapapp.Objects.User;
import com.ved.musicmapapp.adapters.DBAdapter;
import com.ved.musicmapapp.utils.Statics;
/** Get all artist info of an user */
public class AddUserPlaylistsListTask extends AsyncTask<Void, Void, User> {
private Context context;
User user;
public AddUserPlaylistsListTask(Context activity, User user) {
Log.i("check","In AddUserPlaylistsListTask");
this.user = user;
this.context = activity;
}
@Override
protected User doInBackground(Void... params) {
try {
if (Statics.isNetworkConnected(context)) {
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 20000;
HttpConnectionParams.setConnectionTimeout(httpParameters,timeoutConnection);
int timeoutSocket = 20000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpPost httppost = new HttpPost(Statics.WS_PATH+ "addPlayList.php");
DBAdapter adapter = new DBAdapter(context);
ArrayList<Playlist> locallySaved = adapter.getUserPlaylists(user);
if(locallySaved == null){
return null;
}
for(Playlist pl: locallySaved) {
if(pl.getID() == -1) { //Its not posted yet
ArrayList<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("user_id", user.getID()+""));
nvps.add(new BasicNameValuePair("playlist_name", pl.getPlaylistName()));
httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = httpclient.execute(httppost);
String data = EntityUtils.toString(response.getEntity(),"UTF-8");
JSONObject json = new JSONObject(data);
String message = json.getString("message");
if(message.contains("Playlist successfully added")){
JSONObject play = json.getJSONObject("Playlist");
Playlist responsePl = new Playlist();
responsePl.setID(Integer.parseInt(play.getString("id")));
responsePl.setUserId(play.getString("user_id"));
responsePl.setPlaylistName(play.getString("playlist_name"));
responsePl.setDateAdded(Long.parseLong(play.getString("date_added")));
responsePl.setLastUpdated(0L);
responsePl.setArtistAvatar("");
responsePl.setNumberOfTracks(0);
responsePl.setDB_id(pl.getDB_id());
adapter.updatePlaylistById(pl.getDB_id(), responsePl);
updatePlaylistInModel(responsePl);
locallySaved.remove(pl);
locallySaved.add(responsePl);
}
}
}
user.setPlaylists(locallySaved);
if (Statics.hashUsers != null) {
User userTmp = Statics.hashUsers.get(user.getFbid());
if (userTmp != null) {
userTmp.setPlaylists(locallySaved);
Statics.hashUsers.put(user.getFbid(), userTmp);
return userTmp;
} else {
return user;
}
}
return user;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(User result) {
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
public void updatePlaylistInModel(Playlist responsePl) {
ArrayList<Playlist> playlists = this.user.getPlaylists();
for(Playlist pl: playlists) {
if(pl.getPlaylistName().equals(responsePl.getPlaylistName()) ) {
pl.setID(responsePl.getID());
pl.setUserId(responsePl.getUserId());
pl.setPlaylistName(responsePl.getPlaylistName());
pl.setDateAdded(responsePl.getDateAdded());
pl.setLastUpdated(responsePl.getLastUpdated());
pl.setArtistAvatar(responsePl.getArtistAvatar());
pl.setNumberOfTracks(responsePl.getNumberOfTracks());
pl.setDB_id(responsePl.getDB_id());
}
}
}
}