@Override public void onComplete(String response, Object state) { try { Log.i(TAG, response); json = Util.parseJson(response); // photos are in the form of a json array child = json.getJSONArray("data"); int total = child.length(); // contains links to photos links = new ArrayList<String>(total); // adds link to each photo to our list after replacing the "https" from url // DownloadManager does not support https in gingerbread for (int i = 0; i < total; i++) { photo_json = child.getJSONObject(i); if (dl_high_res_pics) { JSONArray image_set = photo_json.getJSONArray("images"); // highest resolution picture has the index zero in the images jsonarray JSONObject highest_res_pic = image_set.getJSONObject(0); String http_replaced = highest_res_pic.getString("source").replaceFirst("https", "http"); links.add(i, http_replaced); } else { // source property of the json object points to the photo's link String http_replaced = photo_json.getString("source").replaceFirst("https", "http"); links.add(i, http_replaced); } } download_photos.this.runOnUiThread( new Runnable() { public void run() { // mytask = new DownloadImageTask(); // mytask.execute(links); // start downloading using asynctask // new DownloadImageTask().execute(links); // downloadThread.setPath(path); // downloadThread.setWholeTasks(links.size()); if (resume_file.exists()) { initial_value = readProgress()[0]; final_value = links.size(); // case if the task is already completed if (initial_value == final_value) { completed = true; resume_pause.setVisibility(View.GONE); progress_download.setMax(final_value); progress_download.setProgress(0); // bug in progress bar progress_download.setProgress(initial_value); progress_text.setText("Completed."); mtext.setText( getText(R.string.download_textview_message_1) + " " + path.toString() + ". "); } // case if some of the photos are already downloaded else { progress_download.setMax(links.size()); // progress_download.setProgress(0); //bug in progress bar progress_download.setProgress(initial_value); // N.B if i= initial_value -1, then one image will be downloaded again. so to // save cost we start with i = initial_value for (int i = initial_value; i < links.size(); i++) { mtext.setText( getText(R.string.download_textview_message_1) + " " + path.toString() + ". "); // downloadThread.setRunningTask(i + 1); downloadThread.enqueueDownload( new DownloadTask( links.get(i), path, i + 1, final_value, download_photos.this)); } } } // case if the task is entirely new task else { for (int i = 0; i < links.size(); i++) { mtext.setText( getText(R.string.download_textview_message_1) + " " + path.toString() + ". "); // downloadThread.setRunningTask(i + 1); downloadThread.enqueueDownload( new DownloadTask( links.get(i), path, i + 1, links.size(), download_photos.this)); } } } }); } catch (JSONException ex) { Log.e(TAG, "JSONEXception : " + ex.getMessage()); } }
@Override protected String[] doInBackground(String... parms) { String[] resultarr = new String[1]; String intentstr = parms[0]; // int count = urls.length; // long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += // Downloader.downloadFile(urls[i]); // publishProgress((int) ((i / (float) count) * 100)); // Escape early if cancel() is called // if (isCancelled()) // break; try { // Connect to API and authenticate publishProgress("Connecting and authenticating API session..."); ApiWrapper wrapper; // wrapper = Api.wrapper; wrapper = new ApiWrapper(Api.mClientID, Api.mClientSecret, null, null); wrapper.login("un1tz3r0", "Farscap3"); publishProgress("Resolving url..."); String resolvedurl = resolveURL(wrapper, intentstr); publishProgress("Getting metadata..."); HttpResponse resp = wrapper.get(Request.to(resolvedurl)); JSONObject jso = Http.getJSON(resp); // resultstr = jso.toString(); if (jso.getString("kind").equals("track")) { if (jso.getBoolean("downloadable")) { publishProgress("Getting download redirect URL..."); String dlrurl = wrapper .getURI( Request.to(jso.getString("download_url")).add("allow_redirect", false), false, false) .toString(); HttpResponse dlrresp = wrapper.get(Request.to(dlrurl)); String dlstr = dlrurl; if (dlrresp.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) { Header dlloch = dlrresp.getFirstHeader("location"); if ((dlloch == null) || (dlloch.getValue() == null)) throw new RuntimeException("Download url HEAD response has no location header"); dlstr = wrapper.getURI(Request.to(dlloch.getValue()), false, false).toString(); } else if (dlrresp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { dlstr = dlrurl; } else { throw new RuntimeException( "Download url HEAD response has wrong status (" + String.valueOf(dlrresp.getStatusLine().getStatusCode()) + " " + dlrresp.getStatusLine().getReasonPhrase() + ")"); } // String dlstr = Request.to( dlloch.getValue() ).add("CLIENT_ID", // Api.mClientID).toString(); // if(dlresp2.getStatusLine().getStatusCode() != // HttpStatus.SC_MOVED_TEMPORARILY) // throw new RuntimeException("Download redirect url HEAD response has // wrong status: " + dlresp2.getStatusLine().toString()); // Header dlloc2 = dlresp2.getFirstHeader("location"); // if((dlloc2 == null) || (dlloc2.getValue() == null)) // throw new RuntimeException("Download redirect url HEAD response has no // location header"); // resultarr = new String[2]; resultarr[1] = jso.getString("title").replaceAll("[^A-Za-z0-9 -]*", "") + "." + jso.getString("original_format"); resultarr[0] = dlstr; } else { Stream st = wrapper.resolveStreamUrl(jso.getString("stream_url"), true); resultarr = new String[2]; resultarr[1] = jso.getString("title").replaceAll("[^A-Za-z0-9 -]*", "").concat(".mp3"); resultarr[0] = st.streamUrl; } } } catch (JSONException e) { resultarr = new String[1]; resultarr[0] = e.toString(); } catch (IOException e) { resultarr = new String[1]; resultarr[0] = e.toString(); } catch (Exception e) { resultarr = new String[1]; resultarr[0] = e.toString(); } return resultarr; }