[haiku-commits] Change in haiku[master]: Installer: handle hpkg files in _packages_ directory

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 3 Feb 2020 16:19:55 +0000

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

Other related posts:

  • » [haiku-commits] Change in haiku[master]: Installer: handle hpkg files in _packages_ directory - Gerrit