96 lines
3.0 KiB
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);
|
|
}
|
|
}
|