1 /* 2 * Copyright 2013, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Ingo Weinhold <ingo_weinhold@gmx.de> 7 */ 8 9 10 #include <package/DownloadFileRequest.h> 11 12 #include <package/ValidateChecksumJob.h> 13 14 #include "FetchFileJob.h" 15 #include "FetchUtils.h" 16 17 18 namespace BPackageKit { 19 20 21 using namespace BPrivate; 22 23 24 DownloadFileRequest::DownloadFileRequest(const BContext& context, 25 const BString& fileURL, const BEntry& targetEntry, const BString& checksum) 26 : 27 inherited(context), 28 fFileURL(fileURL), 29 fTargetEntry(targetEntry), 30 fChecksum(checksum) 31 { 32 if (fInitStatus == B_OK) { 33 if (fFileURL.IsEmpty()) 34 fInitStatus = B_BAD_VALUE; 35 else 36 fInitStatus = targetEntry.InitCheck(); 37 } 38 } 39 40 41 DownloadFileRequest::~DownloadFileRequest() 42 { 43 } 44 45 46 status_t 47 DownloadFileRequest::CreateInitialJobs() 48 { 49 status_t error = InitCheck(); 50 if (error != B_OK) 51 return B_NO_INIT; 52 53 if (!FetchUtils::IsDownloadCompleted(BNode(&fTargetEntry))) { 54 // create the download job 55 FetchFileJob* fetchJob = new (std::nothrow) FetchFileJob(fContext, 56 BString("Downloading ") << fFileURL, fFileURL, fTargetEntry); 57 if (fetchJob == NULL) 58 return B_NO_MEMORY; 59 60 if ((error = QueueJob(fetchJob)) != B_OK) { 61 delete fetchJob; 62 return error; 63 } 64 } 65 66 // create the checksum validation job 67 if (fChecksum.IsEmpty()) 68 return B_OK; 69 70 ValidateChecksumJob* validateJob = new (std::nothrow) ValidateChecksumJob( 71 fContext, BString("Validating checksum for ") << fFileURL, 72 new (std::nothrow) StringChecksumAccessor(fChecksum), 73 new (std::nothrow) GeneralFileChecksumAccessor(fTargetEntry, true)); 74 75 if (validateJob == NULL) 76 return B_NO_MEMORY; 77 78 if ((error = QueueJob(validateJob)) != B_OK) { 79 delete validateJob; 80 return error; 81 } 82 83 return B_OK; 84 } 85 86 87 } // namespace BPackageKit 88