From 3d42d61e0d849fa83a604bff70db1fee3cd47e79 Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Sun, 8 Jul 2018 14:40:20 +0200 Subject: [PATCH] user list listing --- pixelapi/file.go | 3 +- pixelapi/user.go | 21 +++++++++- res/static/res/style/layout.css | 7 ++-- res/template/account/filemanager.html | 9 ++++ res/template/account/user.html | 14 +++++++ res/template/fragments/api/list.html | 9 ++-- webcontroller/templateData.go | 2 +- webcontroller/userAccount.go | 60 ++++++++++++++++++++++++++- webcontroller/webcontroller.go | 4 +- 9 files changed, 112 insertions(+), 17 deletions(-) diff --git a/pixelapi/file.go b/pixelapi/file.go index e14f71f..4a19a50 100644 --- a/pixelapi/file.go +++ b/pixelapi/file.go @@ -13,15 +13,14 @@ func (p *PixelAPI) GetFile(id string) (io.ReadCloser, error) { // FileInfo File information object from the pixeldrain API type FileInfo struct { + Success bool `json:"success"` ID string `json:"id"` FileName string `json:"file_name"` DateUpload time.Time `json:"date_upload"` DateLastview time.Time `json:"date_last_view"` - DaysValid uint16 `json:"days_valid"` FileSize uint64 `json:"file_size"` Views uint `json:"views"` MimeType string `json:"mime_type"` - Description string `json:"description"` MimeImage string `json:"mime_image"` ThumbnailHREF string `json:"thumbnail_href"` } diff --git a/pixelapi/user.go b/pixelapi/user.go index 1d1b920..f36f4ac 100644 --- a/pixelapi/user.go +++ b/pixelapi/user.go @@ -1,6 +1,7 @@ package pixelapi import ( + "fmt" "net/url" ) @@ -40,7 +41,7 @@ type UserInfo struct { Username string `json:"username"` } -// UserInfo returns information about the logged in user. Required an API key +// UserInfo returns information about the logged in user. Requires an API key func (p *PixelAPI) UserInfo() (resp *UserInfo, err *Error) { resp = &UserInfo{} err = p.jsonRequest("GET", p.apiEndpoint+"/user", resp) @@ -60,3 +61,21 @@ func (p *PixelAPI) UserSessionDestroy(key string) (resp *SuccessResponse, err *E } return resp, nil } + +type UserFiles struct { + Success bool `json:"success"` + Files []FileInfo `json:"files"` +} + +func (p *PixelAPI) UserFiles(page, limit int) (resp *UserFiles, err *Error) { + resp = &UserFiles{Files: make([]FileInfo, 0)} + err = p.jsonRequest( + "GET", + fmt.Sprintf("%s/user/files?page=%d&limit=%d", p.apiEndpoint, page, limit), + resp, + ) + if err != nil { + return nil, err + } + return resp, nil +} diff --git a/res/static/res/style/layout.css b/res/static/res/style/layout.css index b04552e..da20ba0 100644 --- a/res/static/res/style/layout.css +++ b/res/static/res/style/layout.css @@ -219,20 +219,19 @@ a:hover{ .file_button, .file_button:hover{ position: relative; box-sizing: border-box; - width: 316px; + width: 310px; max-width: 90%; height: 60px; - float: left; margin: 6px; padding: 0; overflow: hidden; - box-shadow: 0px 0px 5px 2px #111; + box-shadow: 0px 0px 10px 4px #111; background-color: #111; color: var(--text_color); word-break: break-all; text-align: left; line-height: 120%; - display: block; + display: inline-block; } .file_button > img{ max-height: 60px; diff --git a/res/template/account/filemanager.html b/res/template/account/filemanager.html index 5fbecc8..40cae17 100644 --- a/res/template/account/filemanager.html +++ b/res/template/account/filemanager.html @@ -13,6 +13,15 @@ in this browser. +
+ {{range .Other.Files}} + + {{.FileName}} + {{.FileName}} +
+ {{.DateUpload}} +
+ {{end}} {{template "analytics"}} diff --git a/res/template/account/user.html b/res/template/account/user.html index 6cc06a8..98fb454 100644 --- a/res/template/account/user.html +++ b/res/template/account/user.html @@ -9,6 +9,20 @@
{{template "menu" .}}

Welcome home, {{.Username}}!

+
+

Your most recently uploaded files:

+
+ {{range .Other.Files}} + + {{.FileName}} + {{.FileName}} +
+ {{.DateUpload}} +
+ {{end}} + ...All my files +
+
{{template "footer"}}
diff --git a/res/template/fragments/api/list.html b/res/template/fragments/api/list.html index 26e2410..fb49786 100644 --- a/res/template/fragments/api/list.html +++ b/res/template/fragments/api/list.html @@ -127,8 +127,7 @@ "file_name": "01 Holy Wars... The Punishment Due.mp3", "description": "", "date_created": 1513033304, - "date_last_view": 1513033304, - "list_description": "" + "date_last_view": 1513033304 }, { "detail_href": "/file/RKwgZb/info", @@ -136,8 +135,7 @@ "file_name": "02 Hangar 18.mp3", "description": "", "date_created": 1513033304, - "date_last_view": 1513033304, - "list_description": "" + "date_last_view": 1513033304 }, { "detail_href": "/file/DRaL_e/info", @@ -145,8 +143,7 @@ "file_name": "03 Take No Prisoners.mp3", "description": "", "date_created": 1513033304, - "date_last_view": 1513033304, - "list_description": "" + "date_last_view": 1513033304 } ] } diff --git a/webcontroller/templateData.go b/webcontroller/templateData.go index 80f1f0c..2c99f85 100644 --- a/webcontroller/templateData.go +++ b/webcontroller/templateData.go @@ -23,7 +23,7 @@ type TemplateData struct { func (wc *WebController) newTemplateData(w http.ResponseWriter, r *http.Request) *TemplateData { var t = &TemplateData{ Authenticated: false, - Username: "Fornax", + Username: "", APIEndpoint: template.URL(wc.conf.APIURLExternal), } diff --git a/webcontroller/userAccount.go b/webcontroller/userAccount.go index 2981c40..f77826f 100644 --- a/webcontroller/userAccount.go +++ b/webcontroller/userAccount.go @@ -21,5 +21,63 @@ func (wc *WebController) serveLogout( } } - http.Redirect(w, r, "/", 302) + http.Redirect(w, r, "/", http.StatusPermanentRedirect) +} + +func (wc *WebController) serveUserHome( + w http.ResponseWriter, + r *http.Request, + p httprouter.Params, +) { + var key string + var err error + if key, err = wc.getAPIKey(r); err != nil { + http.Redirect(w, r, "/", http.StatusTemporaryRedirect) + return + } + + var api = pixelapi.New(wc.conf.APIURLInternal, key) + files, aerr := api.UserFiles(0, 18) + if aerr != nil { + log.Error("Cannot get user files: %v", aerr) + wc.serveNotFound(w, r) + return + } + + templateData := wc.newTemplateData(w, r) + templateData.Other = files + + err = wc.templates.Get().ExecuteTemplate(w, "user_home", templateData) + if err != nil { + log.Error("Failed to execute template: %s", err) + } +} + +func (wc *WebController) serveUserFiles( + w http.ResponseWriter, + r *http.Request, + p httprouter.Params, +) { + var key string + var err error + if key, err = wc.getAPIKey(r); err != nil { + http.Redirect(w, r, "/", http.StatusTemporaryRedirect) + return + } + + var api = pixelapi.New(wc.conf.APIURLInternal, key) + files, aerr := api.UserFiles(0, 1000) + if aerr != nil { + log.Error("Cannot get user files: %v", aerr) + wc.serveNotFound(w, r) + return + } + + templateData := wc.newTemplateData(w, r) + templateData.Other = files + + err = wc.templates.Get().ExecuteTemplate(w, "file_manager", templateData) + if err != nil { + log.Error("Failed to execute template: %s", err) + } } diff --git a/webcontroller/webcontroller.go b/webcontroller/webcontroller.go index e94a6ec..28d5050 100644 --- a/webcontroller/webcontroller.go +++ b/webcontroller/webcontroller.go @@ -50,8 +50,8 @@ func New(r *httprouter.Router, prefix string, conf *conf.PixelWebConfig) *WebCon r.GET(prefix+"/login" /* */, wc.serveTemplate("login")) r.GET(prefix+"/logout" /* */, wc.serveTemplate("logout")) r.POST(prefix+"/logout" /* */, wc.serveLogout) - r.GET(prefix+"/user" /* */, wc.serveTemplate("user_home")) - r.GET(prefix+"/files" /* */, wc.serveTemplate("file_manager")) + r.GET(prefix+"/user" /* */, wc.serveUserHome) + r.GET(prefix+"/files" /* */, wc.serveUserFiles) r.NotFound = http.HandlerFunc(wc.serveNotFound)