123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- using InABox.Clients;
- using InABox.Configuration;
- using InABox.Mobile;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using Xamarin.Essentials;
- using Xamarin.Forms;
- using Xamarin.Forms.Xaml;
- using XF.Material.Forms.UI.Dialogs;
- using Comal.Classes;
- using Email = Xamarin.Essentials.Email;
- using InABox.Core;
- using System.Linq;
- using System.Threading;
- using System.Threading.Tasks;
- namespace comal.timesheets
- {
- [XamlCompilation(XamlCompilationOptions.Compile)]
- public partial class SettingsPage : ContentPage
- {
- private int count;
- public SettingsPage()
- {
- InitializeComponent();
- NavigationPage.SetHasBackButton(this, false);
- Populate();
- }
- private void ExitBtn_Clicked(object sender, EventArgs e)
- {
- Navigation.PopAsync();
- }
- private void SaveBtn_Clicked(object sender, EventArgs e)
- {
- ValidateData();
- }
- private async void ValidateData()
- {
- try
- {
- App.DBSettings.URLs = stringList.SaveItems();
- App.DBSettings.UserID = userIDEnt.Text.Trim();
- App.DBSettings.Password = passwordEnt.Text.Trim();
- }
- catch { }
- Validate();
- Navigation.PopAsync();
- }
- private async void Validate()
- {
- using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Validating"))
- {
- try
- {
- ClientFactory.InvalidateUser();
- new LocalConfiguration<DatabaseSettings>().Delete();
- new LocalConfiguration<DatabaseSettings>().Save(App.DBSettings);
- App.DBSettings = new LocalConfiguration<DatabaseSettings>().Load();
- if (App.Current.Properties.ContainsKey("SessionID"))
- App.Current.Properties.Remove("SessionID");
- var result = JsonClient<User>.Ping(App.DBSettings.URLs, out DatabaseInfo info);
- ClientFactory.SetClientType(typeof(JsonClient<>), "TimeBench", MobileUtils.AppVersion.InstalledVersionNumber + GlobalVariables.DeviceString, result, true);
- GlobalVariables.ChangeUser = true;
- GlobalVariables.InternalOnAppearing = true;
- Navigation.PopToRootAsync(true);
- PINLoginPage pin = new PINLoginPage();
- Navigation.PushAsync(pin, true);
- }
- catch (Exception ex)
- {
- var log = new MobileLogging(LogType.BackgroundProcess, "Change user from Settings Page", ex.Message + ex.StackTrace, this.GetType().Name);
- }
- }
- }
- #region Populate Screen
- private void Populate()
- {
- try
- {
- stringList.LoadList(App.DBSettings.URLs);
- userIDEnt.Text = App.DBSettings.UserID;
- passwordEnt.Text = App.DBSettings.Password;
- deviceIDEnt.Text = MobileUtils.GetDeviceID();
- appVersionEnt.Text = MobileUtils.AppVersion.InstalledVersionNumber;
- }
- catch { }
- }
- private void CheckErrorLogs()
- {
- const string errorFilename = "Errorscache.log";
- string libraryPath = "";
- if (Device.RuntimePlatform.Equals(Device.Android))
- libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
- else if (Device.RuntimePlatform.Equals(Device.iOS))
- libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Resources);
- var errorFilePath = Path.Combine(libraryPath, errorFilename);
- if (!File.Exists(errorFilePath))
- {
- return;
- }
- var errorText = File.ReadAllText(errorFilePath);
- if (!string.IsNullOrWhiteSpace(errorText))
- errorLogsBtn.IsVisible = true;
- else
- errorLogsBtn.IsVisible = false;
- }
- protected override async void OnAppearing()
- {
- CheckErrorLogs();
- bool isLatest = true;
- try
- {
- isLatest = await MobileUtils.AppVersion.IsUsingLatestVersion();
- }
- catch (Exception eLatest)
- {
- }
- if (isLatest)
- {
- updateVersionBtn.IsEnabled = false;
- updateVersionBtn.Text = "App is up to date";
- }
- else if (!isLatest)
- {
- try
- {
- string latestVersionNumber = await MobileUtils.AppVersion.GetLatestVersionNumber();
- updateVersionBtn.IsEnabled = true;
- updateVersionBtn.Text = "Update App Version (" + latestVersionNumber + ")";
- }
- catch { }
- }
- const string errorFilename = "Fatal.log";
- var libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
- var errorFilePath = Path.Combine(libraryPath, errorFilename);
- if (File.Exists(errorFilePath))
- {
- sendErrorsBtn.IsEnabled = true;
- }
- base.OnAppearing();
- }
- #endregion
- #region Buttons
- private async void SendErrorsBtn_Clicked(object sender, EventArgs e)
- {
- try
- {
- const string errorFilename = "Fatal.log";
- string libraryPath = "";
- if (Device.RuntimePlatform.Equals(Device.Android))
- libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
- else if (Device.RuntimePlatform.Equals(Device.iOS))
- libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Resources);
- var errorFilePath = Path.Combine(libraryPath, errorFilename);
- if (!File.Exists(errorFilePath))
- {
- return;
- }
- var errorText = File.ReadAllText(errorFilePath);
- var message = new EmailMessage
- {
- Subject = "Error Logs from " + GlobalVariables.EmpName,
- Body = errorText,
- To = new List<string> { "support@prsdigital.com.au" }
- };
- await Email.ComposeAsync(message);
- File.Delete(errorFilePath);
- }
- catch { }
- }
- private void UpdateVersionBtn_Clicked(Object sender, EventArgs e)
- {
- Dispatcher.BeginInvokeOnMainThread(() => { MobileUtils.AppVersion.OpenAppInStore(); });
- }
- private async void ChangePasswordBtn_Clicked(object sender, EventArgs e)
- {
- if (count == 3)
- {
- DisplayAlert("Alert", "You have attempted incorrectly " + count + " times and cannot try again. Please contact your system administrator.", "OK");
- return;
- }
- CoreTable table = new Client<User>().Query(new Filter<User>(x => x.UserID).IsEqualTo(ClientFactory.UserID),
- new Columns<User>(x => x.Password));
- if (table.Rows.Any())
- {
- string p = table.Rows.FirstOrDefault().Values[0].ToString();
- string userInput = await DisplayPromptAsync("Alert", "Enter Current Password", "OK", "Cancel");
- if (!string.IsNullOrWhiteSpace(userInput) && userInput != "Cancel")
- {
- if (p != userInput)
- {
- count++;
- DisplayAlert("Alert", "Password is incorrect. You have attempted " + count + " times out of 3.", "OK");
- return;
- }
- else if (p == userInput)
- {
- PasswordResetPage page = new PasswordResetPage(ClientFactory.UserID);
- page.OnPasswordReset += (() =>
- {
- Navigation.PopToRootAsync();
- PINLoginPage pinpage = new PINLoginPage();
- Navigation.PushAsync(pinpage);
- });
- Navigation.PushAsync(page);
- }
- }
- }
- }
- private async void ErrorLogsBtn_Clicked(object sender, EventArgs e)
- {
- const string errorFilename = "Errorscache.log";
- string libraryPath = "";
- if (Device.RuntimePlatform.Equals(Device.Android))
- libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
- else if (Device.RuntimePlatform.Equals(Device.iOS))
- libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Resources);
- var errorFilePath = Path.Combine(libraryPath, errorFilename);
- if (!File.Exists(errorFilePath))
- {
- return;
- }
- var errorText = File.ReadAllText(errorFilePath);
-
-
- var message = new EmailMessage
- {
- Subject = "Error Logs from " + GlobalVariables.EmpName,
- Body = errorText,
- To = new List<string> { "support@prsdigital.com.au" }
- };
- await Email.ComposeAsync(message);
- File.Delete(errorFilePath);
-
- }
- #endregion
- }
- }
|