package com.kescoode.xmail.db;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import com.fsck.k9.mail.MessagingException;
import com.kescoode.xmail.db.internal.DataDelegate;
import com.kescoode.xmail.db.table.FolderSchema;
import com.kescoode.xmail.domain.Account;
import com.kescoode.xmail.domain.LocalFolder;
/**
* 邮件文件夹Dao
*
* @author Kesco Lin
*/
public class FolderDao extends DataDelegate {
public static final String TABLE_NAME = "folder";
private static final String SQL_CREATE_TABLE = CREATE_TABLE + TABLE_NAME + " ( " + FolderSchema._ID + PRIMARY_KEY +
FolderSchema.ACCOUNT_ID + TYPE_INTEGER + COLUMN_NOT_NULL + ", " +
FolderSchema.NAME + TYPE_TEXT + COLUMN_NOT_NULL + ", " +
FolderSchema.TOTAL_COUNT + TYPE_INTEGER + COLUMN_NOT_NULL + ", " +
FolderSchema.UNREAD_COUNT + TYPE_INTEGER + COLUMN_NOT_NULL + ", " +
FolderSchema.FLAGGED_COUNT + TYPE_INTEGER + COLUMN_NOT_NULL + ", " +
FolderSchema.UPDATE_TIME + TYPE_INTEGER + " );";
public FolderDao(Context context) {
super(context);
}
/**
* 保存邮件文件夹进数据库
*
* @param folder 文件夹
* @return 插入ID
*/
public long insertFolder2DB(LocalFolder folder) {
ContentValues values = new ContentValues();
try {
values.put(FolderSchema.ACCOUNT_ID, folder.getAccountId());
values.put(FolderSchema.NAME, folder.getName());
values.put(FolderSchema.TOTAL_COUNT, folder.getMessageCount());
values.put(FolderSchema.UNREAD_COUNT, folder.getUnreadMessageCount());
values.put(FolderSchema.FLAGGED_COUNT, folder.getFlaggedMessageCount());
values.put(FolderSchema.UPDATE_TIME, folder.getLastUpdate());
} catch (MessagingException e) {
/* 永远不会触发 */
}
Uri uri = context.getContentResolver().insert(parseUri(TABLE_NAME), values);
long index = ContentUris.parseId(uri);
folder.setId(index);
return index;
}
/**
* 获取该帐户的所有文件夹
*
* @param account 邮件帐户
* @return 文件夹数组
*/
public LocalFolder[] selectFoldersFromDB(Account account) {
Cursor cursor = select(parseUri(TABLE_NAME),
"select * from folder where account_id = ?", account.getId());
int num = cursor.getCount();
LocalFolder[] folders = new LocalFolder[num];
if (num > 0) {
int index = 0;
if (cursor.moveToFirst()) {
do {
folders[index] = new LocalFolder(context, account, cursor);
index += 1;
} while (cursor.moveToNext());
} else {
throw new RuntimeException("DB cannot load folders");
}
}
cursor.close();
return folders;
}
/**
* 根据文件夹名称查找文件夹(精确查找)
*
* @param account 邮件客户实体类
* @param name 文件夹名称
* @return 邮件文件夹对象
*/
public LocalFolder selectFolder4Name(Account account, String name) {
LocalFolder folder = null;
Cursor cursor = select(parseUri(TABLE_NAME), "select * from folder where name = ? and account_id = ?",
name,account.getId());
if (cursor.getCount() != 0) {
cursor.moveToFirst();
folder = new LocalFolder(context, account, cursor);
}
cursor.close();
return folder;
}
/**
* 更新邮件文件夹状态到数据库
*
* @return 更新的文件夹ID
*/
public int updateFolder4Id(LocalFolder folder) {
ContentValues values = new ContentValues();
try {
values.put(FolderSchema.ACCOUNT_ID, folder.getAccountId());
values.put(FolderSchema.NAME, folder.getName());
values.put(FolderSchema.TOTAL_COUNT, folder.getMessageCount());
values.put(FolderSchema.UNREAD_COUNT, folder.getUnreadMessageCount());
values.put(FolderSchema.FLAGGED_COUNT, folder.getFlaggedMessageCount());
values.put(FolderSchema.UPDATE_TIME, folder.getLastUpdate());
} catch (MessagingException e) {
/* 永远不会触发 */
}
return context.getContentResolver().update(parseUri(TABLE_NAME), values, "_id = ?",
new String[]{String.valueOf(folder.getId())});
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
/* 目前还是初版,没有升级数据库逻辑 */
}
}