|
|
@ -38,7 +38,6 @@ public class GTaskManager {
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 包含关键字synchronized,语言级同步,指明该函数可能运行在多线程的环境下。
|
|
|
|
* 包含关键字synchronized,语言级同步,指明该函数可能运行在多线程的环境下。
|
|
|
|
* 功能:类初始化函数
|
|
|
|
* 功能:类初始化函数
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @return GtaskManger
|
|
|
|
* @return GtaskManger
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public static synchronized GTaskManager getInstance() { //可能运行在多线程环境下,使用语言级同步--synchronized
|
|
|
|
public static synchronized GTaskManager getInstance() { //可能运行在多线程环境下,使用语言级同步--synchronized
|
|
|
@ -50,7 +49,6 @@ public class GTaskManager {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 包含关键字synchronized,语言级同步,指明该函数可能运行在多线程的环境下。
|
|
|
|
* 包含关键字synchronized,语言级同步,指明该函数可能运行在多线程的环境下。
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @param activity
|
|
|
|
* @param activity
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public synchronized void setActivityContext(Activity activity) {
|
|
|
|
public synchronized void setActivityContext(Activity activity) {
|
|
|
@ -61,7 +59,6 @@ public class GTaskManager {
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 核心函数
|
|
|
|
* 核心函数
|
|
|
|
* 功能:实现了本地同步操作和远端同步操作
|
|
|
|
* 功能:实现了本地同步操作和远端同步操作
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @param context-----获取上下文
|
|
|
|
* @param context-----获取上下文
|
|
|
|
* @param asyncTask-------用于同步的异步操作类
|
|
|
|
* @param asyncTask-------用于同步的异步操作类
|
|
|
|
* @return int
|
|
|
|
* @return int
|
|
|
@ -126,7 +123,6 @@ public class GTaskManager {
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
*功能:初始化GtaskList,获取Google上的JSONtasklist转为本地TaskList。
|
|
|
|
*功能:初始化GtaskList,获取Google上的JSONtasklist转为本地TaskList。
|
|
|
|
*获得的数据存储在mMetaList,mGTaskListHashMap,mGTaskHashMap
|
|
|
|
*获得的数据存储在mMetaList,mGTaskListHashMap,mGTaskHashMap
|
|
|
|
*@author TTS
|
|
|
|
|
|
|
|
*@exception NetworkFailureException
|
|
|
|
*@exception NetworkFailureException
|
|
|
|
*@return void
|
|
|
|
*@return void
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -320,10 +316,8 @@ public class GTaskManager {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/*
|
|
|
|
* 功能:
|
|
|
|
* 同步文件夹的方法,抛出网络异常
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @throws NetworkFailureException
|
|
|
|
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private void syncFolder() throws NetworkFailureException {
|
|
|
|
private void syncFolder() throws NetworkFailureException {
|
|
|
|
Cursor c = null;
|
|
|
|
Cursor c = null;
|
|
|
@ -335,7 +329,7 @@ public class GTaskManager {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// for root folder
|
|
|
|
// 同步根目录
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI,
|
|
|
|
c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI,
|
|
|
|
Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null);
|
|
|
|
Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null);
|
|
|
@ -347,7 +341,7 @@ public class GTaskManager {
|
|
|
|
mGTaskHashMap.remove(gid);
|
|
|
|
mGTaskHashMap.remove(gid);
|
|
|
|
mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER);
|
|
|
|
mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER);
|
|
|
|
mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid);
|
|
|
|
mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid);
|
|
|
|
// for system folder, only update remote name if necessary
|
|
|
|
// 仅在必要时更新远程名称
|
|
|
|
if (!node.getName().equals(
|
|
|
|
if (!node.getName().equals(
|
|
|
|
GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT))
|
|
|
|
GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT))
|
|
|
|
doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c);
|
|
|
|
doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c);
|
|
|
@ -364,11 +358,11 @@ public class GTaskManager {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// for call-note folder
|
|
|
|
// 同步通话记录文件夹
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)",
|
|
|
|
c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)",
|
|
|
|
new String[] {
|
|
|
|
new String[] {
|
|
|
|
String.valueOf(Notes.ID_CALL_RECORD_FOLDER)
|
|
|
|
String.valueOf(Notes.ID_CALL_RECORD_FOLDER)
|
|
|
|
}, null);
|
|
|
|
}, null);
|
|
|
|
if (c != null) {
|
|
|
|
if (c != null) {
|
|
|
|
if (c.moveToNext()) {
|
|
|
|
if (c.moveToNext()) {
|
|
|
@ -378,8 +372,7 @@ public class GTaskManager {
|
|
|
|
mGTaskHashMap.remove(gid);
|
|
|
|
mGTaskHashMap.remove(gid);
|
|
|
|
mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER);
|
|
|
|
mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER);
|
|
|
|
mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid);
|
|
|
|
mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid);
|
|
|
|
// for system folder, only update remote name if
|
|
|
|
// 仅在必要时更新远程名称
|
|
|
|
// necessary
|
|
|
|
|
|
|
|
if (!node.getName().equals(
|
|
|
|
if (!node.getName().equals(
|
|
|
|
GTaskStringUtils.MIUI_FOLDER_PREFFIX
|
|
|
|
GTaskStringUtils.MIUI_FOLDER_PREFFIX
|
|
|
|
+ GTaskStringUtils.FOLDER_CALL_NOTE))
|
|
|
|
+ GTaskStringUtils.FOLDER_CALL_NOTE))
|
|
|
@ -398,7 +391,7 @@ public class GTaskManager {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// for local existing folders
|
|
|
|
// 同步本地已存在的文件夹
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE,
|
|
|
|
c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE,
|
|
|
|
"(type=? AND parent_id<>?)", new String[] {
|
|
|
|
"(type=? AND parent_id<>?)", new String[] {
|
|
|
@ -415,10 +408,10 @@ public class GTaskManager {
|
|
|
|
syncType = node.getSyncAction(c);
|
|
|
|
syncType = node.getSyncAction(c);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) {
|
|
|
|
if (c.getString(SqlNote.GTASK_ID_COLUMN).trim().length() == 0) {
|
|
|
|
// local add
|
|
|
|
// 本地添加
|
|
|
|
syncType = Node.SYNC_ACTION_ADD_REMOTE;
|
|
|
|
syncType = Node.SYNC_ACTION_ADD_REMOTE;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// remote delete
|
|
|
|
// 远程删除
|
|
|
|
syncType = Node.SYNC_ACTION_DEL_LOCAL;
|
|
|
|
syncType = Node.SYNC_ACTION_DEL_LOCAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -434,7 +427,7 @@ public class GTaskManager {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// for remote add folders
|
|
|
|
// 同步远程添加的文件夹
|
|
|
|
Iterator<Map.Entry<String, TaskList>> iter = mGTaskListHashMap.entrySet().iterator();
|
|
|
|
Iterator<Map.Entry<String, TaskList>> iter = mGTaskListHashMap.entrySet().iterator();
|
|
|
|
while (iter.hasNext()) {
|
|
|
|
while (iter.hasNext()) {
|
|
|
|
Map.Entry<String, TaskList> entry = iter.next();
|
|
|
|
Map.Entry<String, TaskList> entry = iter.next();
|
|
|
@ -452,12 +445,14 @@ public class GTaskManager {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 功能:syncType分类,addLocalNode,addRemoteNode,deleteNode,updateLocalNode,updateRemoteNode
|
|
|
|
* 功能:syncType分类,addLocalNode,addRemoteNode,deleteNode,updateLocalNode,updateRemoteNode
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @param syncType
|
|
|
|
* @param syncType
|
|
|
|
* @param node
|
|
|
|
* @param node
|
|
|
|
* @param c
|
|
|
|
* @param c
|
|
|
|
* @throws NetworkFailureException
|
|
|
|
* @throws NetworkFailureException
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* 执行内容同步操作
|
|
|
|
|
|
|
|
*/
|
|
|
|
private void doContentSync(int syncType, Node node, Cursor c) throws NetworkFailureException {
|
|
|
|
private void doContentSync(int syncType, Node node, Cursor c) throws NetworkFailureException {
|
|
|
|
if (mCancelled) {
|
|
|
|
if (mCancelled) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -466,12 +461,15 @@ public class GTaskManager {
|
|
|
|
MetaData meta;
|
|
|
|
MetaData meta;
|
|
|
|
switch (syncType) {
|
|
|
|
switch (syncType) {
|
|
|
|
case Node.SYNC_ACTION_ADD_LOCAL:
|
|
|
|
case Node.SYNC_ACTION_ADD_LOCAL:
|
|
|
|
|
|
|
|
// 添加本地节点
|
|
|
|
addLocalNode(node);
|
|
|
|
addLocalNode(node);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Node.SYNC_ACTION_ADD_REMOTE:
|
|
|
|
case Node.SYNC_ACTION_ADD_REMOTE:
|
|
|
|
|
|
|
|
// 添加远程节点
|
|
|
|
addRemoteNode(node, c);
|
|
|
|
addRemoteNode(node, c);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Node.SYNC_ACTION_DEL_LOCAL:
|
|
|
|
case Node.SYNC_ACTION_DEL_LOCAL:
|
|
|
|
|
|
|
|
// 获取本地删除节点的元数据,然后删除
|
|
|
|
meta = mMetaHashMap.get(c.getString(SqlNote.GTASK_ID_COLUMN));
|
|
|
|
meta = mMetaHashMap.get(c.getString(SqlNote.GTASK_ID_COLUMN));
|
|
|
|
if (meta != null) {
|
|
|
|
if (meta != null) {
|
|
|
|
GTaskClient.getInstance().deleteNode(meta);
|
|
|
|
GTaskClient.getInstance().deleteNode(meta);
|
|
|
@ -479,6 +477,7 @@ public class GTaskManager {
|
|
|
|
mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN));
|
|
|
|
mLocalDeleteIdMap.add(c.getLong(SqlNote.ID_COLUMN));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Node.SYNC_ACTION_DEL_REMOTE:
|
|
|
|
case Node.SYNC_ACTION_DEL_REMOTE:
|
|
|
|
|
|
|
|
// 获取远程删除节点的元数据,然后删除节点
|
|
|
|
meta = mMetaHashMap.get(node.getGid());
|
|
|
|
meta = mMetaHashMap.get(node.getGid());
|
|
|
|
if (meta != null) {
|
|
|
|
if (meta != null) {
|
|
|
|
GTaskClient.getInstance().deleteNode(meta);
|
|
|
|
GTaskClient.getInstance().deleteNode(meta);
|
|
|
@ -486,29 +485,34 @@ public class GTaskManager {
|
|
|
|
GTaskClient.getInstance().deleteNode(node);
|
|
|
|
GTaskClient.getInstance().deleteNode(node);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Node.SYNC_ACTION_UPDATE_LOCAL:
|
|
|
|
case Node.SYNC_ACTION_UPDATE_LOCAL:
|
|
|
|
|
|
|
|
// 更新本地节点
|
|
|
|
updateLocalNode(node, c);
|
|
|
|
updateLocalNode(node, c);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Node.SYNC_ACTION_UPDATE_REMOTE:
|
|
|
|
case Node.SYNC_ACTION_UPDATE_REMOTE:
|
|
|
|
|
|
|
|
// 更新远程节点
|
|
|
|
updateRemoteNode(node, c);
|
|
|
|
updateRemoteNode(node, c);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Node.SYNC_ACTION_UPDATE_CONFLICT:
|
|
|
|
case Node.SYNC_ACTION_UPDATE_CONFLICT:
|
|
|
|
// merging both modifications maybe a good idea
|
|
|
|
// 合并两者的修改,目前仅简单使用本地更新
|
|
|
|
// right now just use local update simply
|
|
|
|
|
|
|
|
updateRemoteNode(node, c);
|
|
|
|
updateRemoteNode(node, c);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Node.SYNC_ACTION_NONE:
|
|
|
|
case Node.SYNC_ACTION_NONE:
|
|
|
|
|
|
|
|
// 无动作
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Node.SYNC_ACTION_ERROR:
|
|
|
|
case Node.SYNC_ACTION_ERROR:
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
throw new ActionFailureException("unkown sync action type");
|
|
|
|
// 未知的同步操作类型,抛出异常
|
|
|
|
|
|
|
|
throw new ActionFailureException("unknown sync action type");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 功能:本地增加Node
|
|
|
|
|
|
|
|
* @author TTS
|
|
|
|
/*
|
|
|
|
* @param node
|
|
|
|
* 功能描述:添加本地节点
|
|
|
|
* @throws NetworkFailureException
|
|
|
|
* 参数:node - 节点对象
|
|
|
|
|
|
|
|
* 返回:无
|
|
|
|
|
|
|
|
* 异常:NetworkFailureException - 网络异常
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private void addLocalNode(Node node) throws NetworkFailureException {
|
|
|
|
private void addLocalNode(Node node) throws NetworkFailureException {
|
|
|
|
if (mCancelled) {
|
|
|
|
if (mCancelled) {
|
|
|
@ -516,33 +520,42 @@ public class GTaskManager {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SqlNote sqlNote;
|
|
|
|
SqlNote sqlNote;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果节点为任务列表
|
|
|
|
if (node instanceof TaskList) {
|
|
|
|
if (node instanceof TaskList) {
|
|
|
|
if (node.getName().equals(
|
|
|
|
if (node.getName().equals(
|
|
|
|
GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) {
|
|
|
|
GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) {
|
|
|
|
|
|
|
|
// 根据任务列表的名称判断是否为默认文件夹,创建对应的 SqlNote 对象
|
|
|
|
sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER);
|
|
|
|
sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER);
|
|
|
|
} else if (node.getName().equals(
|
|
|
|
} else if (node.getName().equals(
|
|
|
|
GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) {
|
|
|
|
GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) {
|
|
|
|
|
|
|
|
// 根据任务列表的名称判断是否为通话记录文件夹,创建对应的 SqlNote 对象
|
|
|
|
sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER);
|
|
|
|
sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 其他情况创建普通任务列表对应的 SqlNote 对象
|
|
|
|
sqlNote = new SqlNote(mContext);
|
|
|
|
sqlNote = new SqlNote(mContext);
|
|
|
|
sqlNote.setContent(node.getLocalJSONFromContent());
|
|
|
|
sqlNote.setContent(node.getLocalJSONFromContent());
|
|
|
|
sqlNote.setParentId(Notes.ID_ROOT_FOLDER);
|
|
|
|
sqlNote.setParentId(Notes.ID_ROOT_FOLDER);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 如果节点为任务
|
|
|
|
sqlNote = new SqlNote(mContext);
|
|
|
|
sqlNote = new SqlNote(mContext);
|
|
|
|
JSONObject js = node.getLocalJSONFromContent();
|
|
|
|
JSONObject js = node.getLocalJSONFromContent();
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
|
|
|
|
// 处理 META_HEAD_NOTE 中的 ID,确保本地数据库中不存在该 ID
|
|
|
|
if (js.has(GTaskStringUtils.META_HEAD_NOTE)) {
|
|
|
|
if (js.has(GTaskStringUtils.META_HEAD_NOTE)) {
|
|
|
|
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
|
|
|
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
|
|
|
|
if (note.has(NoteColumns.ID)) {
|
|
|
|
if (note.has(NoteColumns.ID)) {
|
|
|
|
long id = note.getLong(NoteColumns.ID);
|
|
|
|
long id = note.getLong(NoteColumns.ID);
|
|
|
|
if (DataUtils.existInNoteDatabase(mContentResolver, id)) {
|
|
|
|
if (DataUtils.existInNoteDatabase(mContentResolver, id)) {
|
|
|
|
// the id is not available, have to create a new one
|
|
|
|
// 如果 ID 在本地数据库中存在,则移除该 ID,创建新的任务 ID
|
|
|
|
note.remove(NoteColumns.ID);
|
|
|
|
note.remove(NoteColumns.ID);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理 META_HEAD_DATA 中的 ID,确保本地数据库中不存在该 ID
|
|
|
|
if (js.has(GTaskStringUtils.META_HEAD_DATA)) {
|
|
|
|
if (js.has(GTaskStringUtils.META_HEAD_DATA)) {
|
|
|
|
JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
|
|
|
|
JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
|
|
|
|
for (int i = 0; i < dataArray.length(); i++) {
|
|
|
|
for (int i = 0; i < dataArray.length(); i++) {
|
|
|
@ -550,20 +563,21 @@ public class GTaskManager {
|
|
|
|
if (data.has(DataColumns.ID)) {
|
|
|
|
if (data.has(DataColumns.ID)) {
|
|
|
|
long dataId = data.getLong(DataColumns.ID);
|
|
|
|
long dataId = data.getLong(DataColumns.ID);
|
|
|
|
if (DataUtils.existInDataDatabase(mContentResolver, dataId)) {
|
|
|
|
if (DataUtils.existInDataDatabase(mContentResolver, dataId)) {
|
|
|
|
// the data id is not available, have to create
|
|
|
|
// 如果 ID 在本地数据库中存在,则移除该 ID,创建新的数据 ID
|
|
|
|
// a new one
|
|
|
|
|
|
|
|
data.remove(DataColumns.ID);
|
|
|
|
data.remove(DataColumns.ID);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (JSONException e) {
|
|
|
|
} catch (JSONException e) {
|
|
|
|
Log.w(TAG, e.toString());
|
|
|
|
Log.w(TAG, e.toString());
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置 SqlNote 对象的内容为节点的本地 JSON 表示
|
|
|
|
sqlNote.setContent(js);
|
|
|
|
sqlNote.setContent(js);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取节点的父节点的本地 ID,用于设置 SqlNote 对象的父 ID
|
|
|
|
Long parentId = mGidToNid.get(((Task) node).getParent().getGid());
|
|
|
|
Long parentId = mGidToNid.get(((Task) node).getParent().getGid());
|
|
|
|
if (parentId == null) {
|
|
|
|
if (parentId == null) {
|
|
|
|
Log.e(TAG, "cannot find task's parent id locally");
|
|
|
|
Log.e(TAG, "cannot find task's parent id locally");
|
|
|
@ -572,21 +586,21 @@ public class GTaskManager {
|
|
|
|
sqlNote.setParentId(parentId.longValue());
|
|
|
|
sqlNote.setParentId(parentId.longValue());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// create the local node
|
|
|
|
// 设置 SqlNote 对象的 GTask ID,并提交到本地数据库
|
|
|
|
sqlNote.setGtaskId(node.getGid());
|
|
|
|
sqlNote.setGtaskId(node.getGid());
|
|
|
|
sqlNote.commit(false);
|
|
|
|
sqlNote.commit(false);
|
|
|
|
|
|
|
|
|
|
|
|
// update gid-nid mapping
|
|
|
|
// 更新 GTask ID 到本地 ID 的映射关系
|
|
|
|
mGidToNid.put(node.getGid(), sqlNote.getId());
|
|
|
|
mGidToNid.put(node.getGid(), sqlNote.getId());
|
|
|
|
mNidToGid.put(sqlNote.getId(), node.getGid());
|
|
|
|
mNidToGid.put(sqlNote.getId(), node.getGid());
|
|
|
|
|
|
|
|
|
|
|
|
// update meta
|
|
|
|
// 更新远程 Meta 信息
|
|
|
|
updateRemoteMeta(node.getGid(), sqlNote);
|
|
|
|
updateRemoteMeta(node.getGid(), sqlNote);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 功能:update本地node
|
|
|
|
* 功能:update本地node
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @param node
|
|
|
|
* @param node
|
|
|
|
* ----同步操作的基础数据类型
|
|
|
|
* ----同步操作的基础数据类型
|
|
|
|
* @param c
|
|
|
|
* @param c
|
|
|
@ -619,7 +633,6 @@ public class GTaskManager {
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 功能:远程增加Node
|
|
|
|
* 功能:远程增加Node
|
|
|
|
* 需要updateRemoteMeta
|
|
|
|
* 需要updateRemoteMeta
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @param node
|
|
|
|
* @param node
|
|
|
|
* ----同步操作的基础数据类型
|
|
|
|
* ----同步操作的基础数据类型
|
|
|
|
* @param c
|
|
|
|
* @param c
|
|
|
@ -703,7 +716,6 @@ public class GTaskManager {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 功能:更新远端的Node,包含meta更新(updateRemoteMeta)
|
|
|
|
* 功能:更新远端的Node,包含meta更新(updateRemoteMeta)
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @param node
|
|
|
|
* @param node
|
|
|
|
* ----同步操作的基础数据类型
|
|
|
|
* ----同步操作的基础数据类型
|
|
|
|
* @param c
|
|
|
|
* @param c
|
|
|
@ -755,7 +767,6 @@ public class GTaskManager {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 功能:升级远程meta。 meta---元数据----计算机文件系统管理数据---管理数据的数据。
|
|
|
|
* 功能:升级远程meta。 meta---元数据----计算机文件系统管理数据---管理数据的数据。
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @param gid
|
|
|
|
* @param gid
|
|
|
|
* ---GoogleID为String类型
|
|
|
|
* ---GoogleID为String类型
|
|
|
|
* @param sqlNote
|
|
|
|
* @param sqlNote
|
|
|
@ -780,7 +791,6 @@ public class GTaskManager {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 功能:刷新本地,给sync的ID对应上最后更改过的对象
|
|
|
|
* 功能:刷新本地,给sync的ID对应上最后更改过的对象
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @return void
|
|
|
|
* @return void
|
|
|
|
* @throws NetworkFailureException
|
|
|
|
* @throws NetworkFailureException
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -830,7 +840,6 @@ public class GTaskManager {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 功能:获取同步账号,mAccount.name
|
|
|
|
* 功能:获取同步账号,mAccount.name
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
* @return String
|
|
|
|
* @return String
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public String getSyncAccount() {
|
|
|
|
public String getSyncAccount() {
|
|
|
@ -839,7 +848,6 @@ public class GTaskManager {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 功能:取消同步,置mCancelled为true
|
|
|
|
* 功能:取消同步,置mCancelled为true
|
|
|
|
* @author TTS
|
|
|
|
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public void cancelSync() {
|
|
|
|
public void cancelSync() {
|
|
|
|
mCancelled = true;
|
|
|
|
mCancelled = true;
|
|
|
|