utilize downloaded files within detail activities

This commit is contained in:
dkanada 2021-05-09 13:44:31 +09:00
commit 395b1227c9
11 changed files with 100 additions and 15 deletions

View file

@ -2,13 +2,13 @@ package com.dkanada.gramophone.service;
import android.app.Service;
import android.content.Intent;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import com.dkanada.gramophone.App;
import com.dkanada.gramophone.BuildConfig;
import com.dkanada.gramophone.database.Cache;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.MusicUtil;
@ -50,11 +50,7 @@ public class DownloadService extends Service {
try {
URL url = new URL(MusicUtil.getDownloadUri(song));
URLConnection connection = url.openConnection();
File root = new File(App.getInstance().getCacheDir(), "music");
String path = song.artistName + "/" + song.albumName + "/";
String name = song.discNumber + "." + song.trackNumber + " - " + song.title + "." + song.container;
File audio = new File(root, path + name);
File audio = new File(MusicUtil.getFileUri(song));
audio.getParentFile().mkdirs();
audio.createNewFile();
@ -64,7 +60,7 @@ public class DownloadService extends Service {
connection.connect();
byte[] data = new byte[4096];
byte[] data = new byte[262144];
int count;
while ((count = input.read(data)) != -1) {
@ -73,6 +69,8 @@ public class DownloadService extends Service {
input.close();
output.close();
App.getDatabase().cacheDao().insertCache(new Cache(song));
} catch (Exception e) {
e.printStackTrace();
}

View file

@ -96,15 +96,14 @@ public class LocalPlayer implements Playback {
@Override
public void setDataSource(Song song) {
String uri = MusicUtil.getTranscodeUri(song);
MediaItem mediaItem = exoPlayer.getCurrentMediaItem();
if (mediaItem != null && mediaItem.playbackProperties.uri.toString().equals(uri)) {
if (mediaItem != null && mediaItem.mediaId.equals(song.id)) {
return;
}
exoPlayer.clearMediaItems();
appendDataSource(MusicUtil.getTranscodeUri(song));
appendDataSource(song);
exoPlayer.seekTo(0, 0);
}
@ -114,12 +113,19 @@ public class LocalPlayer implements Playback {
exoPlayer.removeMediaItem(1);
}
appendDataSource(MusicUtil.getTranscodeUri(song));
appendDataSource(song);
}
private void appendDataSource(String path) {
Uri uri = Uri.parse(path);
private void appendDataSource(Song song) {
File audio = new File(MusicUtil.getFileUri(song));
Uri uri = Uri.fromFile(audio);
if (!song.cache || !audio.exists()) {
uri = Uri.parse(MusicUtil.getTranscodeUri(song));
}
MediaItem mediaItem = MediaItem.fromUri(uri);
mediaItem = mediaItem.buildUpon().setMediaId(song.id).build();
exoPlayer.addMediaItem(mediaItem);
}

View file

@ -42,6 +42,10 @@ class UnknownMediaSourceFactory(dataSourceFactory: DataSource.Factory) : MediaSo
}
override fun createMediaSource(mediaItem: MediaItem): MediaSource {
if (mediaItem.playbackProperties?.uri.toString().contains("file://")) {
return progressiveMediaSource.createMediaSource(mediaItem)
}
val type: String? = runBlocking {
httpGet(mediaItem.playbackProperties!!.uri.toString())
}