diff --git a/api/download_subreddit_images.go b/api/download_subreddit_images.go index 7ba1543..6455718 100644 --- a/api/download_subreddit_images.go +++ b/api/download_subreddit_images.go @@ -196,7 +196,7 @@ func (api *API) downloadSubredditImage(ctx context.Context, post reddit.Post, su DeviceID: omit.From(device.ID), Title: omit.From(post.GetTitle()), PostID: omit.From(post.GetID()), - PostURL: omit.From(post.GetImageURL()), + PostURL: omit.From(post.GetPostURL()), PostCreated: omit.From(post.GetCreated().Format(time.RFC3339)), PostName: omit.From(post.GetName()), Poster: omit.From(post.GetAuthor()), @@ -373,7 +373,7 @@ func (api *API) copyImageToTempDir(ctx context.Context, img reddit.PostImage) (t split := strings.Split(url.Path, "/") imageFilename := split[len(split)-1] tmpDirname := path.Join(os.TempDir(), "redmage") - err = os.MkdirAll(tmpDirname, 0777) + err = os.MkdirAll(tmpDirname, 0o777) if err != nil { return nil, errs.Wrapw(err, "failed to create temporary dir", "dir_name", tmpDirname) } diff --git a/api/reddit/post.go b/api/reddit/post.go index 3be3030..ada20cb 100644 --- a/api/reddit/post.go +++ b/api/reddit/post.go @@ -354,7 +354,7 @@ func (post *Post) GetPermalink() string { } func (post *Post) GetPostURL() string { - return fmt.Sprintf("https://reddit.com/%s", post.Data.Permalink) + return fmt.Sprintf("https://reddit.com%s", post.Data.Permalink) } func (post *Post) GetID() string { diff --git a/rest/subreddits/create.http b/rest/subreddits/create.http index a893e11..470dc87 100644 --- a/rest/subreddits/create.http +++ b/rest/subreddits/create.http @@ -1,9 +1,8 @@ POST http://localhost:8080/api/v1/subreddits HTTP/1.1 Host: localhost:8080 -Content-Length: 109 { - "name": "animemidriff", + "name": "CultureImpact", "enable_schedule": 1, "schedule": "@daily", "countback": 300 diff --git a/rest/subreddits/start.http b/rest/subreddits/start.http index 0e39cfd..7644c21 100644 --- a/rest/subreddits/start.http +++ b/rest/subreddits/start.http @@ -1,8 +1,7 @@ POST http://localhost:8080/api/v1/subreddits/start HTTP/1.1 Host: localhost:8080 Content-Type: application/json -Content-Length: 35 { - "subreddit": "fantasymoe" + "subreddit": "CultureImpact" } diff --git a/server/routes/page_home.go b/server/routes/page_home.go index 49a99b3..565fc0d 100644 --- a/server/routes/page_home.go +++ b/server/routes/page_home.go @@ -1,8 +1,12 @@ package routes import ( + "encoding/json" "net/http" + "time" + "github.com/tigorlazuardi/redmage/api" + "github.com/tigorlazuardi/redmage/pkg/errs" "github.com/tigorlazuardi/redmage/pkg/log" "github.com/tigorlazuardi/redmage/views" "github.com/tigorlazuardi/redmage/views/homeview" @@ -14,16 +18,34 @@ func (routes *Routes) PageHome(rw http.ResponseWriter, r *http.Request) { vc := views.NewContext(routes.Config, r) - params := parseSubredditListQuery(r) + listSubredditParams := parseSubredditListQuery(r) - list, err := routes.API.ListSubreddits(ctx, params) + list, err := routes.API.ListSubreddits(ctx, listSubredditParams) if err != nil { - rw.WriteHeader(http.StatusInternalServerError) + log.New(ctx).Err(err).Error("failed to list subreddits") + code, message := errs.HTTPMessage(err) + rw.WriteHeader(code) + _ = json.NewEncoder(rw).Encode(map[string]string{"error": message}) + return + } + + imageListParams := api.ImageListParams{} + imageListParams.FillFromQuery(r.URL.Query()) + imageListParams.CreatedAt = time.Now().Add(-time.Hour * 24 * 3) // images in the last 3 days. + + imageList, err := routes.API.ImagesListWithDevicesAndSubreddits(ctx, imageListParams) + if err != nil { + log.New(ctx).Err(err).Error("failed to list subreddits") + code, message := errs.HTTPMessage(err) + rw.WriteHeader(code) + _ = json.NewEncoder(rw).Encode(map[string]string{"error": message}) + return } data := homeview.Data{ - SubredditsList: list, - Error: err, + SubredditsList: list, + RecentlyAddedImages: imageList, + Error: err, } if err := homeview.Home(vc, data).Render(ctx, rw); err != nil { diff --git a/views/components/body.templ b/views/components/body.templ index c80bdaa..56b9d4a 100644 --- a/views/components/body.templ +++ b/views/components/body.templ @@ -3,7 +3,7 @@ package components import "github.com/tigorlazuardi/redmage/views" templ Body(c *views.Context) { - + @Navigation(c) {
@Navbar(c) diff --git a/views/homeview/homeview.templ b/views/homeview/homeview.templ index f96933b..cc365b4 100644 --- a/views/homeview/homeview.templ +++ b/views/homeview/homeview.templ @@ -5,8 +5,9 @@ import "github.com/tigorlazuardi/redmage/views" import "github.com/tigorlazuardi/redmage/api" type Data struct { - SubredditsList api.ListSubredditsResult - Error error + SubredditsList api.ListSubredditsResult + RecentlyAddedImages api.ImageListResult + Error error } templ Home(c *views.Context, data Data) { @@ -24,10 +25,15 @@ templ Home(c *views.Context, data Data) { } } -templ home(c *views.Context, data Data) { +templ home(_ *views.Context, data Data) {
-
+

Recently Added

+
+ for _, image := range data.RecentlyAddedImages.Images { + @RecentlyAddedImageCard(image, 0) + } +

Subreddits

diff --git a/views/homeview/recently_added_image_card.templ b/views/homeview/recently_added_image_card.templ new file mode 100644 index 0000000..e64422c --- /dev/null +++ b/views/homeview/recently_added_image_card.templ @@ -0,0 +1,51 @@ +package homeview + +import "github.com/tigorlazuardi/redmage/models" +import "github.com/tigorlazuardi/redmage/api/reddit" +import "fmt" + +type ImageCardOption uint + +func (o ImageCardOption) Has(opt ImageCardOption) bool { + return o&opt != 0 +} + +const ( + HideTitle ImageCardOption = 1 << iota + HideDescription + HideSubreddit + HidePoster +) + +templ RecentlyAddedImageCard(data *models.Image, opts ImageCardOption) { +
+
+ + { + +
+
+ if !opts.Has(HideTitle) { + { data.Title } + } + { data.Poster } + if data.R.Subreddit != nil { + if !opts.Has(HideSubreddit) { + { data.R.Subreddit.Name } + } + } +
+
+}