2017-12-09 09:54:16 +00:00
|
|
|
package sync
|
|
|
|
|
|
|
|
import (
|
2017-12-12 06:09:29 +00:00
|
|
|
"encoding/json"
|
2018-01-06 16:38:24 +00:00
|
|
|
"fmt"
|
2017-12-12 06:09:29 +00:00
|
|
|
"log"
|
|
|
|
"os"
|
2018-01-06 16:38:24 +00:00
|
|
|
"time"
|
2017-12-12 07:26:01 +00:00
|
|
|
"sync"
|
2017-12-12 06:09:29 +00:00
|
|
|
|
2017-12-09 09:54:16 +00:00
|
|
|
"srs.epita.fr/fic-server/libfic"
|
2017-12-12 06:09:29 +00:00
|
|
|
"srs.epita.fr/fic-server/settings"
|
2017-12-09 09:54:16 +00:00
|
|
|
)
|
|
|
|
|
2018-06-23 13:45:32 +00:00
|
|
|
// DeepReportPath stores the path to the report generated during full recursive import.
|
|
|
|
var DeepReportPath = "full_import_report.json"
|
|
|
|
|
2018-05-11 23:08:37 +00:00
|
|
|
// oneDeepSync ensure there is no more than one running deep sync.
|
2017-12-12 07:26:01 +00:00
|
|
|
var oneDeepSync sync.Mutex
|
|
|
|
|
2018-05-11 23:08:37 +00:00
|
|
|
// SyncDeep performs a recursive synchronisation: from themes to challenge items.
|
2018-01-08 00:34:22 +00:00
|
|
|
func SyncDeep(i Importer) (errs map[string][]string) {
|
2017-12-12 07:26:01 +00:00
|
|
|
oneDeepSync.Lock()
|
|
|
|
defer oneDeepSync.Unlock()
|
|
|
|
|
2018-01-08 00:34:22 +00:00
|
|
|
errs = map[string][]string{}
|
2017-12-09 09:54:16 +00:00
|
|
|
|
2018-01-06 16:38:24 +00:00
|
|
|
errs["_date"] = []string{fmt.Sprintf("%v", time.Now())}
|
2017-12-09 09:54:16 +00:00
|
|
|
errs["_themes"] = SyncThemes(i)
|
|
|
|
|
|
|
|
if themes, err := fic.GetThemes(); err == nil {
|
|
|
|
for _, theme := range themes {
|
|
|
|
errs[theme.Name] = SyncExercices(i, theme)
|
|
|
|
|
|
|
|
if exercices, err := theme.GetExercices(); err == nil {
|
|
|
|
for _, exercice := range exercices {
|
2018-09-24 08:00:17 +00:00
|
|
|
errs[theme.Name] = append(errs[theme.Name], SyncExerciceFlags(i, exercice)...)
|
2017-12-09 09:54:16 +00:00
|
|
|
errs[theme.Name] = append(errs[theme.Name], SyncExerciceFiles(i, exercice)...)
|
|
|
|
errs[theme.Name] = append(errs[theme.Name], SyncExerciceHints(i, exercice)...)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-06 16:38:24 +00:00
|
|
|
errs["_date"] = append(errs["_date"], fmt.Sprintf("%v", time.Now()))
|
|
|
|
|
2018-01-08 00:34:22 +00:00
|
|
|
errs["_regeneration"] = []string{}
|
|
|
|
|
2018-06-23 13:45:32 +00:00
|
|
|
if fdto, err := os.Create(DeepReportPath); err == nil {
|
2017-12-12 06:09:29 +00:00
|
|
|
defer fdto.Close()
|
|
|
|
|
|
|
|
fdto.Write([]byte("disp("))
|
|
|
|
if out, err := json.Marshal(errs); err == nil {
|
|
|
|
fdto.Write(out)
|
|
|
|
} else {
|
2018-01-08 00:34:22 +00:00
|
|
|
errs["_regeneration"] = append(errs["_regeneration"], err.Error())
|
2017-12-12 06:09:29 +00:00
|
|
|
log.Println(err)
|
|
|
|
}
|
|
|
|
fdto.Write([]byte(");"))
|
|
|
|
} else {
|
2018-01-08 00:34:22 +00:00
|
|
|
errs["_regeneration"] = append(errs["_regeneration"], err.Error())
|
2017-12-12 06:09:29 +00:00
|
|
|
log.Println(err)
|
|
|
|
}
|
|
|
|
|
2017-12-12 06:51:51 +00:00
|
|
|
if err := settings.ForceRegeneration(); err != nil {
|
|
|
|
errs["_regeneration"] = append(errs["_regeneration"], err.Error())
|
|
|
|
}
|
|
|
|
|
2018-01-08 00:34:22 +00:00
|
|
|
return
|
2017-12-09 09:54:16 +00:00
|
|
|
}
|