/* * * * * This file is part of QuickLyric * * Copyright © 2017 QuickLyric SPRL * * * * QuickLyric is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * QuickLyric is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * * along with QuickLyric. If not, see <http://www.gnu.org/licenses/>. * */ package com.geecko.QuickLyric.tasks; import android.os.AsyncTask; import android.os.Build; import com.geecko.QuickLyric.MainActivity; import com.geecko.QuickLyric.model.Lyrics; import com.geecko.QuickLyric.utils.Net; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class CoverArtLoader extends AsyncTask<Object, Object, String> { private MainActivity mActivity; @Override protected String doInBackground(Object... objects) { Lyrics lyrics = (Lyrics) objects[0]; mActivity = (MainActivity) objects[1]; String url = lyrics.getCoverURL(); boolean online = objects.length >= 3 && (Boolean) objects[2]; boolean secondTry = objects.length >= 4 && (Boolean) objects[3]; File artworksDir = new File(mActivity.getCacheDir(), "artworks"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && (artworksDir.exists() || artworksDir.mkdirs())) { long size = 0; List<File> files = new ArrayList<>(Arrays.asList(artworksDir.listFiles())); for (File file : files) { size += file.length() / 1024; } File artworkFile = new File(artworksDir, lyrics.getOriginalArtist() + lyrics.getOriginalTrack() + ".png"); if (size > 20000L) { File[] sortedFiles = new File[files.size() / 2]; for (int i = 0; i < files.size() / 2; i++) { sortedFiles[i] = Collections.min(files, new Comparator<File>() { @Override public int compare(File file1, File file2) { return (int) (file1.lastModified() - file2.lastModified()); } }); files.remove(sortedFiles[i]); } for (File file : sortedFiles) { if (file != null && !file.getName().equals(artworkFile.getName())) //noinspection ResultOfMethodCallIgnored file.delete(); } } if (artworkFile.exists() && artworkFile.length() > 0) { return artworkFile.getAbsoluteFile().getAbsolutePath(); } } if (url == null && online) { try { String requestURL = String.format( "https://itunes.apple.com/search?term=%s+%s&entity=song&media=music", URLEncoder.encode(lyrics.getArtist(), "UTF-8"), URLEncoder.encode(lyrics.getTitle(), "UTF-8")); String txt = Net.getUrlAsString(new URL(requestURL)); JSONObject json = new JSONObject(txt); JSONArray results = json.getJSONArray("results"); JSONObject result = results.getJSONObject(0); url = result.getString("artworkUrl60").replace("60x60bb.jpg", "1000x1000bb.jpg"); } catch (IOException e) { e.printStackTrace(); } catch (JSONException ignored) { if (!secondTry) { lyrics.setArtist(lyrics.getOriginalArtist()); lyrics.setTitle(lyrics.getOriginalTrack()); return doInBackground(lyrics, mActivity, online, Boolean.TRUE); } } } return url; } @Override protected void onPostExecute(String url) { if (mActivity != null && !mActivity.hasBeenDestroyed()) mActivity.updateArtwork(url); } }