TvTotalRipper/src/main/java/com/greinet/tvtotalripper/download/DownloadTask.java
agreiner f8dd7be711 - Deleted unused classes
- Refined and added javadoc
- Disabled MetaDataWriter
2021-04-05 23:14:41 +02:00

131 lines
4.1 KiB
Java

package com.greinet.tvtotalripper.download;
import com.greinet.tvtotalripper.crawler.CrawlerUtil;
import com.greinet.tvtotalripper.crawler.EpisodeWrapper;
import com.greinet.tvtotalripper.ui.SettingsRipperPanel;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.SwingWorker;
/**
* A task representing a single file download
*/
public class DownloadTask extends SwingWorker<Void, Void> {
/** The download buffer size */
private static final int BUFFER_SIZE = 4096;
/** The episode of the downloaded file */
private final EpisodeWrapper episodeWrapper;
/**
* Create a download task for a episode
* @param episodeWrapper
*/
public DownloadTask(EpisodeWrapper episodeWrapper) {
this.episodeWrapper = episodeWrapper;
}
/**
* Get the episode of the download
* @return the episode
*/
public EpisodeWrapper getEpisodeWrapper() {
return episodeWrapper;
}
@Override
public String toString() {
return episodeWrapper.getTitle();
}
/** The bytes size of the file to download */
private long fileSize = 0;
/** the amount of downloaded bytes */
private long totalBytesRead = 0;
/** The completion percentage */
private int percentCompleted = 0;
/**
* Executed in background thread
*/
@Override
protected Void doInBackground() throws Exception {
try {
String downloadURL = CrawlerUtil.getFetchfileURL(episodeWrapper.getUrl());
ConnectionUtil util = new ConnectionUtil();
util.prepare(downloadURL);
InputStream inputStream = util.getInputStream();
String fixedTitle = episodeWrapper.getTitle().replace(":", " ");
File outputFile = new File(SettingsRipperPanel.DOWNLOADFOLDER, fixedTitle+".mp4");
try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead;
totalBytesRead = 0;
percentCompleted = 0;
int oldPercentCompleted = 0;
fileSize = util.getContentLength();
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
percentCompleted = (int) (totalBytesRead * 100 / fileSize);
firePropertyChange(Long.toString(episodeWrapper.getId()), oldPercentCompleted, percentCompleted);
oldPercentCompleted = percentCompleted;
//setProgress(percentCompleted);
}
}
util.disconnect();
// Enable MetaDataWriter
// MetaDataWriter mdp = new MetaDataWriter();
// mdp.writeMetadata(outputFile.getAbsolutePath(), episodeWrapper.getTitle(), episodeWrapper.getShow(), episodeWrapper.getShow(), episodeWrapper.getEpisode());
} catch (IOException ex) {
cancel(true);
}
return null;
}
/**
* Get the download file size in bytes
* @return the file size in bytes
*/
public long getFileSize() {
return fileSize;
}
/**
* Get the amount of already downloaded bytes
* @return the amount of already downloaded bytes
*/
public long getTotalBytesRead() {
return totalBytesRead;
}
/**
* Get the completiton percentage
* @return the completition percentage
*/
public int getPercentCompleted() {
return percentCompleted;
}
/**
* Fire a property change event with the progress value of 101 meaning that the task is done
*/
@Override
protected void done() {
firePropertyChange(Long.toString(episodeWrapper.getId()), 0, 101);
}
}