From 8024947f9bffee38e2955a2541df6f70c531efde Mon Sep 17 00:00:00 2001
From: Frantisek Simon <frantisek.simon@nic.cz>
Date: Fri, 22 Jan 2016 11:18:36 +0100
Subject: [PATCH] #78 Only download user on non game screens every 30 sec

---
 .../cz/nic/tablexia/TablexiaApplication.java  | 12 +++++++++++
 .../DownloadUserSynchronizationEvent.java     | 21 +++++++++++++++++++
 .../screen/AbstractTablexiaScreen.java        |  9 ++++++--
 .../sync/RestSynchronizationService.java      |  4 ++--
 .../nic/tablexia/sync/work/DownloadUser.java  |  5 +++++
 5 files changed, 47 insertions(+), 4 deletions(-)
 create mode 100644 core/src/cz/nic/tablexia/bus/event/DownloadUserSynchronizationEvent.java

diff --git a/core/src/cz/nic/tablexia/TablexiaApplication.java b/core/src/cz/nic/tablexia/TablexiaApplication.java
index fdadf9878..a2cfdaede 100644
--- a/core/src/cz/nic/tablexia/TablexiaApplication.java
+++ b/core/src/cz/nic/tablexia/TablexiaApplication.java
@@ -31,6 +31,7 @@ import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.bus.ApplicationBus.ApplicationEvent;
 import cz.nic.tablexia.bus.event.DeleteUserSynchronizationEvent;
 import cz.nic.tablexia.bus.event.DimmerControlEvent;
+import cz.nic.tablexia.bus.event.DownloadUserSynchronizationEvent;
 import cz.nic.tablexia.bus.event.StartFullSynchronizationEvent;
 import cz.nic.tablexia.bus.event.StartIncrementalSynchronizationEvent;
 import cz.nic.tablexia.debug.DebugInfo;
@@ -46,6 +47,7 @@ import cz.nic.tablexia.screen.AbstractTablexiaScreen.ScreenLoadingListener;
 import cz.nic.tablexia.shared.model.User;
 import cz.nic.tablexia.sync.RestSynchronizationService;
 import cz.nic.tablexia.sync.work.DeleteUser;
+import cz.nic.tablexia.sync.work.DownloadUser;
 import cz.nic.tablexia.sync.work.PushDataToServer;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.ui.TablexiaButton;
@@ -799,4 +801,14 @@ public abstract class TablexiaApplication implements ApplicationListener {
             RestSynchronizationService.doSyncWork(new DeleteUser(syncEvent.getUser()));
         }
     }
+
+    @Handler
+    public void handleSynchronizationEvent(DownloadUserSynchronizationEvent syncEvent) {
+        if (syncEvent.getUser().getUuid() == null || syncEvent.getUser().getUuid().isEmpty()) {
+            Log.err(this.getClass(), "Calling download user without uuid");
+            return;
+        }
+        Log.debug(this.getClass(), "Download user request for uuid: " + syncEvent.getUser().getUuid());
+        RestSynchronizationService.doSyncWork(new DownloadUser(syncEvent.getUser().getUuid()));
+    }
 }
diff --git a/core/src/cz/nic/tablexia/bus/event/DownloadUserSynchronizationEvent.java b/core/src/cz/nic/tablexia/bus/event/DownloadUserSynchronizationEvent.java
new file mode 100644
index 000000000..2bc094385
--- /dev/null
+++ b/core/src/cz/nic/tablexia/bus/event/DownloadUserSynchronizationEvent.java
@@ -0,0 +1,21 @@
+package cz.nic.tablexia.bus.event;
+
+import cz.nic.tablexia.bus.ApplicationBus;
+import cz.nic.tablexia.shared.model.User;
+
+/**
+ * Created by frantisek on 22.1.16.
+ */
+public class DownloadUserSynchronizationEvent implements ApplicationBus.ApplicationEvent {
+
+    private final User user;
+
+    public DownloadUserSynchronizationEvent(User user) {
+        this.user = user;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+}
diff --git a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
index a74ef18be..3d076dc26 100644
--- a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
+++ b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
@@ -36,6 +36,7 @@ import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.TablexiaStorage;
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.bus.ApplicationBus.ApplicationEvent;
+import cz.nic.tablexia.bus.event.DownloadUserSynchronizationEvent;
 import cz.nic.tablexia.bus.event.StartFullSynchronizationEvent;
 import cz.nic.tablexia.bus.event.StartIncrementalSynchronizationEvent;
 import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
@@ -457,12 +458,16 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
             stage.draw();
         }
 
-        if (lastTimeForUserSync != null && getSelectedUser() != null && canSyncOnResume() && System.currentTimeMillis() - lastTimeForUserSync > USER_SYNC_DELAY) {
+        if (lastTimeForUserSync != null && hasSynchronizedUser() && canSyncOnResume() && System.currentTimeMillis() - lastTimeForUserSync > USER_SYNC_DELAY) {
             lastTimeForUserSync = System.currentTimeMillis();
-            ApplicationBus.getInstance().publishAsync(new StartIncrementalSynchronizationEvent(getSelectedUser().getId()));
+            ApplicationBus.getInstance().publishAsync(new DownloadUserSynchronizationEvent(getSelectedUser()));
         }
     }
 
+    private boolean hasSynchronizedUser() {
+        return getSelectedUser() != null && getSelectedUser().getUuid() != null && !getSelectedUser().getUuid().isEmpty();
+    }
+
     public void addDisposable(Disposable disposable) {
         disposables.add(disposable);
     }
diff --git a/core/src/cz/nic/tablexia/sync/RestSynchronizationService.java b/core/src/cz/nic/tablexia/sync/RestSynchronizationService.java
index 42fb4fd52..105e8ddd9 100644
--- a/core/src/cz/nic/tablexia/sync/RestSynchronizationService.java
+++ b/core/src/cz/nic/tablexia/sync/RestSynchronizationService.java
@@ -50,10 +50,10 @@ public class RestSynchronizationService {
     }
 
     public static void doSyncWork(SyncWork work) {
-        /*if (Tablexia.connectionManager.isUsingMobileData()) {
+        if (Tablexia.connectionManager.isUsingMobileData()) {
             Log.debug(RestSynchronizationService.class, "Using mobile data connection - synchronization disabled");
             return;
-        }*/
+        }
         work.send(new RestSynchronizationService(work.getUrl(), work.getHttpMethod(), work));
     }
 
diff --git a/core/src/cz/nic/tablexia/sync/work/DownloadUser.java b/core/src/cz/nic/tablexia/sync/work/DownloadUser.java
index 117673cd3..c070836e1 100644
--- a/core/src/cz/nic/tablexia/sync/work/DownloadUser.java
+++ b/core/src/cz/nic/tablexia/sync/work/DownloadUser.java
@@ -38,6 +38,11 @@ public class DownloadUser extends SyncWork {
         json.setIgnoreUnknownFields(true);
         User user = json.fromJson(User.class, userJson);
 
+        if (user == null) {
+            Log.err(this.getClass(), "Failed to deserialize user from JSON");
+            return;
+        }
+
         long start = System.currentTimeMillis();
         user.setId(UserDAO.importUser(user));
         long finish = System.currentTimeMillis();
-- 
GitLab