From 8ba6f4bf858c92c1d3b73cacf45b1cb7a67b6e72 Mon Sep 17 00:00:00 2001
From: tsanie <tsorgy@gmail.com>
Date: Tue, 15 Mar 2022 20:12:40 +0800
Subject: [PATCH] fix issue

---
 Billing.Shared/App.cs                    |  4 +--
 Billing.Shared/Store/StoreHelper.cs      | 13 ++++++++--
 Billing.Shared/Views/AccountPage.xaml.cs | 11 +++++++++
 Billing.Shared/Views/BillPage.xaml.cs    | 12 ++++++---
 Billing.Shared/Views/RankPage.xaml.cs    |  5 ++++
 Billing.Shared/Views/SettingPage.xaml.cs |  6 +++++
 Billing/Billing.iOS/AppDelegate.cs       |  1 -
 Billing/Billing.iOS/Info.plist           | 31 +++++++++++++++++++++---
 8 files changed, 70 insertions(+), 13 deletions(-)

diff --git a/Billing.Shared/App.cs b/Billing.Shared/App.cs
index 3f52985..cf65162 100644
--- a/Billing.Shared/App.cs
+++ b/Billing.Shared/App.cs
@@ -85,7 +85,7 @@ namespace Billing
 
         public static bool OpenUrl(Uri uri)
         {
-            if (uri == null)
+            if (uri == null || !uri.IsFile)
             {
                 return true;
             }
@@ -96,7 +96,7 @@ namespace Billing
                 Task.Run(async () =>
                 {
                     var result = await StoreHelper.ReloadDatabase(url);
-                    //if (result)
+                    if (result)
                     {
                         await InitializeData();
 
diff --git a/Billing.Shared/Store/StoreHelper.cs b/Billing.Shared/Store/StoreHelper.cs
index 9fdc98b..7457b32 100644
--- a/Billing.Shared/Store/StoreHelper.cs
+++ b/Billing.Shared/Store/StoreHelper.cs
@@ -17,7 +17,7 @@ namespace Billing.Store
         public static string DatabasePath => Path.Combine(PersonalFolder, dbfile);
 
         #region Sqlite3
-        private const string dbfile = "data.db3";
+        private const string dbfile = ".master.db3";
         private static SQLiteAsyncConnection database;
         #endregion
 
@@ -42,6 +42,7 @@ namespace Billing.Store
             try
             {
                 File.Copy(file, path, true);
+                File.Delete(file);
             }
             catch (Exception ex)
             {
@@ -167,7 +168,15 @@ namespace Billing.Store
         public static async Task<int> GetLogsCount()
         {
             await Instance;
-            return await database.ExecuteScalarAsync<int>("SELECT COUNT(Id) FROM [Logs]");
+            try
+            {
+                return await database.ExecuteScalarAsync<int>("SELECT COUNT(Id) FROM [Logs]");
+            }
+            catch (SQLiteException)
+            {
+                await database.CreateTableAsync<Logs>();
+                return 0;
+            }
         }
         public static async Task<int> SaveLogItemAsync(Logs log)
         {
diff --git a/Billing.Shared/Views/AccountPage.xaml.cs b/Billing.Shared/Views/AccountPage.xaml.cs
index db6df89..7060784 100644
--- a/Billing.Shared/Views/AccountPage.xaml.cs
+++ b/Billing.Shared/Views/AccountPage.xaml.cs
@@ -50,6 +50,17 @@ namespace Billing.Views
             groupLayout.Refresh(accounts);
         }
 
+        protected override void OnRefresh()
+        {
+            accounts.Clear();
+            foreach (var account in App.Accounts)
+            {
+                AddToAccountGroup(account);
+            }
+            RefreshBalance(true);
+            groupLayout.Refresh(accounts);
+        }
+
         private void RefreshBalance(bool calc = false)
         {
             if (calc)
diff --git a/Billing.Shared/Views/BillPage.xaml.cs b/Billing.Shared/Views/BillPage.xaml.cs
index d08cdc6..388b4eb 100644
--- a/Billing.Shared/Views/BillPage.xaml.cs
+++ b/Billing.Shared/Views/BillPage.xaml.cs
@@ -60,19 +60,23 @@ namespace Billing.Views
             billingDate.SetDateTime(DateTime.Today);
         }
 
-        private void OnDateSelected(object sender, DateEventArgs e)
+        protected override void OnRefresh()
         {
-            SelectedDate = e.Date;
-
             Task.Run(() =>
             {
-                var bills = App.Bills.Where(b => Helper.IsSameDay(b.CreateTime, e.Date));
+                var bills = App.Bills.Where(b => Helper.IsSameDay(b.CreateTime, SelectedDate));
                 Bills = new List<UIBill>(bills.OrderBy(b => b.CreateTime).Select(b => Helper.WrapBill(b)));
                 RefreshBalance(Bills);
                 MainThread.BeginInvokeOnMainThread(async () => await scrollView.ScrollToAsync(0, 0, true));
             });
         }
 
+        private void OnDateSelected(object sender, DateEventArgs e)
+        {
+            SelectedDate = e.Date;
+            OnRefresh();
+        }
+
         private void RefreshBalance(List<UIBill> bills)
         {
             SetValue(NoBillsProperty, bills.Count == 0);
diff --git a/Billing.Shared/Views/RankPage.xaml.cs b/Billing.Shared/Views/RankPage.xaml.cs
index 0852d22..ab5d808 100644
--- a/Billing.Shared/Views/RankPage.xaml.cs
+++ b/Billing.Shared/Views/RankPage.xaml.cs
@@ -229,6 +229,11 @@ namespace Billing.Views
             }
         }
 
+        protected override void OnRefresh()
+        {
+            OnDateChanged(this);
+        }
+
         private void OnDateTypeCommand(DateType index)
         {
             if (index < DateType.Monthly || index > DateType.Total)
diff --git a/Billing.Shared/Views/SettingPage.xaml.cs b/Billing.Shared/Views/SettingPage.xaml.cs
index bcdcff4..af4d834 100644
--- a/Billing.Shared/Views/SettingPage.xaml.cs
+++ b/Billing.Shared/Views/SettingPage.xaml.cs
@@ -59,6 +59,12 @@ namespace Billing.Views
             //Light.Instance.RefreshColor(Color.FromHex(color));
         }
 
+        protected override async void OnRefresh()
+        {
+            var count = await StoreHelper.GetLogsCount();
+            SetValue(ManyRecordsProperty, string.Format(Resource.ManyRecords, count));
+        }
+
         private async void OnShareCommand()
         {
             if (Tap.IsBusy)
diff --git a/Billing/Billing.iOS/AppDelegate.cs b/Billing/Billing.iOS/AppDelegate.cs
index 3d37e98..76aab35 100644
--- a/Billing/Billing.iOS/AppDelegate.cs
+++ b/Billing/Billing.iOS/AppDelegate.cs
@@ -1,6 +1,5 @@
 using Foundation;
 using UIKit;
-using Xamarin.Essentials;
 
 namespace Billing.iOS
 {
diff --git a/Billing/Billing.iOS/Info.plist b/Billing/Billing.iOS/Info.plist
index 3177a54..63c422b 100644
--- a/Billing/Billing.iOS/Info.plist
+++ b/Billing/Billing.iOS/Info.plist
@@ -45,9 +45,10 @@
 	<array>
 		<dict>
 			<key>CFBundleTypeName</key>
-			<string>Master SQLite file</string>
+			<string>SQLite Database</string>
 			<key>LSItemContentTypes</key>
 			<array>
+				<string>org.tsanie.billing.db3</string>
 				<string>public.database</string>
 			</array>
 			<key>CFBundleTypeIconFiles</key>
@@ -55,18 +56,40 @@
 				<string>Assets.xcassets/AppIcon.appiconset/Icon180</string>
 			</array>
 			<key>LSHandlerRank</key>
-			<string>Default</string>
+			<string>Alternate</string>
+		</dict>
+	</array>
+	<key>UTExportedTypeDeclarations</key>
+	<array>
+		<dict>
+			<key>UTTypeConformsTo</key>
+			<array>
+				<string>public.data</string>
+			</array>
+			<key>UTTypeDescription</key>
+			<string>SQLite Database</string>
+			<key>UTTypeIdentifier</key>
+			<string>org.tsanie.billing.db3</string>
+			<key>UTTypeTagSpecification</key>
+			<dict>
+				<key>public.filename-extension</key>
+				<string>db3</string>
+				<key>public.mime-type</key>
+				<string>application/vnd.sqlite3</string>
+			</dict>
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
 	<string>13</string>
 	<key>CFBundleShortVersionString</key>
 	<string>1.1.315</string>
-	<key>LSSupportsOpeningDocumentsInPlace</key>
-	<true/>
 	<key>LSApplicationQueriesSchemes</key>
 	<array>
 		<string>mailto</string>
 	</array>
+	<key>UIFileSharingEnabled</key>
+	<true/>
+	<key>LSSupportsOpeningDocumentsInPlace</key>
+	<true/>
 </dict>
 </plist>