|
| 1 | + |
| 2 | +using Avalonia.Controls; |
| 3 | +using Avalonia.Media; |
| 4 | +using FluentAvalonia.UI.Controls; |
| 5 | +using SnapX.Core; |
| 6 | +using SnapX.Core.Upload; |
| 7 | +using SnapX.Core.Upload.Img; |
| 8 | +using SnapX.Core.Upload.OAuth; |
| 9 | +using SnapX.Core.Utils; |
| 10 | +using SnapX.Core.Utils.Extensions; |
| 11 | + |
| 12 | +namespace SnapX.Avalonia.Views.Settings.Views.ImageUploaders; |
| 13 | + |
| 14 | +public partial class FlickrUploaderSettingsView : UserControl |
| 15 | +{ |
| 16 | + public FlickrUploaderSettingsView() |
| 17 | + { |
| 18 | + InitializeComponent(); |
| 19 | + } |
| 20 | + |
| 21 | + protected override void OnDataContextChanged(EventArgs e) |
| 22 | + { |
| 23 | + base.OnDataContextChanged(e); |
| 24 | + |
| 25 | + if (DataContext is not FlickrUploader) return; |
| 26 | + var Config = SnapX.Core.SnapXL.UploadersConfig; |
| 27 | + AuthCodeTextBox.Text = Config.FlickrOAuthInfo?.AuthVerifier; |
| 28 | + DirectLinkSwitch.IsChecked = Config.FlickrSettings?.DirectLink; |
| 29 | + |
| 30 | + CalculateAccessibility(); |
| 31 | + AuthCodeTextBox.TextChanged += (Sender, Args) => { CalculateAccessibility(); }; |
| 32 | + |
| 33 | + ConnectButton.Click += async (s, ev) => |
| 34 | + { |
| 35 | + try |
| 36 | + { |
| 37 | + var oauth = new OAuthInfo(APIKeys.FlickrKey, APIKeys.FlickrSecret); |
| 38 | + // In development, this hanged Avalonia without Task.Run! Cooool! |
| 39 | + var url = await Task.Run(() => new FlickrUploader(oauth).GetAuthorizationURL()); |
| 40 | + |
| 41 | + if (!string.IsNullOrEmpty(url)) |
| 42 | + { |
| 43 | + Config.FlickrOAuthInfo = oauth; |
| 44 | + URLHelpers.OpenURL(url); |
| 45 | + DebugHelper.WriteLine("FlickrAuthOpen - Authorization URL is opened: " + url); |
| 46 | + } |
| 47 | + else |
| 48 | + { |
| 49 | + DebugHelper.WriteLine("FlickrAuthOpen - Authorization URL is empty."); |
| 50 | + } |
| 51 | + } |
| 52 | + catch (Exception ex) |
| 53 | + { |
| 54 | + ex.ShowError(); |
| 55 | + } |
| 56 | + }; |
| 57 | + CompleteAuthButton.Click += async (s, ev) => |
| 58 | + { |
| 59 | + try |
| 60 | + { |
| 61 | + var code = AuthCodeTextBox.Text; |
| 62 | + if (string.IsNullOrWhiteSpace(code) || Config.FlickrOAuthInfo == null) return; |
| 63 | + var result = await Task.Run(() => new FlickrUploader(Config.FlickrOAuthInfo).GetAccessToken(code)); |
| 64 | + |
| 65 | + var dialog = new ContentDialog |
| 66 | + { |
| 67 | + Title = result ? "Success" : "Login Failed", |
| 68 | + Content = result ? "Login Successful" : "Login Failed", |
| 69 | + CloseButtonText = "OK", |
| 70 | + DefaultButton = ContentDialogButton.Close |
| 71 | + }; |
| 72 | + |
| 73 | + LoginStatus.Content = result ? $"Status: {OAuthLoginStatus.LoginSuccessful}" : $"Status: {OAuthLoginStatus.LoginFailed}"; |
| 74 | + LoginStatus.Foreground = result ? Brushes.LawnGreen : Brushes.Red; |
| 75 | + AuthCodeTextBox.Text = string.Empty; |
| 76 | + |
| 77 | + var topLevel = TopLevel.GetTopLevel(this); |
| 78 | + if (topLevel != null) |
| 79 | + { |
| 80 | + await dialog.ShowAsync(); |
| 81 | + } |
| 82 | + } |
| 83 | + catch (Exception ex) |
| 84 | + { |
| 85 | + var errorDialog = new ContentDialog |
| 86 | + { |
| 87 | + Title = "Error", |
| 88 | + Content = ex.Message, |
| 89 | + CloseButtonText = "OK" |
| 90 | + }; |
| 91 | + |
| 92 | + var topLevel = TopLevel.GetTopLevel(this); |
| 93 | + if (topLevel != null) |
| 94 | + { |
| 95 | + await errorDialog.ShowAsync(); |
| 96 | + } |
| 97 | + } |
| 98 | + }; |
| 99 | + DisconnectButton.Click += (Sender, Args) => |
| 100 | + { |
| 101 | + Config.FlickrOAuthInfo = null; |
| 102 | + CalculateAccessibility(); |
| 103 | + }; |
| 104 | + |
| 105 | + DirectLinkSwitch.IsCheckedChanged += (s, ev) => |
| 106 | + Config.FlickrSettings?.DirectLink = DirectLinkSwitch.IsChecked ?? false; |
| 107 | + |
| 108 | + |
| 109 | + |
| 110 | + } |
| 111 | + |
| 112 | + void CalculateAccessibility() |
| 113 | + { |
| 114 | + var Config = SnapX.Core.SnapXL.UploadersConfig; |
| 115 | + var oAuthSuccess = OAuthInfo.CheckOAuth(Config.FlickrOAuthInfo); |
| 116 | + |
| 117 | + DisconnectButton.IsEnabled = oAuthSuccess; |
| 118 | + LoginStatus.Content = oAuthSuccess ? "Status: Logged in." : $"Status: {OAuthLoginStatus.LoginRequired}"; |
| 119 | + LoginStatus.Foreground = oAuthSuccess ? Brushes.LawnGreen : Brushes.Red; |
| 120 | + CompleteAuthButton.IsEnabled = !string.IsNullOrWhiteSpace(AuthCodeTextBox.Text); |
| 121 | + } |
| 122 | +} |
0 commit comments