package com.example.im002.service;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


import android.net.Uri;

import com.example.im002.session.UserInfo;
import com.example.im002.util.MD5;

public class SessionService {

	/**
	 * 获取会话界面的数据
	 * 
	 * @return
	 */
	public static List<UserInfo> getSession() {
		List<UserInfo> info = new ArrayList<UserInfo>();
		// 以下是从 网络服务器中 获取最新数据 待定。。。。

		return info;

	}

	/**
	 * 
	 * 根据路径 获取网络图片 如果图片 存在于缓存中 就从缓存中 返回给图片 否则 就从网络中 下载该图片 并 缓存起来 放入缓存cache文件夹中
	 * 
	 * @param path
	 *            图片路径
	 * @return
	 */
	public static Uri getImage(String path, File cacheDir) throws Exception {

		// 注意：该方法 有两个功能 既可以 获取网络的图片 也可以 缓存图片
		// path--MD5--32位字符串.jpg

		// 这里写的 类中的方法 异常 是throw出去的 只有在mainactivity 中调用的时候 才try catch

		// 要在缓存目录下 寻找给文件 先判断 该文件是否存在

		File localFile = new File(cacheDir, MD5.getMD5(path)
				+ path.substring(path.lastIndexOf(".")));

		if (localFile.exists()) {

			// 如果在 sdcard上的缓存文件中 存在 则通过 路径返回该文件的Uri对象
			return Uri.fromFile(localFile);

		} else {
			// 如果不存在 那么 就要下载了

			HttpURLConnection conn = (HttpURLConnection) new URL(path)
					.openConnection();

			// 设置属性 --超时时间--请求方式--根据返回码判断是否成功

			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");
			if (conn.getResponseCode() == 200) {
				// 创建文件输出流 一边 往从 网络中 读数据 一边往本地文件中写数据
				FileOutputStream fileOutputStream = new FileOutputStream(
						localFile);

				// 从 输入流中 获取数据 循环读取流中的数据 循环写入流中的数据之
				InputStream inputStream = conn.getInputStream();

				byte[] buffer = new byte[1024];

				int len;
				while ((len = inputStream.read(buffer)) != -1) {
					fileOutputStream.write(buffer, 0, len);
				}
				fileOutputStream.close();
				inputStream.close();
				return Uri.fromFile(localFile);
			}
		}

		return null;
	}
}
