You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.1 KiB
129 lines
3.1 KiB
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/akhilrex/podgrab/db"
|
|
"github.com/akhilrex/podgrab/service"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type SearchGPodderData struct {
|
|
Q string `binding:"required" form:"q" json:"q" query:"q"`
|
|
}
|
|
|
|
func AddPage(c *gin.Context) {
|
|
|
|
c.HTML(http.StatusOK, "addPodcast.html", gin.H{"title": "Add Podcast"})
|
|
}
|
|
func HomePage(c *gin.Context) {
|
|
//var podcasts []db.Podcast
|
|
podcasts := service.GetAllPodcasts()
|
|
c.HTML(http.StatusOK, "index.html", gin.H{"title": "Podgrab", "podcasts": podcasts})
|
|
}
|
|
func PodcastPage(c *gin.Context) {
|
|
var searchByIdQuery SearchByIdQuery
|
|
if c.ShouldBindUri(&searchByIdQuery) == nil {
|
|
|
|
var podcast db.Podcast
|
|
|
|
if err := db.GetPodcastById(searchByIdQuery.Id, &podcast); err == nil {
|
|
setting := c.MustGet("setting").(*db.Setting)
|
|
c.HTML(http.StatusOK, "podcast.html", gin.H{"title": podcast.Title, "podcast": podcast, "setting": setting})
|
|
} else {
|
|
c.JSON(http.StatusBadRequest, err)
|
|
}
|
|
} else {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
|
|
}
|
|
|
|
}
|
|
func AllEpisodesPage(c *gin.Context) {
|
|
var pagination Pagination
|
|
if c.ShouldBindQuery(&pagination) == nil {
|
|
var page, count int
|
|
if page = pagination.Page; page == 0 {
|
|
page = 1
|
|
}
|
|
if count = pagination.Count; count == 0 {
|
|
count = 10
|
|
}
|
|
var podcastItems []db.PodcastItem
|
|
var totalCount int64
|
|
if err := db.GetPaginatedPodcastItems(page, count, &podcastItems, &totalCount); err == nil {
|
|
setting := c.MustGet("setting").(*db.Setting)
|
|
totalPages := math.Ceil(float64(totalCount) / float64(count))
|
|
nextPage, previousPage := 0, 0
|
|
if float64(page) < totalPages {
|
|
nextPage = page + 1
|
|
}
|
|
if page > 1 {
|
|
previousPage = page - 1
|
|
}
|
|
c.HTML(http.StatusOK, "episodes.html", gin.H{
|
|
"title": "All Episodes",
|
|
"podcastItems": podcastItems,
|
|
"setting": setting,
|
|
"page": page,
|
|
"count": count,
|
|
"totalCount": totalCount,
|
|
"totalPages": totalPages,
|
|
"nextPage": nextPage,
|
|
"previousPage": previousPage,
|
|
})
|
|
} else {
|
|
c.JSON(http.StatusBadRequest, err)
|
|
}
|
|
} else {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
|
|
}
|
|
|
|
}
|
|
|
|
func Search(c *gin.Context) {
|
|
var searchQuery SearchGPodderData
|
|
if c.ShouldBindQuery(&searchQuery) == nil {
|
|
data := service.Query(searchQuery.Q)
|
|
allPodcasts := service.GetAllPodcasts()
|
|
|
|
urls := make(map[string]string, len(*allPodcasts))
|
|
for _, pod := range *allPodcasts {
|
|
fmt.Println(pod.URL)
|
|
urls[pod.URL] = pod.ID
|
|
}
|
|
for _, pod := range data {
|
|
_, ok := urls[pod.URL]
|
|
fmt.Println(pod.URL + " " + strconv.FormatBool(ok))
|
|
pod.AlreadySaved = ok
|
|
}
|
|
c.JSON(200, data)
|
|
}
|
|
|
|
}
|
|
|
|
func AddNewPodcast(c *gin.Context) {
|
|
var addPodcastData AddPodcastData
|
|
err := c.ShouldBind(&addPodcastData)
|
|
|
|
if err == nil {
|
|
|
|
_, err = service.AddPodcast(addPodcastData.Url)
|
|
if err == nil {
|
|
go service.RefreshEpisodes()
|
|
c.Redirect(http.StatusFound, "/")
|
|
|
|
} else {
|
|
|
|
c.JSON(http.StatusBadRequest, err)
|
|
|
|
}
|
|
} else {
|
|
// fmt.Println(err.Error())
|
|
c.JSON(http.StatusBadRequest, err)
|
|
}
|
|
|
|
}
|