caching....

This commit is contained in:
gdlbo
2022-09-17 20:03:27 +03:00
parent 00dda2141b
commit c27410d359
6 changed files with 19 additions and 16 deletions
@@ -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) {
@@ -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);
}