Kaynağa Gözat

GUI: improve wallet performance significantly

Herman Schoenfeld 7 yıl önce
ebeveyn
işleme
7152408e81
3 değiştirilmiş dosya ile 49 ekleme ve 81 silme
  1. 1 0
      src/gui/UCTRLWallet.lfm
  2. 11 44
      src/gui/UCTRLWallet.pas
  3. 37 37
      src/pascalcoin_wallet.lpi

+ 1 - 0
src/gui/UCTRLWallet.lfm

@@ -10,6 +10,7 @@ object CTRLWallet: TCTRLWallet
   ClientWidth = 1151
   OnCreate = FormCreate
   OnResize = FormResize
+  LCLVersion = '1.8.2.0'
   Visible = False
   object PairSplitter1: TPairSplitter
     Left = 0

+ 11 - 44
src/gui/UCTRLWallet.pas

@@ -65,20 +65,16 @@ type
     FOperationsHistory: TCTRLWalletOperationsHistory;
     FAccountsGrid: TVisualGrid;
     FOperationsGrid: TVisualGrid;
-    FUserData : TUserSummary;
-    FAccountsDataSource: TAccountsDataSource;
+    FAccountsDataSource: TMyAccountsDataSource;
     FOperationsDataSource: TAccountsOperationsDataSource;
     procedure SetAccountsMode(AMode: TCTRLWalletAccountsMode);
     procedure SetOperationsMode(AMode: TCTRLWalletOperationsMode);
     procedure SetOperationsHistory(AHistory: TCTRLWalletOperationsHistory);
-    procedure FetchUserData;
     procedure RefreshMyAccountsCombo;
     procedure RefreshTotals;
     function GetAccounts(const AccountNumbers: TArray<cardinal>): TArray<TAccount>;
   protected
     procedure ActivateFirstTime; override;
-    function HasUserDataChanged : boolean; overload;
-    function HasUserDataChanged(out AChangedAccounts : TArray<TAccount>) : boolean; overload;
     procedure OnPrivateKeysChanged(Sender: TObject);
     procedure OnUserAccountsChanged(Sender: TObject);
     procedure OnNodeBlocksChanged(Sender: TObject);
@@ -116,8 +112,9 @@ begin
   TWallet.Keys.OnChanged.Add(OnPrivateKeysChanged);
 
   // fields
-  FAccountsDataSource := TAccountsDataSource.Create(Self);
+  FAccountsDataSource := TMyAccountsDataSource.Create(Self);
   FOperationsDataSource := TAccountsOperationsDataSource.Create(Self);
+  FOperationsDataSource.Accounts := TWallet.Keys.AccountsKeyList.GetAccountNumbers;
   FOperationsHistory := woh7Days;
   FOperationsMode:= womAllAccounts;
   FAccountsMode := wamMyAccounts;
@@ -125,7 +122,7 @@ begin
   // grids
   FAccountsGrid := TVisualGrid.Create(Self);
   FAccountsGrid.SortMode := smMultiColumn;
-  FAccountsGrid.FetchDataInThread := true;
+  FAccountsGrid.FetchDataInThread := false;
   FAccountsGrid.AutoPageSize := True;
   FAccountsGrid.DeselectionType := dtDefault;
   FAccountsGrid.SelectionType := stMultiRow;
@@ -291,44 +288,15 @@ end;
 
 procedure TCTRLWallet.ActivateFirstTime;
 begin
-  FetchUserData;
   RefreshTotals;
