simplified appends

This commit is contained in:
2023-03-25 17:36:21 +01:00
parent d028fb2db1
commit 3964ffc7cb
4 changed files with 50 additions and 37 deletions

View File

@@ -130,21 +130,13 @@ func (db *Db) UploadsList(apicontext string, filter string, t int) (*common.Resp
if apicontext == entryContext { if apicontext == entryContext {
// unless a filter needed OR no filter specified // unless a filter needed OR no filter specified
if (filter != "" && entryContext == filter) || filter == "" { if (filter != "" && entryContext == filter) || filter == "" {
if t == common.TypeUpload { response.Append(entry)
response.Uploads = append(response.Uploads, entry.(*common.Upload))
} else {
response.Forms = append(response.Forms, entry.(*common.Form))
}
} }
} }
} else { } else {
// return all, because we operate a public service or current==super // return all, because we operate a public service or current==super
if (filter != "" && entryContext == filter) || filter == "" { if (filter != "" && entryContext == filter) || filter == "" {
if t == common.TypeUpload { response.Append(entry)
response.Uploads = append(response.Uploads, entry.(*common.Upload))
} else {
response.Forms = append(response.Forms, entry.(*common.Form))
}
} }
} }
@@ -179,19 +171,15 @@ func (db *Db) Get(apicontext string, id string, t int) (*common.Response, error)
var entryContext string var entryContext string
if t == common.TypeUpload { if t == common.TypeUpload {
entryContext = entry.(common.Upload).Context entryContext = entry.(*common.Upload).Context
} else { } else {
entryContext = entry.(common.Form).Context entryContext = entry.(*common.Form).Context
} }
if (apicontext != "" && (db.cfg.Super == apicontext || entryContext == apicontext)) || apicontext == "" { if (apicontext != "" && (db.cfg.Super == apicontext || entryContext == apicontext)) || apicontext == "" {
// allowed if no context (public or download) // allowed if no context (public or download)
// or if context matches or if context==super // or if context matches or if context==super
if t == common.TypeUpload { response.Append(entry)
response.Uploads = append(response.Uploads, entry.(*common.Upload))
} else {
response.Forms = append(response.Forms, entry.(*common.Form))
}
} }
return nil return nil

View File

