From 7348ea881ae79ab16fe30c384c0325cbc3cff75a Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 14 Oct 2016 09:35:17 -0500 Subject: [PATCH] Move TaskService.createWithValues to TaskCreator --- .../astrid/service/QuickAddMarkupTest.java | 5 +- .../astrid/service/TitleParserTest.java | 74 +++++----- .../astrid/activity/TaskListActivity.java | 12 +- .../astrid/activity/TaskListFragment.java | 2 +- .../todoroo/astrid/service/TaskCreator.java | 130 +++++++++++++++++- .../todoroo/astrid/service/TaskService.java | 123 +---------------- 6 files changed, 177 insertions(+), 169 deletions(-) diff --git a/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.java b/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.java index 82d57afa5..dce96949d 100644 --- a/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.java +++ b/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.java @@ -25,7 +25,7 @@ import static junit.framework.Assert.assertEquals; @RunWith(AndroidJUnit4.class) public class QuickAddMarkupTest extends DatabaseTestCase { - @Inject TaskService taskService; + @Inject TaskCreator taskCreator; @Override protected void inject(TestComponent component) { @@ -102,11 +102,10 @@ public class QuickAddMarkupTest extends DatabaseTestCase { task = new Task(); task.setTitle(title); tags.clear(); - taskService.parseQuickAddMarkup(task, tags); + taskCreator.parseQuickAddMarkup(task, tags); } private void assertImportanceIs(int importance) { assertEquals(importance, (int)task.getImportance()); } - } diff --git a/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java b/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java index 80cc9017f..50835c05d 100644 --- a/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java +++ b/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.java @@ -9,6 +9,7 @@ import android.support.test.runner.AndroidJUnit4; import com.google.ical.values.Frequency; import com.google.ical.values.RRule; +import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.test.DatabaseTestCase; @@ -35,9 +36,10 @@ import static org.tasks.date.DateTimeUtils.newDateTime; @RunWith(AndroidJUnit4.class) public class TitleParserTest extends DatabaseTestCase { - @Inject TaskService taskService; + @Inject TaskDao taskDao; @Inject TagService tagService; @Inject Preferences preferences; + @Inject TaskCreator taskCreator; @Override public void setUp() { @@ -56,7 +58,7 @@ public class TitleParserTest extends DatabaseTestCase { Task task = new Task(); Task nothing = new Task(); task.setTitle("Jog"); - taskService.save(task); + taskDao.save(task); assertFalse(task.hasDueTime()); assertFalse(task.hasDueDate()); assertEquals(task.getRecurrence(), nothing.getRecurrence()); @@ -179,7 +181,7 @@ public class TitleParserTest extends DatabaseTestCase { private void insertTitleAddTask(String title, Task task) { task.clear(); task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); } @@ -191,7 +193,7 @@ public class TitleParserTest extends DatabaseTestCase { String title = "Jog today"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); DateTime date = newDateTime(task.getDueDate()); assertEquals(date.getDayOfWeek(), today.get(Calendar.DAY_OF_WEEK)); //Calendar starts 1-6, date.getDay() starts at 0 @@ -199,7 +201,7 @@ public class TitleParserTest extends DatabaseTestCase { task = new Task(); title = "Jog tomorrow"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); date = newDateTime(task.getDueDate()); assertEquals((date.getDayOfWeek()) % 7, (today.get(Calendar.DAY_OF_WEEK)+1) % 7); @@ -226,14 +228,14 @@ public class TitleParserTest extends DatabaseTestCase { task = new Task(); title = "Jog "+ days[i]; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); date = newDateTime(task.getDueDate()); assertEquals(date.getDayOfWeek(), i + 1); task = new Task(); title = "Jog "+ abrevDays[i]; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); date = newDateTime(task.getDueDate()); assertEquals(date.getDayOfWeek(), i + 1); } @@ -258,14 +260,14 @@ public class TitleParserTest extends DatabaseTestCase { task = new Task(); String title = "Jog " + acceptedString; task.setTitle(title); //test at end of task. should set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals((int)task.getImportance(), Task.IMPORTANCE_NONE); } for (String acceptedString:acceptedStrings){ task = new Task(); String title = acceptedString + " jog"; task.setTitle(title); //test at beginning of task. should not set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertNotSame(task.getImportance(),Task.IMPORTANCE_NONE); } } @@ -286,23 +288,23 @@ public class TitleParserTest extends DatabaseTestCase { for (String acceptedStringAtEnd:acceptedStringsAtEnd){ task = new Task(); task.setTitle("Jog " + acceptedStringAtEnd); //test at end of task. should set importance. - taskService.save(task); + taskDao.save(task); assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO); } for (String acceptedStringAtEnd:acceptedStringsAtEnd){ task = new Task(); task.setTitle(acceptedStringAtEnd + " jog"); //test at beginning of task. should not set importance. - taskService.save(task); + taskDao.save(task); assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO); } for (String acceptedStringAnywhere:acceptedStringsAnywhere){ task = new Task(); task.setTitle("Jog " + acceptedStringAnywhere); //test at end of task. should set importance. - taskService.save(task); + taskDao.save(task); assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO); task.setTitle(acceptedStringAnywhere + " jog"); //test at beginning of task. should set importance. - taskService.save(task); + taskDao.save(task); assertEquals((int)task.getImportance(), Task.IMPORTANCE_SHOULD_DO); } } @@ -324,25 +326,25 @@ public class TitleParserTest extends DatabaseTestCase { task = new Task(); String title = "Jog " + acceptedStringAtEnd; task.setTitle(title); //test at end of task. should set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO); task = new Task(); title = acceptedStringAtEnd + " jog"; task.setTitle(title); //test at beginning of task. should not set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertNotSame(task.getImportance(), Task.IMPORTANCE_MUST_DO); } for (String acceptedStringAnywhere:acceptedStringsAnywhere){ task = new Task(); String title = "Jog " + acceptedStringAnywhere; task.setTitle(title); //test at end of task. should set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO); title = acceptedStringAnywhere + " jog"; task.setTitle(title); //test at beginning of task. should set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals((int)task.getImportance(), Task.IMPORTANCE_MUST_DO); } } @@ -367,25 +369,25 @@ public class TitleParserTest extends DatabaseTestCase { task = new Task(); String title = "Jog " + acceptedStringAtEnd; task.setTitle(title); //test at end of task. should set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); task = new Task(); title = acceptedStringAtEnd + " jog"; task.setTitle(title); //test at beginning of task. should not set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertNotSame(task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); } for (String acceptedStringAnywhere:acceptedStringsAnywhere){ task = new Task(); String title = "Jog " + acceptedStringAnywhere; task.setTitle(title); //test at end of task. should set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); title = acceptedStringAnywhere + " jog"; task.setTitle(title); //test at beginning of task. should set importance. - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals((int)task.getImportance(), Task.IMPORTANCE_DO_OR_DIE); } } @@ -400,7 +402,7 @@ public class TitleParserTest extends DatabaseTestCase { Task task = new Task(); String title = "Jog daily"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); RRule rrule = new RRule(); rrule.setFreq(Frequency.DAILY); rrule.setInterval(1); @@ -410,7 +412,7 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog every day"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertFalse(task.hasDueTime()); assertFalse(task.hasDueDate()); @@ -419,7 +421,7 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog every " + i + " days."; task.setTitle(title); rrule.setInterval(i); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertFalse(task.hasDueTime()); assertFalse(task.hasDueDate()); @@ -434,7 +436,7 @@ public class TitleParserTest extends DatabaseTestCase { Task task = new Task(); String title = "Jog weekly"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); RRule rrule = new RRule(); rrule.setFreq(Frequency.WEEKLY); rrule.setInterval(1); @@ -444,7 +446,7 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog every week"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertFalse(task.hasDueTime()); assertFalse(task.hasDueDate()); @@ -453,7 +455,7 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog every " + i + " weeks"; task.setTitle(title); rrule.setInterval(i); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertFalse(task.hasDueTime()); assertFalse(task.hasDueDate()); @@ -467,7 +469,7 @@ public class TitleParserTest extends DatabaseTestCase { Task task = new Task(); String title = "Jog monthly"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); RRule rrule = new RRule(); rrule.setFreq(Frequency.MONTHLY); rrule.setInterval(1); @@ -477,7 +479,7 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog every month"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertFalse(task.hasDueTime()); assertFalse(task.hasDueDate()); @@ -486,7 +488,7 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog every " + i + " months"; task.setTitle(title); rrule.setInterval(i); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertFalse(task.hasDueTime()); assertFalse(task.hasDueDate()); @@ -499,7 +501,7 @@ public class TitleParserTest extends DatabaseTestCase { Task task = new Task(); String title = "Jog daily starting from today"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); RRule rrule = new RRule(); rrule.setFreq(Frequency.DAILY); rrule.setInterval(1); @@ -510,7 +512,7 @@ public class TitleParserTest extends DatabaseTestCase { task.clearValue(Task.UUID); title = "Jog every day starting from today"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertTrue(task.hasDueDate()); @@ -518,7 +520,7 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog every " + i + " days starting from today"; task.setTitle(title); rrule.setInterval(i); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertTrue(task.hasDueDate()); task = new Task(); @@ -530,7 +532,7 @@ public class TitleParserTest extends DatabaseTestCase { Task task = new Task(); String title = "Jog weekly starting from today"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); RRule rrule = new RRule(); rrule.setFreq(Frequency.WEEKLY); rrule.setInterval(1); @@ -541,7 +543,7 @@ public class TitleParserTest extends DatabaseTestCase { task.clearValue(Task.UUID); title = "Jog every week starting from today"; task.setTitle(title); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertTrue(task.hasDueDate()); @@ -549,7 +551,7 @@ public class TitleParserTest extends DatabaseTestCase { title = "Jog every " + i + " weeks starting from today"; task.setTitle(title); rrule.setInterval(i); - taskService.createWithValues(task, null, title); + taskCreator.createWithValues(task, null, title); assertEquals(task.getRecurrence(), rrule.toIcal()); assertTrue(task.hasDueDate()); task = new Task(); diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java index 28d89c6cb..5c0c3c760 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java @@ -19,7 +19,6 @@ import android.view.View; import android.view.inputmethod.InputMethodManager; import com.todoroo.andlib.utility.AndroidUtilities; -import org.tasks.activities.TagSettingsActivity; import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; @@ -28,13 +27,14 @@ import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.TagFilter; import com.todoroo.astrid.dao.TagDataDao; +import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.gtasks.GtasksList; import com.todoroo.astrid.gtasks.GtasksListFragment; import com.todoroo.astrid.gtasks.GtasksListService; import com.todoroo.astrid.repeats.RepeatControlSet; -import com.todoroo.astrid.service.TaskService; +import com.todoroo.astrid.service.TaskCreator; import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.subtasks.SubtasksListFragment; import com.todoroo.astrid.subtasks.SubtasksTagListFragment; @@ -42,6 +42,7 @@ import com.todoroo.astrid.timers.TimerControlSet; import org.tasks.Broadcaster; import org.tasks.R; +import org.tasks.activities.TagSettingsActivity; import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracking; import org.tasks.dialogs.SortDialog; @@ -83,7 +84,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements @Inject Preferences preferences; @Inject SubtasksHelper subtasksHelper; - @Inject TaskService taskService; @Inject RepeatConfirmationReceiver repeatConfirmationReceiver; @Inject DefaultFilterProvider defaultFilterProvider; @Inject GtasksListService gtasksListService; @@ -93,6 +93,8 @@ public class TaskListActivity extends InjectingAppCompatActivity implements @Inject ThemeCache themeCache; @Inject SyncAdapterHelper syncAdapterHelper; @Inject Tracker tracker; + @Inject TaskCreator taskCreator; + @Inject TaskDao taskDao; @BindView(R.id.drawer_layout) DrawerLayout drawerLayout; @@ -417,7 +419,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements Task model = null; if (taskId> -1L) { - model = taskService.fetchById(taskId, Task.PROPERTIES); + model = taskDao.fetch(taskId, Task.PROPERTIES); } // not found by id or was never passed an id @@ -434,7 +436,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements // oops, can't serialize Timber.e(e, e.getMessage()); } - model = taskService.createWithValues(values, null); + model = taskCreator.createWithValues(values, null); } return model; diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index e6e563fe8..3f1784ac1 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -344,7 +344,7 @@ public class TaskListFragment extends InjectingListFragment implements } public Task addTask(String title) { - return taskService.createWithValues(filter.valuesForNewTasks, title); + return taskCreator.createWithValues(filter.valuesForNewTasks, title); } @Override diff --git a/src/main/java/com/todoroo/astrid/service/TaskCreator.java b/src/main/java/com/todoroo/astrid/service/TaskCreator.java index c1356cb64..75570f08d 100644 --- a/src/main/java/com/todoroo/astrid/service/TaskCreator.java +++ b/src/main/java/com/todoroo/astrid/service/TaskCreator.java @@ -4,25 +4,53 @@ import android.content.ContentValues; import android.net.Uri; import android.text.TextUtils; +import com.todoroo.andlib.data.Property; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.astrid.api.PermaSql; +import com.todoroo.astrid.dao.MetadataDao; +import com.todoroo.astrid.dao.TagDataDao; +import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.SyncFlags; +import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.gcal.GCalHelper; +import com.todoroo.astrid.tags.TagService; +import com.todoroo.astrid.tags.TaskToTagMetadata; +import com.todoroo.astrid.utility.TitleParser; import org.tasks.preferences.Preferences; +import java.util.ArrayList; +import java.util.Map; + import javax.inject.Inject; +import timber.log.Timber; + public class TaskCreator { private final TaskService taskService; private final GCalHelper gcalHelper; private final Preferences preferences; + private final MetadataDao metadataDao; + private final TagDataDao tagDataDao; + private final TaskDao taskDao; + private final TagService tagService; @Inject - public TaskCreator(TaskService taskService, GCalHelper gcalHelper, Preferences preferences) { + public TaskCreator(TaskService taskService, GCalHelper gcalHelper, Preferences preferences, + MetadataDao metadataDao, TagDataDao tagDataDao, TaskDao taskDao, + TagService tagService) { this.taskService = taskService; this.gcalHelper = gcalHelper; this.preferences = preferences; + this.metadataDao = metadataDao; + this.tagDataDao = tagDataDao; + this.taskDao = taskDao; + this.tagService = tagService; } public Task basicQuickAddTask(String title) { @@ -32,7 +60,7 @@ public class TaskCreator { title = title.trim(); - Task task = taskService.createWithValues(null, title); + Task task = createWithValues(null, title); addToCalendar(task); return task; @@ -47,4 +75,102 @@ public class TaskCreator { taskService.save(task); } } + + /** + * Create task from the given content values, saving it. This version + * doesn't need to start with a base task model. + */ + public Task createWithValues(ContentValues values, String title) { + return createWithValues(new Task(), values, title); + } + + Task createWithValues(Task task, ContentValues values, String title) { + if (title != null) { + task.setTitle(title.trim()); + } + + ArrayList tags = new ArrayList<>(); + try { + parseQuickAddMarkup(task, tags); + } catch (Throwable e) { + Timber.e(e, e.getMessage()); + } + + ContentValues forMetadata = null; + if (values != null && values.size() > 0) { + ContentValues forTask = new ContentValues(); + forMetadata = new ContentValues(); + outer: for (Map.Entry item : values.valueSet()) { + String key = item.getKey(); + Object value = item.getValue(); + if (value instanceof String) { + value = PermaSql.replacePlaceholders((String) value); + } + + for (Property property : Metadata.PROPERTIES) { + if (property.name.equals(key)) { + AndroidUtilities.putInto(forMetadata, key, value); + continue outer; + } + } + + AndroidUtilities.putInto(forTask, key, value); + } + task.mergeWithoutReplacement(forTask); + } + + saveWithoutPublishingFilterUpdate(task); + for(String tag : tags) { + createLink(task, tag); + } + + if (forMetadata != null && forMetadata.size() > 0) { + Metadata metadata = new Metadata(); + metadata.setTask(task.getId()); + metadata.mergeWith(forMetadata); + if (TaskToTagMetadata.KEY.equals(metadata.getKey())) { + if (metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) { + // This is more efficient + createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME), metadata.getValue(TaskToTagMetadata.TAG_UUID)); + } else { + // This is necessary for backwards compatibility + createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME)); + } + } else { + metadataDao.persist(metadata); + } + } + + return task; + } + + private void saveWithoutPublishingFilterUpdate(Task item) { + taskDao.save(item); + } + + private void createLink(Task task, String tagName) { + TagData tagData = tagDataDao.getTagByName(tagName, TagData.NAME, TagData.UUID); + if (tagData == null) { + tagData = new TagData(); + tagData.setName(tagName); + tagDataDao.persist(tagData); + } + createLink(task, tagData.getName(), tagData.getUUID()); + } + + private void createLink(Task task, String tagName, String tagUuid) { + Metadata link = TaskToTagMetadata.newTagMetadata(task.getId(), task.getUuid(), tagName, tagUuid); + if (metadataDao.update(Criterion.and(MetadataDao.MetadataCriteria.byTaskAndwithKey(task.getId(), TaskToTagMetadata.KEY), + TaskToTagMetadata.TASK_UUID.eq(task.getUUID()), TaskToTagMetadata.TAG_UUID.eq(tagUuid)), link) <= 0) { + metadataDao.createNew(link); + } + } + + /** + * Parse quick add markup for the given task + * @param tags an empty array to apply tags to + */ + void parseQuickAddMarkup(Task task, ArrayList tags) { + TitleParser.parse(tagService, task, tags); + } } diff --git a/src/main/java/com/todoroo/astrid/service/TaskService.java b/src/main/java/com/todoroo/astrid/service/TaskService.java index 3109961c4..4dcafbab5 100644 --- a/src/main/java/com/todoroo/astrid/service/TaskService.java +++ b/src/main/java/com/todoroo/astrid/service/TaskService.java @@ -5,38 +5,22 @@ */ package com.todoroo.astrid.service; -import android.content.ContentValues; - import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Query; -import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.api.PermaSql; -import com.todoroo.astrid.dao.MetadataDao; -import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TaskDao; -import com.todoroo.astrid.data.Metadata; -import com.todoroo.astrid.data.RemoteModel; -import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.tags.TagService; -import com.todoroo.astrid.tags.TaskToTagMetadata; -import com.todoroo.astrid.utility.TitleParser; import org.tasks.Broadcaster; import org.tasks.injection.ApplicationScope; import org.tasks.scheduling.RefreshScheduler; -import java.util.ArrayList; -import java.util.Map.Entry; - import javax.inject.Inject; -import timber.log.Timber; - /** * Service layer for {@link Task}-centered activities. @@ -47,22 +31,15 @@ import timber.log.Timber; @ApplicationScope public class TaskService { - private final TagDataDao tagDataDao; private final TaskDao taskDao; private final Broadcaster broadcaster; private final RefreshScheduler refreshScheduler; - private final TagService tagService; - private final MetadataDao metadataDao; @Inject - public TaskService(TagDataDao tagDataDao, TaskDao taskDao, Broadcaster broadcaster, - RefreshScheduler refreshScheduler, TagService tagService, MetadataDao metadataDao) { - this.tagDataDao = tagDataDao; + public TaskService(TaskDao taskDao, Broadcaster broadcaster, RefreshScheduler refreshScheduler) { this.taskDao = taskDao; this.broadcaster = broadcaster; this.refreshScheduler = refreshScheduler; - this.tagService = tagService; - this.metadataDao = metadataDao; } // --- service layer @@ -97,10 +74,6 @@ public class TaskService { return databaseChanged; } - private void saveWithoutPublishingFilterUpdate(Task item) { - taskDao.save(item); - } - /** * Fetch tasks for the given filter * @param constraint text constraint, or null @@ -136,98 +109,4 @@ public class TaskService { return taskDao.query(Query.select(properties).withQueryTemplate(sql)); } - - /** - * Parse quick add markup for the given task - * @param tags an empty array to apply tags to - */ - void parseQuickAddMarkup(Task task, ArrayList tags) { - TitleParser.parse(tagService, task, tags); - } - - /** - * Create task from the given content values, saving it. This version - * doesn't need to start with a base task model. - */ - public Task createWithValues(ContentValues values, String title) { - return createWithValues(new Task(), values, title); - } - - Task createWithValues(Task task, ContentValues values, String title) { - if (title != null) { - task.setTitle(title.trim()); - } - - ArrayList tags = new ArrayList<>(); - try { - parseQuickAddMarkup(task, tags); - } catch (Throwable e) { - Timber.e(e, e.getMessage()); - } - - ContentValues forMetadata = null; - if (values != null && values.size() > 0) { - ContentValues forTask = new ContentValues(); - forMetadata = new ContentValues(); - outer: for (Entry item : values.valueSet()) { - String key = item.getKey(); - Object value = item.getValue(); - if (value instanceof String) { - value = PermaSql.replacePlaceholders((String) value); - } - - for (Property property : Metadata.PROPERTIES) { - if (property.name.equals(key)) { - AndroidUtilities.putInto(forMetadata, key, value); - continue outer; - } - } - - AndroidUtilities.putInto(forTask, key, value); - } - task.mergeWithoutReplacement(forTask); - } - - saveWithoutPublishingFilterUpdate(task); - for(String tag : tags) { - createLink(task, tag); - } - - if (forMetadata != null && forMetadata.size() > 0) { - Metadata metadata = new Metadata(); - metadata.setTask(task.getId()); - metadata.mergeWith(forMetadata); - if (TaskToTagMetadata.KEY.equals(metadata.getKey())) { - if (metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) { - // This is more efficient - createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME), metadata.getValue(TaskToTagMetadata.TAG_UUID)); - } else { - // This is necessary for backwards compatibility - createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME)); - } - } else { - metadataDao.persist(metadata); - } - } - - return task; - } - - private void createLink(Task task, String tagName) { - TagData tagData = tagDataDao.getTagByName(tagName, TagData.NAME, TagData.UUID); - if (tagData == null) { - tagData = new TagData(); - tagData.setName(tagName); - tagDataDao.persist(tagData); - } - createLink(task, tagData.getName(), tagData.getUUID()); - } - - private void createLink(Task task, String tagName, String tagUuid) { - Metadata link = TaskToTagMetadata.newTagMetadata(task.getId(), task.getUuid(), tagName, tagUuid); - if (metadataDao.update(Criterion.and(MetadataDao.MetadataCriteria.byTaskAndwithKey(task.getId(), TaskToTagMetadata.KEY), - TaskToTagMetadata.TASK_UUID.eq(task.getUUID()), TaskToTagMetadata.TAG_UUID.eq(tagUuid)), link) <= 0) { - metadataDao.createNew(link); - } - } }