mirror of https://github.com/tasks/tasks
Implement UserData message
parent
e7613f0961
commit
ac1fb8fc2f
@ -0,0 +1,97 @@
|
|||||||
|
package com.todoroo.astrid.actfm.sync.messages;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.todoroo.andlib.data.AbstractModel;
|
||||||
|
import com.todoroo.andlib.data.Property;
|
||||||
|
import com.todoroo.andlib.data.Property.DoubleProperty;
|
||||||
|
import com.todoroo.andlib.data.Property.IntegerProperty;
|
||||||
|
import com.todoroo.andlib.data.Property.LongProperty;
|
||||||
|
import com.todoroo.andlib.data.Property.PropertyVisitor;
|
||||||
|
import com.todoroo.andlib.data.Property.StringProperty;
|
||||||
|
import com.todoroo.andlib.utility.DateUtilities;
|
||||||
|
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
|
||||||
|
import com.todoroo.astrid.data.Task;
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("nls")
|
||||||
|
public class JSONChangeToPropertyVisitor implements PropertyVisitor<Void, String> {
|
||||||
|
|
||||||
|
private static final String ERROR_TAG = "actfm-make-changes";
|
||||||
|
|
||||||
|
private final AbstractModel model;
|
||||||
|
private final JSONObject data;
|
||||||
|
|
||||||
|
public JSONChangeToPropertyVisitor(AbstractModel model, JSONObject data) {
|
||||||
|
this.model = model;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visitInteger(Property<Integer> property, String key) {
|
||||||
|
try {
|
||||||
|
int value = data.getInt(key);
|
||||||
|
model.setValue((IntegerProperty) property, value);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
Log.e(ERROR_TAG, "Error reading int value with key " + key + " from JSON " + data, e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visitLong(Property<Long> property, String key) {
|
||||||
|
try {
|
||||||
|
long value = data.optLong(key, 0);
|
||||||
|
if (property.checkFlag(Property.PROP_FLAG_USER_ID) && value == ActFmPreferenceService.userId())
|
||||||
|
value = 0;
|
||||||
|
else if (property.checkFlag(Property.PROP_FLAG_DATE)) {
|
||||||
|
String valueString = data.getString(key);
|
||||||
|
try {
|
||||||
|
value = DateUtilities.parseIso8601(valueString).getTime();
|
||||||
|
if (Task.DUE_DATE.equals(property)) {
|
||||||
|
boolean hasDueTime = valueString.endsWith("Z");
|
||||||
|
value = Task.createDueDate(hasDueTime ? Task.URGENCY_SPECIFIC_DAY_TIME : Task.URGENCY_SPECIFIC_DAY, value);
|
||||||
|
}
|
||||||
|
} catch (Exception e){
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
model.setValue((LongProperty) property, value);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
Log.e(ERROR_TAG, "Error reading long value with key " + key + " from JSON " + data, e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visitDouble(Property<Double> property, String key) {
|
||||||
|
try {
|
||||||
|
double value = data.getDouble(key);
|
||||||
|
model.setValue((DoubleProperty) property, value);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
Log.e(ERROR_TAG, "Error reading double value with key " + key + " from JSON " + data, e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visitString(Property<String> property, String key) {
|
||||||
|
try {
|
||||||
|
String value = data.getString(key);
|
||||||
|
model.setValue((StringProperty) property, value);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
try {
|
||||||
|
JSONObject object = data.getJSONObject(key);
|
||||||
|
if (object != null)
|
||||||
|
model.setValue((StringProperty) property, object.toString());
|
||||||
|
} catch (JSONException e2) {
|
||||||
|
Log.e(ERROR_TAG, "Error reading JSON value with key " + key + " from JSON " + data, e);
|
||||||
|
}
|
||||||
|
Log.e(ERROR_TAG, "Error reading string value with key " + key + " from JSON " + data, e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
package com.todoroo.astrid.actfm.sync.messages;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.todoroo.andlib.data.Property;
|
||||||
|
import com.todoroo.andlib.data.Property.StringProperty;
|
||||||
|
import com.todoroo.astrid.core.PluginServices;
|
||||||
|
import com.todoroo.astrid.dao.UserDao;
|
||||||
|
import com.todoroo.astrid.data.RemoteModel;
|
||||||
|
import com.todoroo.astrid.data.SyncFlags;
|
||||||
|
import com.todoroo.astrid.data.User;
|
||||||
|
|
||||||
|
public class UserData extends ServerToClientMessage {
|
||||||
|
|
||||||
|
private static final String ERROR_TAG = "actfm-user-data"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
public UserData(JSONObject json) {
|
||||||
|
super(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processMessage() {
|
||||||
|
UserDao userDao = PluginServices.getUserDao();
|
||||||
|
try {
|
||||||
|
String uuid = json.getString("uuid"); //$NON-NLS-1$
|
||||||
|
User model = new User();
|
||||||
|
JSONChangeToPropertyVisitor visitor = new JSONChangeToPropertyVisitor(model, json);
|
||||||
|
Iterator<String> keys = json.keys();
|
||||||
|
while (keys.hasNext()) {
|
||||||
|
String column = keys.next();
|
||||||
|
Property<?> property = NameMaps.serverColumnNameToLocalProperty(NameMaps.TABLE_ID_USERS, column);
|
||||||
|
if (property != null) { // Unsupported property
|
||||||
|
property.accept(visitor, column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StringProperty uuidProperty = (StringProperty) NameMaps.serverColumnNameToLocalProperty(NameMaps.TABLE_ID_USERS, "uuid"); //$NON-NLS-1$
|
||||||
|
if (!model.getSetValues().containsKey(uuidProperty.name))
|
||||||
|
model.setValue(uuidProperty, uuid);
|
||||||
|
|
||||||
|
if (model.getSetValues().size() > 0) {
|
||||||
|
if (userDao.update(RemoteModel.UUID_PROPERTY.eq(uuid), model) <= 0) { // If update doesn't update rows. create a new model
|
||||||
|
model.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
|
||||||
|
userDao.createNew(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (JSONException e) {
|
||||||
|
Log.e(ERROR_TAG, "Error parsing UserData JSON " + json, e); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue