Ejemplo n.º 1
0
static unsigned
exportGames(JNIEnv* env, jobject obj, jmethodID progressMid, Database& src, Consumer& dst, Progress& progress)
{
    unsigned numGames = src.countGames();
    LOGI("number of games: %u", numGames);
    jclass cls = env->GetObjectClass(obj);
    jmethodID mid = env->GetMethodID(cls, "setNOGames", "(I)V");
    if (mid != 0) {
        env->CallVoidMethod(obj, mid, numGames);
    }
    env->DeleteLocalRef(cls);

    util::ProgressWatcher watcher(progress, numGames);
    progress.setFrequency(mstl::min(5000u, mstl::max(numGames/100, 1u)));

    unsigned reportAfter = progress.frequency();
    unsigned count = 0;
    unsigned countGames = 0;

    ::Log log;

    for (unsigned i = 0; i < numGames; ++i)
    {
        if (reportAfter == count++)
        {
            progress.update(env, obj, progressMid, count);
            reportAfter += progress.frequency();
        }
        save::State state = src.exportGame(i, dst);

        if (state == save::Ok)
            ++countGames;
        else if (!log.error(state, i))
            return countGames;
    }

    return countGames;
}