package org.horaapps.leafpic.data;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
import org.horaapps.leafpic.data.base.SortingMode;
import org.horaapps.leafpic.data.base.SortingOrder;
import java.io.File;
import java.util.ArrayList;
/**
* Created by dnld on 2/1/16.
*/
public class CustomAlbumsHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 16;
private static final String DATABASE_NAME = "album_settings.db";
private static final String TABLE_ALBUMS = "albums";
private static final String ALBUM_PATH = "path";
private static final String ALBUM_EXCLUDED = "excluded";
private static final String ALBUM_PINNED = "pinned";
private static final String ALBUM_COVER_PATH = "cover_path";
private static final String ALBUM_SORTING_MODE = "sorting_mode";
private static final String ALBUM_SORTING_ORDER = "sort_ascending";
private static final String ALBUM_COLUMN_COUNT = "sorting_order";
private static CustomAlbumsHelper instance;
public static CustomAlbumsHelper getInstance(Context context) {
if (instance == null) {
synchronized (CustomAlbumsHelper.class) {
if (instance == null)
instance = new CustomAlbumsHelper(context);
}
}
return instance;
}
private CustomAlbumsHelper(Context ctx) {
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
this.createAlbumsTable(db);
// NOTE: excluded music folder by default
ContentValues values = new ContentValues();
values.put(ALBUM_PATH, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath());
values.put(ALBUM_EXCLUDED, 1);
db.insert(TABLE_ALBUMS, null, values);
}
private void createAlbumsTable(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " +
TABLE_ALBUMS + "(" +
ALBUM_PATH + " TEXT," +
ALBUM_EXCLUDED + " INTEGER," +
ALBUM_PINNED + " INTEGER," +
ALBUM_COVER_PATH + " TEXT, " +
ALBUM_SORTING_MODE + " INTEGER, " +
ALBUM_SORTING_ORDER + " INTEGER, " +
ALBUM_COLUMN_COUNT + " TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ALBUMS);
onCreate(db);
}
private void checkAndCreateAlbum(SQLiteDatabase db, String path) {
Cursor cursor = db.query(TABLE_ALBUMS, null, ALBUM_PATH+"=?",
new String[]{ path }, null, null, null);
if (cursor.getCount() == 0) {
ContentValues values = new ContentValues();
values.put(ALBUM_PATH, path);
values.put(ALBUM_SORTING_MODE, SortingMode.DATE.getValue());
values.put(ALBUM_SORTING_ORDER, SortingOrder.DESCENDING.getValue());
values.put(ALBUM_EXCLUDED, 0);
db.insert(TABLE_ALBUMS, null, values);
}
cursor.close();
}
AlbumSettings getSettings(String path) {
SQLiteDatabase db = this.getWritableDatabase();
checkAndCreateAlbum(db, path);
AlbumSettings s = null;
String[] selection = new String[] { ALBUM_COVER_PATH, ALBUM_SORTING_MODE,
ALBUM_SORTING_ORDER, ALBUM_PINNED };
Cursor cursor = db.query(TABLE_ALBUMS, selection, ALBUM_PATH+"=?",
new String[]{ path }, null, null, null);
if (cursor.moveToFirst())
s = new AlbumSettings(path, cursor.getString(0), cursor.getInt(1), cursor.getInt(2),cursor.getInt(3));
cursor.close();
db.close();
return s;
}
public ArrayList<File> getExcludedFolders() {
ArrayList<File> list = new ArrayList<File>();
SQLiteDatabase db = this.getReadableDatabase();
String selection = ALBUM_EXCLUDED + "=1";
Cursor cur = db.query(TABLE_ALBUMS, new String[]{ ALBUM_PATH }, selection, null, null, null, null);
if (cur.moveToFirst())
do list.add(new File(cur.getString(0))); while (cur.moveToNext());
cur.close();
db.close();
return list;
}
public ArrayList<String> getExcludedFoldersPaths() {
ArrayList<String> list = new ArrayList<String>();
SQLiteDatabase db = this.getReadableDatabase();
String selection = ALBUM_EXCLUDED + "=1";
Cursor cur = db.query(TABLE_ALBUMS, new String[]{ ALBUM_PATH }, selection, null, null, null, null);
if (cur.moveToFirst())
do list.add(cur.getString(0)); while (cur.moveToNext());
cur.close();
db.close();
return list;
}
public void clearAlbumExclude(String path) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ALBUM_EXCLUDED, 0);
db.update(TABLE_ALBUMS, values, ALBUM_PATH+"=?", new String[]{ path });
db.close();
}
public void excludeAlbum(String path) {
SQLiteDatabase db = this.getWritableDatabase();
checkAndCreateAlbum(db, path);
ContentValues values = new ContentValues();
values.put(ALBUM_EXCLUDED, 1);
db.update(TABLE_ALBUMS, values, ALBUM_PATH+"=?", new String[]{ path});
db.close();
}
void pinAlbum(String path, boolean status) {
SQLiteDatabase db = this.getWritableDatabase();
checkAndCreateAlbum(db, path);
ContentValues values = new ContentValues();
values.put(ALBUM_PINNED, status ? 1 : 0);
db.update(TABLE_ALBUMS, values, ALBUM_PATH+"=?", new String[]{ path });
db.close();
}
public String getCoverPathAlbum(String path) {
String s = null;
SQLiteDatabase db = this.getWritableDatabase();
String[] selection = new String[] {ALBUM_COVER_PATH};
Cursor cursor = db.query(TABLE_ALBUMS, selection, ALBUM_PATH+"=?",
new String[]{ path }, null, null, null);
if (cursor.moveToFirst())
s = cursor.getString(0);
cursor.close();
db.close();
return s;
}
void setAlbumPhotoPreview(String path, String mediaPath) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ALBUM_COVER_PATH, mediaPath);
db.update(TABLE_ALBUMS, values, ALBUM_PATH+"=?", new String[]{ path});
db.close();
}
void setAlbumSortingMode(String path, int column) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ALBUM_SORTING_MODE, column);
db.update(TABLE_ALBUMS, values, ALBUM_PATH+"=?", new String[]{ path });
db.close();
}
void setAlbumSortingOrder(String path, int sortingOrder) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ALBUM_SORTING_ORDER, sortingOrder);
db.update(TABLE_ALBUMS, values, ALBUM_PATH+"=?", new String[]{ path });
db.close();
}
}