-  SetAccountsMode(wamMyAccounts);
-  SetOperationsMode(womAllAccounts);
-end;
-
-procedure TCTRLWallet.FetchUserData;
-var
-  GC : TDisposables;
-
-  function GetAccNo(constref AAccount: TAccount): cardinal; overload;
-  begin
-    Result := AAccount.account;
-  end;
-
-begin
-  FUserData := TUserInterface.Node.Bank.SafeBox.GetUserSummary(TWallet.Keys.AccountsKeyList.ToArray, true);
-  if cbAccounts.ItemIndex = 0 then
-    FAccountsDataSource.FilterKeys := FUserData.Keys;
-  FOperationsDataSource.Accounts := TListTool<TAccount, cardinal>.Transform(FUserData.Accounts, GetAccNo);
-end;
-
-function TCTRLWallet.HasUserDataChanged : boolean;
-var LArr : TArray<TAccount>;
-begin
-  Result := HasUserDataChanged(LArr);
-end;
-
-function TCTRLWallet.HasUserDataChanged(out AChangedAccounts : TArray<TAccount>) : boolean;
-begin
-  AChangedAccounts := TUserInterface.Node.Bank.SafeBox.GetModifiedAccounts(FUserData.Accounts);
-  Result := Length (AChangedAccounts) > 0;
 end;
 
 procedure TCTRLWallet.RefreshTotals;
+var LBalance : TBalanceSummary;
 begin
-  lblTotalPASC.Caption := TAccountComp.FormatMoney(FUserData.TotalPASC);
-  lblTotalPASA.Caption := Format('%d', [FUserData.TotalPASA]);
+  LBalance := TWallet.Keys.AccountsKeyList.GetBalance(true);
+  lblTotalPASC.Caption := TAccountComp.FormatMoney(LBalance.TotalPASC);
+  lblTotalPASA.Caption := Format('%d', [LBalance.TotalPASA]);
 end;
 
 procedure TCTRLWallet.RefreshMyAccountsCombo;
@@ -478,7 +446,7 @@ begin
     case AMode of
       womAllAccounts: begin
         FOperationsGrid.Caption.Text := '';
-        FOperationsDataSource.Accounts := TListTool<TAccount, cardinal>.Transform(FUserData.Accounts, GetAccNo);
+        FOperationsDataSource.Accounts := TWallet.Keys.AccountsKeyList.GetAccountNumbers;
       end;
       womSelectedAccounts:
       begin
@@ -511,10 +479,9 @@ end;
 
 procedure TCTRLWallet.OnUserAccountsChanged;
 begin
-  if NOT TUserInterface.Node.HasBestKnownBlockchainTip then
-    exit; // node syncing
+//  if NOT TUserInterface.Node.HasBestKnownBlockchainTip then
+//    exit; // node syncing
 
-  FetchUserData;
   RefreshTotals;
   FAccountsGrid.RefreshGrid;
   FOperationsGrid.RefreshGrid;

+ 37 - 37
src/pascalcoin_wallet.lpi

@@ -457,121 +457,121 @@
         <IsPartOfProject Value="True"/>
       </Unit80>
       <Unit81>
-        <Filename Value="gui\wizards\operations\UWIZSendPASC_ConfirmSender.pas"/>
+        <Filename Value="gui\wizards\operations\UWIZSendPASC_Confirmation.pas"/>
         <IsPartOfProject Value="True"/>
-        <ComponentName Value="WIZSendPASC_ConfirmSender"/>
+        <ComponentName Value="WIZSendPASC_Confirmation"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
       </Unit81>
       <Unit82>
-        <Filename Value="gui\wizards\operations\UWIZSendPASC_EnterQuantity.pas"/>
+        <Filename Value="gui\wizards\operations\UWIZSendPASC_ConfirmSender.pas"/>
         <IsPartOfProject Value="True"/>
-        <ComponentName Value="WIZSendPASC_EnterQuantity"/>
+        <ComponentName Value="WIZSendPASC_ConfirmSender"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
       </Unit82>
       <Unit83>
-        <Filename Value="gui\wizards\operations\UWIZSendPASC_EnterRecipient.pas"/>
+        <Filename Value="gui\wizards\operations\UWIZSendPASC_EnterQuantity.pas"/>
         <IsPartOfProject Value="True"/>
