Skip to content

Commit

Permalink
Checkpoint: Initial publisher registration and editing
Browse files Browse the repository at this point in the history
Arlodotexe committed Feb 26, 2024
1 parent 2200162 commit 12aef5a
Showing 3 changed files with 25 additions and 11 deletions.
14 changes: 7 additions & 7 deletions src/IpfsExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
using CommunityToolkit.Diagnostics;
using Ipfs;
using Ipfs.CoreApi;
using Ipfs.Http;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Ipfs.CoreApi;

namespace WinAppCommunity.Sdk;

@@ -18,19 +18,19 @@ public static class IpfsExtensions
/// <param name="client">A client that can be used to communicate with Ipfs.</param>
/// <param name="cancellationToken">A token that can be used to cancel the ongoing task.</param>
/// <returns>The deserialized DAG content, if any.</returns>
public static async Task<TResult> ResolveIpnsDagAsync<TResult>(this Cid cid, IpfsClient client, CancellationToken cancellationToken)
public static async Task<(TResult? Result, Cid ResultCid)> ResolveIpnsDagAsync<TResult>(this Cid cid, IpfsClient client, CancellationToken cancellationToken)
{
if (cid.ContentType == "libp2p-key")
{
var ipnsResResult = await client.Name.ResolveAsync($"/ipns/{cid}", recursive: true, cancel: cancellationToken);
var ipnsResResult = await client.Name.ResolveAsync($"/ipns/{cid}", recursive: true, nocache: true, cancel: cancellationToken);

cid = Cid.Decode(ipnsResResult.Replace("/ipfs/", ""));
}

var projectRes = await client.Dag.GetAsync<TResult>(cid, cancellationToken);
var res = await client.Dag.GetAsync<TResult>(cid, cancellationToken);

Guard.IsNotNull(projectRes);
return projectRes;
Guard.IsNotNull(res);
return (res, cid);
}

/// <summary>
@@ -41,7 +41,7 @@ public static async Task<TResult> ResolveIpnsDagAsync<TResult>(this Cid cid, Ipf
/// <param name="client">A client that can be used to communicate with Ipfs.</param>
/// <param name="cancellationToken">A token that can be used to cancel the ongoing task.</param>
/// <returns>An async enumerable that yields the requested data.</returns>
public static IAsyncEnumerable<TResult> ResolveIpnsDagAsync<TResult>(this IEnumerable<Cid> cids, IpfsClient client, CancellationToken cancellationToken)
public static IAsyncEnumerable<(TResult? Result, Cid ResultCid)> ResolveIpnsDagAsync<TResult>(this IEnumerable<Cid> cids, IpfsClient client, CancellationToken cancellationToken)
=> cids
.ToAsyncEnumerable()
.SelectAwaitWithCancellation(async (cid, cancel) => await cid.ResolveIpnsDagAsync<TResult>(client, CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, cancel).Token));
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System;
using System.Diagnostics;
using CommunityToolkit.Diagnostics;

namespace WinAppCommunity.Sdk.Models.JsonConverters;
@@ -20,6 +19,9 @@ public class ApplicationConnectionJsonConverter : JsonConverter<ApplicationConne
/// <inheritdoc/>
public override ApplicationConnection? ReadJson(JsonReader reader, Type objectType, ApplicationConnection? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
if (reader.Value is null)
return null;

JObject jsonObject = JObject.Load(reader);
var connectionName = jsonObject["connectionName"]?.Value<string>();

@@ -34,7 +36,8 @@ public class ApplicationConnectionJsonConverter : JsonConverter<ApplicationConne
if (connectionName == "email")
{
var email = jsonObject["email"]?.Value<string>();
Guard.IsNotNull(email);
if (email is null)
return null;

return new EmailConnection(email, connectionName);
}
15 changes: 13 additions & 2 deletions src/Models/Publisher.cs
Original file line number Diff line number Diff line change
@@ -13,15 +13,21 @@ public record Publisher
/// Creates a new instance of <see cref="Publisher"/>.
/// </summary>
[JsonConstructor]
public Publisher(string name, string description, Cid icon, string? accentColor, EmailConnection? contactEmail = null)
public Publisher(string name, string description, Cid owner, Cid? icon, string? accentColor, EmailConnection? contactEmail = null)
{
Name = name;
Description = description;
Icon = icon;
Owner = owner;
AccentColor = accentColor;
ContactEmail = contactEmail;
}

/// <summary>
/// The Cid of the <see cref="User"/> who owns this publisher.
/// </summary>
public Cid Owner { get; set; }

/// <summary>
/// The name of the publisher.
/// </summary>
@@ -35,7 +41,7 @@ public Publisher(string name, string description, Cid icon, string? accentColor,
/// <summary>
/// An icon to represent this publisher.
/// </summary>
public Cid Icon { get; set; }
public Cid? Icon { get; set; }

/// <summary>
/// A hex-encoded accent color for this publisher.
@@ -57,6 +63,11 @@ public Publisher(string name, string description, Cid icon, string? accentColor,
/// </summary>
public Cid[] Projects { get; set; } = [];

/// <summary>
/// A list of other publishers who are managed under this publisher.
/// </summary>
public Cid[] Subpublishers { get; set; } = [];

/// <summary>
/// A flag indicating whether this is a non-public project.
/// </summary>

0 comments on commit 12aef5a

Please sign in to comment.