Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
DalvEsrever committed Oct 8, 2022
2 parents 98a58c9 + baba2c0 commit 5e66a5b
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 40 deletions.
66 changes: 28 additions & 38 deletions app/src/main/java/ru/vtosters/lite/music/M3UDownloader.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,59 +10,55 @@
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

import javax.crypto.NoSuchPaddingException;

import java8.util.concurrent.CompletableFuture;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import ru.vtosters.lite.music.converter.ts.FFMpeg;
import ru.vtosters.lite.music.converter.ts.TSMerger;
import ru.vtosters.lite.music.downloader.ThumbnailDownloader;
import ru.vtosters.lite.music.interfaces.ITrackDownloader;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.IOUtils;

public class M3UDownloader implements ITrackDownloader {
private static final OkHttpClient client = new OkHttpClient();
private ExecutorService executorService = Executors.newSingleThreadExecutor();

public static M3UDownloader getInstance() {
return Holder.INSTANCE;
}

public void downloadTrack(MusicTrack track, File outDir, Callback callback, boolean cache) {
var request = new Request.a()
.b(track.D)
.a();
client.a(request).a(new okhttp3.Callback() {
@Override
public void a(Call call, IOException e) {
callback.onFailure();
}

@Override
public void a(Call call, Response response) throws IOException {
parse(response.a().g(), outDir, callback, track, cache);
}
});
var request = new Request.a().b(track.D).a();
try {
var response = client.a(request).execute().a().g();
parse(response, outDir, callback, track, cache);
} catch (IOException e) {
e.printStackTrace();
callback.onFailure();
}
}

private void parse(String payload, File outDir, Callback callback, MusicTrack track, boolean cache) {
if (cache)
try {
ThumbnailDownloader.downloadThumbnails(track);
} catch (IOException e) {
e.printStackTrace();
}
if (cache) try {
ThumbnailDownloader.downloadThumbnails(track);
} catch (IOException e) {
e.printStackTrace();
}

VKM3UParser parser = new VKM3UParser(payload);
List<TransportStream> tses = parser.getTransportStreams();
AtomicInteger progress = new AtomicInteger(0);
List<CompletableFuture<Void>> futures = new ArrayList<>(tses.size());

var tsesDir = new File(outDir, String.valueOf(track.d));
var filesDir = AndroidUtils.getGlobalContext().getFilesDir();
var tsesDir = new File(filesDir, String.valueOf(track.d));
tsesDir.mkdirs();
var resultTs = new File(tsesDir, "result.ts");

Expand Down Expand Up @@ -96,28 +92,22 @@ private void parse(String payload, File outDir, Callback callback, MusicTrack tr
IOUtils.writeToFile(tsDump, content);
callback.onProgress(10 + Math.round(80.0f * progress.addAndGet(1) / tses.size()));
callback.onSizeReceived((long) content.length * tses.size(), parser.getHeapSize());
} catch (IOException | NoSuchPaddingException | NoSuchAlgorithmException |
InvalidAlgorithmParameterException | InvalidKeyException e) {
} catch (IOException | NoSuchPaddingException | NoSuchAlgorithmException | InvalidAlgorithmParameterException | InvalidKeyException e) {
callback.onFailure();
throw new RuntimeException(e);
}
}));
}
var future = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
future.exceptionally(throwable -> {
callback.onFailure();
return null;
})
.thenApply(v -> TSMerger.merge(tsesDir, resultTs))
.thenApply(mergeResult -> mergeResult && FFMpeg.convert(resultTs, resultMp3.getAbsolutePath(), track))
.thenApply(convertResult -> {
if (convertResult)
callback.onProgress(10 + Math.round(80.0f * progress.addAndGet(1) / tses.size()));
else callback.onFailure();
return convertResult;
})
.thenRun(() -> IOUtils.deleteRecursive(tsesDir))
.thenRun(callback::onSuccess);
callback.onFailure();
return null;
}).thenApply(v -> TSMerger.merge(tsesDir, resultTs)).thenApply(mergeResult -> mergeResult && FFMpeg.convert(resultTs, resultMp3.getAbsolutePath(), track)).thenApply(convertResult -> {
if (convertResult)
callback.onProgress(10 + Math.round(80.0f * progress.addAndGet(1) / tses.size()));
else callback.onFailure();
return convertResult;
}).thenRun(() -> IOUtils.deleteRecursive(tsesDir)).thenRun(callback::onSuccess);
}

// Initialization-on-demand
Expand Down
1 change: 0 additions & 1 deletion smali/res/layout/attach_comment_photo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
android:layout_marginBottom="8.0dip"
android:contentDescription="@string/photo"
app:actualImageScaleType="centerCrop"
app:overlayImage="@drawable/scrim_bottom_16percent"
app:placeholderImage="?placeholder_icon_background"
app:roundedCornerRadius="4.0dip" />
</FrameLayout>
1 change: 0 additions & 1 deletion smali/res/layout/attach_comment_video.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
android:layout_width="120.0dip"
android:layout_height="80.0dip"
app:actualImageScaleType="centerCrop"
app:overlayImage="@drawable/scrim_bottom_16percent"
app:roundedCornerRadius="4.0dip" />

<com.vk.libvideo.ui.VideoRestrictionView
Expand Down

0 comments on commit 5e66a5b

Please sign in to comment.