/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.content;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDoneException;
import android.text.TextUtils;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.network.http.HttpOperation;
import com.galaxy.meetup.client.android.service.EsSyncAdapterService;
import com.galaxy.meetup.client.util.EsLog;
import com.galaxy.meetup.client.util.Property;
/**
*
* @author sihai
*
*/
public class EsEmotiShareData {
public static final String EMOTISHARE_PROJECTION[] = {
"_id", "type", "data", "generation"
};
private static final Object sEmotiShareSyncLock = new Object();
public static void cleanupData(SQLiteDatabase sqlitedatabase)
{
int i = sqlitedatabase.delete("emotishare_data", null, null);
EsLog.writeToLog(3, "EsEmotiShareData", (new StringBuilder("cleanupData deleted EmotiShares: ")).append(i).toString());
}
private static boolean doSync(Context context, EsAccount esaccount, EsSyncAdapterService.SyncState syncstate) {
if(syncstate.isCanceled()) {
return false;
}
syncstate.onStart("EmotiShare");
SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
cleanupData(sqlitedatabase);
sqlitedatabase.setTransactionSuccessful();
Resources resources = context.getResources();
int ai[] = resources.getIntArray(R.array.emotishare_id);
int ai1[] = resources.getIntArray(R.array.emotishare_release_generation);
String as[] = resources.getStringArray(R.array.emotishare_name);
String as1[] = resources.getStringArray(R.array.emotishare_type);
String as2[] = resources.getStringArray(R.array.emotishare_category);
String as3[] = resources.getStringArray(R.array.emotishare_share_text);
String as4[] = resources.getStringArray(R.array.emotishare_description);
String as5[] = resources.getStringArray(R.array.emotishare_icon_uri);
String as6[] = resources.getStringArray(R.array.emotishare_image_uri);
long l = System.currentTimeMillis();
long al[] = new long[3];
al[0] = Long.valueOf(Property.EMOTISHARE_GEN1_DATE.get()).longValue();
al[1] = Long.valueOf(Property.EMOTISHARE_GEN2_DATE.get()).longValue();
al[2] = Long.valueOf(Property.EMOTISHARE_GEN3_DATE.get()).longValue();
ArrayList arraylist = new ArrayList();
for(int i = 0; i < ai.length; i++)
{
ArrayList arraylist1 = new ArrayList();
arraylist1.add(as2[i]);
DbEmbedEmotishare dbembedemotishare = new DbEmbedEmotishare(as1[i], as[i], as6[i], as4[i]);
DbEmotishareMetadata dbemotisharemetadata = new DbEmotishareMetadata(ai[i], arraylist1, as3[i], as5[i], dbembedemotishare, ai1[i]);
int j = -1 + ai1[i];
if(j >= 0 && j < al.length && l >= al[j])
arraylist.add(dbemotisharemetadata);
}
syncstate.onFinish(insertEmotiShares(context, esaccount, arraylist));
return true;
} finally {
sqlitedatabase.endTransaction();
}
}
public static boolean ensureSynced(Context context, EsAccount esaccount)
{
EsSyncAdapterService.SyncState syncstate = new EsSyncAdapterService.SyncState();
syncstate.onSyncStart("Exp sync");
boolean flag = syncAll(context, esaccount, syncstate, null, false);
syncstate.onSyncFinish();
return flag;
}
private static int insertEmotiShares(Context context, EsAccount esaccount, List list)
{
int i;
long l;
SQLiteDatabase sqlitedatabase;
i = 0;
l = System.currentTimeMillis();
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
DbEmotishareMetadata dbemotisharemetadata;
for(Iterator iterator = list.iterator(); iterator.hasNext(); EsLog.writeToLog(3, "EsEmotiShareData", (new StringBuilder("Insert: ")).append(dbemotisharemetadata).toString()))
{
dbemotisharemetadata = (DbEmotishareMetadata)iterator.next();
ContentValues contentvalues = toContentValues(dbemotisharemetadata);
if(contentvalues != null)
{
sqlitedatabase.insert("emotishare_data", null, contentvalues);
i++;
}
}
sqlitedatabase.setTransactionSuccessful();
saveSyncTimestamp(context, esaccount, l);
if(i != 0)
context.getContentResolver().notifyChange(EsProvider.EMOTISHARE_URI, null);
return i;
} finally {
sqlitedatabase.endTransaction();
}
}
private static long querySyncTimestamp(Context context, EsAccount esaccount)
{
SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase();
try {
return DatabaseUtils.longForQuery(sqlitedatabase, "SELECT last_emotishare_sync_time FROM account_status", null);
} catch (SQLiteDoneException sqlitedoneexception) {
// TODO log
return -1L;
}
}
private static void saveSyncTimestamp(Context context, EsAccount esaccount, long l)
{
SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
ContentValues contentvalues = new ContentValues();
contentvalues.put("last_emotishare_sync_time", Long.valueOf(l));
sqlitedatabase.update("account_status", contentvalues, null, null);
context.getContentResolver().notifyChange(EsProvider.ACCOUNT_STATUS_URI, null);
}
public static boolean syncAll(Context context, EsAccount esaccount, EsSyncAdapterService.SyncState syncstate, HttpOperation.OperationListener operationlistener, boolean flag)
{
synchronized(sEmotiShareSyncLock) {
boolean flag1 = false;
if(!flag) {
long l = querySyncTimestamp(context, esaccount);
long l1 = System.currentTimeMillis() - l;
if(l1 > 0L && l1 < 60000L) {
flag1 = true;
}
flag1 = doSync(context, esaccount, syncstate);
if(flag1)
saveSyncTimestamp(context, esaccount, System.currentTimeMillis());
}
return flag1;
}
}
private static ContentValues toContentValues(DbEmotishareMetadata dbemotisharemetadata)
{
if(null == dbemotisharemetadata) {
return null;
}
DbEmbedEmotishare dbembedemotishare = dbemotisharemetadata.getEmbed();
ContentValues contentvalues = null;
if(dbembedemotishare == null) {
return null;
}
String s = dbembedemotishare.getType();
if(TextUtils.isEmpty(s)) {
return null;
}
try {
byte abyte0[] = DbEmotishareMetadata.serialize(dbemotisharemetadata);
if(null == abyte0) {
return null;
}
contentvalues = new ContentValues();
contentvalues.put("type", s);
contentvalues.put("data", abyte0);
contentvalues.put("generation", Integer.valueOf(dbemotisharemetadata.getGeneration()));
return contentvalues;
} catch (IOException e) {
// TODO log
return null;
}
}
}