SettingsPage.xaml.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. using InABox.Clients;
  2. using InABox.Configuration;
  3. using InABox.Mobile;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using Xamarin.Essentials;
  8. using Xamarin.Forms;
  9. using Xamarin.Forms.Xaml;
  10. using XF.Material.Forms.UI.Dialogs;
  11. using Comal.Classes;
  12. using Email = Xamarin.Essentials.Email;
  13. using InABox.Core;
  14. using System.Linq;
  15. using System.Threading;
  16. using System.Threading.Tasks;
  17. using InABox.Rpc;
  18. namespace comal.timesheets
  19. {
  20. [XamlCompilation(XamlCompilationOptions.Compile)]
  21. public partial class SettingsPage
  22. {
  23. private int count;
  24. private DatabaseSettings _settings;
  25. public SettingsPage()
  26. {
  27. _settings = new LocalConfiguration<DatabaseSettings>().Load();
  28. InitializeComponent();
  29. <<<<<<< HEAD
  30. =======
  31. >>>>>>> 157e2e53c724ac158405ab5d124be7d214b4e5e7
  32. }
  33. private void ExitBtn_Clicked(object sender, EventArgs e)
  34. {
  35. Navigation.PopAsync();
  36. }
  37. <<<<<<< HEAD
  38. private async void Save_OnClicked(object sender, EventArgs e)
  39. =======
  40. private async void Save_OnClicked(object sender, EventArgs args)
  41. >>>>>>> 157e2e53c724ac158405ab5d124be7d214b4e5e7
  42. {
  43. _settings.URLs = stringList.SaveItems();
  44. _settings.UserID = userIDEnt.Text.Trim();
  45. _settings.Password = passwordEnt.Text.Trim();
  46. new LocalConfiguration<DatabaseSettings>().Save(_settings);
  47. ClientFactory.InvalidateUser();
  48. if (App.Current.Properties.ContainsKey("SessionID"))
  49. App.Current.Properties.Remove("SessionID");
  50. TransportStatus connection = TransportStatus.None;
  51. using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Connecting"))
  52. {
  53. await Task.Run(() =>
  54. {
  55. return connection = App.ConnectTransport(_settings.URLs);
  56. });
  57. }
  58. if (connection != TransportStatus.OK)
  59. {
  60. await DisplayAlert("Connection Error", $"Unable to establish a connection!\n\nERR: {connection}", "OK");
  61. return;
  62. }
  63. //Navigation.PopToRootAsync(true);
  64. Navigation.PushAsync(new PinLoginPage());
  65. }
  66. #region Populate Screen
  67. private void Populate()
  68. {
  69. try
  70. {
  71. stringList.LoadList(_settings.URLs);
  72. userIDEnt.Text = _settings.UserID;
  73. passwordEnt.Text = _settings.Password;
  74. deviceIDEnt.Text = MobileUtils.GetDeviceID();
  75. appVersionEnt.Text = MobileUtils.AppVersion.InstalledVersionNumber;
  76. }
  77. catch { }
  78. }
  79. protected override async void OnAppearing()
  80. {
  81. base.OnAppearing();
  82. Populate();
  83. bool isLatest = true;
  84. try
  85. {
  86. isLatest = await MobileUtils.AppVersion.IsUsingLatestVersion();
  87. }
  88. catch (Exception eLatest)
  89. {
  90. }
  91. if (isLatest)
  92. {
  93. updateVersionBtn.IsEnabled = false;
  94. updateVersionBtn.Text = "App is up to date";
  95. }
  96. else if (!isLatest)
  97. {
  98. try
  99. {
  100. string latestVersionNumber = await MobileUtils.AppVersion.GetLatestVersionNumber();
  101. updateVersionBtn.IsEnabled = true;
  102. updateVersionBtn.Text = "Update App Version (" + latestVersionNumber + ")";
  103. }
  104. catch { }
  105. }
  106. }
  107. #endregion
  108. #region Buttons
  109. private async void SendErrorsBtn_Clicked(object sender, EventArgs e)
  110. {
  111. try
  112. {
  113. const string errorFilename = "Fatal.log";
  114. string libraryPath = "";
  115. if (Device.RuntimePlatform.Equals(Device.Android))
  116. libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
  117. else if (Device.RuntimePlatform.Equals(Device.iOS))
  118. libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Resources);
  119. var errorFilePath = Path.Combine(libraryPath, errorFilename);
  120. if (!File.Exists(errorFilePath))
  121. {
  122. return;
  123. }
  124. var errorText = File.ReadAllText(errorFilePath);
  125. var message = new EmailMessage
  126. {
  127. Subject = "Error Logs from " + App.Data.Me?.Name ?? "Unknown Employee",
  128. Body = errorText,
  129. To = new List<string> { "support@prsdigital.com.au" }
  130. };
  131. await Email.ComposeAsync(message);
  132. File.Delete(errorFilePath);
  133. }
  134. catch { }
  135. }
  136. private void UpdateVersionBtn_Clicked(Object sender, EventArgs e)
  137. {
  138. Dispatcher.BeginInvokeOnMainThread(() => { MobileUtils.AppVersion.OpenAppInStore(); });
  139. }
  140. private async void ChangePasswordBtn_Clicked(object sender, EventArgs e)
  141. {
  142. // if (count == 3)
  143. // {
  144. // DisplayAlert("Alert", "You have attempted incorrectly " + count + " times and cannot try again. Please contact your system administrator.", "OK");
  145. // return;
  146. // }
  147. // CoreTable table = new Client<User>().Query(new Filter<User>(x => x.UserID).IsEqualTo(ClientFactory.UserID),
  148. // new Columns<User>(x => x.Password));
  149. // if (table.Rows.Any())
  150. // {
  151. // string p = table.Rows.FirstOrDefault().Values[0].ToString();
  152. // string userInput = await DisplayPromptAsync("Alert", "Enter Current Password", "OK", "Cancel");
  153. // if (!string.IsNullOrWhiteSpace(userInput) && userInput != "Cancel")
  154. // {
  155. // if (p != userInput)
  156. // {
  157. // count++;
  158. // DisplayAlert("Alert", "Password is incorrect. You have attempted " + count + " times out of 3.", "OK");
  159. // return;
  160. // }
  161. // else if (p == userInput)
  162. // {
  163. // PasswordResetPage page = new PasswordResetPage(ClientFactory.UserID);
  164. // page.OnPasswordReset += (() =>
  165. // {
  166. // Navigation.PopToRootAsync();
  167. // PinLoginPage pinpage = new PinLoginPage();
  168. // Navigation.PushAsync(pinpage);
  169. // });
  170. // Navigation.PushAsync(page);
  171. // }
  172. // }
  173. // }
  174. //
  175. }
  176. private void ViewLogsButton_Clicked(object sender, EventArgs e)
  177. {
  178. Navigation.PushAsync(new LogViewer());
  179. }
  180. #endregion
  181. }
  182. }