package com.wyp.materialqqlite.qqclient.task;
import java.io.File;
import java.util.ArrayList;
import org.apache.http.client.HttpClient;
import com.wyp.materialqqlite.Utils;
import com.wyp.materialqqlite.qqclient.protocol.QQProtocol;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.QQCallBackMsg;
public class HeadPicTask extends HttpTask {
public static final int OP_TYPE_BUDDY = 0; // 获取好友头像
public static final int OP_TYPE_GROUP = 1; // 获取群头像
public static final int OP_TYPE_SESS = 2; // 获取群成员头像
private ArrayList<HeadPic_Param> m_arrParam;
class HeadPic_Param {
int nType; // 操作类型
int nGroupCode; // 群代码
int nGroupNum; // 群号码
int nQQUin; // 好友Uin
int nQQNum; // 好号码
};
public HeadPicTask(String strTaskName, HttpClient httpClient) {
super(strTaskName, httpClient);
// TODO Auto-generated constructor stub
m_arrParam = new ArrayList<HeadPic_Param>();
}
public boolean getBuddyHeadPic(int nQQUin, int nQQNum) {
if (0 == nQQUin || 0 == nQQNum)
return false;
HeadPic_Param param = new HeadPic_Param();
param.nType = OP_TYPE_BUDDY;
param.nGroupCode = 0;
param.nGroupNum = 0;
param.nQQUin = nQQUin;
param.nQQNum = nQQNum;
m_arrParam.add(param);
return true;
}
public boolean getGroupHeadPic(int nGroupCode, int nGroupNum) {
if (0 == nGroupCode || 0 == nGroupNum)
return false;
HeadPic_Param param = new HeadPic_Param();
param.nType = OP_TYPE_GROUP;
param.nGroupCode = nGroupCode;
param.nGroupNum = nGroupNum;
param.nQQUin = 0;
param.nQQNum = 0;
m_arrParam.add(param);
return true;
}
public boolean getGMemberHeadPic(int nGroupCode, int nQQUin, int nQQNum) {
if (0 == nGroupCode || 0 == nQQUin || 0 == nQQNum)
return false;
HeadPic_Param param = new HeadPic_Param();
param.nType = OP_TYPE_SESS;
param.nGroupCode = nGroupCode;
param.nGroupNum = 0;
param.nQQUin = nQQUin;
param.nQQNum = nQQNum;
m_arrParam.add(param);
return true;
}
public boolean addParam(int nType, int nGroupCode,
int nGroupNum, int nQQUin, int nQQNum) {
HeadPic_Param param = new HeadPic_Param();
param.nType = nType;
param.nGroupCode = nGroupCode;
param.nGroupNum = nGroupNum;
param.nQQUin = nQQUin;
param.nQQNum = nQQNum;
m_arrParam.add(param);
return true;
}
public void delAllItems() {
m_arrParam.clear();
}
@Override
public void doTask() {
if (null == m_httpClient || null == m_QQUser) {
delAllItems();
return;
}
try {
for (int i = 0; i < m_arrParam.size(); i++) {
HeadPic_Param param = m_arrParam.get(i);
boolean bIsBuddy;
int nQQUin;
if (OP_TYPE_GROUP == param.nType) { // 群头像
bIsBuddy = false;
nQQUin = param.nGroupCode;
}
else { // 好友或群成员头像
bIsBuddy = true;
nQQUin = param.nQQUin;
}
byte[] bufPic = QQProtocol.getHeadPic(m_httpClient,
bIsBuddy, nQQUin, m_QQUser.m_LoginResult2.m_strVfWebQq);
if (bufPic != null)
savePic(param, bufPic);
if (m_bCancel) {
delAllItems();
return;
}
if (OP_TYPE_BUDDY == param.nType) // 好友
sendMessage(QQCallBackMsg.UPDATE_BUDDY_HEADPIC, param.nQQUin, 0, null);
else if (OP_TYPE_GROUP == param.nType) // 群
sendMessage(QQCallBackMsg.UPDATE_GROUP_HEADPIC, param.nGroupCode, 0, null);
else if (OP_TYPE_SESS == param.nType) // 群成员
sendMessage(QQCallBackMsg.UPDATE_GMEMBER_HEADPIC, param.nGroupCode, param.nQQUin, null);
}
delAllItems();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
boolean savePic(HeadPic_Param param, byte[] bytData) {
if (null == param || null == bytData || bytData.length <= 0)
return false;
String strFullName;
if (OP_TYPE_BUDDY == param.nType) // 好友
strFullName = m_QQUser.getBuddyHeadPicFullName(param.nQQNum);
else if (OP_TYPE_GROUP == param.nType) // 群
strFullName = m_QQUser.getGroupHeadPicFullName(param.nGroupNum);
else if (OP_TYPE_SESS == param.nType) // 群成员
strFullName = m_QQUser.getSessHeadPicFullName(param.nQQNum);
else
return false;
String strPath = strFullName.substring(0, strFullName.lastIndexOf("/"));
File dir = new File(strPath);
if (!dir.exists())
dir.mkdirs();
Utils.writeFile(strFullName, bytData);
return true;
}
}