Skip to content

Commit 1f9ee94

Browse files
committed
feat(Avalonia): add GitHub Gist uploader settings
1 parent 58fe5d8 commit 1f9ee94

3 files changed

Lines changed: 171 additions & 1 deletion

File tree

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<UserControl
2+
x:Class="SnapX.Avalonia.Views.Settings.Views.TextUploaders.GithubGistUploaderSettingsView"
3+
xmlns="https://github.com/avaloniaui"
4+
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
5+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
6+
7+
<ScrollViewer>
8+
<StackPanel Margin="12" Spacing="12">
9+
10+
<controls:SettingsExpander
11+
Header="Account Authentication"
12+
IconSource="Contact"
13+
IsExpanded="True">
14+
15+
<controls:SettingsExpanderItem Content="Account Status">
16+
<controls:SettingsExpanderItem.Footer>
17+
<StackPanel
18+
Orientation="Horizontal"
19+
Spacing="12"
20+
VerticalAlignment="Center">
21+
<TextBlock
22+
Text="Status: ???"
23+
VerticalAlignment="Center"
24+
x:Name="LoginStatus" />
25+
<Button
26+
Click="ConnectButton_OnClick"
27+
Content="Connect..."
28+
Width="120"
29+
x:Name="ConnectButton" />
30+
</StackPanel>
31+
</controls:SettingsExpanderItem.Footer>
32+
</controls:SettingsExpanderItem>
33+
34+
<controls:SettingsExpanderItem Content="Authorization Code" Description="Paste the code from GitHub after authorizing.">
35+
36+
<controls:SettingsExpanderItem.Footer>
37+
<TextBox
38+
PastingFromClipboard="PasswordTextBox_OnPastingFromClipboard"
39+
Watermark="Paste authorization code here"
40+
Width="400"
41+
x:Name="PasswordTextBox" />
42+
</controls:SettingsExpanderItem.Footer>
43+
44+
</controls:SettingsExpanderItem>
45+
46+
</controls:SettingsExpander>
47+
48+
<controls:SettingsExpander Header="Gist Options" IsExpanded="True">
49+
50+
<controls:SettingsExpanderItem Content="Use Raw URL">
51+
<controls:SettingsExpanderItem.Footer>
52+
<CheckBox x:Name="cbGistUseRawURL" />
53+
</controls:SettingsExpanderItem.Footer>
54+
</controls:SettingsExpanderItem>
55+
56+
<controls:SettingsExpanderItem Content="Publish Gist as Public">
57+
<controls:SettingsExpanderItem.Footer>
58+
<CheckBox x:Name="cbGistPublishPublic" />
59+
</controls:SettingsExpanderItem.Footer>
60+
</controls:SettingsExpanderItem>
61+
62+
<controls:SettingsExpanderItem Content="Custom URL">
63+
<controls:SettingsExpanderItem.Footer>
64+
<TextBox
65+
Watermark="Optional custom URL"
66+
Width="400"
67+
x:Name="txtGistCustomURL" />
68+
</controls:SettingsExpanderItem.Footer>
69+
</controls:SettingsExpanderItem>
70+
71+
</controls:SettingsExpander>
72+
73+
</StackPanel>
74+
</ScrollViewer>
75+
</UserControl>
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
using Avalonia.Controls;
2+
using Avalonia.Input.Platform;
3+
using Avalonia.Interactivity;
4+
using Avalonia.Media;
5+
using FluentAvalonia.UI.Controls;
6+
using SnapX.Core.Upload;
7+
using SnapX.Core.Upload.OAuth;
8+
using SnapX.Core.Upload.Text;
9+
using SnapX.Core.Utils;
10+
using SnapX.Core.Utils.Extensions;
11+
12+
namespace SnapX.Avalonia.Views.Settings.Views.TextUploaders;
13+
14+
public partial class GithubGistUploaderSettingsView : UserControl
15+
{
16+
public GithubGistUploaderSettingsView()
17+
{
18+
InitializeComponent();
19+
}
20+
21+
protected override void OnDataContextChanged(EventArgs e)
22+
{
23+
base.OnDataContextChanged(e);
24+
25+
if (DataContext is not GitHubGist) return;
26+
var config = SnapX.Core.SnapXL.UploadersConfig;
27+
CalculateAccessibility();
28+
cbGistUseRawURL.IsChecked = config.GistRawURL;
29+
cbGistUseRawURL.IsCheckedChanged += (Sender, Args) => config.GistRawURL = cbGistUseRawURL.IsChecked ?? false;
30+
cbGistPublishPublic.IsChecked = config.GistPublishPublic;
31+
cbGistPublishPublic.IsCheckedChanged += (Sender, Args) => config.GistRawURL = cbGistPublishPublic.IsChecked ?? false;
32+
33+
txtGistCustomURL.Text = config.GistCustomURL;
34+
txtGistCustomURL.TextChanged += (Sender, Args) => config.GistCustomURL = txtGistCustomURL.Text;
35+
}
36+
37+
private async void ConnectButton_OnClick(object? Sender, RoutedEventArgs E)
38+
{
39+
var control = Sender as Control;
40+
var oauth = new OAuth2Info(APIKeys.GitHubID, APIKeys.GitHubSecret);
41+
var gist = new GitHubGist(oauth);
42+
var config = SnapX.Core.SnapXL.UploadersConfig;
43+
config.GistOAuth2Info = oauth;
44+
DataContext = gist;
45+
var url = await Task.Run(gist.GetAuthorizationURL);
46+
URLHelpers.OpenURL(url);
47+
}
48+
void CalculateAccessibility()
49+
{
50+
var Config = SnapX.Core.SnapXL.UploadersConfig;
51+
var oAuthSuccess = OAuth2Info.CheckOAuth(Config.GistOAuth2Info);
52+
53+
ConnectButton.Content = oAuthSuccess ? "Disconnect" : "Connect...";
54+
LoginStatus.Text = oAuthSuccess ? "Status: Logged in." : $"Status: {OAuthLoginStatus.LoginRequired}";
55+
LoginStatus.Foreground = oAuthSuccess ? Brushes.LawnGreen : Brushes.Red;
56+
}
57+
private async void PasswordTextBox_OnPastingFromClipboard(object? Sender, RoutedEventArgs E)
58+
{
59+
try
60+
{
61+
var control = Sender as Control;
62+
var gist = control!.DataContext as GitHubGist;
63+
var topLevel = TopLevel.GetTopLevel(this);
64+
if (topLevel?.Clipboard == null) return;
65+
var code = await (topLevel?.Clipboard).TryGetTextAsync();
66+
if (string.IsNullOrWhiteSpace(code)) return;
67+
var config = SnapX.Core.SnapXL.UploadersConfig;
68+
// config.GistOAuth2Info
69+
var success = await Task.Run(() => gist!.GetAccessToken(code));
70+
if (success) config.GistOAuth2Info = gist!.AuthInfo;
71+
CalculateAccessibility();
72+
var dialog = new ContentDialog
73+
{
74+
Title = success ? "Success" : "Login Failed",
75+
Content = success ? "Login successful!" : "Please check your username and password.",
76+
CloseButtonText = "OK",
77+
DefaultButton = ContentDialogButton.Close
78+
};
79+
80+
PasswordTextBox.Text = code;
81+
E.Handled = true;
82+
if (topLevel != null)
83+
{
84+
await dialog.ShowAsync(topLevel);
85+
}
86+
else
87+
{
88+
await dialog.ShowAsync();
89+
}
90+
}
91+
catch (Exception e)
92+
{
93+
e.ShowError();
94+
}
95+
}
96+
}

SnapX.Core/Upload/Text/GitHubGist.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44

55
using System.Collections.Specialized;
6-
using System.Diagnostics.CodeAnalysis;
76
using System.Net;
87
using System.Text.Json;
98
using System.Text.Json.Serialization;

0 commit comments

Comments
 (0)