|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"net/http"
|
|
|
|
"os"
|
|
|
|
"strconv"
|
|
|
|
|
|
|
|
"github.com/akhilrex/podgrab/controllers"
|
|
|
|
"github.com/akhilrex/podgrab/db"
|
|
|
|
"github.com/akhilrex/podgrab/service"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/jasonlvhit/gocron"
|
|
|
|
_ "github.com/joho/godotenv/autoload"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
|
|
// os.Remove("./podgrab.db")
|
|
|
|
|
|
|
|
var err error
|
|
|
|
db.DB, err = db.Init()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("statuse: ", err)
|
|
|
|
}
|
|
|
|
db.Migrate()
|
|
|
|
|
|
|
|
r := gin.Default()
|
|
|
|
dataPath := os.Getenv("DATA")
|
|
|
|
//r.Static("/assets", "./assets")
|
|
|
|
r.Static("/assets", dataPath)
|
|
|
|
r.LoadHTMLGlob("client/*")
|
|
|
|
|
|
|
|
r.GET("/podcasts", controllers.AddPodcast)
|
|
|
|
r.POST("/podcasts", controllers.GetAllPodcasts)
|
|
|
|
r.GET("/podcasts/:id", controllers.GetPodcastById)
|
|
|
|
r.GET("/podcasts/:id/items", controllers.GetPodcastItemsByPodcastId)
|
|
|
|
|
|
|
|
r.GET("/podcastitems", controllers.GetAllPodcastItems)
|
|
|
|
r.GET("/podcastitems/:id", controllers.GetPodcastItemById)
|
|
|
|
|
|
|
|
r.GET("/ping", func(c *gin.Context) {
|
|
|
|
|
|
|
|
data, err := service.AddPodcast(c.Query("url"))
|
|
|
|
go service.AddPodcastItems(&data)
|
|
|
|
//data, err := db.GetAllPodcastItemsToBeDownloaded()
|
|
|
|
if err == nil {
|
|
|
|
c.JSON(200, data)
|
|
|
|
} else {
|
|
|
|
c.JSON(http.StatusInternalServerError, err.Error())
|
|
|
|
}
|
|
|
|
})
|
|
|
|
r.GET("/pong", func(c *gin.Context) {
|
|
|
|
|
|
|
|
data, err := db.GetAllPodcastItemsToBeDownloaded()
|
|
|
|
|
|
|
|
for _, item := range *data {
|
|
|
|
url, _ := service.Download(item.FileURL, item.Title, item.Podcast.Title)
|
|
|
|
service.SetPodcastItemAsDownloaded(item.ID, url)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
c.JSON(200, data)
|
|
|
|
} else {
|
|
|
|
c.JSON(http.StatusInternalServerError, err.Error())
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
r.GET("/", func(c *gin.Context) {
|
|
|
|
//var podcasts []db.Podcast
|
|
|
|
podcasts := service.GetAllPodcasts()
|
|
|
|
c.HTML(http.StatusOK, "index.html", gin.H{"title": "Podgrab", "podcasts": podcasts})
|
|
|
|
})
|
|
|
|
r.POST(
|
|
|
|
"/", func(c *gin.Context) {
|
|
|
|
var addPodcastData controllers.AddPodcastData
|
|
|
|
err := c.ShouldBind(&addPodcastData)
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
|
|
_, err = service.AddPodcast(addPodcastData.Url)
|
|
|
|
if err == nil {
|
|
|
|
c.Redirect(http.StatusFound, "/")
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
c.JSON(http.StatusBadRequest, err)
|
|
|
|
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// fmt.Println(err.Error())
|
|
|
|
c.JSON(http.StatusBadRequest, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
go assetEnv()
|
|
|
|
go intiCron()
|
|
|
|
|
|
|
|
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func intiCron() {
|
|
|
|
checkFrequency, err := strconv.Atoi(os.Getenv("CHECK_FREQUENCY"))
|
|
|
|
if err != nil {
|
|
|
|
checkFrequency = 10
|
|
|
|
log.Print(err)
|
|
|
|
}
|
|
|
|
gocron.Every(uint64(checkFrequency)).Hours().Do(service.DownloadMissingEpisodes)
|
|
|
|
gocron.Every(uint64(checkFrequency)).Hours().Do(service.RefreshEpisodes)
|
|
|
|
<-gocron.Start()
|
|
|
|
}
|
|
|
|
|
|
|
|
func assetEnv() {
|
|
|
|
log.Println("Config Dir: ", os.Getenv("CONFIG"))
|
|
|
|
log.Println("Assets Dir: ", os.Getenv("DATA"))
|
|
|
|
log.Println("Check Frequency (hrs): ", os.Getenv("CHECK_FREQUENCY"))
|
|
|
|
}
|