diff --git a/BodyshopUploader/App.xaml b/BodyshopUploader/App.xaml
index b9ae366..c14eee4 100644
--- a/BodyshopUploader/App.xaml
+++ b/BodyshopUploader/App.xaml
@@ -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">
-
+
+
-
-
diff --git a/BodyshopUploader/BodyshopPartner.csproj b/BodyshopUploader/BodyshopPartner.csproj
index 0f52710..89fafad 100644
--- a/BodyshopUploader/BodyshopPartner.csproj
+++ b/BodyshopUploader/BodyshopPartner.csproj
@@ -314,6 +314,12 @@
True
True
+
+ ..\packages\ToastNotifications.2.5.1\lib\net40\ToastNotifications.dll
+
+
+ ..\packages\ToastNotifications.Messages.2.5.1\lib\net40\ToastNotifications.Messages.dll
+
@@ -359,6 +365,7 @@
+
diff --git a/BodyshopUploader/Utils/GraphQL.cs b/BodyshopUploader/Utils/GraphQL.cs
index 8803ab8..2363818 100644
--- a/BodyshopUploader/Utils/GraphQL.cs
+++ b/BodyshopUploader/Utils/GraphQL.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);
}
diff --git a/BodyshopUploader/Utils/JobProcessingQueue.cs b/BodyshopUploader/Utils/JobProcessingQueue.cs
index 5cf188d..4b6812d 100644
--- a/BodyshopUploader/Utils/JobProcessingQueue.cs
+++ b/BodyshopUploader/Utils/JobProcessingQueue.cs
@@ -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();
diff --git a/BodyshopUploader/Utils/Notifications.cs b/BodyshopUploader/Utils/Notifications.cs
new file mode 100644
index 0000000..e4b58d8
--- /dev/null
+++ b/BodyshopUploader/Utils/Notifications.cs
@@ -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;
+ });
+
+ }
+}
diff --git a/BodyshopUploader/Utils/QuickBooksInterop.cs b/BodyshopUploader/Utils/QuickBooksInterop.cs
index 66f702f..d408ade 100644
--- a/BodyshopUploader/Utils/QuickBooksInterop.cs
+++ b/BodyshopUploader/Utils/QuickBooksInterop.cs
@@ -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.");
}
diff --git a/BodyshopUploader/ViewModels/MainViewModel.cs b/BodyshopUploader/ViewModels/MainViewModel.cs
index 455626f..ec91092 100644
--- a/BodyshopUploader/ViewModels/MainViewModel.cs
+++ b/BodyshopUploader/ViewModels/MainViewModel.cs
@@ -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();
diff --git a/BodyshopUploader/packages.config b/BodyshopUploader/packages.config
index 684a8a2..dd91103 100644
--- a/BodyshopUploader/packages.config
+++ b/BodyshopUploader/packages.config
@@ -70,4 +70,6 @@
+
+
\ No newline at end of file