Added new notification nuget. Added auto regenerate JWT token on error.
This commit is contained in:
@@ -3,15 +3,17 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:BodyshopPartner"
|
||||
ShutdownMode="OnExplicitShutdown"
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
Exit="Application_Exit"
|
||||
StartupUri="Views\Login.xaml">
|
||||
<Application.Resources>
|
||||
<ResourceDictionary>
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
|
||||
<ResourceDictionary Source="pack://application:,,,/ToastNotifications.Messages;component/Themes/Default.xaml" />
|
||||
<materialDesign:BundledTheme BaseTheme="Light"
|
||||
PrimaryColor="Grey"
|
||||
SecondaryColor="LightBlue" />
|
||||
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
|
||||
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Indigo.xaml" />
|
||||
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Indigo.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</Application.Resources>
|
||||
|
||||
@@ -314,6 +314,12 @@
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="ToastNotifications, Version=2.5.1.0, Culture=neutral, PublicKeyToken=e89d9d7314a7c797, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ToastNotifications.2.5.1\lib\net40\ToastNotifications.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ToastNotifications.Messages, Version=2.5.1.0, Culture=neutral, PublicKeyToken=e89d9d7314a7c797, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\ToastNotifications.Messages.2.5.1\lib\net40\ToastNotifications.Messages.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
@@ -359,6 +365,7 @@
|
||||
<Compile Include="Utils\JsonConverter.cs" />
|
||||
<Compile Include="Utils\JsonExtensions.cs" />
|
||||
<Compile Include="Utils\LoginHelpers.cs" />
|
||||
<Compile Include="Utils\Notifications.cs" />
|
||||
<Compile Include="Utils\Queries\JobsQueries.cs" />
|
||||
<Compile Include="Utils\Queries\VehicleQueries.cs" />
|
||||
<Compile Include="Utils\QuickBooksInterop.cs" />
|
||||
|
||||
@@ -34,8 +34,18 @@ namespace BodyshopPartner.Utils
|
||||
else
|
||||
{
|
||||
string exceptionString = "";
|
||||
bool jwtExpired = false;
|
||||
logger.Error("Error executing query.");
|
||||
Array.ForEach(graphQLResponse.Errors, x => { logger.Error(x.Message); exceptionString = exceptionString + x + ";"; });
|
||||
Array.ForEach(graphQLResponse.Errors, x =>
|
||||
{
|
||||
logger.Error(x.Message);
|
||||
if (x.Message.Contains("JWTExpired"))
|
||||
{
|
||||
jwtExpired = true;
|
||||
};
|
||||
exceptionString = exceptionString + x + ";";
|
||||
});
|
||||
if (jwtExpired) await Utils.Auth.Refresh(); ;
|
||||
logger.Error("---------------------");
|
||||
throw new Exception(exceptionString);
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ using BodyshopPartner.Models;
|
||||
using BodyshopPartner.Utils.Growls;
|
||||
using GraphQL.Common.Request;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using ToastNotifications.Messages;
|
||||
|
||||
namespace BodyshopPartner.Utils
|
||||
{
|
||||
@@ -159,12 +160,14 @@ namespace BodyshopPartner.Utils
|
||||
logger.Trace("Job insert succesful. Show notification");
|
||||
App.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
Growler.AddNotification(new Notification()
|
||||
{
|
||||
Title = Properties.Resources.Msg_NewJobUploaded,
|
||||
Subtitle = item.Job?.ownr_fn?.Value + " " + item.Job?.ownr_ln?.Value + " | " + item.Job?.clm_no?.Value,
|
||||
//Message = item.Job?.vehicle?.data?.v_model_yr?.Value + " " + item.Job?.vehicle?.data?.v_make_desc?.Value + " " + item.Job?.vehicle?.data?.v_model_desc?.Value
|
||||
});
|
||||
string msg = Properties.Resources.Msg_NewJobUploaded + " " + item.Job?.ownr_fn?.Value + " " + item.Job?.ownr_ln?.Value + " | " + item.Job?.clm_no?.Value;
|
||||
Utils.Notifications.notifier.ShowSuccess(msg);
|
||||
//Growler.AddNotification(new Notification()
|
||||
//{
|
||||
// Title = Properties.Resources.Msg_NewJobUploaded,
|
||||
// Subtitle = item.Job?.ownr_fn?.Value + " " + item.Job?.ownr_ln?.Value + " | " + item.Job?.clm_no?.Value,
|
||||
// //Message = item.Job?.vehicle?.data?.v_model_yr?.Value + " " + item.Job?.vehicle?.data?.v_make_desc?.Value + " " + item.Job?.vehicle?.data?.v_model_desc?.Value
|
||||
//});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -174,12 +177,14 @@ namespace BodyshopPartner.Utils
|
||||
//Succesful upsert
|
||||
App.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
Growler.AddNotification(new Notification()
|
||||
{
|
||||
Title = Properties.Resources.Msg_NewJobUploadError,
|
||||
Subtitle = item.Job?.ownr_fn?.Value + " " + item.Job?.ownr_ln?.Value,
|
||||
Message = Ex.Message
|
||||
}); ;
|
||||
string msg = Properties.Resources.Msg_NewJobUploadError + " " + item.Job?.ownr_fn?.Value + " " + item.Job?.ownr_ln?.Value + Ex.Message;
|
||||
Notifications.notifier.ShowError(msg);
|
||||
//Growler.AddNotification(new Notification()
|
||||
//{
|
||||
// Title = Properties.Resources.Msg_NewJobUploadError,
|
||||
// Subtitle = item.Job?.ownr_fn?.Value + " " + item.Job?.ownr_ln?.Value,
|
||||
// Message = Ex.Message
|
||||
//}); ;
|
||||
});
|
||||
}
|
||||
_jobs.Dequeue();
|
||||
|
||||
32
BodyshopUploader/Utils/Notifications.cs
Normal file
32
BodyshopUploader/Utils/Notifications.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ToastNotifications;
|
||||
using ToastNotifications.Lifetime;
|
||||
using ToastNotifications.Position;
|
||||
using ToastNotifications.Messages;
|
||||
using System.Windows;
|
||||
|
||||
namespace BodyshopPartner.Utils
|
||||
{
|
||||
public static class Notifications
|
||||
{
|
||||
public static Notifier notifier = new Notifier(cfg =>
|
||||
{
|
||||
cfg.PositionProvider = new PrimaryScreenPositionProvider(
|
||||
corner: Corner.BottomRight,
|
||||
offsetX: 10,
|
||||
offsetY: 10);
|
||||
/* * */
|
||||
|
||||
cfg.LifetimeSupervisor = new TimeAndCountBasedLifetimeSupervisor(
|
||||
notificationLifetime: TimeSpan.FromSeconds(3),
|
||||
maximumNotificationCount: MaximumNotificationCount.FromCount(5));
|
||||
|
||||
cfg.Dispatcher = Application.Current.Dispatcher;
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ using System.Xml.Linq;
|
||||
using BodyshopPartner.Utils.Growls;
|
||||
using Interop.QBFC13;
|
||||
using Interop.QBXMLRP2;
|
||||
using ToastNotifications.Messages;
|
||||
|
||||
namespace BodyshopPartner.Utils
|
||||
{
|
||||
@@ -26,7 +27,7 @@ namespace BodyshopPartner.Utils
|
||||
|
||||
public static void ConnectToQuickBooks()
|
||||
{
|
||||
if(String.IsNullOrWhiteSpace(Properties.Settings.Default.QuickBooksFilePath) || !File.Exists(Properties.Settings.Default.QuickBooksFilePath))
|
||||
if (String.IsNullOrWhiteSpace(Properties.Settings.Default.QuickBooksFilePath) || !File.Exists(Properties.Settings.Default.QuickBooksFilePath))
|
||||
{
|
||||
throw new Exception("The QuickBooks file specified does not exist.");
|
||||
}
|
||||
@@ -35,12 +36,15 @@ namespace BodyshopPartner.Utils
|
||||
logger.Debug("Attempting to connect to QuickBooks...");
|
||||
App.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
Growler.AddNotification(new Notification()
|
||||
{
|
||||
Id = new Random().Next(),
|
||||
Title = Properties.Resources.Msg_QbConnection_Title,
|
||||
Message = Properties.Resources.Msg_QbConnection_Msg
|
||||
});
|
||||
string msg = Properties.Resources.Msg_QbConnection_Title + " " + Properties.Resources.Msg_QbConnection_Msg;
|
||||
|
||||
Notifications.notifier.ShowInformation(msg);
|
||||
//Growler.AddNotification(new Notification()
|
||||
//{
|
||||
// Id = new Random().Next(),
|
||||
// Title = Properties.Resources.Msg_QbConnection_Title,
|
||||
// Message = Properties.Resources.Msg_QbConnection_Msg
|
||||
//});
|
||||
});
|
||||
|
||||
rp = new RequestProcessor2Class();
|
||||
@@ -52,18 +56,21 @@ namespace BodyshopPartner.Utils
|
||||
|
||||
App.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
Growler.AddNotification(new Notification()
|
||||
{
|
||||
Id = new Random().Next(),
|
||||
Title = Properties.Resources.Msg_QbConnected_Title,
|
||||
Message = Properties.Resources.Msg_QbConnected_Msg
|
||||
});
|
||||
string msg = Properties.Resources.Msg_QbConnected_Title + " " + Properties.Resources.Msg_QbConnected_Msg;
|
||||
|
||||
Notifications.notifier.ShowInformation(msg);
|
||||
//Growler.AddNotification(new Notification()
|
||||
//{
|
||||
// Id = new Random().Next(),
|
||||
// Title = Properties.Resources.Msg_QbConnected_Title,
|
||||
// Message = Properties.Resources.Msg_QbConnected_Msg
|
||||
//});
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex);
|
||||
if(ex.Message.Contains("80040154 Class not registered"))
|
||||
if (ex.Message.Contains("80040154 Class not registered"))
|
||||
{
|
||||
logger.Error("QuickBooks Request Processor not registered. Is QuickBooks installed on this computer?");
|
||||
throw new Exception("QuickBooks Request Processor not registered. Is QuickBooks installed on this computer?");
|
||||
@@ -83,12 +90,16 @@ namespace BodyshopPartner.Utils
|
||||
rp.CloseConnection();
|
||||
App.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
Growler.AddNotification(new Notification()
|
||||
{
|
||||
Id = new Random().Next(),
|
||||
Title = Properties.Resources.Msg_QbDisconnection_Title,
|
||||
Message = Properties.Resources.Msg_QbDisconnection_Msg
|
||||
});
|
||||
string msg = Properties.Resources.Msg_QbDisconnection_Title + " " + Properties.Resources.Msg_QbDisconnection_Msg;
|
||||
|
||||
Notifications.notifier.ShowSuccess(msg);
|
||||
|
||||
//Growler.AddNotification(new Notification()
|
||||
//{
|
||||
// Id = new Random().Next(),
|
||||
// Title = Properties.Resources.Msg_QbDisconnection_Title,
|
||||
// Message = Properties.Resources.Msg_QbDisconnection_Msg
|
||||
//});
|
||||
});
|
||||
logger.Debug("Disconnected from QuickBooks successfully.");
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using Firebase.Auth;
|
||||
using ToastNotifications.Messages;
|
||||
|
||||
namespace BodyshopPartner.ViewModels
|
||||
{
|
||||
@@ -20,6 +21,9 @@ namespace BodyshopPartner.ViewModels
|
||||
{
|
||||
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
||||
|
||||
|
||||
/* * */
|
||||
|
||||
public MainViewModel()
|
||||
{
|
||||
logger.Trace("Main VM constructed.");
|
||||
@@ -76,10 +80,8 @@ namespace BodyshopPartner.ViewModels
|
||||
LoadBodyshopData().Wait(); ;
|
||||
|
||||
_callingThread.ReportProgress(80);
|
||||
|
||||
Utils.HTTPServer.InitHttpServer(AddHttpStatus);
|
||||
|
||||
logger.Debug("VM Init Complete");
|
||||
Task.Run(() => Utils.HTTPServer.InitHttpServer(AddHttpStatus));
|
||||
_callingThread.ReportProgress(100);
|
||||
}
|
||||
|
||||
@@ -106,7 +108,7 @@ namespace BodyshopPartner.ViewModels
|
||||
{
|
||||
logger.Debug("Adding folder {0} to monitoring paths.", dialog.SelectedPath);
|
||||
MonitoringPaths.Add(new Models.Monitor() { FilePath = dialog.SelectedPath });
|
||||
Properties.Settings.Default.MonitoringPaths = MonitoringPaths.Select(x => x.FilePath).ToList(); ;
|
||||
Properties.Settings.Default.MonitoringPaths = MonitoringPaths.Select(x => x.FilePath).ToList();
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
@@ -226,14 +228,18 @@ namespace BodyshopPartner.ViewModels
|
||||
private FirebaseAuthLink al = BodyshopPartner.Utils.Auth.authlink;
|
||||
public async Task TestGql()
|
||||
{
|
||||
Notification _n = new Notification()
|
||||
{
|
||||
Id = new Random().Next(),
|
||||
Title = "This is a title",
|
||||
Subtitle = "Subtitle",
|
||||
Message = "Somethin"
|
||||
};
|
||||
Growler.AddNotification(_n);
|
||||
|
||||
Utils.Notifications.notifier.ShowInformation("The message");
|
||||
|
||||
|
||||
//Notification _n = new Notification()
|
||||
//{
|
||||
// Id = new Random().Next(),
|
||||
// Title = "This is a title",
|
||||
// Subtitle = "Subtitle",
|
||||
// Message = "Somethin"
|
||||
//};
|
||||
//Growler.AddNotification(_n);
|
||||
|
||||
Console.WriteLine(al.FirebaseToken);
|
||||
FirebaseAuthLink t = await al.GetFreshAuthAsync();
|
||||
|
||||
@@ -70,4 +70,6 @@
|
||||
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net472" />
|
||||
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net472" />
|
||||
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net472" />
|
||||
<package id="ToastNotifications" version="2.5.1" targetFramework="net472" />
|
||||
<package id="ToastNotifications.Messages" version="2.5.1" targetFramework="net472" />
|
||||
</packages>
|
||||
Reference in New Issue
Block a user