mirror of
https://github.com/simon-ding/polaris.git
synced 2026-02-24 20:50:46 +08:00
124 lines
3.1 KiB
Go
124 lines
3.1 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"polaris/db"
|
|
"regexp"
|
|
|
|
"polaris/log"
|
|
"polaris/pkg/storage"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func (s *Server) GetAllStorage(c *gin.Context) (interface{}, error) {
|
|
data := s.db.GetAllStorage()
|
|
return data, nil
|
|
}
|
|
|
|
func (s *Server) AddStorage(c *gin.Context) (interface{}, error) {
|
|
var in db.StorageInfo
|
|
if err := c.ShouldBindJSON(&in); err != nil {
|
|
return nil, errors.Wrap(err, "bind json")
|
|
}
|
|
|
|
if in.Implementation == "webdav" {
|
|
//test webdav
|
|
wd := in.ToWebDavSetting()
|
|
st, err := storage.NewWebdavStorage(wd.URL, wd.User, wd.Password, in.TvPath, false)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "new webdav")
|
|
}
|
|
fs, err := st.ReadDir(".")
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "test read")
|
|
}
|
|
for _, f := range fs {
|
|
log.Infof("file name: %v", f.Name())
|
|
}
|
|
}
|
|
log.Infof("received add storage input: %v", in)
|
|
err := s.db.AddStorage(&in)
|
|
return nil, err
|
|
}
|
|
|
|
func (s *Server) DeleteStorage(c *gin.Context) (interface{}, error) {
|
|
ids := c.Param("id")
|
|
id, err := strconv.Atoi(ids)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("id is not int: %v", ids)
|
|
}
|
|
err = s.db.DeleteStorage(id)
|
|
return nil, err
|
|
}
|
|
|
|
func (s *Server) SuggestedSeriesFolderName(c *gin.Context) (interface{}, error) {
|
|
ids := c.Param("tmdb_id")
|
|
id, err := strconv.Atoi(ids)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("id is not int: %v", ids)
|
|
}
|
|
d, err := s.MustTMDB().GetTvDetails(id, s.language)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "get tv details")
|
|
}
|
|
|
|
name := d.Name
|
|
|
|
if s.language == db.LanguageCN {
|
|
en, err := s.MustTMDB().GetTvDetails(id, db.LanguageEN)
|
|
if err != nil {
|
|
log.Errorf("get en tv detail error: %v", err)
|
|
} else {
|
|
name = fmt.Sprintf("%s %s", d.Name, en.Name)
|
|
}
|
|
}
|
|
//remove extra characters
|
|
re := regexp.MustCompile(`[^\p{L}\w\s]`)
|
|
name = re.ReplaceAllString(strings.ToLower(name), " ")
|
|
name = strings.Join(strings.Fields(name), " ")
|
|
year := strings.Split(d.FirstAirDate, "-")[0]
|
|
if year != "" {
|
|
name = fmt.Sprintf("%s (%s)", name, year)
|
|
}
|
|
|
|
log.Infof("tv series of tmdb id %v suggestting name is %v", id, name)
|
|
return gin.H{"name": name}, nil
|
|
}
|
|
|
|
func (s *Server) SuggestedMovieFolderName(c *gin.Context) (interface{}, error) {
|
|
ids := c.Param("tmdb_id")
|
|
id, err := strconv.Atoi(ids)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("id is not int: %v", ids)
|
|
}
|
|
d1, err := s.MustTMDB().GetMovieDetails(id, s.language)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "get movie details")
|
|
}
|
|
name := d1.Title
|
|
|
|
if s.language == db.LanguageCN {
|
|
en, err := s.MustTMDB().GetMovieDetails(id, db.LanguageEN)
|
|
if err != nil {
|
|
log.Errorf("get en movie detail error: %v", err)
|
|
} else {
|
|
name = fmt.Sprintf("%s %s", d1.Title, en.Title)
|
|
}
|
|
}
|
|
//remove extra characters
|
|
re := regexp.MustCompile(`[^\p{L}\w\s]`)
|
|
name = re.ReplaceAllString(strings.ToLower(name), " ")
|
|
name = strings.Join(strings.Fields(name), " ")
|
|
year := strings.Split(d1.ReleaseDate, "-")[0]
|
|
if year != "" {
|
|
name = fmt.Sprintf("%s (%s)", name, year)
|
|
}
|
|
|
|
log.Infof("tv series of tmdb id %v suggestting name is %v", id, name)
|
|
return gin.H{"name": name}, nil
|
|
}
|