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