LeOS-Genesis/app/src/main/java/com/darkweb/genesissearchengine/dataManager/sqlCipherDataModel.java

229 lines
7.9 KiB
Java
Raw Normal View History

2021-05-19 19:46:36 +02:00
package com.darkweb.genesissearchengine.dataManager;
2021-04-11 21:25:15 +02:00
import android.database.Cursor;
import androidx.appcompat.app.AppCompatActivity;
import com.darkweb.genesissearchengine.appManager.activityContextManager;
2021-05-19 19:46:36 +02:00
import com.darkweb.genesissearchengine.dataManager.models.bookmarkRowModel;
import com.darkweb.genesissearchengine.dataManager.models.historyRowModel;
2021-04-11 21:25:15 +02:00
import com.darkweb.genesissearchengine.appManager.homeManager.geckoManager.geckoSession;
2021-05-19 19:46:36 +02:00
import com.darkweb.genesissearchengine.dataManager.models.tabRowModel;
2021-04-11 21:25:15 +02:00
import com.darkweb.genesissearchengine.constants.constants;
2021-04-18 17:47:09 +02:00
import net.sqlcipher.database.SQLiteDatabaseHook;
import net.sqlcipher.database.SQLiteDatabase;
2021-04-28 10:48:03 +02:00
import org.mozilla.geckoview.GeckoSession;
2021-04-18 17:47:09 +02:00
import java.io.File;
2021-04-11 21:25:15 +02:00
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
2021-05-19 19:46:36 +02:00
import java.util.List;
2021-04-11 21:25:15 +02:00
import java.util.Locale;
2021-05-14 14:43:40 +02:00
import java.util.Objects;
2021-04-18 17:47:09 +02:00
import static com.darkweb.genesissearchengine.constants.constants.CONST_DATABASE_NAME;
2021-04-11 21:25:15 +02:00
2021-05-19 19:46:36 +02:00
public class sqlCipherDataModel
2021-04-11 21:25:15 +02:00
{
/*Private Variables*/
2021-05-14 14:43:40 +02:00
private static SQLiteDatabase sDatabaseInstance;
2021-04-11 21:25:15 +02:00
/*Initializations*/
2021-05-19 19:46:36 +02:00
private void prepareDatabaseEnvironment(AppCompatActivity app_context) {
2021-05-05 10:52:35 +02:00
File databaseFile = app_context.getDatabasePath(CONST_DATABASE_NAME + "_SECURE");
2021-04-18 17:47:09 +02:00
if (!databaseFile.exists()) {
2021-05-14 14:43:40 +02:00
Objects.requireNonNull(databaseFile.getParentFile()).mkdirs();
2021-04-18 17:47:09 +02:00
}
}
2021-05-19 19:46:36 +02:00
private void initialize(AppCompatActivity app_context)
2021-04-11 21:25:15 +02:00
{
try
{
2021-04-18 17:47:09 +02:00
SQLiteDatabase.loadLibs(app_context);
prepareDatabaseEnvironment(app_context);
2021-05-14 14:43:40 +02:00
sDatabaseInstance = SQLiteDatabase.openOrCreateDatabase(app_context.getDatabasePath(CONST_DATABASE_NAME + "_SECURE"), constants.CONST_ENCRYPTION_KEY_DATABASE,null, wrapHook(null));
2021-04-11 21:25:15 +02:00
2021-05-14 14:43:40 +02:00
sDatabaseInstance.execSQL("CREATE TABLE IF NOT EXISTS " + "history" + " (id INT(4) PRIMARY KEY,date DATETIME,url VARCHAR,title VARCHAR);");
sDatabaseInstance.execSQL("CREATE TABLE IF NOT EXISTS " + "bookmark" + " (id INT(4) PRIMARY KEY,title VARCHAR,url VARCHAR);");
sDatabaseInstance.execSQL("CREATE TABLE IF NOT EXISTS " + "tab" + " (mid INT(4) PRIMARY KEY,date,title VARCHAR,url VARCHAR,mThumbnail BLOB, theme VARCHAR, session VARCHAR);");
2021-04-11 21:25:15 +02:00
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/*Helper Methods*/
2021-05-19 19:46:36 +02:00
private SQLiteDatabaseHook wrapHook(final SQLiteDatabaseHook hook) {
2021-04-18 17:47:09 +02:00
if (hook == null)
{
return keyHook;
}
return new SQLiteDatabaseHook() {
@Override
public void preKey(net.sqlcipher.database.SQLiteDatabase sqLiteDatabase) {
keyHook.preKey(sqLiteDatabase);
hook.preKey(sqLiteDatabase);
}
@Override
public void postKey(net.sqlcipher.database.SQLiteDatabase sqLiteDatabase) {
keyHook.postKey(sqLiteDatabase);
hook.preKey(sqLiteDatabase);
}
};
}
SQLiteDatabaseHook keyHook = new SQLiteDatabaseHook() {
@Override
public void preKey(net.sqlcipher.database.SQLiteDatabase sqLiteDatabase) {
}
@Override
public void postKey(net.sqlcipher.database.SQLiteDatabase sqLiteDatabase) {
}
};
2021-04-11 21:25:15 +02:00
2021-05-19 19:46:36 +02:00
private void execSQL(String query,String[] params)
2021-04-11 21:25:15 +02:00
{
if(params==null)
{
2021-05-14 14:43:40 +02:00
sDatabaseInstance.execSQL(query);
2021-04-11 21:25:15 +02:00
}
else
{
2021-05-14 14:43:40 +02:00
sDatabaseInstance.execSQL(query,params);
2021-04-11 21:25:15 +02:00
}
}
2021-05-19 19:46:36 +02:00
private ArrayList<historyRowModel> selectHistory(int pStartIndex,int pEndIndex){
2021-04-11 21:25:15 +02:00
ArrayList<historyRowModel> tempmodel = new ArrayList<>();
2021-05-14 14:43:40 +02:00
Cursor c = sDatabaseInstance.rawQuery("SELECT * FROM history ORDER BY date DESC LIMIT " + pEndIndex + " OFFSET "+pStartIndex, null);
2021-04-11 21:25:15 +02:00
if (c.moveToFirst()){
do {
historyRowModel model = new historyRowModel(c.getString(3), c.getString(2),Integer.parseInt(c.getString(0)));
try {
Date m_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US).parse(c.getString(1));
model.setDate(m_date);
} catch (Exception e) {
e.printStackTrace();
}
if(Calendar.getInstance().getTime().getTime() < model.getDate().getTime()){
tempmodel.add(model);
}else {
tempmodel.add(model);
}
} while(c.moveToNext());
}
c.close();
return tempmodel;
}
2021-05-19 19:46:36 +02:00
private ArrayList<tabRowModel> selectTabs(){
2021-04-11 21:25:15 +02:00
ArrayList<tabRowModel> mTempListModel = new ArrayList<>();
2021-05-14 14:43:40 +02:00
Cursor c = sDatabaseInstance.rawQuery("SELECT * FROM tab ORDER BY date ASC", null);
2021-04-11 21:25:15 +02:00
if (c.moveToFirst()){
do {
geckoSession mSession = activityContextManager.getInstance().getHomeController().onNewTabInit();
tabRowModel model = new tabRowModel(c.getString(0), c.getString(1),c.getBlob(4));
2021-04-28 10:48:03 +02:00
GeckoSession.SessionState session = null;
try {
2021-05-05 10:52:35 +02:00
// if(status.sRestoreTabs){
2021-04-28 10:48:03 +02:00
session = GeckoSession.SessionState.fromString(c.getString(6));
2021-05-05 10:52:35 +02:00
// }
2021-04-28 10:48:03 +02:00
} catch (Exception ex) {
ex.printStackTrace();
}
model.setSession(mSession, c.getString(3),c.getString(2), c.getString(5), session);
2021-04-11 21:25:15 +02:00
model.getSession().setSessionID(model.getmId());
2021-05-05 10:52:35 +02:00
if(session != null){
mTempListModel.add(0, model);
}else {
mTempListModel.add(model);
}
2021-04-11 21:25:15 +02:00
} while(c.moveToNext());
}
c.close();
return mTempListModel;
}
2021-05-19 19:46:36 +02:00
private int getLargestHistoryID(){
2021-04-11 21:25:15 +02:00
int id = 0;
2021-05-14 14:43:40 +02:00
Cursor c = sDatabaseInstance.rawQuery("SELECT max(id) FROM history", null);
2021-04-11 21:25:15 +02:00
if (c.moveToFirst()){
do {
if(c.getString(0)==null){
break;
}else {
id = Integer.parseInt(c.getString(0));
}
} while(c.moveToNext());
}
c.close();
return id;
}
2021-05-19 19:46:36 +02:00
private ArrayList<bookmarkRowModel> selectBookmark(){
2021-04-11 21:25:15 +02:00
ArrayList<bookmarkRowModel> tempmodel = new ArrayList<>();
2021-05-14 14:43:40 +02:00
Cursor c = sDatabaseInstance.rawQuery("SELECT * FROM bookmark ORDER BY id DESC ", null);
2021-04-11 21:25:15 +02:00
if (c.moveToFirst()){
do {
tempmodel.add(new bookmarkRowModel(c.getString(1), c.getString(2),Integer.parseInt(c.getString(0))));
} while(c.moveToNext());
}
c.close();
return tempmodel;
}
2021-05-19 19:46:36 +02:00
private void deleteFromList(int index,String table) {
execSQL("delete from "+table+" where id="+index,null);
}
/* External Triggers */
public Object onTrigger(dataEnums.eSqlCipherCommands pCommands, List<Object> pData){
if(pCommands == dataEnums.eSqlCipherCommands.M_INIT){
initialize((AppCompatActivity)pData.get(0));
}
else if(pCommands == dataEnums.eSqlCipherCommands.M_EXEC_SQL){
execSQL((String)pData.get(0), (String[])pData.get(1));
}
else if(pCommands == dataEnums.eSqlCipherCommands.M_SELECT_BOOKMARK){
return selectBookmark();
}
else if(pCommands == dataEnums.eSqlCipherCommands.M_SELECT_HISTORY){
return selectHistory((int)pData.get(0), (int)pData.get(1));
}
else if(pCommands == dataEnums.eSqlCipherCommands.M_SELECT_TABS){
return selectTabs();
}
else if(pCommands == dataEnums.eSqlCipherCommands.M_HISTORY_ID){
return getLargestHistoryID();
}
else if(pCommands == dataEnums.eSqlCipherCommands.M_DELETE_FROM_HISTORY){
deleteFromList((int)pData.get(0), (String)pData.get(1));
}
return null;
2021-04-11 21:25:15 +02:00
}
}