From cf9514bb576bc3d10a0a852ce97f3191f28683ee Mon Sep 17 00:00:00 2001
From: Inso <insomniak.fr@gmail.com>
Date: Fri, 29 Jan 2016 22:36:06 +0100
Subject: [PATCH] Fasten up models list refresh with asyncio.gather

---
 src/sakia/models/identities.py |  8 ++++++--
 src/sakia/models/txhistory.py  | 17 +++++++++++------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/sakia/models/identities.py b/src/sakia/models/identities.py
index c49e44f8..ef721155 100644
--- a/src/sakia/models/identities.py
+++ b/src/sakia/models/identities.py
@@ -149,9 +149,13 @@ class IdentitiesTableModel(QAbstractTableModel):
         self.endResetModel()
         self.beginResetModel()
         identities_data = []
+        requests_coro = []
         for identity in identities:
-            data = await self.identity_data(identity)
-            identities_data.append(data)
+            coro = asyncio.ensure_future(self.identity_data(identity))
+            requests_coro.append(coro)
+
+        identities_data = await asyncio.gather(*requests_coro)
+
         if len(identities) > 0:
             try:
                 parameters = await self.community.parameters()
diff --git a/src/sakia/models/txhistory.py b/src/sakia/models/txhistory.py
index a463b6af..79b6d74e 100644
--- a/src/sakia/models/txhistory.py
+++ b/src/sakia/models/txhistory.py
@@ -300,17 +300,22 @@ class HistoryTableModel(QAbstractTableModel):
         self.beginResetModel()
         transfers_data = []
         if self.community:
+            requests_coro = []
             for transfer in self.transfers():
-                data = None
+                coro = None
                 if type(transfer) is Transfer:
                     if transfer.metadata['issuer'] == self.account.pubkey:
-                        data = await self.data_sent(transfer)
+                        coro = asyncio.ensure_future(self.data_sent(transfer))
                     else:
-                        data = await self.data_received(transfer)
+                        coro = asyncio.ensure_future(self.data_received(transfer))
                 elif type(transfer) is dict:
-                    data = await self.data_dividend(transfer)
-                if data:
-                    transfers_data.append(data)
+                    coro = asyncio.ensure_future(self.data_dividend(transfer))
+                if coro:
+                    requests_coro.append(coro)
+
+            data_list = await asyncio.gather(*requests_coro)
+            for data in data_list:
+                transfers_data.append(data)
         self.transfers_data = transfers_data
         self.endResetModel()
 
-- 
GitLab