Skip to content

Commit 281fd43

Browse files
committed
Implement user feedback parser
1 parent 5c1d305 commit 281fd43

File tree

3 files changed

+62
-54
lines changed

3 files changed

+62
-54
lines changed

CollapseLauncher/XAMLs/MainApp/Pages/Dialogs/SimpleDialogs.cs

+12-25
Original file line numberDiff line numberDiff line change
@@ -1294,12 +1294,7 @@ private static async void SubmitFeedbackButton_Click(object sender, RoutedEventA
12941294
var userTemplate = Lang._Misc.ExceptionFeedbackTemplate_User;
12951295
var emailTemplate = Lang._Misc.ExceptionFeedbackTemplate_Email;
12961296

1297-
string exceptionContent = $"""
1298-
{userTemplate}
1299-
{emailTemplate}
1300-
{Lang._Misc.ExceptionFeedbackTemplate_Message}
1301-
------------------------------------
1302-
""";
1297+
string exceptionContent = UserFeedbackTemplate.FeedbackTemplate;
13031298
string exceptionTitle = $"{Lang._Misc.ExceptionFeedbackTitle} {ErrorSender.ExceptionTitle}";
13041299

13051300
UserFeedbackDialog feedbackDialog = new UserFeedbackDialog(contentDialog.XamlRoot)
@@ -1314,26 +1309,18 @@ private static async void SubmitFeedbackButton_Click(object sender, RoutedEventA
13141309
{
13151310
return;
13161311
}
1312+
1313+
var parsedFeedback = UserFeedbackTemplate.ParseTemplate(feedbackResult);
13171314

1318-
// Parse username and email
1319-
var msg = feedbackResult.Message.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
1320-
if (msg.Length <= 4) return; // Do not send feedback if format is not correct
1321-
var user = msg[0].Replace(userTemplate, "", StringComparison.InvariantCulture).Trim();
1322-
var email = msg[1].Replace(userTemplate, "", StringComparison.InvariantCulture).Trim();
1323-
var feedback = msg.Length > 4 ? string.Join("\n", msg.Skip(4)).Trim() : null;
1324-
1325-
if (string.IsNullOrEmpty(user)) user = "none";
1326-
1327-
// Validate email
1328-
var addr = System.Net.Mail.MailAddress.TryCreate(email, out var address);
1329-
email = addr ? address!.Address : "[email protected]";
1330-
1331-
if (string.IsNullOrEmpty(feedback)) return;
1332-
1333-
var feedbackContent = $"{feedback}\n\nRating: {feedbackResult.Rating}/5";
1334-
1335-
SentryHelper.SendExceptionFeedback(ErrorSender.SentryErrorId, email, user, feedbackContent);
1336-
isFeedbackSent = true;
1315+
if (parsedFeedback == null)
1316+
{
1317+
Logger.LogWriteLine("Failed to parse feedback template! Not sending feedback", LogType.Error, true);
1318+
}
1319+
else
1320+
{
1321+
SentryHelper.SendExceptionFeedback(ErrorSender.SentryErrorId, parsedFeedback.Email, parsedFeedback.User, parsedFeedback.Message);
1322+
isFeedbackSent = true;
1323+
}
13371324
}
13381325
catch (Exception ex)
13391326
{

CollapseLauncher/XAMLs/MainApp/Pages/SettingsPage.xaml.cs

+11-29
Original file line numberDiff line numberDiff line change
@@ -419,48 +419,30 @@ static void ExitFromOverlay(object? sender, RoutedEventArgs args)
419419
private async void ShareYourFeedbackClick(object sender, RoutedEventArgs e)
420420
{
421421
#if ENABLEUSERFEEDBACK
422-
var userTemplate = Lang._Misc.ExceptionFeedbackTemplate_User;
423-
var emailTemplate = Lang._Misc.ExceptionFeedbackTemplate_Email;
424-
string exceptionContent = $"""
425-
{userTemplate}
426-
{emailTemplate}
427-
{Lang._Misc.ExceptionFeedbackTemplate_Message}
428-
------------------------------------
429-
""";
430-
422+
var content = UserFeedbackTemplate.FeedbackTemplate;
431423

432424
UserFeedbackDialog userFeedbackDialog = new UserFeedbackDialog(XamlRoot, true)
433425
{
434-
Message = exceptionContent
426+
Message = content
435427
};
436428

437-
UserFeedbackResult userFeedbackResult = await userFeedbackDialog
438-
.ShowAsync( result => throw new NotImplementedException());
429+
UserFeedbackResult userFeedbackResult = await userFeedbackDialog.ShowAsync();
439430

440431
if (userFeedbackResult == null)
441432
{
442433
LogWriteLine("User feedback dialog cancelled!");
443434
return;
444435
}
445-
446-
// Parse username and email
447-
var msg = userFeedbackResult.Message.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
448-
if (msg.Length <= 4) return; // Do not send feedback if format is not correct
449-
var user = msg[0].Replace(userTemplate, "", StringComparison.InvariantCulture).Trim();
450-
var email = msg[1].Replace(userTemplate, "", StringComparison.InvariantCulture).Trim();
451-
var feedback = msg.Length > 4 ? string.Join("\n", msg.Skip(4)).Trim() : null;
452-
453-
if (string.IsNullOrEmpty(user)) user = "none";
454-
455-
// Validate email
456-
var addr = System.Net.Mail.MailAddress.TryCreate(email, out var address);
457-
email = addr ? address!.Address : "[email protected]";
458-
459-
if (string.IsNullOrEmpty(feedback)) return;
460436

461-
var feedbackContent = $"{feedback}\n\nRating: {userFeedbackResult.Rating}/5";
437+
var parsedFeedback = UserFeedbackTemplate.ParseTemplate(userFeedbackResult);
438+
439+
if (parsedFeedback == null)
440+
{
441+
LogWriteLine("Feedback result failed to be parsed! Feedback not sent.", LogType.Error, true);
442+
return;
443+
}
462444

463-
SentryHelper.SendGenericFeedback(feedbackContent, email, user);
445+
SentryHelper.SendGenericFeedback(parsedFeedback.Message, parsedFeedback.Email, parsedFeedback.User);
464446
#endif
465447
}
466448

CollapseLauncher/XAMLs/Theme/CustomControls/UserFeedbackDialog/UserFeedbackDialog.cs

+39
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
using System;
1818
using System.Diagnostics.CodeAnalysis;
1919
using System.IO;
20+
using System.Linq;
2021
using System.Threading;
2122
using System.Threading.Tasks;
2223
using Windows.Storage.Streams;
2324
using Windows.UI;
25+
using static Hi3Helper.Locale;
2426

2527
using InnerExtension = CollapseLauncher.Extension.UIElementExtensions;
2628
// ReSharper disable PartialTypeWithSinglePart
@@ -401,4 +403,41 @@ private static Grid FindOverlayGrid([NotNull] XamlRoot? root, bool isAlwaysOnTop
401403
}
402404
#endregion
403405
}
406+
407+
public static partial class UserFeedbackTemplate
408+
{
409+
private static readonly string UserTemplate = Lang._Misc.ExceptionFeedbackTemplate_User;
410+
private static readonly string EmailTemplate = Lang._Misc.ExceptionFeedbackTemplate_Email;
411+
412+
public static readonly string FeedbackTemplate = $"""
413+
{UserTemplate}
414+
{EmailTemplate}
415+
{Lang._Misc.ExceptionFeedbackTemplate_Message}
416+
------------------------------------
417+
""";
418+
public record UserFeedbackTemplateResult(string User, string Email, string Message);
419+
420+
public static UserFeedbackTemplateResult? ParseTemplate(UserFeedbackResult feedbackResult)
421+
{
422+
// Parse username and email
423+
var msg = feedbackResult.Message.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
424+
if (msg.Length <= 4) return null; // Do not send feedback if format is not correct
425+
426+
var user = msg[0].Replace(UserTemplate, "", StringComparison.InvariantCulture).Trim();
427+
var email = msg[1].Replace(UserTemplate, "", StringComparison.InvariantCulture).Trim();
428+
var feedback = msg.Length > 4 ? string.Join("\n", msg.Skip(4)).Trim() : null;
429+
430+
if (string.IsNullOrEmpty(user)) user = "none";
431+
432+
// Validate email
433+
var addr = System.Net.Mail.MailAddress.TryCreate(email, out var address);
434+
email = addr ? address!.Address : "[email protected]";
435+
436+
if (string.IsNullOrEmpty(feedback)) return null;
437+
438+
var feedbackContent = $"{feedback}\n\nRating: {feedbackResult.Rating}/5";
439+
440+
return new UserFeedbackTemplateResult(user, email, feedbackContent);
441+
}
442+
}
404443
}

0 commit comments

Comments
 (0)