@@ -105,6 +105,24 @@ func (form Form) Marshal() ([]byte, error) {
return jsonentry, nil return jsonentry, nil
} }
/*
Response methods
*/
func (r *Response) Append(entry Dbentry) {
switch entry.(type) {
case *Upload:
r.Uploads = append(r.Uploads, entry.(*Upload))
case Upload:
r.Uploads = append(r.Uploads, entry.(*Upload))
case Form:
r.Forms = append(r.Forms, entry.(*Form))
case *Form:
r.Forms = append(r.Forms, entry.(*Form))
default:
panic("unknown type!")
}
}
/* /*
Extract context, whatever kind entry is, but we don't know in Extract context, whatever kind entry is, but we don't know in
advance, only after unmarshalling. So try Upload first, if that advance, only after unmarshalling. So try Upload first, if that

View File

@@ -219,7 +219,7 @@ func List(w io.Writer, c *cfg.Config, args []string) error {
return err return err
} }
return RespondTable(w, resp) return UploadsRespondTable(w, resp)
} }
func Delete(w io.Writer, c *cfg.Config, args []string) error { func Delete(w io.Writer, c *cfg.Config, args []string) error {
@@ -249,7 +249,7 @@ func Describe(w io.Writer, c *cfg.Config, args []string) error {
id := args[0] // we describe only 1 object id := args[0] // we describe only 1 object
rq := Setup(c, "/uploads/"+id+"/") rq := Setup(c, "/uploads/"+id)
resp, err := rq.R.Get(rq.Url) resp, err := rq.R.Get(rq.Url)
if err != nil { if err != nil {

View File

@@ -66,12 +66,17 @@ func WriteTable(w io.Writer, headers []string, data [][]string) {
fmt.Fprintln(w, tableString.String()) fmt.Fprintln(w, tableString.String())
} }
// output like psql \x /* Print output like psql \x
func WriteExtended(w io.Writer, uploads *common.Uploads) {
Prints all Uploads and Forms which exist in common.Response,
however, we expect only one kind of them to be actually filled, so
the function can be used for forms and uploads.
*/
func WriteExtended(w io.Writer, response *common.Response) {
format := fmt.Sprintf("%%%ds: %%s\n", Maxwidth) format := fmt.Sprintf("%%%ds: %%s\n", Maxwidth)
// we shall only have 1 element, however, if we ever support more, here we go // we shall only have 1 element, however, if we ever support more, here we go
for _, entry := range uploads.Entries { for _, entry := range response.Uploads {
expire := prepareExpire(entry.Expire, entry.Uploaded) expire := prepareExpire(entry.Expire, entry.Uploaded)
fmt.Fprintf(w, format, "Id", entry.Id) fmt.Fprintf(w, format, "Id", entry.Id)
fmt.Fprintf(w, format, "Expire", expire) fmt.Fprintf(w, format, "Expire", expire)
@@ -81,37 +86,39 @@ func WriteExtended(w io.Writer, uploads *common.Uploads) {
fmt.Fprintf(w, format, "Url", entry.Url) fmt.Fprintf(w, format, "Url", entry.Url)
fmt.Fprintln(w) fmt.Fprintln(w)
} }
// FIXME: add response.Forms loop here
} }
// extract an common.Uploads{} struct from json response // extract an common.Uploads{} struct from json response
func GetUploadsFromResponse(resp *req.Response) (*common.Uploads, error) { func GetResponse(resp *req.Response) (*common.Response, error) {
uploads := common.Uploads{} response := common.Response{}
if err := json.Unmarshal([]byte(resp.String()), &uploads); err != nil { if err := json.Unmarshal([]byte(resp.String()), &response); err != nil {
return nil, errors.New("Could not unmarshall JSON response: " + err.Error()) return nil, errors.New("Could not unmarshall JSON response: " + err.Error())
} }
if !uploads.Success { if !response.Success {
return nil, errors.New(uploads.Message) return nil, errors.New(response.Message)
} }
return &uploads, nil return &response, nil
} }
// turn the Uploads{} struct into a table and print it // turn the Uploads{} struct into a table and print it
func RespondTable(w io.Writer, resp *req.Response) error { func UploadsRespondTable(w io.Writer, resp *req.Response) error {
uploads, err := GetUploadsFromResponse(resp) response, err := GetResponse(resp)
if err != nil { if err != nil {
return err return err
} }
if uploads.Message != "" { if response.Message != "" {
fmt.Fprintln(w, uploads.Message) fmt.Fprintln(w, response.Message)
} }
// tablewriter // tablewriter
data := [][]string{} data := [][]string{}
for _, entry := range uploads.Entries { for _, entry := range response.Uploads {
data = append(data, []string{ data = append(data, []string{
entry.Id, entry.Expire, entry.Context, entry.Uploaded.Format("2006-01-02 15:04:05"), entry.Id, entry.Expire, entry.Context, entry.Uploaded.Format("2006-01-02 15:04:05"),
}) })
@@ -124,16 +131,16 @@ func RespondTable(w io.Writer, resp *req.Response) error {
// turn the Uploads{} struct into xtnd output and print it // turn the Uploads{} struct into xtnd output and print it
func RespondExtended(w io.Writer, resp *req.Response) error { func RespondExtended(w io.Writer, resp *req.Response) error {
uploads, err := GetUploadsFromResponse(resp) response, err := GetResponse(resp)
if err != nil { if err != nil {
return err return err
} }
if uploads.Message != "" { if response.Message != "" {
fmt.Fprintln(w, uploads.Message) fmt.Fprintln(w, response.Message)
} }
WriteExtended(w, uploads) WriteExtended(w, response)
return nil return nil
} }