Rippers can now choose to use a byte progess bar
This commit is contained in:
parent
f8652ceaf7
commit
96a8801c19
@ -613,4 +613,7 @@ public abstract class AbstractRipper
|
|||||||
protected boolean isThisATest() {
|
protected boolean isThisATest() {
|
||||||
return thisIsATest;
|
return thisIsATest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If true ripme uses a byte progress bar
|
||||||
|
protected boolean useByteProgessBar() { return false;}
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,16 @@ class DownloadFileThread extends Thread {
|
|||||||
this.cookies = cookies;
|
this.cookies = cookies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getTotalBytes(URL url) throws IOException {
|
||||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setRequestMethod("HEAD");
|
||||||
|
conn.setRequestProperty("accept", "*/*");
|
||||||
|
conn.setRequestProperty("Referer", this.url.toExternalForm()); // Sic
|
||||||
|
conn.setRequestProperty("User-agent", AbstractRipper.USER_AGENT);
|
||||||
|
return conn.getContentLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to download the file. Retries as needed.
|
* Attempts to download the file. Retries as needed.
|
||||||
* Notifies observers upon completion/error/warn.
|
* Notifies observers upon completion/error/warn.
|
||||||
@ -81,6 +91,21 @@ class DownloadFileThread extends Thread {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bytesTotal, bytesDownloaded = 0;
|
||||||
|
if (observer.useByteProgessBar()) {
|
||||||
|
try {
|
||||||
|
bytesTotal = getTotalBytes(this.url);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error("Failed to get file size at " + this.url, e);
|
||||||
|
observer.downloadErrored(this.url, "Failed to get file size of " + this.url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
observer.setBytesTotal(bytesTotal);
|
||||||
|
observer.sendUpdate(STATUS.TOTAL_BYTES, bytesTotal);
|
||||||
|
logger.debug("Size of file at " + this.url + " = " + bytesTotal + "b");
|
||||||
|
}
|
||||||
|
|
||||||
URL urlToDownload = this.url;
|
URL urlToDownload = this.url;
|
||||||
boolean redirected = false;
|
boolean redirected = false;
|
||||||
int tries = 0; // Number of attempts to download
|
int tries = 0; // Number of attempts to download
|
||||||
@ -156,7 +181,23 @@ class DownloadFileThread extends Thread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fos = new FileOutputStream(saveAs);
|
fos = new FileOutputStream(saveAs);
|
||||||
IOUtils.copy(bis, fos);
|
byte[] data = new byte[1024 * 256]; int bytesRead;
|
||||||
|
while ( (bytesRead = bis.read(data)) != -1) {
|
||||||
|
try {
|
||||||
|
observer.stopCheck();
|
||||||
|
} catch (IOException e) {
|
||||||
|
observer.downloadErrored(url, "Download interrupted");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fos.write(data, 0, bytesRead);
|
||||||
|
if (observer.useByteProgessBar()) {
|
||||||
|
bytesDownloaded += bytesRead;
|
||||||
|
observer.setBytesCompleted(bytesDownloaded);
|
||||||
|
observer.sendUpdate(STATUS.COMPLETED_BYTES, bytesDownloaded);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bis.close();
|
||||||
|
fos.close();
|
||||||
break; // Download successful: break out of infinite loop
|
break; // Download successful: break out of infinite loop
|
||||||
} catch (HttpStatusException hse) {
|
} catch (HttpStatusException hse) {
|
||||||
logger.debug("HTTP status exception", hse);
|
logger.debug("HTTP status exception", hse);
|
||||||
|
Loading…
Reference in New Issue
Block a user