Пример #1
0
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
}