fix - suppress nil/empty items from being added to slices

This commit is contained in:
brent s. 2021-12-18 00:57:41 -05:00
parent fa3061ee7a
commit 3f4db5e82c
Signed by: bts
GPG Key ID: 8C004C2F93481F6B
3 changed files with 26 additions and 15 deletions

View File

@ -146,15 +146,16 @@ func (c *Collection) Items() (items []*Item, err error) {


paths = variant.Value().([]dbus.ObjectPath) paths = variant.Value().([]dbus.ObjectPath)


items = make([]*Item, len(paths)) items = make([]*Item, 0)


for idx, path := range paths { for _, path := range paths {
item = nil
if item, err = NewItem(c, path); err != nil { if item, err = NewItem(c, path); err != nil {
errs = append(errs, err) errs = append(errs, err)
err = nil err = nil
continue continue
} }
items[idx] = item items = append(items, item)
} }
err = NewErrors(err) err = NewErrors(err)


@ -245,6 +246,7 @@ func (c *Collection) SearchItems(profile string) (items []*Item, err error) {
var paths []dbus.ObjectPath var paths []dbus.ObjectPath
var errs []error = make([]error, 0) var errs []error = make([]error, 0)
var attrs map[string]string = make(map[string]string, 0) var attrs map[string]string = make(map[string]string, 0)
var item *Item


attrs["profile"] = profile attrs["profile"] = profile


@ -254,14 +256,16 @@ func (c *Collection) SearchItems(profile string) (items []*Item, err error) {
return return
} }


items = make([]*Item, len(paths)) items = make([]*Item, 0)


for idx, path := range paths { for _, path := range paths {
if items[idx], err = NewItem(c, path); err != nil { item = nil
if item, err = NewItem(c, path); err != nil {
errs = append(errs, err) errs = append(errs, err)
err = nil err = nil
continue continue
} }
items = append(items, item)
} }
err = NewErrors(err) err = NewErrors(err)



View File

@ -148,6 +148,7 @@ func TestCollection_Label(t *testing.T) {
t.Fatalf("NewService failed: %v", err.Error()) t.Fatalf("NewService failed: %v", err.Error())
} }


t.Logf("Attempting to get label of collection: %v", defaultCollectionLabel)
if collection, err = svc.GetCollection(defaultCollectionLabel); err != nil { if collection, err = svc.GetCollection(defaultCollectionLabel); err != nil {
t.Errorf( t.Errorf(
"failed when fetching collection '%v': %v", "failed when fetching collection '%v': %v",

View File

@ -57,16 +57,17 @@ func (s *Service) Collections() (collections []*Collection, err error) {


paths = variant.Value().([]dbus.ObjectPath) paths = variant.Value().([]dbus.ObjectPath)


collections = make([]*Collection, len(paths)) collections = make([]*Collection, 0)


for idx, path := range paths { for _, path := range paths {
coll = nil
if coll, err = NewCollection(s, path); err != nil { if coll, err = NewCollection(s, path); err != nil {
// return // return
errs = append(errs, err) errs = append(errs, err)
err = nil err = nil
continue continue
} }
collections[idx] = coll collections = append(collections, coll)
} }
err = NewErrors(err) err = NewErrors(err)


@ -364,6 +365,7 @@ func (s *Service) SearchItems(attributes map[string]string) (unlockedItems []*It
var ok bool var ok bool
var c *Collection var c *Collection
var cPath dbus.ObjectPath var cPath dbus.ObjectPath
var item *Item
var errs []error = make([]error, 0) var errs []error = make([]error, 0)


if attributes == nil || len(attributes) == 0 { if attributes == nil || len(attributes) == 0 {
@ -375,8 +377,8 @@ func (s *Service) SearchItems(attributes map[string]string) (unlockedItems []*It
DbusServiceSearchItems, 0, attributes, DbusServiceSearchItems, 0, attributes,
).Store(&unlocked, &locked) ).Store(&unlocked, &locked)


lockedItems = make([]*Item, len(locked)) lockedItems = make([]*Item, 0)
unlockedItems = make([]*Item, len(unlocked)) unlockedItems = make([]*Item, 0)


if collectionObjs, err = s.Collections(); err != nil { if collectionObjs, err = s.Collections(); err != nil {
return return
@ -389,8 +391,9 @@ func (s *Service) SearchItems(attributes map[string]string) (unlockedItems []*It
} }


// Locked items // Locked items
for idx, i := range locked { for _, i := range locked {


item = nil
cPath = dbus.ObjectPath(filepath.Dir(string(i))) cPath = dbus.ObjectPath(filepath.Dir(string(i)))


if c, ok = collections[cPath]; !ok { if c, ok = collections[cPath]; !ok {
@ -400,18 +403,20 @@ func (s *Service) SearchItems(attributes map[string]string) (unlockedItems []*It
continue continue
} }


if lockedItems[idx], err = NewItem(c, i); err != nil { if item, err = NewItem(c, i); err != nil {
errs = append(errs, errors.New(fmt.Sprintf( errs = append(errs, errors.New(fmt.Sprintf(
"could not create Item for locked item %v", string(i), "could not create Item for locked item %v", string(i),
))) )))
err = nil err = nil
continue continue
} }
lockedItems = append(lockedItems, item)
} }


// Unlocked items // Unlocked items
for idx, i := range unlocked { for _, i := range unlocked {


item = nil
cPath = dbus.ObjectPath(filepath.Dir(string(i))) cPath = dbus.ObjectPath(filepath.Dir(string(i)))


if c, ok = collections[cPath]; !ok { if c, ok = collections[cPath]; !ok {
@ -421,13 +426,14 @@ func (s *Service) SearchItems(attributes map[string]string) (unlockedItems []*It
continue continue
} }


if unlockedItems[idx], err = NewItem(c, i); err != nil { if item, err = NewItem(c, i); err != nil {
errs = append(errs, errors.New(fmt.Sprintf( errs = append(errs, errors.New(fmt.Sprintf(
"could not create Item for unlocked item %v", string(i), "could not create Item for unlocked item %v", string(i),
))) )))
err = nil err = nil
continue continue
} }
unlockedItems = append(unlockedItems, item)
} }


if errs != nil && len(errs) > 0 { if errs != nil && len(errs) > 0 {