2 * Copyright 2011-2015, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
6 * Oliver Tappe <zooey@hirschkaefer.de>
7 * Rene Gollent <rene@gollent.com>
16 namespace BSupportKit
{
19 BJobStateListener::~BJobStateListener()
25 BJobStateListener::JobStarted(BJob
* job
)
31 BJobStateListener::JobProgress(BJob
* job
)
37 BJobStateListener::JobSucceeded(BJob
* job
)
43 BJobStateListener::JobFailed(BJob
* job
)
49 BJobStateListener::JobAborted(BJob
* job
)
57 BJob::BJob(const BString
& title
)
60 fState(B_JOB_STATE_WAITING_TO_RUN
),
61 fTicketNumber(0xFFFFFFFFUL
)
63 if (fTitle
.Length() == 0)
64 fInitStatus
= B_BAD_VALUE
;
76 BJob::InitCheck() const
104 BJob::ErrorString() const
111 BJob::TicketNumber() const
113 return fTicketNumber
;
118 BJob::_SetTicketNumber(uint32 ticketNumber
)
120 fTicketNumber
= ticketNumber
;
125 BJob::_ClearTicketNumber()
127 fTicketNumber
= 0xFFFFFFFFUL
;
132 BJob::SetErrorString(const BString
& error
)
134 fErrorString
= error
;
141 if (fState
!= B_JOB_STATE_WAITING_TO_RUN
)
142 return B_NOT_ALLOWED
;
144 fState
= B_JOB_STATE_STARTED
;
145 NotifyStateListeners();
147 fState
= B_JOB_STATE_IN_PROGRESS
;
151 fState
= fResult
== B_OK
152 ? B_JOB_STATE_SUCCEEDED
153 : fResult
== B_CANCELED
154 ? B_JOB_STATE_ABORTED
155 : B_JOB_STATE_FAILED
;
156 NotifyStateListeners();
163 BJob::Cleanup(status_t
/*jobResult*/)
169 BJob::AddStateListener(BJobStateListener
* listener
)
171 return fStateListeners
.AddItem(listener
) ? B_OK
: B_ERROR
;
176 BJob::RemoveStateListener(BJobStateListener
* listener
)
178 return fStateListeners
.RemoveItem(listener
) ? B_OK
: B_ERROR
;
183 BJob::AddDependency(BJob
* job
)
185 if (fDependencies
.HasItem(job
))
188 if (fDependencies
.AddItem(job
) && job
->fDependantJobs
.AddItem(this))
196 BJob::RemoveDependency(BJob
* job
)
198 if (!fDependencies
.HasItem(job
))
201 if (fDependencies
.RemoveItem(job
) && job
->fDependantJobs
.RemoveItem(this))
209 BJob::IsRunnable() const
211 return fDependencies
.IsEmpty();
216 BJob::CountDependencies() const
218 return fDependencies
.CountItems();
223 BJob::DependantJobAt(int32 index
) const
225 return fDependantJobs
.ItemAt(index
);
230 BJob::SetState(BJobState state
)
237 BJob::NotifyStateListeners()
239 int32 count
= fStateListeners
.CountItems();
240 for (int i
= 0; i
< count
; ++i
) {
241 BJobStateListener
* listener
= fStateListeners
.ItemAt(i
);
242 if (listener
== NULL
)
245 case B_JOB_STATE_STARTED
:
246 listener
->JobStarted(this);
248 case B_JOB_STATE_IN_PROGRESS
:
249 listener
->JobProgress(this);
251 case B_JOB_STATE_SUCCEEDED
:
252 listener
->JobSucceeded(this);
254 case B_JOB_STATE_FAILED
:
255 listener
->JobFailed(this);
257 case B_JOB_STATE_ABORTED
:
258 listener
->JobAborted(this);
267 } // namespace BPackageKit