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(); } }