caching....
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package ru.vtosters.lite.downloaders;
|
||||
|
||||
import static ru.vtosters.lite.music.cache.FileCacheImplementation.getCacheDir;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
@@ -55,16 +57,16 @@ public class AudioDownloader {
|
||||
}
|
||||
|
||||
public static void downloadAudio(MusicTrack track) {
|
||||
downloadM3U8(track);
|
||||
downloadM3U8(track, false);
|
||||
}
|
||||
|
||||
private static void downloadM3U8(MusicTrack track) {
|
||||
private static void downloadM3U8(MusicTrack track, boolean cache) {
|
||||
if (track.D == null) {
|
||||
ToastUtils.a(AndroidUtils.getString("link_audio_error"));
|
||||
return;
|
||||
}
|
||||
|
||||
var musicPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
|
||||
var musicPath = cache ? getCacheDir().getAbsolutePath() : Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
|
||||
var tempId = track.d;
|
||||
var downloadPath = musicPath + File.separator;
|
||||
var notification = buildDownloadNotification(track, tempId);
|
||||
@@ -111,7 +113,7 @@ public class AudioDownloader {
|
||||
public void onSizeReceived(long size, long header) {
|
||||
|
||||
}
|
||||
});
|
||||
}, cache);
|
||||
}
|
||||
|
||||
public static void cacheTrack(MusicTrack track) {
|
||||
@@ -122,7 +124,7 @@ public class AudioDownloader {
|
||||
var trackFile = FileCacheImplementation.getTrackFile(trackId);
|
||||
if (!trackFile.exists())
|
||||
trackFile.getParentFile().mkdirs();
|
||||
downloadM3U8(track);
|
||||
downloadM3U8(track, true);
|
||||
notifySavingToCache(track);
|
||||
CacheDatabaseDelegate.insertTrack(track);
|
||||
NotificationChannels.getNotificationManager().cancel(trackId.hashCode());
|
||||
|
||||
@@ -14,6 +14,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import javax.crypto.NoSuchPaddingException;
|
||||
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||
import java8.util.concurrent.CompletableFuture;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.OkHttpClient;
|
||||
@@ -31,7 +32,7 @@ public class M3UDownloader implements ITrackDownloader {
|
||||
return Holder.INSTANCE;
|
||||
}
|
||||
|
||||
public void downloadTrack(MusicTrack track, File outDir, Callback callback) {
|
||||
public void downloadTrack(MusicTrack track, File outDir, Callback callback, boolean cache) {
|
||||
var request = new Request.a()
|
||||
.b(track.D)
|
||||
.a();
|
||||
@@ -43,12 +44,12 @@ public class M3UDownloader implements ITrackDownloader {
|
||||
|
||||
@Override
|
||||
public void a(Call call, Response response) throws IOException {
|
||||
parse(response.a().g(), outDir, callback, track);
|
||||
parse(response.a().g(), outDir, callback, track, cache);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void parse(String payload, File outDir, Callback callback, MusicTrack track) {
|
||||
private void parse(String payload, File outDir, Callback callback, MusicTrack track, boolean cache) {
|
||||
VKM3UParser parser = new VKM3UParser(payload);
|
||||
List<TransportStream> tses = parser.getTransportStreams();
|
||||
AtomicInteger progress = new AtomicInteger(0);
|
||||
@@ -57,7 +58,7 @@ public class M3UDownloader implements ITrackDownloader {
|
||||
var tsesDir = new File(outDir, String.valueOf(payload.hashCode()));
|
||||
tsesDir.mkdirs();
|
||||
var resultTs = new File(tsesDir, "result.ts");
|
||||
var resultMp3 = new File(outDir, IOUtils.getValidFileName(track.toString()) + ".mp3");
|
||||
var resultMp3 = new File(outDir, IOUtils.getValidFileName(cache ? LibVKXClient.asId(track) : track.toString()) + ".mp3");
|
||||
|
||||
callback.onProgress(5);
|
||||
for (TransportStream ts : tses) {
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ public class FileCacheImplementation {
|
||||
}
|
||||
|
||||
public static File getTrackFile(String trackId) {
|
||||
return new File(getTrackFolder(trackId), "track.mp3");
|
||||
return new File(getCacheDir(), trackId + ".mp3");
|
||||
}
|
||||
|
||||
public static boolean isTrackExist(String trackId) {
|
||||
|
||||
@@ -57,7 +57,7 @@ public class PlaylistDownloader {
|
||||
|
||||
@Override
|
||||
public void onSizeReceived(long size, long header) {}
|
||||
});
|
||||
}, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,17 +17,17 @@ public class TrackDownloader {
|
||||
* @param path Folder where to put track
|
||||
* @param callback Callback to call when download status changes
|
||||
*/
|
||||
public static void downloadTrack(MusicTrack track, String path, Callback callback) {
|
||||
download(track, path, callback, M3UDownloader.getInstance());
|
||||
public static void downloadTrack(MusicTrack track, String path, Callback callback, boolean cache) {
|
||||
download(track, path, callback, M3UDownloader.getInstance(), cache);
|
||||
}
|
||||
|
||||
private static void download(MusicTrack track, String path, Callback callback, ITrackDownloader downloader) {
|
||||
private static void download(MusicTrack track, String path, Callback callback, ITrackDownloader downloader, boolean cache) {
|
||||
File outDir = new File(path);
|
||||
if (!outDir.exists())
|
||||
if (outDir.mkdir())
|
||||
Log.v("TrackDownloader", "Directory created");
|
||||
else
|
||||
Log.e("TrackDownloader", "Directory creation failed");
|
||||
downloader.downloadTrack(track, outDir, callback);
|
||||
downloader.downloadTrack(track, outDir, callback, cache);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,5 +16,5 @@ public interface ITrackDownloader {
|
||||
* @param outDir Directory where to download the track
|
||||
* @param callback Callback to call when download status changes
|
||||
*/
|
||||
void downloadTrack(MusicTrack track, File outDir, Callback callback);
|
||||
void downloadTrack(MusicTrack track, File outDir, Callback callback, boolean cache);
|
||||
}
|
||||
Reference in New Issue
Block a user