some changes

design
serr 2025-06-06 22:00:09 +03:00
parent 16483803a5
commit 0540bdf1d2
5 changed files with 15 additions and 20 deletions

BIN
main~

Binary file not shown.

View File

@ -29,7 +29,7 @@ func PostsPageHandler(app *models.App) http.HandlerFunc {
// не сработает (в главном main настроены маршруты) // не сработает (в главном main настроены маршруты)
pageNumber, _ := strconv.Atoi(path.Base(link)) pageNumber, _ := strconv.Atoi(path.Base(link))
page := models_pages.CreatePage(postsList, pageNumber, app.Cfg.PostsMaxCountOnPage) page := models_pages.CreatePostsPage(postsList, pageNumber, app.Cfg.PostsMaxCountOnPage)
pageData, err = page.RenderPostsPage(app.Templates, app.Version) pageData, err = page.RenderPostsPage(app.Templates, app.Version)
if err != nil { if err != nil {

View File

@ -8,7 +8,7 @@ import (
"strings" "strings"
) )
type LastFMTrack struct { type lastFMTrack struct {
Name string `json:"name"` Name string `json:"name"`
Artist struct { Artist struct {
Name string `json:"#text"` Name string `json:"#text"`
@ -21,13 +21,13 @@ type LastFMTrack struct {
} `json:"date"` } `json:"date"`
} }
type LastFMResponse struct { type lastFMResponse struct {
RecentTracks struct { RecentTracks struct {
Tracks []LastFMTrack `json:"track"` Tracks []lastFMTrack `json:"track"`
} `json:"recenttracks"` } `json:"recenttracks"`
} }
func LastFMGetRecentTracks(username, apiKey string) (*LastFMResponse, error) { func lastFMGetRecentTracks(username, apiKey string) (*lastFMResponse, error) {
url := fmt.Sprintf("https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=%s&api_key=%s&format=json", username, apiKey) url := fmt.Sprintf("https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=%s&api_key=%s&format=json", username, apiKey)
resp, err := http.Get(url) resp, err := http.Get(url)
if err != nil { if err != nil {
@ -38,7 +38,7 @@ func LastFMGetRecentTracks(username, apiKey string) (*LastFMResponse, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("lastfm read resp body err: %v", err) return nil, fmt.Errorf("lastfm read resp body err: %v", err)
} }
var lastFMResponse LastFMResponse var lastFMResponse lastFMResponse
if err := json.Unmarshal(body, &lastFMResponse); err != nil { if err := json.Unmarshal(body, &lastFMResponse); err != nil {
return nil, fmt.Errorf("lastfm unmarshal err: %v", err) return nil, fmt.Errorf("lastfm unmarshal err: %v", err)
} }
@ -47,7 +47,7 @@ func LastFMGetRecentTracks(username, apiKey string) (*LastFMResponse, error) {
} }
func LastFMGetLastTrack(username, apiKey string) (string, error) { func LastFMGetLastTrack(username, apiKey string) (string, error) {
resp, err := LastFMGetRecentTracks(username, apiKey) resp, err := lastFMGetRecentTracks(username, apiKey)
if err != nil { if err != nil {
return "", err return "", err
} }

View File

@ -6,13 +6,12 @@ import (
"time" "time"
) )
type PostLink string
const ( const (
// Имя соответствующего шаблона // Имя соответствующего шаблона
PostPageTmplName = "post.gohtml" PostPageTmplName = "post.gohtml"
) )
type PostLink string
type Post struct { type Post struct {
Link PostLink Link PostLink
Preview template.HTML Preview template.HTML

View File

@ -20,8 +20,9 @@ const (
) )
type PostsMap map[PostLink]*Post type PostsMap map[PostLink]*Post
type PostsList []*Post
type PostsPage struct { type PostsPage struct {
PostsListOnPage []*Post // список постов на странице PostsListOnPage PostsList // список постов на странице
PageNumber int // номер страницы PageNumber int // номер страницы
PagesCount int // общее количество страниц PagesCount int // общее количество страниц
} }
@ -71,8 +72,8 @@ func LoadPosts(dir string) (PostsMap, error) {
} }
// Получение из мапы постов списка постов, отсортированного по ModTimestamp (новые сначала) // Получение из мапы постов списка постов, отсортированного по ModTimestamp (новые сначала)
func (p *PostsMap) PostsList() []*Post { func (p *PostsMap) PostsList() PostsList {
postsSlice := make([]*Post, 0, len(*p)) postsSlice := make(PostsList, 0, len(*p))
for _, post := range *p { for _, post := range *p {
postsSlice = append(postsSlice, post) postsSlice = append(postsSlice, post)
} }
@ -84,15 +85,10 @@ func (p *PostsMap) PostsList() []*Post {
return postsSlice return postsSlice
} }
func CreatePage(postsList []*Post, pageNumber, postsMaxCountOnPage int) *PostsPage { func CreatePostsPage(postsList PostsList, pageNumber, postsMaxCountOnPage int) *PostsPage {
// Общее количество страниц // Общее количество страниц
pagesCount := (len(postsList) + postsMaxCountOnPage - 1) / postsMaxCountOnPage pagesCount := (len(postsList) + postsMaxCountOnPage - 1) / postsMaxCountOnPage
// Ошибки тут быть не может, так как этот обработчик настроен
// на только существующие реально pageNumber и в случае
// какого то не существующего номера страницы он просто
// не сработает (в главном main настроены маршруты)
startIndex := pageNumber * postsMaxCountOnPage startIndex := pageNumber * postsMaxCountOnPage
endIndex := startIndex + postsMaxCountOnPage endIndex := startIndex + postsMaxCountOnPage
endIndex = min(endIndex, len(postsList)) endIndex = min(endIndex, len(postsList))