implementing
This commit is contained in:
parent
bb3f0fccd0
commit
c785df3adf
51
DevconBoothImages/CodexWrapper.cs
Normal file
51
DevconBoothImages/CodexWrapper.cs
Normal file
@ -0,0 +1,51 @@
|
||||
using CodexOpenApi;
|
||||
using System.Net.Http;
|
||||
using System.Windows;
|
||||
using Utils;
|
||||
|
||||
namespace DevconBoothImages
|
||||
{
|
||||
public class CodexWrapper
|
||||
{
|
||||
public async Task<List<CodexApi>> GetCodexes()
|
||||
{
|
||||
var config = new Configuration();
|
||||
var result = new List<CodexApi>();
|
||||
|
||||
foreach (var endpoint in config.CodexEndpoints)
|
||||
{
|
||||
var splitIndex = endpoint.LastIndexOf(':');
|
||||
var host = endpoint.Substring(0, splitIndex);
|
||||
var port = Convert.ToInt32(endpoint.Substring(splitIndex + 1));
|
||||
|
||||
var address = new Address(
|
||||
host: host,
|
||||
port: port
|
||||
);
|
||||
|
||||
var client = new HttpClient();
|
||||
var codex = new CodexApi(client);
|
||||
codex.BaseUrl = $"{address.Host}:{address.Port}/api/codex/v1";
|
||||
|
||||
await CheckCodex(codex, endpoint);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task CheckCodex(CodexApi codex, string endpoint)
|
||||
{
|
||||
try
|
||||
{
|
||||
var info = await codex.GetDebugInfoAsync();
|
||||
if (string.IsNullOrEmpty(info.Id)) throw new Exception("Failed to fetch Codex node id");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"Failed to connect to codex '{endpoint}': {ex}");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
16
DevconBoothImages/Configuration.cs
Normal file
16
DevconBoothImages/Configuration.cs
Normal file
@ -0,0 +1,16 @@
|
||||
namespace DevconBoothImages
|
||||
{
|
||||
public class Configuration
|
||||
{
|
||||
public string[] CodexEndpoints { get; } =
|
||||
[
|
||||
"aaaa",
|
||||
"bbbb"
|
||||
];
|
||||
|
||||
public string AuthUser { get; } = "";
|
||||
public string AuthPw { get; } = "";
|
||||
public string LocalNodeBootstrapInfo { get; } = "";
|
||||
public string WorkingDir { get; } = "D:\\DevconBoothApp";
|
||||
}
|
||||
}
|
@ -8,4 +8,9 @@
|
||||
<UseWPF>true</UseWPF>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ProjectPlugins\CodexPlugin\CodexPlugin.csproj" />
|
||||
<ProjectReference Include="..\Tools\AutoClient\AutoClient.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -14,8 +14,10 @@
|
||||
|
||||
<Image Grid.Row="0" Name="Img" />
|
||||
<StackPanel Grid.Row="1">
|
||||
<Button Content="Generate image -> Upload to Codex -> Put CID info in clipboard" Padding="10"/>
|
||||
<Button Content="Put last CID info in clipboard" Padding="10"/>
|
||||
<TextBlock Name="Txt" HorizontalAlignment="Center" />
|
||||
<Button Content="Check Codex connections" Click="Button_Click_2" />
|
||||
<Button Content="Generate image -> Upload to Codex -> Put CID info in clipboard" Padding="10" Click="Button_Click"/>
|
||||
<Button Content="Put last CID info in clipboard" Padding="10" Click="Button_Click_1"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Window>
|
||||
|
@ -1,27 +1,121 @@
|
||||
using System.Windows;
|
||||
using AutoClient;
|
||||
using Logging;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
namespace DevconBoothImages
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for MainWindow.xaml
|
||||
/// </summary>
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
private readonly Configuration config = new Configuration();
|
||||
private readonly CodexWrapper codexWrapper = new CodexWrapper();
|
||||
private readonly ImageGenerator imageGenerator = new ImageGenerator(new NullLog());
|
||||
private string[] currentCids = Array.Empty<string>();
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
|
||||
}
|
||||
|
||||
private void Button_Click(object sender, RoutedEventArgs e)
|
||||
private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
|
||||
{
|
||||
MessageBox.Show("Unhandled exception: " + e.Exception);
|
||||
}
|
||||
|
||||
private async void Button_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// image
|
||||
Log("Getting image...");
|
||||
var file = await imageGenerator.Generate();
|
||||
var filename = Path.Combine(config.WorkingDir, file);
|
||||
File.Copy(file, filename);
|
||||
|
||||
var bmp = new BitmapImage();
|
||||
bmp.BeginInit();
|
||||
bmp.UriSource = new Uri(filename);
|
||||
bmp.EndInit();
|
||||
Img.Source = bmp;
|
||||
|
||||
Log("Uploading...");
|
||||
// upload
|
||||
await UploadToCodexes(filename, file);
|
||||
|
||||
// clipboard info
|
||||
InfoToClipboard();
|
||||
}
|
||||
|
||||
private void Button_Click_1(object sender, RoutedEventArgs e)
|
||||
private async void Button_Click_1(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// clipboard info
|
||||
InfoToClipboard();
|
||||
}
|
||||
|
||||
private async void Button_Click_2(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// check codexes
|
||||
Log("Checking Codex connections...");
|
||||
await codexWrapper.GetCodexes();
|
||||
Log("Connections OK");
|
||||
}
|
||||
|
||||
private async Task UploadToCodexes(string filename, string shortName)
|
||||
{
|
||||
var result = new List<string>();
|
||||
var codexes = await codexWrapper.GetCodexes();
|
||||
try
|
||||
{
|
||||
foreach (var codex in codexes)
|
||||
{
|
||||
using (var fileStream = File.OpenRead(filename))
|
||||
{
|
||||
var response = await codex.UploadAsync(
|
||||
"application/image??",
|
||||
"attachement filanem???",
|
||||
fileStream);
|
||||
|
||||
if (string.IsNullOrEmpty(response) ||
|
||||
response.ToLowerInvariant().Contains("unable to store block"))
|
||||
{
|
||||
MessageBox.Show("Unable to upload image. Response empty or error message.");
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Add(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Upload failed: " + ex);
|
||||
}
|
||||
Log($"Generated {result.Count} CIDs");
|
||||
currentCids = result.ToArray();
|
||||
}
|
||||
|
||||
private void InfoToClipboard()
|
||||
{
|
||||
Clipboard.Clear();
|
||||
if (!currentCids.Any())
|
||||
{
|
||||
Log("No CIDs were generated! Clipboard cleared.");
|
||||
return;
|
||||
}
|
||||
|
||||
var msg =
|
||||
"";
|
||||
|
||||
|
||||
|
||||
Clipboard.SetText(msg);
|
||||
Log("CID info copied to clipboard. Paste it in Discord plz!");
|
||||
}
|
||||
|
||||
private void Log(string v)
|
||||
{
|
||||
Txt.Text = v;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user