mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
LoopDBImporter: Use commands instead of directly modifying DB
This commit is contained in:
@@ -21,6 +21,7 @@ package org.isoron.uhabits.core.io;
|
||||
|
||||
import androidx.annotation.*;
|
||||
|
||||
import org.isoron.uhabits.core.commands.*;
|
||||
import org.isoron.uhabits.core.database.*;
|
||||
import org.isoron.uhabits.core.models.*;
|
||||
import org.isoron.uhabits.core.models.sqlite.records.*;
|
||||
@@ -42,15 +43,19 @@ public class LoopDBImporter extends AbstractImporter
|
||||
|
||||
@NonNull
|
||||
private final DatabaseOpener opener;
|
||||
@NonNull
|
||||
private final CommandRunner runner;
|
||||
|
||||
@Inject
|
||||
public LoopDBImporter(@NonNull HabitList habitList,
|
||||
@NonNull ModelFactory modelFactory,
|
||||
@NonNull DatabaseOpener opener)
|
||||
@NonNull DatabaseOpener opener,
|
||||
@NonNull CommandRunner runner)
|
||||
{
|
||||
super(habitList);
|
||||
this.modelFactory = modelFactory;
|
||||
this.opener = opener;
|
||||
this.runner = runner;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -97,19 +102,34 @@ public class LoopDBImporter extends AbstractImporter
|
||||
repsRepository = new Repository<>(RepetitionRecord.class, db);
|
||||
|
||||
for (HabitRecord habitRecord : habitsRepository.findAll(
|
||||
"order by position"))
|
||||
"order by position"))
|
||||
{
|
||||
Habit h = modelFactory.buildHabit();
|
||||
habitRecord.copyTo(h);
|
||||
h.setId(null);
|
||||
habitList.add(h);
|
||||
Habit habit = habitList.getById(habitRecord.id);
|
||||
if (habit == null)
|
||||
{
|
||||
habit = modelFactory.buildHabit();
|
||||
habitRecord.copyTo(habit);
|
||||
runner.execute(new CreateHabitCommand(modelFactory, habitList, habit), null);
|
||||
}
|
||||
else
|
||||
{
|
||||
Habit modified = modelFactory.buildHabit();
|
||||
habitRecord.copyTo(modified);
|
||||
if (!modified.getData().equals(habit.getData()))
|
||||
runner.execute(new EditHabitCommand(modelFactory, habitList, habit, modified), null);
|
||||
}
|
||||
|
||||
List<RepetitionRecord> reps =
|
||||
repsRepository.findAll("where habit = ?",
|
||||
habitRecord.id.toString());
|
||||
repsRepository.findAll("where habit = ?",
|
||||
habitRecord.id.toString());
|
||||
|
||||
for (RepetitionRecord r : reps)
|
||||
h.getRepetitions().toggle(new Timestamp(r.timestamp), r.value);
|
||||
{
|
||||
Timestamp t = new Timestamp(r.timestamp);
|
||||
Repetition rep = habit.getRepetitions().getByTimestamp(t);
|
||||
if(rep == null || rep.getValue() != r.value)
|
||||
runner.execute(new CreateRepetitionCommand(habitList, habit, t, r.value), habit.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user