finished creating second level todos in todoist as checklists in habitica

This commit is contained in:
2020-04-10 23:02:02 -04:00
parent 49275681fd
commit 0aaf15a89d
9 changed files with 125 additions and 59 deletions

View File

@@ -61,32 +61,50 @@ namespace Habitica.Todoist.Integration.Services
var checklistItem = (await habiticaClient.CreateChecklistItem(item.ToHabiticaChecklistItem(), habiticaTaskId)).Data.Checklist
.First(x => x.Text == item.Content);
var link = new TodoHabitLink(userId, item.Id, checklistItem.Id);
var link = new TodoHabitLink(userId, item.Id, checklistItem.Id, item.Parent_Id);
await storageClient.InsertOrUpdate(link);
await storageClient.InsertOrUpdate(link.Reverse());
await storageClient.InsertOrUpdate(link.Reverse(habiticaTaskId));
}
public async Task UpdateTasks(IEnumerable<Item> items)
public async Task Update(IEnumerable<Item> items)
{
foreach (var item in items)
await UpdateTask(item);
foreach (var item in items.OrderBy(x => x.Parent_Id))
{
if (!item.IsChild)
await UpdateTask(item);
else
await UpdateChecklistItem(item);
}
}
public async Task UpdateTask(Item item)
{
if (item.IsChild)
throw new ArgumentException("Item passed as arguement has a valid Parent_Id");
var habiticaId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, item.Id)).HabiticaId;
await habiticaClient.UpdateTask(item.ToHabiticaTask(habiticaId));
}
public async Task CompleteTasks(IEnumerable<Item> items)
public async Task UpdateChecklistItem(Item item)
{
foreach (var item in items)
await CompleteTask(item);
if (!item.IsChild)
throw new ArgumentException("Item passed as arguement does not have a valid Parent_Id");
var habiticaTaskId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, item.Parent_Id)).HabiticaId;
var habiticaChecklistId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, item.Id)).HabiticaId;
await habiticaClient.UpdateChecklistItem(item.ToHabiticaChecklistItem(habiticaChecklistId), habiticaTaskId);
}
public async Task CompleteTask(Item item)
public async Task Complete(IEnumerable<Item> items)
{
await CompleteTask(item.Id);
foreach (var item in items.OrderByDescending(x => x.Parent_Id))
{
if (!item.IsChild)
await CompleteTask(item.Id);
else
await CompleteChecklistItem(item.Id, item.Parent_Id);
}
}
public async Task CompleteTask(string todoistId)
@@ -95,15 +113,28 @@ namespace Habitica.Todoist.Integration.Services
await habiticaClient.ScoreTask(habiticaId, ScoreAction.Up);
}
public async Task DeleteTasks(IEnumerable<Item> items)
public async Task CompleteChecklistItem(string todoistId, string todoistParentId)
{
foreach (var item in items)
await DeleteTask(item);
var habiticaTaskId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, todoistParentId)).HabiticaId;
var habiticaChecklistId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, todoistId)).HabiticaId;
await habiticaClient.ScoreChecklistItem(habiticaTaskId, habiticaChecklistId);
}
public async Task DeleteTask(Item item)
public async Task Delete(IEnumerable<Item> items)
{
await DeleteTask(item.Id);
List<(Item Item, TodoHabitLink Link)> itemsAndLinks = new List<(Item, TodoHabitLink)>();
foreach (var item in items)
itemsAndLinks.Add((item, await storageClient.RetrieveRecord<TodoHabitLink>(userId, item.Id)));
foreach (var itemAndLink in itemsAndLinks.OrderByDescending(x => x.Link.TodoistParentId))
{
var item = itemAndLink.Item;
var link = itemAndLink.Link;
if (string.IsNullOrEmpty(link.TodoistParentId))
await DeleteTask(item.Id);
else
await DeleteChecklistItem(item.Id, link.TodoistParentId);
}
}
public async Task DeleteTask(string todoistId)
@@ -111,5 +142,12 @@ namespace Habitica.Todoist.Integration.Services
var habiticaId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, todoistId)).HabiticaId;
await habiticaClient.DeleteTask(habiticaId);
}
public async Task DeleteChecklistItem(string todoistId, string todoistParentId)
{
var habiticaTaskId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, todoistParentId)).HabiticaId;
var habiticaChecklistId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, todoistId)).HabiticaId;
await habiticaClient.DeleteChecklistItem(habiticaTaskId, habiticaChecklistId);
}
}
}