/**
* SQLDatabase;
*/
package com.mailssenger.db;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import android.content.Context;
import com.lidroid.xutils.db.sqlite.Selector;
import com.lidroid.xutils.exception.DbException;
import com.mailssenger.model.MailModel;
/**
* @date 20140823
* @author Han
*
*/
public class MailDB extends BaseDB{
public MailDB(Context mContext) {
super(mContext);
}
/*
*mark mail as read in the local data base
*/
public void markMailAsSeenToLocal(int uid){
MailModel mail=new MailModel();
mail.setFlags("read");
mail.setUid(uid);
// db.update(entity, new WhereBuilder(, updateColumnNames);
// db.update(mail,"uid = "+uid +" AND folder ='"+"inbox"+"'");
}
/**
* update mail with download content
* @param uid
* @param content
*/
public void updateMailContent(int uid, String content){
System.out.println("::updateMailContent::");
MailModel mail=new MailModel();
try {
mail = db.findFirst(Selector.from(MailModel.class).where("uid", "=", uid));
} catch (DbException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mail.setContent(content);
try {
db.update(mail);
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*get mail form local database with messageId
*/
public List<MailModel> getMailByMessageIDFromLocal(String messageId){
// List<DbModel> dbModels = db.findDbModelAll(Selector.from(Parent.class)
// .groupBy("name")
// .select("name", "count(name) as count"));
List<MailModel> mailist = null;
try {
mailist = db.findAll(Selector.from(MailModel.class).where("messageID", "=", messageId));
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mailist;
}
/*
*load unread mail uid set form local database with floder name
*/
public Set<Integer> loadUIDSet(String folderName) {
Set<Integer> uid_set = new HashSet<Integer>();
List<MailModel> mailist = null;
try {
mailist = db.findAll(Selector.from(MailModel.class).where("folder", "=", folderName));
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// List<MailModel> mailist = db.findAllByWhere(MailModel.class," folder ='"+folderName+"'");
if(mailist!=null){
int len = mailist.size();
if (len>0){
for (int j = 0; j < len; j++) {
uid_set.add(mailist.get(j).getUid());
}
}
System.out.println("::loadUIDSet:: "+ folderName + uid_set);
}
return uid_set;
}
/*
*load mail form local database with folder name
*/
public List<Map<String, Object>> loadMailData(String folderName) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
List<MailModel> mailist = null;
try {
mailist = db.findAll(Selector.from(MailModel.class).where("folder", "=", folderName).orderBy("uid",true));
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// List<MailModel> mailist = db.findAllByWhere(MailModel.class,"folder = '"+ folderName +"' ORDER BY uid DESC");
//limit 20
//List<MailModel> mailist = db.findAll(MailModel.class,"uid DESC limit 20");
//transform mail model in to list of MailModel
Map<String, Object> map = null;
int len = mailist.size();
for (int j = 0; j < len; j++) {
map = new HashMap<String, Object>();
//construct a new map for mail
map.put("messageId", mailist.get(j).getMessageId());
map.put("fromWho", mailist.get(j).getFromWho());
map.put("toWho", mailist.get(j).getToWho());
map.put("ccWho", mailist.get(j).getCcWho());
map.put("bccWho", mailist.get(j).getBccWho());
map.put("sendDate", mailist.get(j).getSendDate());
map.put("subject", mailist.get(j).getSubject());
map.put("content", "" + mailist.get(j).getContent());
map.put("attachment", "" + mailist.get(j).getAttachment());
map.put("flags", "" + mailist.get(j).getFlags());
map.put("account", "" + mailist.get(j).getAccount());
map.put("folder", "" + mailist.get(j).getFolder());
map.put("uid", mailist.get(j).getUid());
list.add(map);
}
return list;
}
/*
* save list of MailModel into local database
*/
public void saveMailData(List<MailModel> list, Context context) {
Iterator<MailModel> it = list.iterator();
while (it.hasNext()) {
MailModel mailModel = (MailModel) it.next();
try {
db.save(mailModel);
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}