Skip to content
Snippets Groups Projects
Commit 01f16260 authored by Christian Pointner's avatar Christian Pointner
Browse files

sync import state with store

parent 2651c690
No related branches found
No related tags found
No related merge requests found
......@@ -29,6 +29,8 @@ import (
"net/url"
"sync/atomic"
"time"
"gitlab.servus.at/autoradio/tank/store"
)
type Job struct {
......@@ -55,18 +57,18 @@ func (job *Job) run() (err error) {
job.StartedAt = time.Now()
job.im.dbgLog.Printf("running import for %s/%d from: %s", job.Group, job.ID, job.Source.String())
// TODO: update store.file: set import state to ImportRunning
job.im.store.UpdateFileImportState(job.Group, job.ID, store.ImportRunning, false)
if err = job.fetch(); err != nil {
// update store.file: set import state to ImportAborted + success = false
job.im.store.UpdateFileImportState(job.Group, job.ID, store.ImportAborted, false)
// send result to all done subscriptions
return err
}
if err = job.normalize(); err != nil {
// update store.file: set import state to ImportAborted + success = false
job.im.store.UpdateFileImportState(job.Group, job.ID, store.ImportAborted, false)
// send result to all done subscriptions
return err
}
// update store.file: set import state to ImportDone + success = true
job.im.store.UpdateFileImportState(job.Group, job.ID, store.ImportDone, true)
// send result to all done subscriptions
return
}
......@@ -80,7 +82,7 @@ func (job *Job) start() <-chan error {
return done
}
// handle subscriptions for progress and done
// TODO: handle subscriptions to done
func (job *Job) Start(timeout time.Duration) error {
if !atomic.CompareAndSwapUint32((*uint32)(&job.State), uint32(JobNew), uint32(JobInitializing)) {
......@@ -101,7 +103,7 @@ func (job *Job) Start(timeout time.Duration) error {
job.cleanup()
return ErrTooManyJobs
}
// TODO: update store.file: set import state to ImportPending
job.im.store.UpdateFileImportState(job.Group, job.ID, store.ImportPending, false)
return nil
}
......
......@@ -88,6 +88,18 @@ func (st *Store) UpdateFileMetadata(group string, id uint64, metadata map[string
return file, nil
}
func (st *Store) UpdateFileImportState(group string, id uint64, state ImportState, success bool) (*File, error) {
file := &File{ID: id}
is := make(map[string]interface{})
is["source__import__state"] = state
is["source__import__success"] = success
if err := st.db.Model(&file).Where("group_name = ?", group).Update(is).Error; err != nil {
return nil, err
}
return file, nil
}
func (st *Store) getFileUsage(id uint64, playlists *Playlists) (err error) {
sub := st.db.Model(PlaylistEntry{}).Select("playlist_id").Where("file_id = ?", id).Group("playlist_id").SubQuery()
err = st.db.Where("id in ?", sub).Find(playlists).Error
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment