BInstallationLocationInfo: Provide more info
* If the active state is not the latest state, also provide a package set for it. * If an old state has been booted, provide its name.
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <Node.h>
|
#include <Node.h>
|
||||||
|
#include <String.h>
|
||||||
|
|
||||||
#include <package/PackageDefs.h>
|
#include <package/PackageDefs.h>
|
||||||
#include <package/PackageInfoSet.h>
|
#include <package/PackageInfoSet.h>
|
||||||
@@ -39,8 +40,14 @@ public:
|
|||||||
const BPackageInfoSet& LatestInactivePackageInfos() const;
|
const BPackageInfoSet& LatestInactivePackageInfos() const;
|
||||||
void SetLatestInactivePackageInfos(
|
void SetLatestInactivePackageInfos(
|
||||||
const BPackageInfoSet& infos);
|
const BPackageInfoSet& infos);
|
||||||
|
|
||||||
|
const BPackageInfoSet& CurrentlyActivePackageInfos() const;
|
||||||
|
void SetCurrentlyActivePackageInfos(
|
||||||
const BPackageInfoSet& infos);
|
const BPackageInfoSet& infos);
|
||||||
|
|
||||||
|
const BString& OldStateName() const;
|
||||||
|
void SetOldStateName(const BString& name);
|
||||||
|
|
||||||
int64 ChangeCount() const;
|
int64 ChangeCount() const;
|
||||||
void SetChangeCount(int64 changeCount);
|
void SetChangeCount(int64 changeCount);
|
||||||
|
|
||||||
@@ -50,6 +57,8 @@ private:
|
|||||||
node_ref fPackageDirectoryRef;
|
node_ref fPackageDirectoryRef;
|
||||||
BPackageInfoSet fLatestActivePackageInfos;
|
BPackageInfoSet fLatestActivePackageInfos;
|
||||||
BPackageInfoSet fLatestInactivePackageInfos;
|
BPackageInfoSet fLatestInactivePackageInfos;
|
||||||
|
BPackageInfoSet fCurrentlyActivePackageInfos;
|
||||||
|
BString fOldStateName;
|
||||||
int64 fChangeCount;
|
int64 fChangeCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -63,9 +63,11 @@ BDaemonClient::GetInstallationLocationInfo(
|
|||||||
int64 baseDirectoryNode;
|
int64 baseDirectoryNode;
|
||||||
int32 packagesDirectoryDevice;
|
int32 packagesDirectoryDevice;
|
||||||
int64 packagesDirectoryNode;
|
int64 packagesDirectoryNode;
|
||||||
|
BString oldStateName;
|
||||||
int64 changeCount;
|
int64 changeCount;
|
||||||
BPackageInfoSet activePackages;
|
BPackageInfoSet latestActivePackages;
|
||||||
BPackageInfoSet inactivePackages;
|
BPackageInfoSet latestInactivePackages;
|
||||||
|
BPackageInfoSet currentlyActivePackages;
|
||||||
if ((error = reply.FindInt32("base directory device", &baseDirectoryDevice))
|
if ((error = reply.FindInt32("base directory device", &baseDirectoryDevice))
|
||||||
!= B_OK
|
!= B_OK
|
||||||
|| (error = reply.FindInt64("base directory node", &baseDirectoryNode))
|
|| (error = reply.FindInt64("base directory node", &baseDirectoryNode))
|
||||||
@@ -74,10 +76,13 @@ BDaemonClient::GetInstallationLocationInfo(
|
|||||||
&packagesDirectoryDevice)) != B_OK
|
&packagesDirectoryDevice)) != B_OK
|
||||||
|| (error = reply.FindInt64("packages directory node",
|
|| (error = reply.FindInt64("packages directory node",
|
||||||
&packagesDirectoryNode)) != B_OK
|
&packagesDirectoryNode)) != B_OK
|
||||||
|| (error = _ExtractPackageInfoSet(reply, "active packages",
|
|| (error = _ExtractPackageInfoSet(reply, "latest active packages",
|
||||||
activePackages)) != B_OK
|
latestActivePackages)) != B_OK
|
||||||
|| (error = _ExtractPackageInfoSet(reply, "inactive packages",
|
|| (error = _ExtractPackageInfoSet(reply, "latest inactive packages",
|
||||||
inactivePackages)) != B_OK
|
latestInactivePackages)) != B_OK
|
||||||
|
|| (error = _ExtractPackageInfoSet(reply, "currently active packages",
|
||||||
|
currentlyActivePackages)) != B_OK
|
||||||
|
|| (error = reply.FindString("old state", &oldStateName)) != B_OK
|
||||||
|| (error = reply.FindInt64("change count", &changeCount)) != B_OK) {
|
|| (error = reply.FindInt64("change count", &changeCount)) != B_OK) {
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
@@ -87,8 +92,10 @@ BDaemonClient::GetInstallationLocationInfo(
|
|||||||
_info.SetBaseDirectoryRef(node_ref(baseDirectoryDevice, baseDirectoryNode));
|
_info.SetBaseDirectoryRef(node_ref(baseDirectoryDevice, baseDirectoryNode));
|
||||||
_info.SetPackagesDirectoryRef(
|
_info.SetPackagesDirectoryRef(
|
||||||
node_ref(packagesDirectoryDevice, packagesDirectoryNode));
|
node_ref(packagesDirectoryDevice, packagesDirectoryNode));
|
||||||
_info.SetLatestActivePackageInfos(activePackages);
|
_info.SetLatestActivePackageInfos(latestActivePackages);
|
||||||
_info.SetLatestInactivePackageInfos(inactivePackages);
|
_info.SetLatestInactivePackageInfos(latestInactivePackages);
|
||||||
|
_info.SetCurrentlyActivePackageInfos(currentlyActivePackages);
|
||||||
|
_info.SetOldStateName(oldStateName);
|
||||||
_info.SetChangeCount(changeCount);
|
_info.SetChangeCount(changeCount);
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ BInstallationLocationInfo::BInstallationLocationInfo()
|
|||||||
fPackageDirectoryRef(),
|
fPackageDirectoryRef(),
|
||||||
fLatestActivePackageInfos(),
|
fLatestActivePackageInfos(),
|
||||||
fLatestInactivePackageInfos(),
|
fLatestInactivePackageInfos(),
|
||||||
|
fCurrentlyActivePackageInfos(),
|
||||||
|
fOldStateName(),
|
||||||
fChangeCount(0)
|
fChangeCount(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -38,6 +40,8 @@ BInstallationLocationInfo::Unset()
|
|||||||
fPackageDirectoryRef = node_ref();
|
fPackageDirectoryRef = node_ref();
|
||||||
fLatestActivePackageInfos.MakeEmpty();
|
fLatestActivePackageInfos.MakeEmpty();
|
||||||
fLatestInactivePackageInfos.MakeEmpty();
|
fLatestInactivePackageInfos.MakeEmpty();
|
||||||
|
fCurrentlyActivePackageInfos.MakeEmpty();
|
||||||
|
fOldStateName.Truncate(0);
|
||||||
fChangeCount = 0;
|
fChangeCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,6 +120,35 @@ BInstallationLocationInfo::SetLatestInactivePackageInfos(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const BPackageInfoSet&
|
||||||
|
BInstallationLocationInfo::CurrentlyActivePackageInfos() const
|
||||||
|
{
|
||||||
|
return fCurrentlyActivePackageInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
BInstallationLocationInfo::SetCurrentlyActivePackageInfos(
|
||||||
|
const BPackageInfoSet& infos)
|
||||||
|
{
|
||||||
|
fCurrentlyActivePackageInfos = infos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const BString&
|
||||||
|
BInstallationLocationInfo::OldStateName() const
|
||||||
|
{
|
||||||
|
return fOldStateName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
BInstallationLocationInfo::SetOldStateName(const BString& name)
|
||||||
|
{
|
||||||
|
fOldStateName = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int64
|
int64
|
||||||
BInstallationLocationInfo::ChangeCount() const
|
BInstallationLocationInfo::ChangeCount() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -476,7 +476,7 @@ Volume::HandleGetLocationInfoRequest(BMessage* message)
|
|||||||
= fLatestState->ByFileNameIterator(); it.HasNext();) {
|
= fLatestState->ByFileNameIterator(); it.HasNext();) {
|
||||||
Package* package = it.Next();
|
Package* package = it.Next();
|
||||||
const char* fieldName = package->IsActive()
|
const char* fieldName = package->IsActive()
|
||||||
? "active packages" : "inactive packages";
|
? "latest active packages" : "latest inactive packages";
|
||||||
BMessage packageArchive;
|
BMessage packageArchive;
|
||||||
if (package->Info().Archive(&packageArchive) != B_OK
|
if (package->Info().Archive(&packageArchive) != B_OK
|
||||||
|| fLocationInfoReply.AddMessage(fieldName, &packageArchive)
|
|| fLocationInfoReply.AddMessage(fieldName, &packageArchive)
|
||||||
@@ -485,6 +485,27 @@ Volume::HandleGetLocationInfoRequest(BMessage* message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fActiveState != fLatestState) {
|
||||||
|
if (fPackagesDirectoryCount > 1) {
|
||||||
|
fLocationInfoReply.AddString("old state",
|
||||||
|
fPackagesDirectories[fPackagesDirectoryCount - 1].Name());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (PackageFileNameHashTable::Iterator it
|
||||||
|
= fActiveState->ByFileNameIterator(); it.HasNext();) {
|
||||||
|
Package* package = it.Next();
|
||||||
|
if (!package->IsActive())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
BMessage packageArchive;
|
||||||
|
if (package->Info().Archive(&packageArchive) != B_OK
|
||||||
|
|| fLocationInfoReply.AddMessage("currently active packages",
|
||||||
|
&packageArchive) != B_OK) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fLocationInfoReply.AddInt64("change count", fChangeCount) != B_OK)
|
if (fLocationInfoReply.AddInt64("change count", fChangeCount) != B_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user