From 17756b4d13f140bba8b2e0dcfa43a9e66be056d3 Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Mon, 10 Sep 2018 22:55:31 +0200 Subject: [PATCH] add lists to user home --- pixelapi/list.go | 25 ++++++++++++++----------- pixelapi/pixelapi.go | 4 ++-- pixelapi/user.go | 18 ++++++++++++++++++ res/static/res/img/icon_list.png | Bin 0 -> 8008 bytes res/template/account/user_files.html | 2 +- res/template/account/user_home.html | 17 ++++++++++++++++- webcontroller/listViewer.go | 4 ++-- 7 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 res/static/res/img/icon_list.png diff --git a/pixelapi/list.go b/pixelapi/list.go index a75e8ac..6b099d9 100644 --- a/pixelapi/list.go +++ b/pixelapi/list.go @@ -1,5 +1,7 @@ package pixelapi +import "time" + // API error constants const ( ListNotFoundError = "list_not_found" @@ -7,22 +9,23 @@ const ( // List information object from the pixeldrain API type List struct { - Success bool `json:"success"` - ID string `json:"id"` - Title string `json:"title"` - DateCreated int64 `json:"date_created"` + Success bool `json:"success"` + ID string `json:"id"` + Title string `json:"title"` + DateCreated time.Time `json:"date_created"` + FileCount int `json:"file_count"` Files []ListFile } // ListFile information object from the pixeldrain API type ListFile struct { - ID string `json:"id"` - DetailHREF string `json:"detail_href"` - FileName string `json:"file_name"` - Description string `json:"description"` - DateCreated int64 `json:"date_created"` - DateLastView int64 `json:"date_last_view"` - ListDescription string `json:"list_description"` + ID string `json:"id"` + DetailHREF string `json:"detail_href"` + FileName string `json:"file_name"` + Description string `json:"description"` + DateCreated time.Time `json:"date_created"` + DateLastView time.Time `json:"date_last_view"` + ListDescription string `json:"list_description"` } // GetList get a List from the pixeldrain API. Errors will be available through diff --git a/pixelapi/pixelapi.go b/pixelapi/pixelapi.go index cc52de0..5271cd8 100644 --- a/pixelapi/pixelapi.go +++ b/pixelapi/pixelapi.go @@ -48,7 +48,7 @@ type SuccessResponse struct { func (p *PixelAPI) jsonRequest(method, url string, target interface{}) error { req, err := http.NewRequest(method, url, nil) if err != nil { - return &Error{ + return Error{ ReqError: true, Success: false, Value: err.Error(), @@ -62,7 +62,7 @@ func (p *PixelAPI) jsonRequest(method, url string, target interface{}) error { client := &http.Client{} resp, err := client.Do(req) if err != nil { - return &Error{ + return Error{ ReqError: true, Success: false, Value: err.Error(), diff --git a/pixelapi/user.go b/pixelapi/user.go index f2e92e4..d08e23a 100644 --- a/pixelapi/user.go +++ b/pixelapi/user.go @@ -79,3 +79,21 @@ func (p *PixelAPI) UserFiles(page, limit int) (resp *UserFiles, err error) { } return resp, nil } + +type UserLists struct { + Success bool `json:"success"` + Lists []List `json:"lists"` +} + +func (p *PixelAPI) UserLists(page, limit int) (resp *UserLists, err error) { + resp = &UserLists{Lists: make([]List, 0)} + err = p.jsonRequest( + "GET", + fmt.Sprintf("%s/user/lists?page=%d&limit=%d", p.apiEndpoint, page, limit), + resp, + ) + if err != nil { + return nil, err + } + return resp, nil +} diff --git a/res/static/res/img/icon_list.png b/res/static/res/img/icon_list.png new file mode 100644 index 0000000000000000000000000000000000000000..afeda44730990fd9e8dfbf172d05efa5d31627d2 GIT binary patch literal 8008 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 literal 0 HcmV?d00001 diff --git a/res/template/account/user_files.html b/res/template/account/user_files.html index 322aaf7..00b696e 100644 --- a/res/template/account/user_files.html +++ b/res/template/account/user_files.html @@ -20,7 +20,7 @@ {{.FileName}} {{.FileName}}
- {{.DateUpload}} + {{.DateUpload.Format "2006-01-02 15:04:05"}} {{end}} diff --git a/res/template/account/user_home.html b/res/template/account/user_home.html index 4d4f602..930f035 100644 --- a/res/template/account/user_home.html +++ b/res/template/account/user_home.html @@ -18,12 +18,27 @@ {{.FileName}} {{.FileName}}
- {{.DateUpload}} + {{.DateUpload.Format "2006-01-02 15:04:05"}} {{end}}
...All my files +
+

Your most recently created lists:

+
+ {{$lists := .PixelAPI.UserLists 0 18}} + {{range $lists.Lists}} + + {{.Title}} + {{.Title}} + ({{.FileCount}} Files) +
+ {{.DateCreated.Format "2006-01-02 15:04:05"}} +
+ {{end}} +
+

{{template "footer"}} diff --git a/webcontroller/listViewer.go b/webcontroller/listViewer.go index 09365af..9b2f246 100644 --- a/webcontroller/listViewer.go +++ b/webcontroller/listViewer.go @@ -15,8 +15,8 @@ func (wc *WebController) serveListViewer(w http.ResponseWriter, r *http.Request, var api = pixelapi.New(wc.conf.APIURLInternal, "") var list, err = api.GetList(p.ByName("id")) if err != nil { - if (err.(*pixelapi.Error)).ReqError { - log.Error("API request error occurred: %s", (err.(pixelapi.Error)).Value) + if err, ok := err.(pixelapi.Error); ok && err.ReqError { + log.Error("API request error occurred: %s", err.Value) } wc.serveNotFound(w, r) return