92 lines
2.9 KiB
C#
92 lines
2.9 KiB
C#
using Habitica.Todoist.Integration.Data;
|
|
using Habitica.Todoist.Integration.Model.Habitica.Enums;
|
|
using Habitica.Todoist.Integration.Model.Storage;
|
|
using Habitica.Todoist.Integration.Model.Todoist;
|
|
using Habitica.Todoist.Integration.Services.Extensions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Habitica.Todoist.Integration.Services
|
|
{
|
|
public class HabiticaIntegrationService
|
|
{
|
|
private HabiticaServiceClient habiticaClient { get; set; }
|
|
private TableStorageClient storageClient { get; set; }
|
|
|
|
private string userId { get; set; }
|
|
|
|
public HabiticaIntegrationService(string habiticaUserId,
|
|
string habiticaApiKey,
|
|
string storageConnectionString,
|
|
string userId)
|
|
{
|
|
this.habiticaClient = new HabiticaServiceClient(habiticaUserId, habiticaApiKey);
|
|
this.storageClient = new TableStorageClient(storageConnectionString);
|
|
this.userId = userId;
|
|
}
|
|
|
|
public async Task AddTasks(IEnumerable<Item> items)
|
|
{
|
|
foreach (var item in items)
|
|
await AddTask(item);
|
|
}
|
|
|
|
public async Task AddTask(Item item)
|
|
{
|
|
var task = (await habiticaClient.CreateTask(item.ToHabiticaTask())).Data;
|
|
var link = new TodoHabitLink(userId, item.Id, task.Id);
|
|
|
|
await storageClient.InsertOrUpdate(link);
|
|
await storageClient.InsertOrUpdate(link.Reverse());
|
|
}
|
|
|
|
public async Task UpdateTasks(IEnumerable<Item> items)
|
|
{
|
|
foreach (var item in items)
|
|
await UpdateTask(item);
|
|
}
|
|
|
|
public async Task UpdateTask(Item item)
|
|
{
|
|
var habiticaId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, item.Id)).HabiticaId;
|
|
await habiticaClient.UpdateTask(item.ToHabiticaTask(habiticaId));
|
|
}
|
|
|
|
public async Task CompleteTasks(IEnumerable<Item> items)
|
|
{
|
|
foreach (var item in items)
|
|
await CompleteTask(item);
|
|
}
|
|
|
|
public async Task CompleteTask(Item item)
|
|
{
|
|
await CompleteTask(item.Id);
|
|
}
|
|
|
|
public async Task CompleteTask(string todoistId)
|
|
{
|
|
var habiticaId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, todoistId)).HabiticaId;
|
|
await habiticaClient.ScoreTask(habiticaId, ScoreAction.Up);
|
|
}
|
|
|
|
public async Task DeleteTasks(IEnumerable<Item> items)
|
|
{
|
|
foreach (var item in items)
|
|
await DeleteTask(item);
|
|
}
|
|
|
|
public async Task DeleteTask(Item item)
|
|
{
|
|
await DeleteTask(item.Id);
|
|
}
|
|
|
|
public async Task DeleteTask(string todoistId)
|
|
{
|
|
var habiticaId = (await storageClient.RetrieveRecord<TodoHabitLink>(userId, todoistId)).HabiticaId;
|
|
await habiticaClient.DeleteTask(habiticaId);
|
|
}
|
|
}
|
|
}
|