package com.talk.demo.sync;
import android.text.TextUtils;
import android.util.Log;
import com.talk.demo.persistence.DBManager;
import com.talk.demo.persistence.TimeRecord;
import com.talk.demo.types.Group;
import com.talk.demo.types.Record;
import com.talk.demo.util.NetworkUtilities;
import java.util.ArrayList;
import java.util.List;
public class SyncCompaign {
private static String TAG = "SyncCompaign";
private static String myLog(TimeRecord tr) {
return tr.getTimeRecord().toString();
}
/*
* add for get dirty records
*/
public static List<Record> getDirtyRecords(DBManager db) {
List<Record> dirtyTimes = new ArrayList<Record>() ;
/*
* get dirty records from db
*/
List<TimeRecord> trlist = db.queryTime();
for(TimeRecord tr: trlist) {
Log.d(TAG, "time record: "+myLog(tr));
//check the dirty and deleted flag
final boolean isDeleted = (1 == tr.getTimeRecord().getDeleted());
final boolean isDirty = (1 == tr.getTimeRecord().getDirty());
if (isDeleted) {
Log.i(TAG, "Contact is marked for deletion");
Record rawContact = Record.createDeletedRecord(tr.getTimeRecord().getDataId(),
tr.getTimeRecord().getServerId());
dirtyTimes.add(rawContact);
} else if (isDirty) {
//Record rawContact = getRawRecord(db, tr.getTimeRecord().getDataId());
Record rawContact = tr.getTimeRecord();
Log.i(TAG, "Contact Name: " + rawContact.getHandle());
dirtyTimes.add(rawContact);
}
}
return dirtyTimes;
}
/*
* update records from server
*/
public static long updateRecords(DBManager db, Group<Record> updateRecords, long lastSyncMaker) {
long currentSyncMaker = lastSyncMaker;
/*
* 1: Update server id
* 2: Clear dirty flag
* 3: Delete deleted record
* 4: Get sync state
*/
for(Record rr: updateRecords) {
TimeRecord tr = new TimeRecord(rr);
Log.d(TAG, "server id: " + rr.getServerId());
Log.d(TAG, "client id: " + rr.getDataId());
Log.d(TAG, "content: " + rr.getContent());
/*
if(rr.getSyncState() > currentSyncMaker) {
currentSyncMaker = rr.getSyncState();
}
*/
if(rr.getDataId() == 0) {
Log.d(TAG, "[need add] server id: " + tr.getTimeRecord().server_id);
db.addTimeFromServer(tr);
} else {
Log.d(TAG, "[update] server id: " + tr.getTimeRecord().server_id);
db.updateServerInfo(tr.getTimeRecord());
}
Log.d(TAG, "content type is : "+rr.getContentType());
Log.d(TAG, "photo is : "+rr.getPhoto());
//TODO: update photo from server
if(rr.getContentType() == 4) {
if(TextUtils.isEmpty(rr.getPhoto()))
NetworkUtilities.downloadPhoto("20140810231230");
else
NetworkUtilities.downloadPhoto(rr.getPhoto());
}
}
return currentSyncMaker;
}
}