-        <ComponentName Value="WIZSendPASC_EnterRecipient"/>
+        <ComponentName Value="WIZSendPASC_EnterQuantity"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
       </Unit83>
       <Unit84>
-        <Filename Value="gui\wizards\operations\UWIZChangeKey.pas"/>
+        <Filename Value="gui\wizards\operations\UWIZSendPASC_EnterRecipient.pas"/>
         <IsPartOfProject Value="True"/>
+        <ComponentName Value="WIZSendPASC_EnterRecipient"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
       </Unit84>
       <Unit85>
+        <Filename Value="gui\wizards\operations\UWIZChangeKey.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit85>
+      <Unit86>
         <Filename Value="gui\wizards\operations\UWIZChangeKey_SelectOption.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZChangeKey_SelectOption"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit85>
-      <Unit86>
+      </Unit86>
+      <Unit87>
         <Filename Value="gui\wizards\operations\UWIZChangeKey_EnterKey.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZChangeKey_EnterKey"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit86>
-      <Unit87>
+      </Unit87>
+      <Unit88>
         <Filename Value="gui\wizards\operations\UWIZChangeKey_SelectKey.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZChangeKey_SelectKey"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit87>
-      <Unit88>
+      </Unit88>
+      <Unit89>
         <Filename Value="gui\wizards\operations\UWIZChangeKey_ConfirmAccount.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZChangeKey_ConfirmAccount"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit88>
-      <Unit89>
+      </Unit89>
+      <Unit90>
         <Filename Value="gui\wizards\operations\UWIZChangeKey_Confirmation.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZChangeKey_Confirmation"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit89>
-      <Unit90>
-        <Filename Value="gui-classic\UGridUtils.pas"/>
-        <IsPartOfProject Value="True"/>
       </Unit90>
       <Unit91>
+        <Filename Value="gui-classic\UGridUtils.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit91>
+      <Unit92>
         <Filename Value="gui\wizards\operations\UWIZEnlistAccountForSale_EnterSeller.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZEnlistAccountForSale_EnterSeller"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit91>
-      <Unit92>
+      </Unit92>
+      <Unit93>
         <Filename Value="gui\wizards\operations\UWIZEnlistAccountForSale_EnterSaleAmount.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZEnlistAccountForSale_EnterSaleAmount"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit92>
-      <Unit93>
+      </Unit93>
+      <Unit94>
         <Filename Value="gui\wizards\operations\UWIZEnlistAccountForSale_SelectOption.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZEnlistAccountForSale_SelectOption"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit93>
-      <Unit94>
+      </Unit94>
+      <Unit95>
         <Filename Value="gui\wizards\operations\UWIZEnlistAccountForSale_EnterLockingBlock.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZEnlistAccountForSale_EnterLockingBlock"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit94>
-      <Unit95>
+      </Unit95>
+      <Unit96>
         <Filename Value="gui\wizards\operations\UWIZEnlistAccountForSale_EnterPublicKey.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZEnlistAccountForSale_EnterPublicKey"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit95>
-      <Unit96>
+      </Unit96>
+      <Unit97>
         <Filename Value="gui\wizards\operations\UWIZEnlistAccountForSale_ConfirmAccount.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="WIZEnlistAccountForSale_ConfirmAccount"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit96>
-      <Unit97>
-        <Filename Value="core.utils\UCoreObjects.pas"/>
-        <IsPartOfProject Value="True"/>
       </Unit97>
       <Unit98>
-        <Filename Value="gui\wizards\operations\UWIZOperationConfirmation.pas"/>
+        <Filename Value="core.utils\UCoreObjects.pas"/>
         <IsPartOfProject Value="True"/>
-        <ComponentName Value="WIZOperationConfirmation"/>
-        <HasResources Value="True"/>
-        <ResourceBaseClass Value="Form"/>
       </Unit98>
     </Units>
   </ProjectOptions>