Files
Libation/Source/LibationCli/Options/ImportAccountOptions.cs

79 lines
2.2 KiB
C#

using AudibleUtilities;
using CommandLine;
using System;
using System.IO;
using System.Threading.Tasks;
namespace LibationCli;
[Verb("import-account", HelpText = "Import an Audible account from an mkb79/audible-cli JSON export file.")]
internal class ImportAccountOptions : OptionsBase
{
[Value(0, MetaName = "path", Required = true, HelpText = "Path to the exported account JSON file.")]
public string? JsonFilePath { get; set; }
protected override async Task ProcessAsync()
{
var path = JsonFilePath?.Trim();
if (string.IsNullOrEmpty(path))
{
PrintVerbUsage("ERROR", "=====", "Path to JSON file is required.");
Environment.ExitCode = (int)ExitCode.RunTimeError;
return;
}
if (!File.Exists(path))
{
PrintVerbUsage("ERROR", "=====", $"File not found: {path}");
Environment.ExitCode = (int)ExitCode.RunTimeError;
return;
}
string jsonText;
try
{
jsonText = await File.ReadAllTextAsync(path);
}
catch (Exception ex)
{
PrintVerbUsage("ERROR", "=====", $"Could not read file: {ex.Message}");
Environment.ExitCode = (int)ExitCode.RunTimeError;
return;
}
Mkb79ImportResult result;
try
{
result = await Mkb79AuthImporter.ImportFromJsonTextAsync(jsonText);
}
catch (Exception ex)
{
PrintVerbUsage("ERROR", "=====", ex.Message, "", ex.StackTrace);
Environment.ExitCode = (int)ExitCode.RunTimeError;
return;
}
switch (result.Outcome)
{
case Mkb79ImportOutcome.InvalidFile:
Console.Error.WriteLine(result.Message ?? "Invalid import file.");
Environment.ExitCode = (int)ExitCode.RunTimeError;
return;
case Mkb79ImportOutcome.DuplicateAccount when result.Account is { } dup:
Console.Error.WriteLine(
$"An account with that account id and country already exists.{Environment.NewLine}"
+ $"Account ID: {dup.AccountId}{Environment.NewLine}Country: {dup.Locale?.Name}");
Environment.ExitCode = (int)ExitCode.RunTimeError;
return;
case Mkb79ImportOutcome.Success when result.Account is { } account:
Console.WriteLine(
$"Imported account: {account.AccountName} ({account.AccountId}, {account.Locale?.Name})");
return;
default:
Console.Error.WriteLine("Unexpected import result.");
Environment.ExitCode = (int)ExitCode.RunTimeError;
return;
}
}
}