/* * Copyright 2013, Stephan Aßmus . * Copyright 2013, Rene Gollent, * Copyright 2020-2025, Andrew Lindesay * * All rights reserved. Distributed under the terms of the MIT License. */ #include "AbstractPackageProcess.h" #include #include "Logger.h" #include "Model.h" #include "PackageKitUtils.h" #include "PackageManager.h" #include "PackageUtils.h" using namespace BPackageKit; AbstractPackageProcess::AbstractPackageProcess(const BString& packageName, Model* model) : fPackageName(packageName), fModel(model) { } AbstractPackageProcess::~AbstractPackageProcess() { } int32 AbstractPackageProcess::InstallLocation() const { PackageInfoRef package = FindPackageByName(fPackageName); if (package.IsSet()) return PackageKitUtils::DeriveInstallLocation(package.Get()); return B_PACKAGE_INSTALLATION_LOCATION_SYSTEM; } PackageInfoRef AbstractPackageProcess::FindPackageByName(const BString& packageName) const { return fModel->PackageForName(packageName); } void AbstractPackageProcess::SetPackageState(const BString& packageName, PackageState state) { PackageInfoRef package = fModel->PackageForName(packageName); if (package.IsSet()) { PackageLocalInfoRef localInfo = PackageLocalInfoBuilder(package->LocalInfo()).WithState(state).BuildRef(); PackageInfoRef updatedPackage = PackageInfoBuilder(package).WithLocalInfo(localInfo).BuildRef(); fModel->AddPackage(updatedPackage); } else { HDERROR("setting state, but the package [%s] is not present", packageName.String()); } } void AbstractPackageProcess::SetPackageDownloadProgress(const BString& packageName, float value) { PackageInfoRef package = fModel->PackageForName(packageName); if (package.IsSet()) { PackageLocalInfoRef localInfo = PackageLocalInfoBuilder(package->LocalInfo()).WithDownloadProgress(value).BuildRef(); PackageInfoRef updatedPackage = PackageInfoBuilder(package).WithLocalInfo(localInfo).BuildRef(); fModel->AddPackage(updatedPackage); } else { HDERROR("setting progress, but the package [%s] is not present", packageName.String()); } } void AbstractPackageProcess::ClearPackageInstallationLocations(const BString& packageName) { PackageInfoRef package = fModel->PackageForName(packageName); if (package.IsSet()) { PackageLocalInfoRef localInfo = PackageLocalInfoBuilder(package->LocalInfo()).ClearInstallationLocations().BuildRef(); PackageInfoRef updatedPackage = PackageInfoBuilder(package).WithLocalInfo(localInfo).BuildRef(); fModel->AddPackage(updatedPackage); } else { HDERROR("clearing installation locations, but the package [%s] is not present", packageName.String()); } }