func exportProblems(backend storage.ProblemStore, dest string) error { m, err := backend.GetAllManifests() if err != nil { return err } probs := make(map[int64]storage.ProblemManifest) for _, v := range m { if !strings.HasPrefix(v.Id, "direct://school.sgu.ru/moodle/") { continue } pidstr := strings.TrimPrefix(v.Id, "direct://school.sgu.ru/moodle/") pidint, err := strconv.ParseInt(pidstr, 10, 64) if err != nil { continue } if prev, ok := probs[pidint]; !ok || prev.Revision < v.Revision { probs[pidint] = v } } for pidint, v := range probs { fmt.Printf("Exporting problem %d ... [", pidint) os.Stdout.Sync() if err = exportProblem(backend, v, filepath.Join(dest, fmt.Sprintf("Task.%d", pidint))); err != nil { return err } fmt.Printf("]\n") } return nil }