diff options
author | vnugent <public@vaughnnugent.com> | 2024-01-14 18:38:58 -0500 |
---|---|---|
committer | vnugent <public@vaughnnugent.com> | 2024-01-14 18:38:58 -0500 |
commit | 2889b3dd10de9a5df42f3f8ab2171b52893ac3f4 (patch) | |
tree | de8c02ae251e2b5cc4b1db6a0ce10ecb7fb89119 /cmnext-cli/src/Model/Channels | |
parent | bfeadbf69f60effe405609ba15bec57eca989ade (diff) |
cli-dev branch
Diffstat (limited to 'cmnext-cli/src/Model/Channels')
-rw-r--r-- | cmnext-cli/src/Model/Channels/ChannelFeed.cs | 46 | ||||
-rw-r--r-- | cmnext-cli/src/Model/Channels/ChannelMeta.cs | 52 | ||||
-rw-r--r-- | cmnext-cli/src/Model/Channels/ChannelStore.cs | 95 |
3 files changed, 193 insertions, 0 deletions
diff --git a/cmnext-cli/src/Model/Channels/ChannelFeed.cs b/cmnext-cli/src/Model/Channels/ChannelFeed.cs new file mode 100644 index 0000000..da1f2f4 --- /dev/null +++ b/cmnext-cli/src/Model/Channels/ChannelFeed.cs @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2024 Vaughn Nugent +* +* Package: CMNext.Cli +* File: Program.cs +* +* CMNext.Cli is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published +* by the Free Software Foundation, either version 2 of the License, +* or (at your option) any later version. +* +* CMNext.Cli is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with CMNext.Cli. If not, see http://www.gnu.org/licenses/. +*/ + +using System.Text.Json.Serialization; + + +namespace CMNext.Cli.Model.Channels +{ + public sealed class ChannelFeed + { + [JsonPropertyName("url")] + public string Url { get; set; } = string.Empty; + + [JsonPropertyName("path")] + public string Path { get; set; } = string.Empty; + + [JsonPropertyName("image")] + public string? ImagePath { get; set; } + + [JsonPropertyName("description")] + public string? Description { get; set; } + + [JsonPropertyName("author")] + public string? Author { get; set; } + + [JsonPropertyName("contact")] + public string? Contact { get; set; } + } +}
\ No newline at end of file diff --git a/cmnext-cli/src/Model/Channels/ChannelMeta.cs b/cmnext-cli/src/Model/Channels/ChannelMeta.cs new file mode 100644 index 0000000..d0e626d --- /dev/null +++ b/cmnext-cli/src/Model/Channels/ChannelMeta.cs @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2024 Vaughn Nugent +* +* Package: CMNext.Cli +* File: Program.cs +* +* CMNext.Cli is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published +* by the Free Software Foundation, either version 2 of the License, +* or (at your option) any later version. +* +* CMNext.Cli is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with CMNext.Cli. If not, see http://www.gnu.org/licenses/. +*/ + +using System; + +using System.Text.Json.Serialization; + + +namespace CMNext.Cli.Model.Channels +{ + + public sealed class ChannelMeta : INamedEntity + { + [JsonPropertyName("id")] + public string Id { get; set; } + + [JsonPropertyName("date")] + public long Date { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } = string.Empty; + + [JsonPropertyName("path")] + public string Path { get; set; } = string.Empty; + + [JsonPropertyName("index")] + public string IndexFileName { get; set; } = string.Empty; + + [JsonPropertyName("content")] + public string ContentDir { get; set; } = string.Empty; + + [JsonPropertyName("feed")] + public ChannelFeed? Feed { get; set; } + } +}
\ No newline at end of file diff --git a/cmnext-cli/src/Model/Channels/ChannelStore.cs b/cmnext-cli/src/Model/Channels/ChannelStore.cs new file mode 100644 index 0000000..5d930fa --- /dev/null +++ b/cmnext-cli/src/Model/Channels/ChannelStore.cs @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2024 Vaughn Nugent +* +* Package: CMNext.Cli +* File: Program.cs +* +* CMNext.Cli is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published +* by the Free Software Foundation, either version 2 of the License, +* or (at your option) any later version. +* +* CMNext.Cli is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with CMNext.Cli. If not, see http://www.gnu.org/licenses/. +*/ + +using System.Threading; +using System.Threading.Tasks; +using System.Text.Json.Serialization; + +using CMNext.Cli.Site; + +using VNLib.Net.Rest.Client.Construction; +using System.Linq; + + +namespace CMNext.Cli.Model.Channels +{ + public sealed class ChannelStore(SiteManager site) : ICMNextStore<ChannelMeta> + { + + ///<inheritdoc/> + public async Task CreateAsync(ChannelMeta entity, CancellationToken cancellation) + { + CMNextSiteAdapter cmSite = await site.GetAdapterAsync(); + + await cmSite.BeginRequest(new CreateChannelRequest(entity)) + .ExecAsync(cancellation); + } + + ///<inheritdoc/> + public async Task<ChannelMeta?> GetAsync(string id, CancellationToken cancellation) + { + ChannelMeta[] all = await ListAsync(cancellation); + return all.FirstOrDefault(c => c.Id == id); + } + + ///<inheritdoc/> + public async Task<ChannelMeta[]> ListAsync(CancellationToken cancellation) + { + CMNextSiteAdapter cmSite = await site.GetAdapterAsync(); + + ChannelMeta[]? index = await cmSite + .BeginRequest(new ListChannelRequest()) + .ExecAsync(cancellation) + .AsJson<ChannelMeta[]>(); + + return index ?? []; + } + + ///<inheritdoc/> + public async Task DeleteAsync(string id, CancellationToken cancellation) + { + CMNextSiteAdapter cmSite = await site.GetAdapterAsync(); + + await cmSite.BeginRequest(new DeleteChannelRequest(id)) + .ExecAsync(cancellation); + } + + ///<inheritdoc/> + public async Task UpdateAsync(ChannelMeta entity, CancellationToken cancellation) + { + CMNextSiteAdapter cmSite = await site.GetAdapterAsync(); + + await cmSite.BeginRequest(new SetChannelRequest(entity)) + .ExecAsync(cancellation); + } + + private sealed class ChannelIndex : ICMNextIndex<ChannelMeta> + { + [JsonPropertyName("date")] + public long Date { get; set; } + + [JsonPropertyName("records")] + public ChannelMeta[] Records { get; set; } = []; + + [JsonPropertyName("version")] + public string Version { get; set; } = "0.0.0"; + } + } +}
\ No newline at end of file |