1/* 2 * Copyright 2011, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Oliver Tappe <zooey@hirschkaefer.de> 7 */ 8 9 10#include <new> 11 12#include <package/Context.h> 13#include <package/TempfileManager.h> 14 15#include <Directory.h> 16#include <FindDirectory.h> 17#include <OS.h> 18#include <Path.h> 19 20 21namespace BPackageKit { 22 23 24using BPrivate::TempfileManager; 25 26 27BDecisionProvider::~BDecisionProvider() 28{ 29} 30 31 32BContext::BContext(BDecisionProvider& decisionProvider, 33 BJobStateListener& jobStateListener) 34 : 35 fDecisionProvider(decisionProvider), 36 fJobStateListener(jobStateListener), 37 fTempfileManager(NULL) 38{ 39 fInitStatus = _Initialize(); 40} 41 42 43BContext::~BContext() 44{ 45 delete fTempfileManager; 46} 47 48 49status_t 50BContext::InitCheck() const 51{ 52 return fInitStatus; 53} 54 55 56status_t 57BContext::GetNewTempfile(const BString& baseName, BEntry* entry) const 58{ 59 if (entry == NULL) 60 return B_BAD_VALUE; 61 if (fTempfileManager == NULL) 62 return B_NO_INIT; 63 *entry = fTempfileManager->Create(baseName); 64 return entry->InitCheck(); 65} 66 67 68BJobStateListener& 69BContext::JobStateListener() const 70{ 71 return fJobStateListener; 72} 73 74 75BDecisionProvider& 76BContext::DecisionProvider() const 77{ 78 return fDecisionProvider; 79} 80 81 82status_t 83BContext::_Initialize() 84{ 85 fTempfileManager = new (std::nothrow) TempfileManager(); 86 if (fTempfileManager == NULL) 87 return B_NO_MEMORY; 88 89 BPath tempPath; 90 status_t result = find_directory(B_COMMON_TEMP_DIRECTORY, &tempPath, true); 91 if (result != B_OK) 92 return result; 93 BDirectory tempDirectory(tempPath.Path()); 94 if ((result = tempDirectory.InitCheck()) != B_OK) 95 return result; 96 97 BString contextName = BString("pkgkit-context-") << find_thread(NULL); 98 BDirectory baseDirectory; 99 result = tempDirectory.CreateDirectory(contextName.String(), 100 &baseDirectory); 101 if (result != B_OK) 102 return result; 103 104 fTempfileManager->SetBaseDirectory(baseDirectory); 105 106 return B_OK; 107} 108 109 110} // namespace BPackageKit 111