HaikuDepot: add change confirmation event to progress listener
* Add a new event "ConfirmedChanges" to PackageProgressListener. It triggers when a package action was confirmed by the user and is about to be run. This can be used to e.g. get a full list of packages about to be installed (i.e. including dependencies) right before the process of fetching/installing them is started. * Add a handler for it which looks at PackagesToActivate and sets all their PackageInfo states to pending (so now, when installing a package, its dependencies immediately become pending as well).
This commit is contained in:
@@ -1,11 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-2015, Haiku, Inc. All Rights Reserved.
|
* Copyright 2013-2017, Haiku, Inc. All Rights Reserved.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* Ingo Weinhold <[email protected]>
|
* Ingo Weinhold <[email protected]>
|
||||||
* Stephan Aßmus <[email protected]>
|
* Stephan Aßmus <[email protected]>
|
||||||
* Rene Gollent <[email protected]>
|
* Rene Gollent <[email protected]>
|
||||||
|
* Julian Harnath <[email protected]>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -86,6 +87,13 @@ PackageProgressListener::DownloadProgressComplete(const char* packageName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
PackageProgressListener::ConfirmedChanges(
|
||||||
|
BPackageManager::InstalledRepository& repository)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
PackageProgressListener::StartApplyingChanges(
|
PackageProgressListener::StartApplyingChanges(
|
||||||
BPackageManager::InstalledRepository& repository)
|
BPackageManager::InstalledRepository& repository)
|
||||||
@@ -209,6 +217,20 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void ConfirmedChanges(BPackageManager::InstalledRepository&
|
||||||
|
repository)
|
||||||
|
{
|
||||||
|
BPackageManager::InstalledRepository::PackageList& activationList =
|
||||||
|
repository.PackagesToActivate();
|
||||||
|
|
||||||
|
BSolverPackage* package = NULL;
|
||||||
|
for (int32 i = 0; (package = activationList.ItemAt(i)); i++) {
|
||||||
|
PackageInfoRef ref(FindPackageByName(package->Info().Name()));
|
||||||
|
if (ref.Get() != NULL)
|
||||||
|
ref->SetState(PENDING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _SetDownloadedPackagesState(PackageState state)
|
void _SetDownloadedPackagesState(PackageState state)
|
||||||
{
|
{
|
||||||
@@ -690,6 +712,7 @@ PackageManager::ConfirmChanges(bool fromMostSpecific)
|
|||||||
|
|
||||||
bool hasOtherChanges = false;
|
bool hasOtherChanges = false;
|
||||||
int32 count = fInstalledRepositories.CountItems();
|
int32 count = fInstalledRepositories.CountItems();
|
||||||
|
|
||||||
if (fromMostSpecific) {
|
if (fromMostSpecific) {
|
||||||
for (int32 i = count - 1; i >= 0; i--)
|
for (int32 i = count - 1; i >= 0; i--)
|
||||||
hasOtherChanges
|
hasOtherChanges
|
||||||
@@ -700,12 +723,16 @@ PackageManager::ConfirmChanges(bool fromMostSpecific)
|
|||||||
|= _AddResults(*fInstalledRepositories.ItemAt(i), window);
|
|= _AddResults(*fInstalledRepositories.ItemAt(i), window);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasOtherChanges)
|
if (!hasOtherChanges) {
|
||||||
|
_NotifyChangesConfirmed();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// show the window
|
// show the window
|
||||||
if (windowDeleter.Detach()->Go() == 0)
|
if (windowDeleter.Detach()->Go() == 0)
|
||||||
throw BAbortedByUserException();
|
throw BAbortedByUserException();
|
||||||
|
|
||||||
|
_NotifyChangesConfirmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -813,6 +840,19 @@ PackageManager::_AddResults(InstalledRepository& repository,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
PackageManager::_NotifyChangesConfirmed()
|
||||||
|
{
|
||||||
|
int32 count = fInstalledRepositories.CountItems();
|
||||||
|
for (int32 i = 0; i < count; i++) {
|
||||||
|
for (int32 j = 0; j < fPackageProgressListeners.CountItems(); j++) {
|
||||||
|
fPackageProgressListeners.ItemAt(j)->ConfirmedChanges(
|
||||||
|
*fInstalledRepositories.ItemAt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BSolverPackage*
|
BSolverPackage*
|
||||||
PackageManager::_GetSolverPackage(PackageInfoRef package)
|
PackageManager::_GetSolverPackage(PackageInfoRef package)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
* Copyright 2013, Stephan Aßmus <[email protected]>.
|
* Copyright 2013, Stephan Aßmus <[email protected]>.
|
||||||
* Copyright 2011, Ingo Weinhold, <[email protected]>
|
* Copyright 2011, Ingo Weinhold, <[email protected]>
|
||||||
* Copyright 2013, Rene Gollent, <[email protected]>
|
* Copyright 2013, Rene Gollent, <[email protected]>
|
||||||
|
* Copyright 2017, Julian Harnath <[email protected]>.
|
||||||
*
|
*
|
||||||
* All rights reserved. Distributed under the terms of the MIT License.
|
* All rights reserved. Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
@@ -47,6 +48,10 @@ class PackageProgressListener {
|
|||||||
virtual void DownloadProgressComplete(
|
virtual void DownloadProgressComplete(
|
||||||
const char* packageName);
|
const char* packageName);
|
||||||
|
|
||||||
|
virtual void ConfirmedChanges(
|
||||||
|
BPackageManager::InstalledRepository&
|
||||||
|
repository);
|
||||||
|
|
||||||
virtual void StartApplyingChanges(
|
virtual void StartApplyingChanges(
|
||||||
BPackageManager::InstalledRepository&
|
BPackageManager::InstalledRepository&
|
||||||
repository);
|
repository);
|
||||||
@@ -119,6 +124,7 @@ private:
|
|||||||
BPackageManager::InstalledRepository&
|
BPackageManager::InstalledRepository&
|
||||||
repository,
|
repository,
|
||||||
ResultWindow* window);
|
ResultWindow* window);
|
||||||
|
void _NotifyChangesConfirmed();
|
||||||
|
|
||||||
BPackageKit::BSolverPackage*
|
BPackageKit::BSolverPackage*
|
||||||
_GetSolverPackage(PackageInfoRef package);
|
_GetSolverPackage(PackageInfoRef package);
|
||||||
|
|||||||
Reference in New Issue
Block a user