0.5.3 - Download fixes, shuffle fix, sorting in library
This commit is contained in:
parent
952cf0f508
commit
2f471268c6
18 changed files with 556 additions and 167 deletions
|
@ -312,6 +312,20 @@ public class Deezer {
|
|||
return original + ".mp3";
|
||||
}
|
||||
|
||||
public static String generateUserUploadedMP3Filename(String original, JSONObject privateJson) throws Exception {
|
||||
//Remove unavailable tags
|
||||
String[] ignored = {"%feats%", "%trackNumber%", "%0trackNumber%", "%year%", "%date%"};
|
||||
for (String i : ignored) {
|
||||
original = original.replaceAll(i, "");
|
||||
}
|
||||
//Basic tags
|
||||
original = original.replaceAll("%title%", privateJson.getString("SNG_TITLE"));
|
||||
original = original.replaceAll("%album%", privateJson.getString("ALB_TITLE"));
|
||||
original = original.replaceAll("%artist%", privateJson.getString("ART_NAME"));
|
||||
original = original.replaceAll("%artists%", privateJson.getString("ART_NAME"));
|
||||
return original;
|
||||
}
|
||||
|
||||
//Tag track with data from API
|
||||
public static void tagTrack(String path, JSONObject publicTrack, JSONObject publicAlbum, String cover, JSONObject lyricsData) throws Exception {
|
||||
TagOptionSingleton.getInstance().setAndroid(true);
|
||||
|
|
|
@ -51,6 +51,11 @@ public class Download {
|
|||
}
|
||||
}
|
||||
|
||||
//Negative TrackIDs = User uploaded MP3s.
|
||||
public boolean isUserUploaded() {
|
||||
return trackId.startsWith("-");
|
||||
}
|
||||
|
||||
//Get download from SQLite cursor, HAS TO ALIGN
|
||||
static Download fromSQL(Cursor cursor) {
|
||||
return new Download(cursor.getInt(0), cursor.getString(1), cursor.getInt(2) == 1, cursor.getInt(3), DownloadState.values()[cursor.getInt(4)],
|
||||
|
|
|
@ -274,6 +274,7 @@ public class DownloadService extends Service {
|
|||
File outFile;
|
||||
JSONObject trackJson;
|
||||
JSONObject albumJson;
|
||||
JSONObject privateJson;
|
||||
boolean stopDownload = false;
|
||||
DownloadThread(Download download) {
|
||||
this.download = download;
|
||||
|
@ -293,8 +294,13 @@ public class DownloadService extends Service {
|
|||
|
||||
//Fetch metadata
|
||||
try {
|
||||
trackJson = Deezer.callPublicAPI("track", download.trackId);
|
||||
albumJson = Deezer.callPublicAPI("album", Integer.toString(trackJson.getJSONObject("album").getInt("id")));
|
||||
JSONObject privateRaw = deezer.callGWAPI("song.getListData", "{\"sng_ids\": [" + download.trackId + "]}");
|
||||
privateJson = privateRaw.getJSONObject("results").getJSONArray("data").getJSONObject(0);
|
||||
//Don't fetch meta if user uploaded mp3
|
||||
if (!download.isUserUploaded()) {
|
||||
trackJson = Deezer.callPublicAPI("track", download.trackId);
|
||||
albumJson = Deezer.callPublicAPI("album", Integer.toString(trackJson.getJSONObject("album").getInt("id")));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("Unable to fetch track and album metadata! " + e.toString(), download);
|
||||
e.printStackTrace();
|
||||
|
@ -305,7 +311,7 @@ public class DownloadService extends Service {
|
|||
|
||||
//ISRC Fallback
|
||||
try {
|
||||
if (trackJson.has("available_countries") && trackJson.getJSONArray("available_countries").length() == 0) {
|
||||
if (!download.isUserUploaded() && trackJson.has("available_countries") && trackJson.getJSONArray("available_countries").length() == 0) {
|
||||
logger.warn("ISRC Fallback!", download);
|
||||
JSONObject newTrackJson = Deezer.callPublicAPI("track", "isrc:" + trackJson.getString("isrc"));
|
||||
//Same track check
|
||||
|
@ -349,7 +355,11 @@ public class DownloadService extends Service {
|
|||
if (!download.priv) {
|
||||
//Check file
|
||||
try {
|
||||
outFile = new File(Deezer.generateFilename(download.path, trackJson, albumJson, newQuality));
|
||||
if (download.isUserUploaded()) {
|
||||
outFile = new File(Deezer.generateUserUploadedMP3Filename(download.path, privateJson));
|
||||
} else {
|
||||
outFile = new File(Deezer.generateFilename(download.path, trackJson, albumJson, newQuality));
|
||||
}
|
||||
parentDir = new File(outFile.getParent());
|
||||
} catch (Exception e) {
|
||||
logger.error("Error generating track filename (" + download.path + "): " + e.toString(), download);
|
||||
|
@ -486,7 +496,8 @@ public class DownloadService extends Service {
|
|||
}
|
||||
}
|
||||
|
||||
if (!download.priv) {
|
||||
//Cover & Tags, ignore on user uploaded
|
||||
if (!download.priv && !download.isUserUploaded()) {
|
||||
|
||||
//Download cover for each track
|
||||
File coverFile = new File(outFile.getPath().substring(0, outFile.getPath().lastIndexOf('.')) + ".jpg");
|
||||
|
@ -520,18 +531,18 @@ public class DownloadService extends Service {
|
|||
|
||||
JSONObject lyricsData = null;
|
||||
//Lyrics
|
||||
if (settings.downloadLyrics) {
|
||||
try {
|
||||
lyricsData = deezer.callGWAPI("song.getLyrics", "{\"sng_id\": " + download.trackId + "}");
|
||||
try {
|
||||
lyricsData = deezer.callGWAPI("song.getLyrics", "{\"sng_id\": " + download.trackId + "}");
|
||||
if (settings.downloadLyrics) {
|
||||
String lrcData = Deezer.generateLRC(lyricsData, trackJson);
|
||||
//Create file
|
||||
String lrcFilename = outFile.getPath().substring(0, outFile.getPath().lastIndexOf(".")+1) + "lrc";
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(lrcFilename);
|
||||
fileOutputStream.write(lrcData.getBytes());
|
||||
fileOutputStream.close();
|
||||
} catch (Exception e) {
|
||||
logger.warn("Error downloading lyrics! " + e.toString(), download);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("Error downloading lyrics! " + e.toString(), download);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue