mirror of
https://github.com/celogeek/piwigo-cli.git
synced 2025-05-24 17:52:36 +02:00
70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
package piwigotools
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
type ImageDetails struct {
|
|
Id int `json:"id"`
|
|
Md5 string `json:"md5sum"`
|
|
Name string `json:"name"`
|
|
DateAvailable TimeResult `json:"date_available"`
|
|
DateCreation TimeResult `json:"date_creation"`
|
|
LastModified TimeResult `json:"lastmodified"`
|
|
Width int `json:"width"`
|
|
Height int `json:"height"`
|
|
Url string `json:"page_url"`
|
|
ImageUrl string `json:"element_url"`
|
|
Filename string `json:"file"`
|
|
Filesize int64 `json:"filesize"`
|
|
Categories Categories `json:"categories"`
|
|
Tags Tags `json:"tags"`
|
|
Derivatives map[string]struct {
|
|
Height int `json:"height"`
|
|
Width int `json:"width"`
|
|
Url string `json:"url"`
|
|
} `json:"derivatives"`
|
|
}
|
|
|
|
func (img *ImageDetails) Preview(height int) (string, error) {
|
|
url := img.ImageUrl
|
|
if der, ok := img.Derivatives["medium"]; ok {
|
|
url = der.Url
|
|
}
|
|
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if resp.StatusCode != 200 {
|
|
return "", fmt.Errorf("[error %d] failed to get image", resp.StatusCode)
|
|
}
|
|
//goland:noinspection GoUnhandledErrorResult
|
|
defer resp.Body.Close()
|
|
|
|
buf := bytes.NewBuffer([]byte{})
|
|
|
|
buf.WriteString("\033]1337")
|
|
buf.WriteString(fmt.Sprintf(";File=%s", img.Filename))
|
|
buf.WriteString(";inline=1")
|
|
buf.WriteString(fmt.Sprintf(";size=%d;", resp.ContentLength))
|
|
if height > 0 {
|
|
buf.WriteString(fmt.Sprintf(";height=%d", height))
|
|
}
|
|
buf.WriteString(":")
|
|
|
|
encoder := base64.NewEncoder(base64.StdEncoding, buf)
|
|
//goland:noinspection GoUnhandledErrorResult
|
|
defer encoder.Close()
|
|
if _, err := io.Copy(encoder, resp.Body); err != nil {
|
|
return "", err
|
|
}
|
|
buf.WriteString("\a")
|
|
|
|
return buf.String(), nil
|
|
}
|