package zlc.season.rxdownload2.db;
import android.content.ContentValues;
import android.database.Cursor;
import java.util.Date;
import zlc.season.rxdownload2.entity.DownloadBean;
import zlc.season.rxdownload2.entity.DownloadRecord;
import zlc.season.rxdownload2.entity.DownloadStatus;
import static zlc.season.rxdownload2.function.Utils.empty;
/**
* Author: Season(ssseasonnn@gmail.com)
* Date: 2016/11/14
* Time: 10:02
* FIXME
*/
class Db {
private Db() {
}
static final class RecordTable {
static final String TABLE_NAME = "download_record";
static final String COLUMN_ID = "id";
static final String COLUMN_URL = "url";
static final String COLUMN_SAVE_NAME = "save_name";
static final String COLUMN_SAVE_PATH = "save_path";
static final String COLUMN_DOWNLOAD_SIZE = "download_size";
static final String COLUMN_TOTAL_SIZE = "total_size";
static final String COLUMN_IS_CHUNKED = "is_chunked";
static final String COLUMN_DOWNLOAD_FLAG = "download_flag";
static final String COLUMN_EXTRA1 = "extra1";
static final String COLUMN_EXTRA2 = "extra2";
static final String COLUMN_EXTRA3 = "extra3";
static final String COLUMN_EXTRA4 = "extra4";
static final String COLUMN_EXTRA5 = "extra5";
static final String COLUMN_DATE = "date";
static final String COLUMN_MISSION_ID = "mission_id";
static final String CREATE =
"CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
COLUMN_URL + " TEXT NOT NULL," +
COLUMN_SAVE_NAME + " TEXT," +
COLUMN_SAVE_PATH + " TEXT," +
COLUMN_TOTAL_SIZE + " INTEGER," +
COLUMN_DOWNLOAD_SIZE + " INTEGER," +
COLUMN_IS_CHUNKED + " INTEGER," +
COLUMN_DOWNLOAD_FLAG + " INTEGER," +
COLUMN_EXTRA1 + " TEXT," +
COLUMN_EXTRA2 + " TEXT," +
COLUMN_EXTRA3 + " TEXT," +
COLUMN_EXTRA4 + " TEXT," +
COLUMN_EXTRA5 + " TEXT," +
COLUMN_DATE + " INTEGER NOT NULL, " +
COLUMN_MISSION_ID + " TEXT " +
" )";
static final String ALTER_TABLE_ADD_EXTRA1 = "ALTER TABLE " + TABLE_NAME + " ADD " + COLUMN_EXTRA1 + " TEXT";
static final String ALTER_TABLE_ADD_EXTRA2 = "ALTER TABLE " + TABLE_NAME + " ADD " + COLUMN_EXTRA2 + " TEXT";
static final String ALTER_TABLE_ADD_EXTRA3 = "ALTER TABLE " + TABLE_NAME + " ADD " + COLUMN_EXTRA3 + " TEXT";
static final String ALTER_TABLE_ADD_EXTRA4 = "ALTER TABLE " + TABLE_NAME + " ADD " + COLUMN_EXTRA4 + " TEXT";
static final String ALTER_TABLE_ADD_EXTRA5 = "ALTER TABLE " + TABLE_NAME + " ADD " + COLUMN_EXTRA5 + " TEXT";
static final String ALTER_TABLE_ADD_MISSION_ID = "ALTER TABLE " + TABLE_NAME + " ADD " + COLUMN_MISSION_ID + " TEXT";
static ContentValues insert(DownloadBean bean, int flag, String missionId) {
ContentValues values = new ContentValues();
values.put(COLUMN_URL, bean.getUrl());
values.put(COLUMN_SAVE_NAME, bean.getSaveName());
values.put(COLUMN_SAVE_PATH, bean.getSavePath());
values.put(COLUMN_DOWNLOAD_FLAG, flag);
values.put(COLUMN_EXTRA1, bean.getExtra1());
values.put(COLUMN_EXTRA2, bean.getExtra2());
values.put(COLUMN_EXTRA3, bean.getExtra3());
values.put(COLUMN_EXTRA4, bean.getExtra4());
values.put(COLUMN_EXTRA5, bean.getExtra5());
values.put(COLUMN_DATE, new Date().getTime());
if (empty(missionId)) {
values.put(COLUMN_MISSION_ID, missionId);
}
return values;
}
static ContentValues update(DownloadStatus status) {
ContentValues values = new ContentValues();
values.put(COLUMN_IS_CHUNKED, status.isChunked);
values.put(COLUMN_DOWNLOAD_SIZE, status.getDownloadSize());
values.put(COLUMN_TOTAL_SIZE, status.getTotalSize());
return values;
}
static ContentValues update(int flag) {
ContentValues values = new ContentValues();
values.put(COLUMN_DOWNLOAD_FLAG, flag);
return values;
}
static ContentValues update(int flag, String missionId) {
ContentValues values = new ContentValues();
values.put(COLUMN_DOWNLOAD_FLAG, flag);
if (empty(missionId)) {
values.put(COLUMN_MISSION_ID, missionId);
}
return values;
}
static ContentValues update(String saveName, String savePath, int flag) {
ContentValues values = new ContentValues();
values.put(COLUMN_SAVE_NAME, saveName);
values.put(COLUMN_SAVE_PATH, savePath);
values.put(COLUMN_DOWNLOAD_FLAG, flag);
return values;
}
static DownloadStatus readStatus(Cursor cursor) {
boolean isChunked = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_IS_CHUNKED)) > 0;
long downloadSize = cursor.getLong(cursor.getColumnIndexOrThrow(COLUMN_DOWNLOAD_SIZE));
long totalSize = cursor.getLong(cursor.getColumnIndexOrThrow(COLUMN_TOTAL_SIZE));
return new DownloadStatus(isChunked, downloadSize, totalSize);
}
static DownloadRecord read(Cursor cursor) {
DownloadRecord record = new DownloadRecord();
record.setId(cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_ID)));
record.setUrl(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_URL)));
record.setSaveName(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_SAVE_NAME)));
record.setSavePath(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_SAVE_PATH)));
boolean isChunked = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_IS_CHUNKED)) > 0;
long downloadSize = cursor.getLong(cursor.getColumnIndexOrThrow(COLUMN_DOWNLOAD_SIZE));
long totalSize = cursor.getLong(cursor.getColumnIndexOrThrow(COLUMN_TOTAL_SIZE));
record.setStatus(new DownloadStatus(isChunked, downloadSize, totalSize));
record.setExtra1(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_EXTRA1)));
record.setExtra2(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_EXTRA2)));
record.setExtra3(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_EXTRA3)));
record.setExtra4(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_EXTRA4)));
record.setExtra5(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_EXTRA5)));
record.setFlag(cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_DOWNLOAD_FLAG)));
record.setDate(cursor.getLong(cursor.getColumnIndexOrThrow(COLUMN_DATE)));
record.setMissionId(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_MISSION_ID)));
return record;
}
}
}