mirror of
https://github.com/fabianonline/telegram_backup.git
synced 2024-11-22 16:56:16 +00:00
Caching partially downloaded media data.
This commit is contained in:
parent
fc7d3fdcbc
commit
f460d2307a
@ -43,6 +43,8 @@ import java.util.List;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
@ -267,8 +269,21 @@ public class DownloadManager {
|
|||||||
private static boolean downloadFileFromDc(TelegramClient client, String target, TLAbsInputFileLocation loc, Integer dcID, int size) throws RpcErrorException, IOException {
|
private static boolean downloadFileFromDc(TelegramClient client, String target, TLAbsInputFileLocation loc, Integer dcID, int size) throws RpcErrorException, IOException {
|
||||||
FileOutputStream fos = null;
|
FileOutputStream fos = null;
|
||||||
try {
|
try {
|
||||||
fos = new FileOutputStream(target);
|
String temp_filename = target + ".downloading";
|
||||||
|
Log.debug("Temporary filename %s", temp_filename);
|
||||||
|
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
if (new File(temp_filename).isFile()) {
|
||||||
|
Log.debug("Temporary filename already exists; continuing this file");
|
||||||
|
offset = (int)new File(temp_filename).length();
|
||||||
|
if (offset >= size) {
|
||||||
|
Log.debug("Temporary file size is >= the target size. Assuming corrupt file & deleting it");
|
||||||
|
new File(temp_filename).delete();
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Log.debug("offset before the loop is %d", offset);
|
||||||
|
fos = new FileOutputStream(temp_filename, true);
|
||||||
TLFile response;
|
TLFile response;
|
||||||
do {
|
do {
|
||||||
int block_size = Config.FILE_DOWNLOAD_BLOCK_SIZES[new Random().nextInt(Config.FILE_DOWNLOAD_BLOCK_SIZES.length)];
|
int block_size = Config.FILE_DOWNLOAD_BLOCK_SIZES[new Random().nextInt(Config.FILE_DOWNLOAD_BLOCK_SIZES.length)];
|
||||||
@ -285,23 +300,24 @@ public class DownloadManager {
|
|||||||
Log.debug("response: %8d total size: %8d", response.getBytes().getData().length, offset);
|
Log.debug("response: %8d total size: %8d", response.getBytes().getData().length, offset);
|
||||||
|
|
||||||
fos.write(response.getBytes().getData());
|
fos.write(response.getBytes().getData());
|
||||||
|
fos.flush();
|
||||||
try { Thread.sleep(Config.DELAY_AFTER_GET_FILE); } catch(InterruptedException e) {}
|
try { Thread.sleep(Config.DELAY_AFTER_GET_FILE); } catch(InterruptedException e) {}
|
||||||
} while(offset < size && response.getBytes().getData().length>0);
|
} while(offset < size && response.getBytes().getData().length>0);
|
||||||
fos.close();
|
fos.close();
|
||||||
if (offset < size) {
|
if (offset < size) {
|
||||||
System.out.println("Requested file " + target + " with " + size + " bytes, but got only " + offset + " bytes.");
|
System.out.println("Requested file " + target + " with " + size + " bytes, but got only " + offset + " bytes.");
|
||||||
new File(target).delete();
|
new File(temp_filename).delete();
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
Log.debug("Renaming %s to %s", temp_filename, target);
|
||||||
|
Files.move(new File(temp_filename).toPath(), new File(target).toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
return true;
|
return true;
|
||||||
} catch (java.io.IOException ex) {
|
} catch (java.io.IOException ex) {
|
||||||
if (fos!=null) fos.close();
|
if (fos!=null) fos.close();
|
||||||
new File(target).delete();
|
|
||||||
System.out.println("IOException happened while downloading " + target);
|
System.out.println("IOException happened while downloading " + target);
|
||||||
throw ex;
|
throw ex;
|
||||||
} catch (RpcErrorException ex) {
|
} catch (RpcErrorException ex) {
|
||||||
if (fos!=null) fos.close();
|
if (fos!=null) fos.close();
|
||||||
new File(target).delete();
|
|
||||||
System.out.println("RpcErrorException happened while downloading " + target);
|
System.out.println("RpcErrorException happened while downloading " + target);
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user