package com.roboo.like.google.async;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.LinkedList;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.content.Context;
import android.text.TextUtils;
import com.roboo.like.google.models.CityItem;
import com.roboo.like.google.models.WeatherItem;
public class WeatherAsyncTaskLoader extends BaseAsyncTaskLoader<LinkedList<WeatherItem>>
{
private static final String BASW_WEATHER_URL = "http://m.weathercn.com/";
private static final String REGEX_TIAN_QI_FU_HAO = "tianqifuhao30hui";
private Context mContext;
private String mWeatherUrl;
public WeatherAsyncTaskLoader(Context context, String weatherUrl)
{
super(context);
this.mContext = context;
this.mWeatherUrl = weatherUrl;
}
public LinkedList<WeatherItem> loadInBackground()
{
LinkedList<WeatherItem> data = null;
// File file = new File(FileUtils.getFileCacheDir(mContext, FileUtils.TYPE_WEATHER), MD5Utils.generate(BASW_WEATHER_URL));
// if (!file.exists())
// {
// data = getProCities();
// if (null != data)
// {
// saveProvCities(data, file);
// }
// }
// else
// {
// data = getFileProvCities(file);
// }
data = getWeatherItems();
mEndTime = System.currentTimeMillis();
if (mEndTime - mStartTime < THREAD_LEAST_DURATION_TIME)
{
try
{
Thread.sleep(THREAD_LEAST_DURATION_TIME);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
return data;
}
private LinkedList<LinkedList<CityItem>> getFileProvCities(File file)
{
LinkedList<LinkedList<CityItem>> data = null;
try
{
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
data = (LinkedList<LinkedList<CityItem>>) objectInputStream.readObject();
objectInputStream.close();
}
catch (Exception e)
{
file.delete();
e.printStackTrace();
}
return data;
}
private void saveProvCities(LinkedList<LinkedList<CityItem>> data, File file)
{
try
{
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
objectOutputStream.writeObject(data);
objectOutputStream.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public LinkedList<WeatherItem> getWeatherItems()
{
LinkedList<WeatherItem> items = null;
String updateTime = null, todayDesc = null, todayIconUrl = null, todayWind = null, todayTemp = null;
if (!TextUtils.isEmpty(mWeatherUrl))
{
try
{
Document document = Jsoup.connect(mWeatherUrl).get();
Element element = document.getElementById("content");
if (element != null)
{
Elements elements = element.getElementsByClass("skreporttime");
if (!elements.isEmpty())
{
updateTime = elements.text();
}
todayDesc = element.getElementsByClass("skweather").text();
todayIconUrl = BASW_WEATHER_URL + element.getElementById("weatherPic").attr("src");
todayTemp = element.getElementsByClass("sktemperature").text();
todayWind = element.getElementsByClass("b").get(0).text();
elements = element.getElementsByClass("list");
if (!elements.isEmpty())
{
elements = elements.get(0).getElementsByTag("div");
}
if (!elements.isEmpty())
{
items = new LinkedList<WeatherItem>();
for (int i = 1; i < elements.size(); i++)
{
WeatherItem item = new WeatherItem();
item.updateTime = updateTime;
item.todayDesc = todayDesc;
item.todayIconUrl = todayIconUrl;
item.todayTemp = todayTemp;
item.todayWind = todayWind;
Elements tmpElements = elements.get(i).getElementsByTag("span");
if (!tmpElements.isEmpty() && tmpElements.size() > 3)
{
item.day = tmpElements.get(0).text();
Elements imgElements = tmpElements.get(1).getElementsByTag("img");
if (!imgElements.isEmpty())
{
String dayIconUrl = imgElements.get(0).attr("src");
if (!TextUtils.isEmpty(dayIconUrl) && dayIconUrl.startsWith(REGEX_TIAN_QI_FU_HAO))
{
item.dayIconUrl = BASW_WEATHER_URL + dayIconUrl.replace(REGEX_TIAN_QI_FU_HAO, "2013icon");
}
}
imgElements = tmpElements.get(2).getElementsByTag("img");
if (!imgElements.isEmpty())
{
String nightIconUrl = imgElements.get(0).attr("src");
if (!TextUtils.isEmpty(nightIconUrl) && nightIconUrl.startsWith(REGEX_TIAN_QI_FU_HAO))
{
item.nightIconUrl = BASW_WEATHER_URL + nightIconUrl.replace(REGEX_TIAN_QI_FU_HAO, "2013icon");
}
}
item.temp = tmpElements.get(3).text();
}
items.add(item);
}
if (items.size() == 0)
{
items = null;
}
if (null != items)
{
for (WeatherItem item : items)
{
// System.out.println("item = " + item);
}
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
return items;
}
}