1/* 2 * Copyright 2011-2015, 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 32bool 33BDecisionProvider::YesNoDecisionNeeded(const BString& description, 34 const BString& question, const BString& yes, const BString& no, 35 const BString& defaultChoice) 36{ 37 return defaultChoice == yes; 38} 39 40 41BContext::BContext(BDecisionProvider& decisionProvider, 42 BSupportKit::BJobStateListener& jobStateListener) 43 : 44 fDecisionProvider(decisionProvider), 45 fJobStateListener(jobStateListener), 46 fTempfileManager(NULL) 47{ 48 fInitStatus = _Initialize(); 49} 50 51 52BContext::~BContext() 53{ 54 delete fTempfileManager; 55} 56 57 58status_t 59BContext::InitCheck() const 60{ 61 return fInitStatus; 62} 63 64 65status_t 66BContext::GetNewTempfile(const BString& baseName, BEntry* entry) const 67{ 68 if (entry == NULL) 69 return B_BAD_VALUE; 70 if (fTempfileManager == NULL) 71 return B_NO_INIT; 72 *entry = fTempfileManager->Create(baseName); 73 return entry->InitCheck(); 74} 75 76 77BSupportKit::BJobStateListener& 78BContext::JobStateListener() const 79{ 80 return fJobStateListener; 81} 82 83 84BDecisionProvider& 85BContext::DecisionProvider() const 86{ 87 return fDecisionProvider; 88} 89 90 91status_t 92BContext::_Initialize() 93{ 94 fTempfileManager = new (std::nothrow) TempfileManager(); 95 if (fTempfileManager == NULL) 96 return B_NO_MEMORY; 97 98 BPath tempPath; 99 status_t result = find_directory(B_SYSTEM_TEMP_DIRECTORY, &tempPath, true); 100 if (result != B_OK) 101 return result; 102 BDirectory tempDirectory(tempPath.Path()); 103 if ((result = tempDirectory.InitCheck()) != B_OK) 104 return result; 105 106 BString contextName = BString("pkgkit-context-") << find_thread(NULL) 107 << "-" << system_time(); 108 BDirectory baseDirectory; 109 result = tempDirectory.CreateDirectory(contextName.String(), 110 &baseDirectory); 111 if (result != B_OK) 112 return result; 113 114 fTempfileManager->SetBaseDirectory(baseDirectory); 115 116 return B_OK; 117} 118 119 120} // namespace BPackageKit 121