package com.ved.musicmapapp.providers;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.ved.musicmapapp.R;
import com.ved.musicmapapp.Objects.LocalSong;
import com.ved.musicmapapp.receiver.ProcessSyncingReceiver;
import com.ved.musicmapapp.utils.Statics;
public class CleanSongTask extends AsyncTask<Void, Object, Object> {
public static final int STEP = 3;
public int curPosition;
PostSongToServerTask mSyncSongTask;
public JSONArray addJA;
public CleanSongTask(PostSongToServerTask postSongToServerTask, JSONArray addJA, int start) {
Log.i("check","In CleanSongTask");
curPosition = start;
mSyncSongTask = postSongToServerTask;
this.addJA = addJA;
}
@Override
protected Object doInBackground(Void... params) {
while (curPosition < mSyncSongTask.adds.size()) {
LocalSong song = mSyncSongTask.adds.get(curPosition);
try {
if (null != mSyncSongTask.context
&& Statics.isNetworkConnected(mSyncSongTask.context)) {
cleanSongData(song);
JSONObject addJO = new JSONObject();
try {
addJO.put("title", song.getTitle());
addJO.put("title_edited", song.getTitleEdited());
addJO.put("artist", song.getArtist());
addJO.put("artist_edited", song.getArtistEdited());
addJO.put("album", song.getAlbum());
addJO.put("genre",song.getGenre());
} catch (Exception e) {
}
// ADD TO ARRAY
addJA.put(addJO);
publishProgress(curPosition);
}
if(!Statics.isNetworkConnected(mSyncSongTask.context)){
Toast.makeText(mSyncSongTask.context, "No connection network", Toast.LENGTH_SHORT).show();
return null;
}
} catch (Exception e) {
return null;
}
curPosition += STEP;
}
return curPosition - 1;
}
@Override
protected void onProgressUpdate(Object... values) {
mSyncSongTask.cleanedSongs++;
int percent = (int) (mSyncSongTask.cleanedSongs * 100.0 / mSyncSongTask.adds
.size());
Intent i = new Intent(ProcessSyncingReceiver.BROAST_CAST_UPDATE_SYNCING);
i.putExtra("message", "Cleaning...\n" + percent + "% cleaned");
mSyncSongTask.context.sendBroadcast(i);
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
private void cleanSongData(LocalSong s) {
String artist_cleaned = s.getArtistEdited();
String title_cleaned = s.getTitleEdited();
String artist = artist_cleaned.replace(" ", "%20");
String title = title_cleaned.replace(" ", "%20");
if (artist.equals("<unknown>")) {
s.setAlbum("");
JSONObject json;
try {
json = Statics
.readJsonFromUrl("http://ws.audioscrobbler.com/2.0/?method=track.search&track="
+ title
+ "&api_key=7fcf89d40877011f8b3a8b1689a527a5&format=json&limit=1");
JSONObject obj = json.getJSONObject("results")
.getJSONObject("trackmatches").getJSONObject("track");
s.setArtistEdited(removeFt(obj.getString("artist")));
s.setTitleEdited(obj.getString("name"));
} catch (Exception e) {
s.setArtistEdited("");
s.setTitleEdited(title_cleaned);
// e.printStackTrace();
}
} else {
JSONObject json;
try {
json = Statics
.readJsonFromUrl("http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=7fcf89d40877011f8b3a8b1689a527a5&artist="
+ artist
+ "&track="
+ title
+ "&autocorrect=1&format=json");
JSONObject obj = json.getJSONObject("track");
s.setArtistEdited(removeFt(obj.getJSONObject("artist")
.getString("name")));
s.setTitleEdited(obj.getString("name"));
s.setAlbum(obj.getJSONObject("album").getString("title"));
JSONArray tags = obj.getJSONObject("toptags").getJSONArray("tag");
try{
String genName = tags.getJSONObject(0).getString("name");
s.setGenre(genName);
Log.e("check","genre name in clean song task : " + genName);
}
catch(Exception e){
e.printStackTrace();
}
} catch (Exception e) {
// e.printStackTrace();
s.setArtistEdited(removeFt(artist_cleaned));
s.setTitleEdited(title_cleaned);
s.setAlbum("");
s.setGenre("<unknown>");
}
}
if (s.getAlbum().equals("<unknown>"))
s.setAlbum("");
if (s.getTitleEdited().length() == 0)
s.setTitleEdited(title_cleaned);
if (s.getArtistEdited().length() == 0
|| s.getArtistEdited().equals("[unknown]"))
s.setArtistEdited("Unknown_Artist");
}
private String removeFt(String str) {
String tmp = str.toLowerCase();
if (tmp.contains(" ft ")) {
str = str.substring(0, tmp.indexOf(" ft "));
}
if (tmp.contains(" ft. ")) {
str = str.substring(0, tmp.indexOf(" ft. "));
}
tmp = str.toLowerCase();
if (tmp.contains(" feat ")) {
str = str.substring(0, tmp.indexOf(" feat "));
}
tmp = str.toLowerCase();
if (tmp.contains(" feat. ")) {
str = str.substring(0, tmp.indexOf(" feat. "));
}
tmp = str.toLowerCase();
if (tmp.contains(" featuring ")) {
str = str.substring(0, tmp.indexOf(" featuring "));
}
return str.trim();
}
}