📄 faceregistry.java
字号:
* 删除一个自定义表情
*
* @param md5
*/
public void removeFace(String md5) {
if(faces == null)
return;
Face f = md52face.remove(md5);
if(f == null)
return;
md52id.remove(md5);
id2md5.remove(f.getId());
FaceGroup g = face2group.remove(f);
if(g == null)
return;
g.getFace().remove(f);
dirty = true;
}
/**
* 设置组名称
*
* @param group
* @param name
*/
public void setGroupName(int group, String name) {
FaceGroup g = getFaceGroup(group);
if(g == null)
return;
g.setName(name);
dirty = true;
}
/**
* 移动一个表情到另外一个组
*
* @param face
* 表情文件元素对象
* @param destGroup
* 目的组索引
*/
@SuppressWarnings("unchecked")
public void moveFace(Face face, int destGroup) {
FaceGroup dest = getFaceGroup(destGroup);
if(dest == null)
return;
FaceGroup src = face2group.get(face);
boolean success = false;
if(dest.getId() == FaceConstant.CUSTOM_HEAD_GROUP_ID) {
success = saveCustomHead(face);
} else {
success = FileTool.copyFile(getFacePath(face), getFacePath(face, dest)) &&
FileTool.copyFile(getSmallFacePath(face), getSmallFacePath(face, dest));
}
if(success) {
FileTool.deleteFile(getFacePath(face));
FileTool.deleteFile(getSmallFacePath(face));
src.getFace().remove(face);
dest.getFace().add(face);
face2group.put(face, dest);
}
dirty = true;
}
/**
* 保存文件为自定义头像
*
* @return
* true表示保存成功
*/
private boolean saveCustomHead(Face face) {
try {
ImageLoader loader = new ImageLoader();
loader.load(getFacePath(face));
ImageData data = loader.data[0].scaledTo(40, 40);
// save 40x40 bmp
ImageLoader saveLoader = new ImageLoader();
saveLoader.data = new ImageData[] { data };
saveLoader.save(LumaQQ.CUSTOM_FACE_DIR + FaceConstant.CUSTOM_HEAD_GROUP_ID + '/' + face.getMd5() + ".bmp", SWT.IMAGE_BMP);
// save 20x20 bmp
data = loader.data[0].scaledTo(20, 20);
saveLoader = new ImageLoader();
saveLoader.data = new ImageData[] { data };
saveLoader.save(LumaQQ.CUSTOM_FACE_DIR + FaceConstant.CUSTOM_HEAD_GROUP_ID + '/' + face.getMd5() + "fixed.bmp", SWT.IMAGE_BMP);
return true;
} catch(SWTException e) {
return false;
}
}
/**
* 得到表情路径
*
* @param face
* @param g
* @return
*/
private String getFacePath(Face face, FaceGroup g) {
return LumaQQ.CUSTOM_FACE_DIR + g.getId() + '/' + face.getFilename();
}
/**
* 得到表情路径
*
* @param face
* @return
*/
public String getFacePath(Face face) {
FaceGroup g = face2group.get(face);
if(g == null)
return null;
return LumaQQ.CUSTOM_FACE_DIR + g.getId() + '/' + face.getFilename();
}
/**
* 得到表情路径
*
* @param id
* @return
*/
public String getFacePath(int id) {
return getFacePath(getMd5ById(id));
}
/**
* 得到表情路径
*
* @param md5
* @return
*/
public String getFacePath(String md5) {
Face f = md52face.get(md5);
if(f == null)
return null;
return getFacePath(f);
}
/**
* 得到缩略图表情路径
*
* @param face
* @param g
* @return
*/
private String getSmallFacePath(Face face, FaceGroup g) {
return LumaQQ.CUSTOM_FACE_DIR + g.getId() + '/' + face.getMd5() + "fixed.bmp";
}
/**
* 得到缩略图表情路径
*
* @param face
* @return
*/
public String getSmallFacePath(Face face) {
FaceGroup g = face2group.get(face);
if(g == null)
return null;
return LumaQQ.CUSTOM_FACE_DIR + g.getId() + '/' + face.getMd5() + "fixed.bmp";
}
/**
* 得到缩略图表情路径
*
* @param md5
* @return
*/
public String getSmallFacePath(String md5) {
Face f = md52face.get(md5);
if(f == null)
return null;
return getSmallFacePath(f);
}
/**
* 得到接收到的表情文件路径
*
* @param filename
* @return
*/
public String getReceivedFacePath(String filename) {
if(filename == null)
return null;
return LumaQQ.CUSTOM_FACE_DIR + FaceConstant.RECEIVED_GROUP_ID + '/' + filename;
}
/**
* 返回接收到的表情缩略图路径
*
* @param md5
* @return
*/
public String getReceivedFaceThumbPath(String md5) {
if(md5 == null)
return null;
return LumaQQ.CUSTOM_FACE_DIR + FaceConstant.RECEIVED_GROUP_ID + '/' + md5 + "fixed.bmp";
}
/**
* 得到接收到的表情文件路径
*
* @param face
* @return
*/
public String getReceivedFacePath(Face face) {
return LumaQQ.CUSTOM_FACE_DIR + FaceConstant.RECEIVED_GROUP_ID + '/' + face.getFilename();
}
/**
* 得到接收到的表情文件路径
*
* @param id
* @return
*/
public String getReceivedFacePath(int id) {
Face f = md52face.get(id2md5.get(id));
if(f == null)
return null;
return getReceivedFacePath(f);
}
/**
* 得到自定义头像路径
*
* @param id
* @return
*/
public String getCustomHeadPath(int id) {
Face f = md52face.get(id2md5.get(id));
if(f == null)
return null;
return LumaQQ.CUSTOM_FACE_DIR + FaceConstant.CUSTOM_HEAD_GROUP_ID + '/' + f.getFilename();
}
/**
* 得到小自定义头像路径
*
* @param id
* @return
*/
public String getSmallCustomHeadPath(int id) {
Face f = md52face.get(id2md5.get(id));
if(f == null)
return null;
return LumaQQ.CUSTOM_FACE_DIR + FaceConstant.CUSTOM_HEAD_GROUP_ID + '/' + f.getMd5() + "fixed.bmp";
}
/**
* 得到一个组
*
* @param name
* 组名
* @return
* 如果没有这个组,返回null
*/
public FaceGroup getFaceGroup(String name) {
return name2group.get(name);
}
/**
* @param name
* 组名
* @return
* true表示这个组已经存在
*/
public boolean hasGroup(String name) {
return getFaceGroup(name) != null;
}
/**
* 通过序号得到表情组
*
* @param index
* @return
*/
public FaceGroup getFaceGroup(int index) {
if(faces == null)
return null;
List list = faces.getGroup();
if(index < 0 || index >= list.size())
return null;
return (FaceGroup)faces.getGroup().get(index);
}
/**
* 通过序号得到表情
*
* @param group
* 组序号
* @param index
* 表情序号
* @return
* Face元素对象
*/
public Face getFace(int group, int index) {
FaceGroup g = getFaceGroup(group);
if(g == null)
return null;
List list = g.getFace();
if(index < 0 || index >= list.size())
return null;
return (Face)g.getFace().get(index);
}
/**
* 得到图片id
*
* @param md5
* @return
*/
public int getFaceId(String md5) {
Integer id = md52id.get(md5);
if(id == null)
return 0;
else
return id;
}
/**
* 根据表情id得到Face对象
*
* @param id
* id
* @return
* Face
*/
public Face getFace(int id) {
String md5 = id2md5.get(id);
return md52face.get(md5);
}
/**
* 检查是否存在这个face
*
* @param md5
* 图片的md5值
* @return
* true表示这个图片已经存在
*/
public boolean hasFace(String md5) {
return md52face.containsKey(md5);
}
/**
* 保存设置
*/
public void save() {
if(dirty) {
File file = new File(fileName);
FaceUtil.save(file, faces);
}
}
/**
* 得到表情文件的长度
*
* @param md5
* 表情文件的md5
* @return
* 长度
*/
public int getFaceLength(String md5) {
String path = getFacePath(md5);
File file = new File(path);
if(file.exists())
return (int)file.length();
else
return 0;
}
/**
* @param string
*/
public void setFileName(String string) {
this.fileName = string;
}
public String getMd5ById(int code) {
return id2md5.get(code);
}
public boolean isDirty() {
return dirty;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -