diff --git a/pkg/doc.go b/pkg/doc.go index 46968b81..bc35cfc1 100644 --- a/pkg/doc.go +++ b/pkg/doc.go @@ -5,7 +5,7 @@ type Torrent interface { Progress() int Stop() error Start() error - Remove() error + Remove(deleteData bool) error Save() string Exists() bool } diff --git a/pkg/storage/webdav.go b/pkg/storage/webdav.go index ad25c835..2c96e1ca 100644 --- a/pkg/storage/webdav.go +++ b/pkg/storage/webdav.go @@ -13,6 +13,7 @@ import ( "github.com/emersion/go-webdav" "github.com/pkg/errors" ) + type FileInfo struct { Path string Size int64 @@ -22,7 +23,6 @@ type FileInfo struct { ETag string } - type WebdavStorage struct { fs *webdav.Client } @@ -32,27 +32,22 @@ func NewWebdavStorage(url, user, password string) (*WebdavStorage, error) { if err != nil { return nil, errors.Wrap(err, "new webdav") } - fs, _ := c.ReadDir(context.TODO(), "./", false) - for _, f := range fs { - log.Infof("file: %v", f) - } return &WebdavStorage{ fs: c, }, nil } - func (w *WebdavStorage) Move(local, remote string) error { err := filepath.Walk(local, func(path string, info fs.FileInfo, err error) error { name := filepath.Join(remote, info.Name()) if info.IsDir() { - + if err := w.fs.Mkdir(context.TODO(), name); err != nil { return errors.Wrapf(err, "mkdir %v", name) } - } else {//is file + } else { //is file if writer, err := w.fs.Create(context.TODO(), name); err != nil { return errors.Wrapf(err, "create file %s", name) } else { @@ -68,6 +63,7 @@ func (w *WebdavStorage) Move(local, remote string) error { } } } + log.Infof("file copy complete: %d", name) return nil }) if err != nil { @@ -76,7 +72,7 @@ func (w *WebdavStorage) Move(local, remote string) error { return os.RemoveAll(local) } -func (w *WebdavStorage) ReadDir(dir string) ([]FileInfo,error) { +func (w *WebdavStorage) ReadDir(dir string) ([]FileInfo, error) { fi, err := w.fs.ReadDir(context.TODO(), dir, false) if err != nil { return nil, err @@ -84,15 +80,13 @@ func (w *WebdavStorage) ReadDir(dir string) ([]FileInfo,error) { var res []FileInfo = make([]FileInfo, 0, len(fi)) for _, f := range fi { res = append(res, FileInfo{ - Path: f.Path, - Size : f.Size, - ModTime : f.ModTime, - IsDir : f.IsDir, - MIMEType : f.MIMEType, - ETag : f.ETag, - + Path: f.Path, + Size: f.Size, + ModTime: f.ModTime, + IsDir: f.IsDir, + MIMEType: f.MIMEType, + ETag: f.ETag, }) } return res, nil } - diff --git a/pkg/transmission/transmission.go b/pkg/transmission/transmission.go index 4d639fae..4e778601 100644 --- a/pkg/transmission/transmission.go +++ b/pkg/transmission/transmission.go @@ -106,10 +106,10 @@ func (t *Torrent) Start() error { return t.c.TorrentStartIDs(context.TODO(), []int64{t.ID}) } -func (t *Torrent) Remove() error { +func (t *Torrent) Remove(deleteData bool) error { return t.c.TorrentRemove(context.TODO(), transmissionrpc.TorrentRemovePayload{ IDs: []int64{t.ID}, - DeleteLocalData: true, + DeleteLocalData: deleteData, }) } diff --git a/server/activity.go b/server/activity.go index 4fad8ccd..8f864058 100644 --- a/server/activity.go +++ b/server/activity.go @@ -1,7 +1,42 @@ package server -import "github.com/gin-gonic/gin" +import ( + "polaris/log" + "strconv" -func (s *Server) GetRunningActivities(c *gin.Context) (interface{}, error) { + "github.com/gin-gonic/gin" + "github.com/pkg/errors" +) + +func (s *Server) GetAllActivities(c *gin.Context) (interface{}, error) { + his := s.db.GetHistories() + + return his, nil +} + +func (s *Server) RemoveActivity(c *gin.Context) (interface{}, error) { + ids := c.Param("id") + id, err := strconv.Atoi(ids) + if err != nil { + return nil, errors.Wrap(err, "convert") + } + his := s.db.GetHistory(id) + if his == nil { + log.Errorf("no record of id: %d", id) + return nil, nil + } + torrent := s.tasks[his.ID] + if torrent != nil { + if err := torrent.Remove(true); err != nil { + return nil, errors.Wrap(err, "remove torrent") + } + delete(s.tasks, his.ID) + } + + err = s.db.DeleteHistory(id) + if err != nil { + return nil, errors.Wrap(err, "db") + } + log.Infof("history record successful deleted: %v", his.SourceTitle) return nil, nil -} \ No newline at end of file +} diff --git a/server/scheduler.go b/server/scheduler.go index 7e1199d1..5bc44a1c 100644 --- a/server/scheduler.go +++ b/server/scheduler.go @@ -30,7 +30,7 @@ func (s *Server) checkTasks() { log.Infof("task (%s) percentage done: %d%%", t.Name(), t.Progress()) if t.Progress() == 100 { log.Infof("task is done: %v", t.Name()) - s.moveCompletedTask(id) + go s.moveCompletedTask(id) } } } @@ -38,6 +38,11 @@ func (s *Server) checkTasks() { func (s *Server) moveCompletedTask(id int) error { torrent := s.tasks[id] r := s.db.GetHistory(id) + s.db.SetHistoryComplete(r.ID) + tt := s.tasks[r.ID] + tt.Remove(false) + delete(s.tasks, r.ID) + series := s.db.GetSeriesDetails(r.SeriesID) st := s.db.GetStorage(series.StorageID) if st.Implementation == db.ImplWebdav { diff --git a/server/server.go b/server/server.go index ef170700..92913e21 100644 --- a/server/server.go +++ b/server/server.go @@ -52,6 +52,11 @@ func (s *Server) Serve() error { setting.POST("/auth", HttpHandler(s.EnableAuth)) setting.GET("/auth", HttpHandler(s.GetAuthSetting)) } + activity := api.Group("/activity") + { + activity.GET("/", HttpHandler(s.GetAllActivities)) + activity.DELETE("/:id", HttpHandler(s.RemoveActivity)) + } tv := api.Group("/tv") {