diff --git a/client/settings.html b/client/settings.html
index e0ba4a7..5465165 100644
--- a/client/settings.html
+++ b/client/settings.html
@@ -64,6 +64,11 @@
Automatically download new episodes to the disk
+
+
@@ -83,7 +88,8 @@ var app = new Vue({
axios.post("/settings",{
downloadOnAdd: self.downloadOnAdd,
initialDownloadCount:self.initialDownloadCount,
- autoDownload:self.autoDownload
+ autoDownload:self.autoDownload,
+ appendDateToFileName:self.appendDateToFileName
})
.then(function(response){
@@ -118,6 +124,7 @@ var app = new Vue({
downloadOnAdd: {{ .setting.DownloadOnAdd }},
initialDownloadCount: {{ .setting.InitialDownloadCount }},
autoDownload: {{ .setting.AutoDownload }},
+ appendDateToFileName: {{ .setting.AppendDateToFileName }},
},
diff --git a/controllers/pages.go b/controllers/pages.go
index c58a2a7..8c7e117 100644
--- a/controllers/pages.go
+++ b/controllers/pages.go
@@ -23,6 +23,7 @@ type SettingModel struct {
DownloadOnAdd bool `form:"downloadOnAdd" json:"downloadOnAdd" query:"downloadOnAdd"`
InitialDownloadCount int `form:"initialDownloadCount" json:"initialDownloadCount" query:"initialDownloadCount"`
AutoDownload bool `form:"autoDownload" json:"autoDownload" query:"autoDownload"`
+ AppendDateToFileName bool `form:"appendDateToFileName" json:"appendDateToFileName" query:"appendDateToFileName"`
}
func AddPage(c *gin.Context) {
diff --git a/controllers/podcast.go b/controllers/podcast.go
index e11bc22..d8b814d 100644
--- a/controllers/podcast.go
+++ b/controllers/podcast.go
@@ -229,7 +229,7 @@ func UpdateSetting(c *gin.Context) {
if err == nil {
- err = service.UpdateSettings(model.DownloadOnAdd, model.InitialDownloadCount, model.AutoDownload)
+ err = service.UpdateSettings(model.DownloadOnAdd, model.InitialDownloadCount, model.AutoDownload, model.AppendDateToFileName)
if err == nil {
c.JSON(200, gin.H{"message": "Success"})
diff --git a/db/podcast.go b/db/podcast.go
index 37de859..1161957 100644
--- a/db/podcast.go
+++ b/db/podcast.go
@@ -60,6 +60,7 @@ type Setting struct {
DownloadOnAdd bool `gorm:"default:true"`
InitialDownloadCount int `gorm:"default:5"`
AutoDownload bool `gorm:"default:true"`
+ AppendDateToFileName bool `gorm:"default:false"`
}
type Migration struct {
Base
diff --git a/service/fileService.go b/service/fileService.go
index e0d2e1a..01ea1fe 100644
--- a/service/fileService.go
+++ b/service/fileService.go
@@ -18,7 +18,7 @@ import (
stringy "github.com/gobeam/stringy"
)
-func Download(link string, episodeTitle string, podcastName string) (string, error) {
+func Download(link string, episodeTitle string, podcastName string, prefix string) (string, error) {
if link == "" {
return "", errors.New("Download path empty")
}
@@ -30,6 +30,9 @@ func Download(link string, episodeTitle string, podcastName string) (string, err
}
fileName := getFileName(link, episodeTitle, ".mp3")
+ if prefix != "" {
+ fileName = fmt.Sprintf("%s-%s", prefix, fileName)
+ }
folder := createIfFoldeDoesntExist(podcastName)
finalPath := path.Join(folder, fileName)
file, err := os.Create(finalPath)
diff --git a/service/podcastService.go b/service/podcastService.go
index 8407d89..f6b450b 100644
--- a/service/podcastService.go
+++ b/service/podcastService.go
@@ -242,6 +242,14 @@ func SetPodcastItemPlayedStatus(id string, isPlayed bool) error {
func SetAllEpisodesToDownload(podcastId string) error {
return db.SetAllEpisodesToDownload(podcastId)
}
+
+func GetPodcastPrefix(item *db.PodcastItem, setting *db.Setting) string {
+ prefix := ""
+ if setting.AppendDateToFileName {
+ prefix = item.PubDate.Format("2006-01-02")
+ }
+ return prefix
+}
func DownloadMissingEpisodes() error {
const JOB_NAME = "DownloadMissingEpisodes"
lock := db.GetLock(JOB_NAME)
@@ -250,6 +258,7 @@ func DownloadMissingEpisodes() error {
return nil
}
db.Lock(JOB_NAME, 120)
+ setting := db.GetOrCreateSetting()
data, err := db.GetAllPodcastItemsToBeDownloaded()
@@ -260,11 +269,11 @@ func DownloadMissingEpisodes() error {
var wg sync.WaitGroup
for index, item := range *data {
wg.Add(1)
- go func(item db.PodcastItem) {
+ go func(item db.PodcastItem, setting db.Setting) {
defer wg.Done()
- url, _ := Download(item.FileURL, item.Title, item.Podcast.Title)
+ url, _ := Download(item.FileURL, item.Title, item.Podcast.Title, GetPodcastPrefix(&item, &setting))
SetPodcastItemAsDownloaded(item.ID, url)
- }(item)
+ }(item, *setting)
if index%5 == 0 {
wg.Wait()
@@ -316,7 +325,9 @@ func DownloadSingleEpisode(podcastItemId string) error {
return err
}
- url, err := Download(podcastItem.FileURL, podcastItem.Title, podcastItem.Podcast.Title)
+ setting := db.GetOrCreateSetting()
+
+ url, err := Download(podcastItem.FileURL, podcastItem.Title, podcastItem.Podcast.Title, GetPodcastPrefix(&podcastItem, setting))
if err != nil {
return err
}
@@ -426,12 +437,13 @@ func GetSearchFromItunes(pod model.ItunesSingleResult) *model.CommonSearchResult
return p
}
-func UpdateSettings(downloadOnAdd bool, initialDownloadCount int, autoDownload bool) error {
+func UpdateSettings(downloadOnAdd bool, initialDownloadCount int, autoDownload bool, appendDateToFileName bool) error {
setting := db.GetOrCreateSetting()
setting.AutoDownload = autoDownload
setting.DownloadOnAdd = downloadOnAdd
setting.InitialDownloadCount = initialDownloadCount
+ setting.AppendDateToFileName = appendDateToFileName
return db.UpdateSettings(setting)
}