From 3525ce0fb2a4ededd4953082db8f82e957c76e2f Mon Sep 17 00:00:00 2001 From: RandomChars <random@chars.jp> Date: Thu, 9 Sep 2021 18:28:52 +0900 Subject: [PATCH] implement image group fetching in client --- client/image.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/client/image.go b/client/image.go index 9a43dac..f925544 100644 --- a/client/image.go +++ b/client/image.go @@ -48,6 +48,44 @@ func (r *Remote) Image(flake string) (store.Image, error) { return image, err } +// ImageGroup returns an entire group of store.Image. +func (r *Remote) ImageGroup(flake string) ([]store.Image, error) { + if image, err := r.Image(flake); err != nil { + return nil, err + } else { + var group []store.Image + + // Iterate forwards + if err = func(image store.Image) error { + group = []store.Image{image} + for image.Child != "" { + if image, err = r.Image(image.Child); err != nil { + return err + } + group = append(group, image) + } + return nil + }(image); err != nil { + return group, err + } + + // Iterate backwards + if err = func(image store.Image) error { + for image.Parent != "" { + if image, err = r.Image(image.Parent); err != nil { + return err + } + group = append([]store.Image{image}, group...) + } + return nil + }(image); err != nil { + return group, err + } + + return group, nil + } +} + // ImageUpdate updates metadata of store.Image with given snowflake. To persist original value in a field set \000. func (r *Remote) ImageUpdate(flake, source, parent, commentary, commentaryTranslation string) error { payload := api.ImageUpdatePayload{ -- GitLab