diff --git a/src/DynamicTranslator.Wpf/App.xaml.cs b/src/DynamicTranslator.Wpf/App.xaml.cs index c4cee8c8..d8907d46 100644 --- a/src/DynamicTranslator.Wpf/App.xaml.cs +++ b/src/DynamicTranslator.Wpf/App.xaml.cs @@ -71,7 +71,14 @@ private void HandleExceptionsOrNothing() logger.Object.Error($"Unhandled Exception occured: {args.ExceptionObject.ToString()}"); } - googleClient.Object.TrackException(args.ExceptionObject.ToString(), false); + try + { + googleClient.Object.TrackException(args.ExceptionObject.ToString(), false); + } + catch (Exception) + { + //throw; + } } } }; @@ -89,7 +96,14 @@ private void HandleExceptionsOrNothing() logger.Object.Error($"Unhandled Exception occured: {exception.ToString()}"); } - googleClient.Object.TrackException(exception.ToString(), false); + try + { + googleClient.Object.TrackException(exception.ToString(), false); + } + catch (Exception) + { + //throw; + } } } return true; diff --git a/src/DynamicTranslator.Wpf/Observers/Finder.cs b/src/DynamicTranslator.Wpf/Observers/Finder.cs index fa0556ca..55e4b70f 100644 --- a/src/DynamicTranslator.Wpf/Observers/Finder.cs +++ b/src/DynamicTranslator.Wpf/Observers/Finder.cs @@ -16,8 +16,6 @@ using DynamicTranslator.Service.GoogleAnalytics; using DynamicTranslator.Wpf.Notification; -using Nito.AsyncEx.Synchronous; - namespace DynamicTranslator.Wpf.Observers { public class Finder : IObserver>, ISingletonDependency @@ -53,53 +51,64 @@ public void OnCompleted() { } public void OnError(Exception error) { } - public async void OnNext(EventPattern value) + public void OnNext(EventPattern value) { - await Task.Run(async () => + Task.Run(async () => { - var currentString = value.EventArgs.CurrentString; - - if (_previousString == currentString) + try { - return; - } + var currentString = value.EventArgs.CurrentString; + + if (_previousString == currentString) + { + return; + } - _previousString = currentString; - Maybe failedResults; + _previousString = currentString; + Maybe failedResults; - var fromLanguageExtension = await _languageDetector.DetectLanguage(currentString); - var results = await GetMeansFromCache(currentString, fromLanguageExtension); - var findedMeans = await _resultOrganizer.OrganizeResult(results, currentString, out failedResults).ConfigureAwait(false); + var fromLanguageExtension = await _languageDetector.DetectLanguage(currentString); + var results = await GetMeansFromCache(currentString, fromLanguageExtension); + var findedMeans = await _resultOrganizer.OrganizeResult(results, currentString, out failedResults).ConfigureAwait(false); - await Notify(currentString, findedMeans); - await Notify(currentString, failedResults); - await Trace(currentString, fromLanguageExtension); + await Notify(currentString, findedMeans); + await Notify(currentString, failedResults); + await Trace(currentString, fromLanguageExtension); + } + catch (Exception ex) + { + await Notify("Error", new Maybe(ex.Message)); + } }); } - private async Task Trace(string currentString, string fromLanguageExtension) + private Task Trace(string currentString, string fromLanguageExtension) { - await _googleAnalytics.TrackEventAsync("DynamicTranslator", - "Translate", - $"{currentString} | {fromLanguageExtension} - {_configuration.ApplicationConfiguration.ToLanguage.Extension} | v{ApplicationVersion.GetCurrentVersion()} ", - null).ConfigureAwait(false); - - await _googleAnalytics.TrackAppScreenAsync("DynamicTranslator", - ApplicationVersion.GetCurrentVersion(), - "dynamictranslator", - "dynamictranslator", - "notification").ConfigureAwait(false); + _googleAnalytics.TrackEventAsync("DynamicTranslator", + "Translate", + $"{currentString} | {fromLanguageExtension} - {_configuration.ApplicationConfiguration.ToLanguage.Extension} | v{ApplicationVersion.GetCurrentVersion()} ", + null).ConfigureAwait(false); + + _googleAnalytics.TrackAppScreenAsync("DynamicTranslator", + ApplicationVersion.GetCurrentVersion(), + "dynamictranslator", + "dynamictranslator", + "notification").ConfigureAwait(false); + + return Task.FromResult(0); } - private async Task Notify(string currentString, Maybe findedMeans) + private Task Notify(string currentString, Maybe findedMeans) { if (!string.IsNullOrEmpty(findedMeans.DefaultIfEmpty(string.Empty).First())) { - await _notifier.AddNotificationAsync(currentString, - ImageUrls.NotificationUrl, - findedMeans.DefaultIfEmpty(string.Empty).First() - ).ConfigureAwait(false); + return _notifier.AddNotificationAsync(currentString, + ImageUrls.NotificationUrl, + findedMeans.DefaultIfEmpty(string.Empty).First() + ); } + + return Task.FromResult(0); } private Task GetMeansFromCache(string currentString, string fromLanguageExtension) diff --git a/src/DynamicTranslator.Wpf/ViewModel/MainWindow.xaml.cs b/src/DynamicTranslator.Wpf/ViewModel/MainWindow.xaml.cs index 665a8e7b..d196e585 100644 --- a/src/DynamicTranslator.Wpf/ViewModel/MainWindow.xaml.cs +++ b/src/DynamicTranslator.Wpf/ViewModel/MainWindow.xaml.cs @@ -13,6 +13,7 @@ using DynamicTranslator.Constants; using DynamicTranslator.Extensions; using DynamicTranslator.LanguageManagement; +using DynamicTranslator.Runtime; using DynamicTranslator.Wpf.Extensions; using Octokit; @@ -123,16 +124,19 @@ private async Task CheckVersion() { var release = await GetReleaseFromCache(gitHubClient); - var version = release.TagName; + var incomingVersion = release.TagName; - if (!ApplicationVersion.Is(version)) + using (var versionChecker = IocManager.Instance.ResolveAsDisposable()) { - await this.DispatchingAsync(() => + if (versionChecker.Object.IsNew(incomingVersion)) { - _newVersionButton.Visibility = Visibility.Visible; - _newVersionButton.Content = $"A new version {version} released, update now!"; - _configurations.ApplicationConfiguration.UpdateLink = release.Assets.FirstOrDefault()?.BrowserDownloadUrl; - }); + await this.DispatchingAsync(() => + { + _newVersionButton.Visibility = Visibility.Visible; + _newVersionButton.Content = $"A new version {incomingVersion} released, update now!"; + _configurations.ApplicationConfiguration.UpdateLink = release.Assets.FirstOrDefault()?.BrowserDownloadUrl; + }); + } } } } diff --git a/src/DynamicTranslator/ApplicationVersion.cs b/src/DynamicTranslator/ApplicationVersion.cs index e8786841..4100301c 100644 --- a/src/DynamicTranslator/ApplicationVersion.cs +++ b/src/DynamicTranslator/ApplicationVersion.cs @@ -2,16 +2,11 @@ { public static class ApplicationVersion { - public const string CurrentVersion = "3.4.1"; + public const string CurrentVersion = "3.4.2"; public static string GetCurrentVersion() { return CurrentVersion; } - - public static bool Is(string version) - { - return CurrentVersion == version; - } } } diff --git a/src/DynamicTranslator/DynamicTranslator.csproj b/src/DynamicTranslator/DynamicTranslator.csproj index fc4148a5..19078268 100644 --- a/src/DynamicTranslator/DynamicTranslator.csproj +++ b/src/DynamicTranslator/DynamicTranslator.csproj @@ -139,6 +139,8 @@ + + diff --git a/src/DynamicTranslator/GoogleAnalyticsTracker.cs b/src/DynamicTranslator/GoogleAnalyticsTracker.cs index 3c7d2d69..3170ae78 100644 --- a/src/DynamicTranslator/GoogleAnalyticsTracker.cs +++ b/src/DynamicTranslator/GoogleAnalyticsTracker.cs @@ -20,11 +20,11 @@ public void OnCompleted() {} public void OnError(Exception error) {} - public async void OnNext(long value) + public void OnNext(long value) { - await Task.Run(async () => + Task.Run(() => { - await _googleAnalyticsService.TrackAppScreenAsync("DynamicTranslator", + _googleAnalyticsService.TrackAppScreenAsync("DynamicTranslator", ApplicationVersion.GetCurrentVersion(), "dynamictranslator", "dynamictranslator", diff --git a/src/DynamicTranslator/Runtime/IVersionChecker.cs b/src/DynamicTranslator/Runtime/IVersionChecker.cs new file mode 100644 index 00000000..cacbff8a --- /dev/null +++ b/src/DynamicTranslator/Runtime/IVersionChecker.cs @@ -0,0 +1,9 @@ +namespace DynamicTranslator.Runtime +{ + public interface IVersionChecker + { + bool IsNew(string incomingVersion); + + bool IsEqual(string version); + } +} diff --git a/src/DynamicTranslator/Runtime/VersionChecker.cs b/src/DynamicTranslator/Runtime/VersionChecker.cs new file mode 100644 index 00000000..68de7fba --- /dev/null +++ b/src/DynamicTranslator/Runtime/VersionChecker.cs @@ -0,0 +1,25 @@ +using System; + +using Abp.Dependency; + +namespace DynamicTranslator.Runtime +{ + public class VersionChecker : IVersionChecker, ITransientDependency + { + public bool IsNew(string incomingVersion) + { + var currentVersion = new Version(ApplicationVersion.GetCurrentVersion()); + var newVersion = new Version(incomingVersion); + + return newVersion > currentVersion; + } + + public bool IsEqual(string version) + { + var currentVersion = new Version(ApplicationVersion.GetCurrentVersion()); + var versionToCheck = new Version(version); + + return versionToCheck == currentVersion; + } + } +} diff --git a/src/DynamicTranslator/Service/GoogleAnalytics/GoogleAnalyticsService.cs b/src/DynamicTranslator/Service/GoogleAnalytics/GoogleAnalyticsService.cs index e4db2142..70237e28 100644 --- a/src/DynamicTranslator/Service/GoogleAnalytics/GoogleAnalyticsService.cs +++ b/src/DynamicTranslator/Service/GoogleAnalytics/GoogleAnalyticsService.cs @@ -24,9 +24,9 @@ public void EcommerceItem(string id, string name, string price, string quantity, PostData(PrepareEcommerceItem(id, name, price, quantity, code, category, currency)); } - public async Task EcommerceItemAsync(string id, string name, string price, string quantity, string code, string category, string currency) + public Task EcommerceItemAsync(string id, string name, string price, string quantity, string code, string category, string currency) { - await PostDataAsync(PrepareEcommerceItem(id, name, price, quantity, code, category, currency)); + return PostDataAsync(PrepareEcommerceItem(id, name, price, quantity, code, category, currency)); } public void EcommerceTransaction(string id, string affiliation, string revenue, string shipping, string tax, string currency) @@ -34,9 +34,9 @@ public void EcommerceTransaction(string id, string affiliation, string revenue, PostData(PrepareEcommerceTransaction(id, affiliation, revenue, shipping, tax, currency)); } - public async Task EcommerceTransactionAsync(string id, string affiliation, string revenue, string shipping, string tax, string currency) + public Task EcommerceTransactionAsync(string id, string affiliation, string revenue, string shipping, string tax, string currency) { - await PostDataAsync(PrepareEcommerceTransaction(id, affiliation, revenue, shipping, tax, currency)); + return PostDataAsync(PrepareEcommerceTransaction(id, affiliation, revenue, shipping, tax, currency)); } public void TrackAppScreen(string appName, string appVersion, string appId, string appInstallerId, string screenName) @@ -44,9 +44,9 @@ public void TrackAppScreen(string appName, string appVersion, string appId, stri PostData(PrepareTrackAppScreen(appName, appVersion, appId, appInstallerId, screenName)); } - public async Task TrackAppScreenAsync(string appName, string appVersion, string appId, string appInstallerId, string screenName) + public Task TrackAppScreenAsync(string appName, string appVersion, string appId, string appInstallerId, string screenName) { - await PostDataAsync(PrepareTrackAppScreen(appName, appVersion, appId, appInstallerId, screenName)); + return PostDataAsync(PrepareTrackAppScreen(appName, appVersion, appId, appInstallerId, screenName)); } public void TrackEvent(string category, string action, string label, string value) @@ -54,9 +54,9 @@ public void TrackEvent(string category, string action, string label, string valu PostData(PrepareTrackEvent(category, action, label, value)); } - public async Task TrackEventAsync(string category, string action, string label, string value) + public Task TrackEventAsync(string category, string action, string label, string value) { - await PostDataAsync(PrepareTrackEvent(category, action, label, value)); + return PostDataAsync(PrepareTrackEvent(category, action, label, value)); } public void TrackException(string description, bool fatal) @@ -64,9 +64,9 @@ public void TrackException(string description, bool fatal) PostData(PrepareTrackException(description, fatal)); } - public async Task TrackExceptionAsync(string description, bool fatal) + public Task TrackExceptionAsync(string description, bool fatal) { - await PostDataAsync(PrepareTrackException(description, fatal)); + return PostDataAsync(PrepareTrackException(description, fatal)); } public void TrackPage(string hostname, string page, string title) @@ -74,9 +74,9 @@ public void TrackPage(string hostname, string page, string title) PostData(PrepareTrackPage(hostname, page, title)); } - public async Task TrackPageAsync(string hostname, string page, string title) + public Task TrackPageAsync(string hostname, string page, string title) { - await PostDataAsync(PrepareTrackPage(hostname, page, title)); + return PostDataAsync(PrepareTrackPage(hostname, page, title)); } public void TrackSocial(string action, string network, string target) @@ -84,9 +84,9 @@ public void TrackSocial(string action, string network, string target) PostData(PrepareTrackSocial(action, network, target)); } - public async Task TrackSocialAsync(string action, string network, string target) + public Task TrackSocialAsync(string action, string network, string target) { - await PostDataAsync(PrepareTrackSocial(action, network, target)); + return PostDataAsync(PrepareTrackSocial(action, network, target)); } private Hashtable BaseValues() @@ -107,7 +107,7 @@ private Hashtable BaseValues() private void PostData(IDictionary values) { var data = ""; - foreach (object key in values.Keys) + foreach (var key in values.Keys) { if (data != "") { @@ -125,10 +125,10 @@ private void PostData(IDictionary values) } } - private async Task PostDataAsync(IDictionary values) + private Task PostDataAsync(IDictionary values) { var data = ""; - foreach (object key in values.Keys) + foreach (var key in values.Keys) { if (data != "") { @@ -142,13 +142,13 @@ private async Task PostDataAsync(IDictionary values) using (var client = new WebClient()) { - await client.UploadStringTaskAsync(GoogleAnalyticsUrl, "POST", data); + return client.UploadStringTaskAsync(GoogleAnalyticsUrl, "POST", data); } } private Hashtable PrepareEcommerceItem(string id, string name, string price, string quantity, string code, string category, string currency) { - Hashtable ht = BaseValues(); + var ht = BaseValues(); ht.Add("t", "item"); // Item hit type. ht.Add("ti", id); // transaction ID. Required. @@ -164,7 +164,7 @@ private Hashtable PrepareEcommerceItem(string id, string name, string price, str private Hashtable PrepareEcommerceTransaction(string id, string affiliation, string revenue, string shipping, string tax, string currency) { - Hashtable ht = BaseValues(); + var ht = BaseValues(); ht.Add("t", "transaction"); // Transaction hit type. ht.Add("ti", id); // transaction ID. Required. @@ -179,7 +179,7 @@ private Hashtable PrepareEcommerceTransaction(string id, string affiliation, str private Hashtable PrepareTrackAppScreen(string appName, string appVersion, string appId, string appInstallerId, string screenName) { - Hashtable ht = BaseValues(); + var ht = BaseValues(); ht.Add("t", "screenview"); // Pageview hit type. ht.Add("an", appName); //App Name @@ -193,7 +193,7 @@ private Hashtable PrepareTrackAppScreen(string appName, string appVersion, strin private Hashtable PrepareTrackEvent(string category, string action, string label, string value) { - Hashtable ht = BaseValues(); + var ht = BaseValues(); ht.Add("t", "event"); // Event hit type ht.Add("ec", category); // Event Category. Required. @@ -212,7 +212,7 @@ private Hashtable PrepareTrackEvent(string category, string action, string label private Hashtable PrepareTrackException(string description, bool fatal) { - Hashtable ht = BaseValues(); + var ht = BaseValues(); ht.Add("t", "exception"); // Exception hit type. ht.Add("exd", description); // Exception description. Required. @@ -223,7 +223,7 @@ private Hashtable PrepareTrackException(string description, bool fatal) private Hashtable PrepareTrackPage(string hostname, string page, string title) { - Hashtable ht = BaseValues(); + var ht = BaseValues(); ht.Add("t", "pageview"); // Pageview hit type. ht.Add("dh", hostname); // Document hostname. @@ -235,7 +235,7 @@ private Hashtable PrepareTrackPage(string hostname, string page, string title) private Hashtable PrepareTrackSocial(string action, string network, string target) { - Hashtable ht = BaseValues(); + var ht = BaseValues(); ht.Add("t", "social"); // Social hit type. ht.Add("dh", action); // Social Action. Required.