* Copyright 2011-2015, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Oliver Tappe <zooey@hirschkaefer.de>
*/
#include <new>
#include <package/Context.h>
#include <package/TempfileManager.h>
#include <Directory.h>
#include <FindDirectory.h>
#include <OS.h>
#include <Path.h>
namespace BPackageKit {
using BPrivate::TempfileManager;
BDecisionProvider::~BDecisionProvider()
{
}
bool
BDecisionProvider::YesNoDecisionNeeded(const BString& description,
const BString& question, const BString& yes, const BString& no,
const BString& defaultChoice)
{
return defaultChoice == yes;
}
BContext::BContext(BDecisionProvider& decisionProvider,
BSupportKit::BJobStateListener& jobStateListener)
:
fDecisionProvider(decisionProvider),
fJobStateListener(jobStateListener),
fTempfileManager(NULL)
{
fInitStatus = _Initialize();
}
BContext::~BContext()
{
delete fTempfileManager;
}
status_t
BContext::InitCheck() const
{
return fInitStatus;
}
status_t
BContext::GetNewTempfile(const BString& baseName, BEntry* entry) const
{
if (entry == NULL)
return B_BAD_VALUE;
if (fTempfileManager == NULL)
return B_NO_INIT;
*entry = fTempfileManager->Create(baseName);
return entry->InitCheck();
}
BSupportKit::BJobStateListener&
BContext::JobStateListener() const
{
return fJobStateListener;
}
BDecisionProvider&
BContext::DecisionProvider() const
{
return fDecisionProvider;
}
status_t
BContext::_Initialize()
{
fTempfileManager = new (std::nothrow) TempfileManager();
if (fTempfileManager == NULL)
return B_NO_MEMORY;
BPath tempPath;
status_t result = find_directory(B_SYSTEM_TEMP_DIRECTORY, &tempPath, true);
if (result != B_OK)
return result;
BDirectory tempDirectory(tempPath.Path());
if ((result = tempDirectory.InitCheck()) != B_OK)
return result;
BString contextName = BString("pkgkit-context-") << find_thread(NULL)
<< "-" << system_time();
BDirectory baseDirectory;
result = tempDirectory.CreateDirectory(contextName.String(),
&baseDirectory);
if (result != B_OK)
return result;
fTempfileManager->SetBaseDirectory(baseDirectory);
return B_OK;
}
}