From Adrien Destugues <pulkomandy@xxxxxxxxx>:
Adrien Destugues has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/2184 ;)
Change subject: Installer: handle hpkg files in _packages_ directory
......................................................................
Installer: handle hpkg files in _packages_ directory
Fixes #14310.
Now we can see #5785 again, and that should be fixed too otherwise the
optional packages view is not usable.
---
M src/apps/installer/Jamfile
M src/apps/installer/PackageViews.cpp
M src/apps/installer/PackageViews.h
3 files changed, 49 insertions(+), 41 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/84/2184/1
diff --git a/src/apps/installer/Jamfile b/src/apps/installer/Jamfile
index b961a81..66b7f63 100644
--- a/src/apps/installer/Jamfile
+++ b/src/apps/installer/Jamfile
@@ -22,7 +22,7 @@
Utility.cpp
: be tracker translation shared [ TargetLibstdc++ ]
- localestub
+ localestub package
: Installer.rdef
;
diff --git a/src/apps/installer/PackageViews.cpp
b/src/apps/installer/PackageViews.cpp
index 3987afd..a59148e 100644
--- a/src/apps/installer/PackageViews.cpp
+++ b/src/apps/installer/PackageViews.cpp
@@ -16,6 +16,8 @@
#include <LayoutUtils.h>
#include <Locale.h>
#include <Messenger.h>
+#include <package/PackageInfo.h>
+#include <Path.h>
#include <ScrollBar.h>
#include <String.h>
#include <View.h>
@@ -50,58 +52,63 @@
Package *
Package::PackageFromEntry(BEntry &entry)
{
- char folder[B_FILE_NAME_LENGTH];
- entry.GetName(folder);
- BDirectory directory(&entry);
- if (directory.InitCheck() != B_OK)
+ BPath path;
+ entry.GetPath(&path);
+
+ BPackageKit::BPackageInfo info;
+ info.ReadFromPackageFile(path.Path());
+
+ if (info.InitCheck() != B_OK)
return NULL;
- Package *package = new Package(folder);
- bool alwaysOn;
- bool onByDefault;
- int32 size;
+
+ Package *package = new Package(path.Path());
+ package->fName = info.Name();
+ package->fDescription = info.Summary();
+
+ bool alwaysOn = false;
+ bool onByDefault = true;
+ off_t size = 0;
+ entry.GetSize(&size);
char group[64];
memset(group, 0, 64);
- if (directory.ReadAttr("INSTALLER PACKAGE: NAME", B_STRING_TYPE, 0,
- package->fName, 64) < 0) {
- goto err;
- }
- if (directory.ReadAttr("INSTALLER PACKAGE: GROUP", B_STRING_TYPE, 0,
+
+ BNode node(&entry);
+ // FIXME enable these when the attributes on the packages are actually
+ // populated by the buildsystem. For now, assume everything is
+ // on-by-default and optional, and have no groups.
+#if 0
+ if (node.ReadAttr("INSTALLER PACKAGE: GROUP", B_STRING_TYPE, 0,
group, 64) < 0) {
goto err;
}
- if (directory.ReadAttr("INSTALLER PACKAGE: DESCRIPTION", B_STRING_TYPE,
0,
- package->fDescription, 64) < 0) {
- goto err;
- }
- if (directory.ReadAttr("INSTALLER PACKAGE: ON_BY_DEFAULT", B_BOOL_TYPE,
0,
+ if (node.ReadAttr("INSTALLER PACKAGE: ON_BY_DEFAULT", B_BOOL_TYPE, 0,
&onByDefault, sizeof(onByDefault)) < 0) {
goto err;
}
- if (directory.ReadAttr("INSTALLER PACKAGE: ALWAYS_ON", B_BOOL_TYPE, 0,
+ if (node.ReadAttr("INSTALLER PACKAGE: ALWAYS_ON", B_BOOL_TYPE, 0,
&alwaysOn, sizeof(alwaysOn)) < 0) {
goto err;
}
- if (directory.ReadAttr("INSTALLER PACKAGE: SIZE", B_INT32_TYPE, 0,
- &size, sizeof(size)) < 0) {
- goto err;
- }
+#endif
package->SetGroupName(group);
package->SetSize(size);
package->SetAlwaysOn(alwaysOn);
package->SetOnByDefault(onByDefault);
- attr_info info;
- if (directory.GetAttrInfo(ICON_ATTRIBUTE, &info) == B_OK) {
- char buffer[info.size];
+ attr_info attributes;
+ if (node.GetAttrInfo(ICON_ATTRIBUTE, &attributes) == B_OK) {
+ char buffer[attributes.size];
BMessage msg;
- if ((directory.ReadAttr(ICON_ATTRIBUTE, info.type, 0, buffer,
- info.size) == info.size)
+ if ((node.ReadAttr(ICON_ATTRIBUTE, attributes.type, 0, buffer,
+ attributes.size) == attributes.size)
&& (msg.Unflatten(buffer) == B_OK)) {
package->SetIcon(new BBitmap(&msg));
}
}
return package;
+#if 0
err:
+#endif
delete package;
return NULL;
}
diff --git a/src/apps/installer/PackageViews.h
b/src/apps/installer/PackageViews.h
index d676b6b..50ecb41 100644
--- a/src/apps/installer/PackageViews.h
+++ b/src/apps/installer/PackageViews.h
@@ -12,6 +12,7 @@
#include <CheckBox.h>
#include <Entry.h>
#include <List.h>
+#include <String.h>
#include <StringView.h>
@@ -33,12 +34,12 @@
Package(const
char* folder);
virtual ~Package();
- void SetFolder(const char*
folder)
- {
strcpy(fFolder, folder); }
- void SetName(const char*
name)
- {
strcpy(fName, name); }
- void SetDescription(const
char* description)
- {
strcpy(fDescription, description); }
+ void SetFolder(BString
folder)
+ {
fFolder = folder; }
+ void SetName(const BString
name)
+ { fName
= name; }
+ void SetDescription(const
BString description)
+ {
fDescription = description; }
void SetSize(const int32
size)
{ fSize
= size; }
void SetIcon(BBitmap* icon)
@@ -47,11 +48,11 @@
{
fOnByDefault = onByDefault; }
void SetAlwaysOn(bool
alwaysOn)
{
fAlwaysOn = alwaysOn; }
- const char* Folder() const
+ BString Folder() const
{
return fFolder; }
- const char* Name() const
+ BString Name() const
{
return fName; }
- const char* Description() const
+ BString Description() const
{
return fDescription; }
const int32 Size() const
{
return fSize; }
@@ -67,9 +68,9 @@
static Package* PackageFromEntry(BEntry &dir);
private:
- char fFolder[64];
- char fName[64];
- char fDescription[64];
+ BString fFolder;
+ BString fName;
+ BString fDescription;
int32 fSize;
BBitmap* fIcon;
bool fAlwaysOn;
--
To view, visit https://review.haiku-os.org/c/haiku/+/2184
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Iafd75b86d242af816a089dd1bdaea2c697668f5d
Gerrit-Change-Number: 2184
Gerrit-PatchSet: 1
Gerrit-Owner: Adrien Destugues <pulkomandy@xxxxxxxxx>
Gerrit-MessageType: newchange