bool Downloader::downloadFile(NetFile *netFile) { BYTE *buffer = new BYTE[readBufferSize]; DWORD bytesRead; File file; updateFileName(netFile); updateStatus(msg("Connecting...")); setMarquee(true, false); try { netFile->open(internet); } catch(exception &e) { setMarquee(false, stopOnError ? (netFile->size == FILE_SIZE_UNKNOWN) : false); updateStatus(msg(e.what())); storeError(msg(e.what())); delete[] buffer; return false; } if(!netFile->handle) { setMarquee(false, stopOnError ? (netFile->size == FILE_SIZE_UNKNOWN) : false); updateStatus(msg("Cannot connect")); storeError(); delete[] buffer; return false; } if(!file.open(netFile->name)) { setMarquee(false, stopOnError ? (netFile->size == FILE_SIZE_UNKNOWN) : false); tstring errstr = msg("Cannot create file") + _T(" ") + netFile->name; updateStatus(errstr); storeError(errstr); delete[] buffer; return false; } Timer progressTimer(100); Timer speedTimer(1000); updateStatus(msg("Downloading...")); if(!(netFile->size == FILE_SIZE_UNKNOWN)) setMarquee(false, false); processMessages(); while(true) { if(downloadCancelled) { file.close(); netFile->close(); delete[] buffer; return true; } if(!netFile->read(buffer, readBufferSize, &bytesRead)) { setMarquee(false, netFile->size == FILE_SIZE_UNKNOWN); updateStatus(msg("Download failed")); storeError(); file.close(); netFile->close(); delete[] buffer; return false; } if(bytesRead == 0) break; file.write(buffer, bytesRead); if(progressTimer.elapsed()) updateProgress(netFile); if(speedTimer.elapsed()) updateSpeed(netFile, &speedTimer); if(sizeTimeTimer.elapsed()) updateSizeTime(netFile, &sizeTimeTimer); processMessages(); } updateProgress(netFile); updateSpeed(netFile, &speedTimer); updateSizeTime(netFile, &sizeTimeTimer); updateStatus(msg("Download complete")); processMessages(); file.close(); netFile->close(); netFile->downloaded = true; delete[] buffer; return true; }
bool Downloader::downloadFile(NetFile *netFile) { BYTE buffer[READ_BUFFER_SIZE]; DWORD bytesRead; File file; updateFileName(netFile); updateStatus(msg("Connecting...")); setMarquee(true, false); try { netFile->open(internet); } catch(exception &e) { setMarquee(false, netFile->size == FILE_SIZE_UNKNOWN); updateStatus(msg(e.what())); storeError(msg(e.what())); return false; } if(!netFile->handle) { setMarquee(false, netFile->size == FILE_SIZE_UNKNOWN); updateStatus(msg("Cannot connect")); storeError(); return false; } file.open(netFile->name); Timer progressTimer(100); Timer speedTimer(1000); updateStatus(msg("Downloading...")); if(!(netFile->size == FILE_SIZE_UNKNOWN)) setMarquee(false, false); while(true) { if(downloadCancelled) { file.close(); netFile->close(); return true; } if(!netFile->read(buffer, READ_BUFFER_SIZE, &bytesRead)) { setMarquee(false, netFile->size == FILE_SIZE_UNKNOWN); updateStatus(msg("Download failed")); storeError(); file.close(); netFile->close(); return false; } if(bytesRead == 0) break; file.write(buffer, bytesRead); if(progressTimer.elapsed()) updateProgress(netFile); if(speedTimer.elapsed()) updateSpeed(netFile, &speedTimer); if(sizeTimeTimer.elapsed()) updateSizeTime(netFile, &sizeTimeTimer); } updateProgress(netFile); updateSpeed(netFile, &speedTimer); updateSizeTime(netFile, &sizeTimeTimer); updateStatus(msg("Download complete")); file.close(); netFile->close(); netFile->downloaded = true; return true; }