app: report errors in DataStore and fix a warning
authorAlexis Laferrière <alexis.laf@xymus.net>
Wed, 6 Sep 2017 19:46:59 +0000 (15:46 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Fri, 8 Sep 2017 21:18:55 +0000 (17:18 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/android/shared_preferences/shared_preferences_api10.nit
lib/ios/data_store.nit
lib/linux/data_store.nit

index f17661f..0464b67 100644 (file)
@@ -397,7 +397,16 @@ class SharedPreferences
                if serialized_string == "" then return null
 
                var deserializer = new JsonDeserializer(serialized_string)
-               return deserializer.deserialize
+               var deserialized = deserializer.deserialize
+
+               var errors = deserializer.errors
+               if errors.not_empty then
+                       # An update may have broken the versioning compatibility
+                       print_error "{class_name} error at deserialization: {errors.join(", ")}"
+                       return null # Let's be safe
+               end
+
+               return deserialized
        end
 end
 
index c71a16e..e4316ea 100644 (file)
@@ -32,7 +32,16 @@ redef class DataStore
 
                # TODO report errors
                var deserializer = new JsonDeserializer(nsstr.to_s)
-               return deserializer.deserialize
+               var deserialized = deserializer.deserialize
+
+               var errors = deserializer.errors
+               if errors.not_empty then
+                       # An update may have broken the versioning compatibility
+                       print_error "{class_name} error at deserialization: {errors.join(", ")}"
+                       return null # Let's be safe
+               end
+
+               return deserialized
        end
 
        redef fun []=(key, value)
index 6270bd2..95ddeb1 100644 (file)
@@ -66,6 +66,7 @@ redef class DataStore
 
                # Prepare SELECT statement
                var stmt = db.select("* FROM {db_table} WHERE key == {key.to_sql_string}")
+               if stmt == null then return null
 
                # Execute statment
                for row in stmt do
@@ -77,6 +78,13 @@ redef class DataStore
                        var deserializer = new JsonDeserializer(serialized)
                        var deserialized = deserializer.deserialize
 
+                       var errors = deserializer.errors
+                       if errors.not_empty then
+                               # An update may have broken the versioning compatibility
+                               print_error "{class_name} error at deserialization: {errors.join(", ")}"
+                               return null # Let's be safe
+                       end
+
                        return deserialized
                end