TvTotalRipper/src/main/java/com/greinet/tvtotalripper/download/DownloadTask.java

96 lines
3.0 KiB
Java

package com.greinet.tvtotalripper.download;
import com.greinet.tvtotalripper.MetaDataWriter;
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;
/**
*
* @author agreiner
*/
public class DownloadTask extends SwingWorker<Void, Void> {
private static final int BUFFER_SIZE = 4096;
private final EpisodeWrapper episodeWrapper;
public DownloadTask(EpisodeWrapper episodeWrapper) {
this.episodeWrapper = episodeWrapper;
}
public EpisodeWrapper getEpisodeWrapper() {
return episodeWrapper;
}
@Override
public String toString() {
return episodeWrapper.getTitle();
}
public long fileSize = 0;
public long totalBytesRead = 0;
public 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");
FileOutputStream outputStream = new FileOutputStream(outputFile);
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
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);
}
outputStream.close();
util.disconnect();
MetaDataWriter mdp = new MetaDataWriter();
mdp.writeMetadata(outputFile.getAbsolutePath(), episodeWrapper.getTitle(), episodeWrapper.getShow(), episodeWrapper.getShow(), episodeWrapper.getEpisode());
} catch (IOException ex) {
cancel(true);
}
return null;
}
/**
* Executed in Swing's event dispatching thread
*/
@Override
protected void done() {
firePropertyChange(Long.toString(episodeWrapper.getId()), 0, 101);
}
}