package com.jasonchen.microlang.database;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;
import com.jasonchen.microlang.database.table.DownloadPicturesTable;
import com.jasonchen.microlang.debug.AppLogger;
import com.jasonchen.microlang.utils.file.FileLocationMethod;
import java.io.File;
import java.util.ArrayList;
/**
* jasonchen
* 2015/04/10
*/
public class DownloadPicturesDBTask {
//300mb
private static final long MAX_DISK_CACHE = 300L;
private DownloadPicturesDBTask() {
}
private static SQLiteDatabase getWsd() {
DatabaseHelper databaseHelper = DatabaseHelper.getInstance();
return databaseHelper.getWritableDatabase();
}
private static SQLiteDatabase getRsd() {
DatabaseHelper databaseHelper = DatabaseHelper.getInstance();
return databaseHelper.getReadableDatabase();
}
public static void add(String url, String path, FileLocationMethod method) {
ContentValues cv = new ContentValues();
cv.put(DownloadPicturesTable.URL, url);
cv.put(DownloadPicturesTable.PATH, path);
cv.put(DownloadPicturesTable.TIME, System.currentTimeMillis());
int type = DownloadPicturesTable.TYPE_OTHER;
switch (method) {
case avatar_small:
case avatar_large:
type = DownloadPicturesTable.TYPE_AVATAR;
break;
}
cv.put(DownloadPicturesTable.TYPE, type);
long size = new File(path).length();
cv.put(DownloadPicturesTable.SIZE, size);
getWsd().replace(DownloadPicturesTable.TABLE_NAME,
DownloadPicturesTable.URL, cv);
synchronized (DownloadPicturesDBTask.class) {
trimToSize();
}
}
public static String get(String url) {
Cursor c = getRsd()
.query(DownloadPicturesTable.TABLE_NAME, null, DownloadPicturesTable.URL + "=?",
new String[]{url}, null, null, null);
String path = null;
while (c.moveToNext()) {
path = c.getString(c.getColumnIndex(DownloadPicturesTable.PATH));
break;
}
c.close();
if (!TextUtils.isEmpty(path)) {
ContentValues cv = new ContentValues();
cv.put(DownloadPicturesTable.TIME, System.currentTimeMillis());
getWsd().update(DownloadPicturesTable.TABLE_NAME, cv, DownloadPicturesTable.PATH + "=?",
new String[]{path});
}
return path;
}
public static void remove(String url) {
String sql = "delete from " + DownloadPicturesTable.TABLE_NAME + " where "
+ DownloadPicturesTable.URL
+ " = " + url;
getWsd().execSQL(sql);
}
//return mb;
public static void trimToSize() {
long total = 0L;
String sql = "select sum(" + DownloadPicturesTable.SIZE + ")" + " from "
+ DownloadPicturesTable.TABLE_NAME;
Cursor cursor = getRsd().rawQuery(
sql, null);
if (cursor.moveToFirst()) {
long size = cursor.getLong(0);
total = size / 1024L / 1024L;
}
cursor.close();
AppLogger.v("microlang picture cache size: " + total + "mb");
if (total < MAX_DISK_CACHE) {
return;
}
Cursor c = getRsd()
.query(DownloadPicturesTable.TABLE_NAME, null, null,
null, null, null,
DownloadPicturesTable.TIME + " asc LIMIT 100");
ArrayList<String> pathList = new ArrayList<String>();
while (c.moveToNext()) {
String path = c.getString(c.getColumnIndex(DownloadPicturesTable.PATH));
pathList.add(path);
}
c.close();
String[] pathArray = pathList.toArray(new String[pathList.size()]);
StringBuilder stringBuilder = new StringBuilder();
int length = pathArray.length;
for (int i = 0; i < length; i++) {
if (i < length - 1) {
stringBuilder.append("\"").append(pathArray[i]).append("\",");
} else {
stringBuilder.append("\"").append(pathArray[i]).append("\"");
}
}
String deleteSql = "delete from " + DownloadPicturesTable.TABLE_NAME + " where "
+ DownloadPicturesTable.PATH + " in (%s)";
deleteSql = String.format(deleteSql, stringBuilder.toString());
getWsd().execSQL(deleteSql);
for (String path : pathList) {
new File(path).delete();
}
trimToSize();
}
public static void clearAll() {
getWsd().delete(DownloadPicturesTable.TABLE_NAME, null, null);
}
}