package com.lgq.rssreader.cache;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.lgq.rssreader.cache.AsyncImageLoader.ImageCallback;
import com.lgq.rssreader.core.Config;
import com.lgq.rssreader.core.ReaderApp;
import com.lgq.rssreader.dal.BlogDalHelper;
import com.lgq.rssreader.dal.ImageRecordDalHelper;
import com.lgq.rssreader.entity.Blog;
import com.lgq.rssreader.entity.Channel;
import com.lgq.rssreader.entity.ImageRecord;
import com.lgq.rssreader.enums.ImageType;
import com.lgq.rssreader.utils.Helper;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
public class ImageCacher {
private Context context;
public ImageCacher(Context context) {
this.context = context;
}
public ImageCacher() {
}
/**
* �õ�ͼƬ��ַ�ļ���
*
* @param imageType
* @return
*/
public static String GetImageFolder(Blog blog) {
String folder = Config.IMAGES_LOCATION;
List<Channel> channels = Helper.getChannels();
Channel target = null;
Channel parent = null;
for(Channel c : channels){
if(c.Id.equals(blog.ChannelId) || c.Id.equals(blog.TagId)){
target = c;
break;
}
}
if(target == null){
for(Channel c : channels){
if(c.IsDirectory && c.Children != null && c.Children.size() != 0){
for(Channel child : c.Children){
if(child.Title.equals(blog.SubsTitle)){
parent = c;
target = child;
break;
}
}
}
}
}
if(target == null ){
Log.e("RssReader", blog.Title + " " + blog.ChannelId + " " + blog.TagId + " " + blog.SubsTitle);
return folder;
}
if(parent != null)
folder = folder + parent.Folder + "/" + target.Folder + "/";
else
folder = folder + target.Folder + "/";
return folder;
}
static final Pattern patternImgSrc = Pattern.compile("<img(.+?)src=\"(.+?)\"(.+?)>");
static final Pattern patternImgxSrc = Pattern.compile("<img(.+?)xsrc=\"(.+?)\"(.+?)>");
/**
* �õ�html�е�ͼƬ��ַ
*
* @param html
* @return
*/
private static List<String> GetImagesList(String html) {
List<String> listSrc = new ArrayList<String>();
Matcher m = patternImgSrc.matcher(html);
while (m.find()) {
if(!m.group(2).equals("Loading.gif"))
listSrc.add(m.group(2));
}
Matcher xm = patternImgxSrc.matcher(html);
while (xm.find()) {
listSrc.add(xm.group(2));
}
return listSrc;
}
/**
* �õ���ͼƬ��ַ������·����
*
* @param imgType
* @param imageUrl
* @return
*/
private static String GetLocalImgSrc(Blog b, String src) {
String folder = GetImageFolder(b);
ImageRecordDalHelper helper = new ImageRecordDalHelper();
String localFile = helper.GetImageRecordEntity(src).StoredName;
helper.Close();
return "file:///mnt" + folder + localFile;
}
/**
* ����html�е�ͼƬ
*
* @param imgType
* @param html
*/
public static void DownloadHtmlImage(final Blog b) {
List<String> listSrc = GetImagesList(b.Content);
BlogDalHelper helper = new BlogDalHelper();
for (String src : listSrc) {
ImageRecord record = Helper.loadDrawable(b, src);
b.Content.replace(record.OriginUrl, record.StoredName.replace("/rssreader", ".."));
helper.SynchronyContent2DB(b.BlogId, b.Content);
}
helper.Close();
}
/**
* ����html�е�ͼƬ
*
* @param b
* @param content
*/
public static String DownloadHtmlImage(final Blog b, String content) {
List<String> listSrc = GetImagesList(content);
for (String src : listSrc) {
ImageRecord record = Helper.loadDrawable(b, src);
content = content.replace(record.OriginUrl, record.StoredName.replace("/rssreader", ".."));
}
return content;
}
/**
* �õ���ʽ�����html
*
* @param imgType
* @param html
* @return
*/
public static String FormatLocalHtmlWithImg(Blog blog) {
List<String> listSrc = GetImagesList(blog.Content);
for (String src : listSrc) {
String newSrc = GetLocalImgSrc(blog, src);
blog.Content = blog.Content.replace(src, newSrc);
}
return blog.Content;
}
}