/* * Copyright 2011-2015, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: * Oliver Tappe */ #include #include #include #include namespace BPackageKit { using BSupportKit::BPrivate::JobQueue; BRequest::BRequest(const BContext& context) : fContext(context), fJobQueue(new (std::nothrow) JobQueue()) { fInitStatus = fJobQueue == NULL ? B_NO_MEMORY : B_OK; } BRequest::~BRequest() { } status_t BRequest::InitCheck() const { return fInitStatus; } BSupportKit::BJob* BRequest::PopRunnableJob() { if (fJobQueue == NULL) return NULL; return fJobQueue->Pop(); } status_t BRequest::Process(bool failIfCanceledOnly) { status_t error = InitCheck(); if (error != B_OK) return error; error = CreateInitialJobs(); if (error != B_OK) return error; while (BSupportKit::BJob* job = PopRunnableJob()) { error = job->Run(); delete job; if (error != B_OK) { if (!failIfCanceledOnly || error == B_CANCELED) return error; } } return B_OK; } status_t BRequest::QueueJob(BSupportKit::BJob* job) { if (fJobQueue == NULL) return B_NO_INIT; job->AddStateListener(this); job->AddStateListener(&fContext.JobStateListener()); return fJobQueue->AddJob(job); } } // namespace BPackageKit