From 41c303c1103f6742ead34b1e6ac4a0df53e09aca Mon Sep 17 00:00:00 2001 From: celogeek <65178+celogeek@users.noreply.github.com> Date: Wed, 22 Dec 2021 19:32:25 +0100 Subject: [PATCH] check videojs extension --- internal/piwigo/active_plugin.go | 43 +++++++++++++++++++++++++++++ internal/piwigo/login.go | 35 +++++------------------ internal/piwigo/upload_file_type.go | 36 ++++++++++++++++++++++++ internal/piwigocli/images_upload.go | 14 ++++++---- 4 files changed, 95 insertions(+), 33 deletions(-) create mode 100644 internal/piwigo/active_plugin.go create mode 100644 internal/piwigo/upload_file_type.go diff --git a/internal/piwigo/active_plugin.go b/internal/piwigo/active_plugin.go new file mode 100644 index 0000000..4474486 --- /dev/null +++ b/internal/piwigo/active_plugin.go @@ -0,0 +1,43 @@ +package piwigo + +import ( + "encoding/json" + "strings" +) + +type ActivePlugin map[string]bool + +func (uft *ActivePlugin) UnmarshalJSON(data []byte) error { + var r []struct { + Id string `json:"id"` + State string `json:"state"` + } + if err := json.Unmarshal(data, &r); err != nil { + return err + } + + *uft = ActivePlugin{} + for _, plugin := range r { + if plugin.State == "active" { + (*uft)[plugin.Id] = true + } + } + + return nil +} + +func (uft ActivePlugin) MarshalJSON() ([]byte, error) { + keys := make([]string, 0, len(uft)) + for k := range uft { + keys = append(keys, k) + } + return json.Marshal(keys) +} + +func (uft ActivePlugin) String() string { + keys := make([]string, 0, len(uft)) + for k := range uft { + keys = append(keys, k) + } + return strings.Join(keys, ",") +} diff --git a/internal/piwigo/login.go b/internal/piwigo/login.go index 7bc049d..8be51d0 100644 --- a/internal/piwigo/login.go +++ b/internal/piwigo/login.go @@ -1,44 +1,17 @@ package piwigo import ( - "encoding/json" "errors" "net/url" - "strings" ) -type UploadFileType map[string]bool - type StatusResponse struct { User string `json:"username"` Role string `json:"status"` Version string `json:"version"` Token string `json:"pwg_token"` UploadFileType UploadFileType `json:"upload_file_types"` -} - -func (uft *UploadFileType) UnmarshalJSON(data []byte) error { - var r string - if err := json.Unmarshal(data, &r); err != nil { - return err - } - *uft = UploadFileType{} - for _, v := range strings.Split(r, ",") { - (*uft)[v] = true - } - return nil -} - -func (uft UploadFileType) MarshalJSON() ([]byte, error) { - return []byte(`"` + uft.String() + `"`), nil -} - -func (uft UploadFileType) String() string { - keys := make([]string, 0, len(uft)) - for k, _ := range uft { - keys = append(keys, k) - } - return strings.Join(keys, ",") + Plugins ActivePlugin `json:"plugins"` } func (p *Piwigo) GetStatus() (*StatusResponse, error) { @@ -52,6 +25,12 @@ func (p *Piwigo) GetStatus() (*StatusResponse, error) { if err != nil { return nil, err } + + err = p.Post("pwg.plugins.getList", nil, &resp.Plugins) + if err != nil { + return nil, err + } + if resp.User == p.Username { return resp, nil } diff --git a/internal/piwigo/upload_file_type.go b/internal/piwigo/upload_file_type.go new file mode 100644 index 0000000..12422f0 --- /dev/null +++ b/internal/piwigo/upload_file_type.go @@ -0,0 +1,36 @@ +package piwigo + +import ( + "encoding/json" + "strings" +) + +type UploadFileType map[string]bool + +func (uft *UploadFileType) UnmarshalJSON(data []byte) error { + var r string + if err := json.Unmarshal(data, &r); err != nil { + return err + } + *uft = UploadFileType{} + for _, v := range strings.Split(r, ",") { + (*uft)[v] = true + } + return nil +} + +func (uft UploadFileType) MarshalJSON() ([]byte, error) { + keys := make([]string, 0, len(uft)) + for k := range uft { + keys = append(keys, k) + } + return json.Marshal(keys) +} + +func (uft UploadFileType) String() string { + keys := make([]string, 0, len(uft)) + for k := range uft { + keys = append(keys, k) + } + return strings.Join(keys, ",") +} diff --git a/internal/piwigocli/images_upload.go b/internal/piwigocli/images_upload.go index e5e0ac9..a1e6367 100644 --- a/internal/piwigocli/images_upload.go +++ b/internal/piwigocli/images_upload.go @@ -2,6 +2,7 @@ package piwigocli import ( "errors" + "fmt" "path/filepath" "strings" @@ -34,11 +35,14 @@ func (c *ImagesUploadCommand) Execute(args []string) error { return err } - switch ext { - case "ogg", "ogv", "mp4", "m4v", "webm", "webmv": - err = p.VideoJSSync(resp.ImageId) - if err != nil { - return err + if _, ok := status.Plugins["piwigo-videojs"]; ok { + switch ext { + case "ogg", "ogv", "mp4", "m4v", "webm", "webmv": + fmt.Println("syncing metadata with videojs") + err = p.VideoJSSync(resp.ImageId) + if err != nil { + return err + } } }