From 2bb8367a9d5bbf9ecdabc3b082920bf6fcdbb549 Mon Sep 17 00:00:00 2001 From: Balkaneser <43721713+Balk-Z@users.noreply.github.com> Date: Sat, 7 Dec 2024 14:22:49 +0100 Subject: [PATCH] use ExpirationTime instead of string --- handlers/guest_links_test.go | 4 +-- .../templates/pages/guest-link-create.html | 4 ++- handlers/views.go | 12 +++++++++ store/sqlite/guest_links.go | 8 +++--- store/sqlite/sqlite.go | 26 +++++++++++++++++++ 5 files changed, 46 insertions(+), 8 deletions(-) diff --git a/handlers/guest_links_test.go b/handlers/guest_links_test.go index 451b31830..b12f74bce 100644 --- a/handlers/guest_links_test.go +++ b/handlers/guest_links_test.go @@ -35,7 +35,7 @@ func TestGuestLinksPostAcceptsValidRequest(t *testing.T) { expected: picoshare.GuestLink{ Label: picoshare.GuestLinkLabel(""), UrlExpires: mustParseExpirationTime("2030-01-02T03:04:25Z"), - FileExpires: mustParseExpirationTime("2030-01-02T03:04:25Z"), + FileExpires: mustParseExpirationTime("2999-12-31T00:00:00Z"), MaxFileBytes: picoshare.GuestUploadUnlimitedFileSize, MaxFileUploads: picoshare.GuestUploadUnlimitedFileUploads, }, @@ -52,7 +52,7 @@ func TestGuestLinksPostAcceptsValidRequest(t *testing.T) { expected: picoshare.GuestLink{ Label: picoshare.GuestLinkLabel("For my good pal, Maurice"), UrlExpires: mustParseExpirationTime("2030-01-02T03:04:25Z"), - FileExpires: mustParseExpirationTime("2030-01-02T03:04:25Z"), + FileExpires: mustParseExpirationTime("2999-12-31T00:00:00Z"), MaxFileBytes: makeGuestUploadMaxFileBytes(1048576), MaxFileUploads: makeGuestUploadCountLimit(1), }, diff --git a/handlers/templates/pages/guest-link-create.html b/handlers/templates/pages/guest-link-create.html index 589be9a4f..3f6aca50c 100644 --- a/handlers/templates/pages/guest-link-create.html +++ b/handlers/templates/pages/guest-link-create.html @@ -6,7 +6,9 @@ const labelInput = document.getElementById("label"); const expirationSelect = document.getElementById("expiration-select"); - const expirationSelectFile = document.getElementById("expiration-select-file"); + const expirationSelectFile = document.getElementById( + "expiration-select-file" + ); const maxFileBytesInput = document.getElementById("max-file-size"); const fileUploadLimitInput = document.getElementById("file-upload-limit"); const createLinkForm = document.getElementById("create-guest-link-form"); diff --git a/handlers/views.go b/handlers/views.go index b4f3119de..0de632b86 100644 --- a/handlers/views.go +++ b/handlers/views.go @@ -87,6 +87,18 @@ func (s Server) guestLinkIndexGet() http.HandlerFunc { } return fmt.Sprintf("%s (%.0f days%s)", t.Format(time.DateOnly), math.Abs(delta.Hours())/24, suffix) }, + "formatFileExpiration": func(et picoshare.ExpirationTime) string { + if et == picoshare.NeverExpire { + return "Never" + } + t := time.Time(et) + letterS := "s" + delta := time.Until(t) + if delta.Hours() < 25 { + letterS = "" + } + return fmt.Sprintf("After %.0f day%s", math.Abs(delta.Hours())/24, letterS) + }, "isActive": func(gl picoshare.GuestLink) bool { return gl.IsActive() }, diff --git a/store/sqlite/guest_links.go b/store/sqlite/guest_links.go index 99cbb290d..54ad27b9c 100644 --- a/store/sqlite/guest_links.go +++ b/store/sqlite/guest_links.go @@ -69,6 +69,7 @@ func (s Store) GetGuestLinks() ([]picoshare.GuestLink, error) { func (s *Store) InsertGuestLink(guestLink picoshare.GuestLink) error { log.Printf("saving new guest link %s", guestLink.ID) + log.Printf("guestLink %v", guestLink) if _, err := s.ctx.Exec(` INSERT INTO guest_links @@ -89,7 +90,7 @@ func (s *Store) InsertGuestLink(guestLink picoshare.GuestLink) error { sql.Named("max_file_uploads", guestLink.MaxFileUploads), sql.Named("creation_time", formatTime(time.Now())), sql.Named("url_expiration_time", formatExpirationTime(guestLink.UrlExpires)), - sql.Named("file_expiration_time", formatExpirationTime(guestLink.FileExpires))); err != nil { + sql.Named("file_expiration_time", formatFileExpirationTime(guestLink.FileExpires))); err != nil { return err } @@ -154,10 +155,7 @@ func guestLinkFromRow(row rowScanner) (picoshare.GuestLink, error) { return picoshare.GuestLink{}, err } - fet, err := parseDatetime(fileExpirationTimeRaw) - if err != nil { - return picoshare.GuestLink{}, err - } + fet := parseFileDatetime(fileExpirationTimeRaw) return picoshare.GuestLink{ ID: id, diff --git a/store/sqlite/sqlite.go b/store/sqlite/sqlite.go index 0892179c9..66eb6f9a3 100644 --- a/store/sqlite/sqlite.go +++ b/store/sqlite/sqlite.go @@ -2,7 +2,9 @@ package sqlite import ( "database/sql" + "fmt" "log" + "math" "time" _ "github.com/mattn/go-sqlite3" @@ -66,6 +68,11 @@ func NewWithChunkSize(path string, chunkSize int, optimizeForLitestream bool) St } } +func formatFileExpirationTime(et picoshare.ExpirationTime) string { + delta := time.Until(time.Time(et)) + return fmt.Sprintf("%.0f", math.Abs(delta.Hours())/24) +} + func formatExpirationTime(et picoshare.ExpirationTime) string { return formatTime(time.Time(et)) } @@ -74,6 +81,25 @@ func formatTime(t time.Time) string { return t.UTC().Format(timeFormat) } +func parseFileDatetime(s string) time.Time { + log.Printf("asadsasdasdsad") + t := time.Now() + switch s { + case "1": + t = t.AddDate(0, 0, 1) + case "7": + t = t.AddDate(0, 0, 7) + case "30": + t = t.AddDate(0, 0, 30) + case "365": + t = t.AddDate(1, 0, 0) + default: + t = time.Time(picoshare.NeverExpire) + } + + return t +} + func parseDatetime(s string) (time.Time, error) { return time.Parse(timeFormat, s) }