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

350 lines
14 KiB
Java
Raw Normal View History

2020-11-11 13:11:13 +01:00
package com.darkweb.genesissearchengine.dataManager;
import android.annotation.SuppressLint;
2020-12-11 08:05:08 +01:00
import android.content.ContentValues;
2020-11-27 12:40:46 +01:00
import android.graphics.Bitmap;
2021-03-27 09:15:20 +01:00
import android.graphics.BitmapFactory;
2020-11-27 12:40:46 +01:00
import android.os.Handler;
2021-02-15 21:26:33 +01:00
import android.os.Message;
import android.util.Log;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import com.darkweb.genesissearchengine.appManager.activityContextManager;
2021-04-11 21:25:15 +02:00
import com.darkweb.genesissearchengine.databaseManager.databaseController;
2021-02-15 21:26:33 +01:00
import com.darkweb.genesissearchengine.appManager.homeManager.geckoManager.NestedGeckoView;
2021-02-03 11:54:19 +01:00
import com.darkweb.genesissearchengine.appManager.homeManager.geckoManager.geckoSession;
2020-11-11 13:11:13 +01:00
import com.darkweb.genesissearchengine.appManager.tabManager.tabRowModel;
2021-02-15 21:26:33 +01:00
import com.darkweb.genesissearchengine.constants.enums;
2021-04-05 21:07:02 +02:00
import com.darkweb.genesissearchengine.constants.status;
2021-02-15 21:26:33 +01:00
import com.darkweb.genesissearchengine.constants.strings;
2020-11-27 12:40:46 +01:00
import org.mozilla.geckoview.GeckoResult;
2021-04-11 21:25:15 +02:00
import org.mozilla.geckoview.GeckoView;
2021-03-27 09:15:20 +01:00
import java.io.ByteArrayInputStream;
2020-12-11 08:05:08 +01:00
import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
2020-11-11 13:11:13 +01:00
import java.util.ArrayList;
2020-12-11 08:05:08 +01:00
import java.util.Calendar;
2020-11-11 13:11:13 +01:00
import java.util.List;
2020-12-11 08:05:08 +01:00
import java.util.Locale;
2020-11-11 13:11:13 +01:00
@SuppressLint("CommitPrefEdits")
class tabDataModel
{
private ArrayList<tabRowModel> mTabs = new ArrayList<>();
2020-12-11 08:05:08 +01:00
ArrayList<tabRowModel> getTab(){
return mTabs;
}
2020-11-11 13:11:13 +01:00
/*List Tabs*/
2020-12-11 08:05:08 +01:00
void initializeTab(ArrayList<tabRowModel> pTabMdel){
mTabs.addAll(pTabMdel);
}
geckoSession getHomePage(){
2021-01-18 11:07:12 +01:00
if(mTabs.size()>0){
return mTabs.get(0).getSession();
}else {
return null;
2020-11-11 13:11:13 +01:00
}
}
2020-12-11 08:05:08 +01:00
2021-03-27 09:15:20 +01:00
int addTabs(geckoSession mSession,boolean pIsDataSavable){
2020-12-11 08:05:08 +01:00
tabRowModel mTabModel = new tabRowModel(mSession);
mTabs.add(0,mTabModel);
if(mTabs.size()>20){
2021-03-14 18:59:37 +01:00
closeTab(mTabs.get(mTabs.size()-1).getSession(), mTabs.get(mTabs.size()-1).getmId());
2021-03-27 09:15:20 +01:00
return enums.AddTabCallback.TAB_FULL;
2020-12-11 08:05:08 +01:00
}
if(pIsDataSavable){
2021-01-18 11:07:12 +01:00
String[] params = new String[3];
2020-12-11 08:05:08 +01:00
params[0] = mTabModel.getSession().getTitle();
params[1] = mTabModel.getSession().getCurrentURL();
2021-01-18 11:07:12 +01:00
params[2] = mTabModel.getSession().getTheme();
2020-12-11 08:05:08 +01:00
String m_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH).format(Calendar.getInstance().getTime());
2021-04-18 10:37:16 +02:00
if(mTabModel.getSession().getTitle().equals("about:blank") || mTabModel.getSession().getTitle().equals("$TITLE") || mTabModel.getSession().getTitle().startsWith("http://loading") || mTabModel.getSession().getTitle().startsWith("loading")){
2021-04-13 10:20:07 +02:00
return enums.AddTabCallback.TAB_ADDED;
}
2021-04-18 10:37:16 +02:00
if(mTabModel.getSession().getCurrentURL().equals("about:blank") || mTabModel.getSession().getCurrentURL().equals("$TITLE") || mTabModel.getSession().getCurrentURL().startsWith("http://loading") || mTabModel.getSession().getCurrentURL().startsWith("loading")){
2021-04-13 10:20:07 +02:00
return enums.AddTabCallback.TAB_ADDED;
}
2021-03-18 18:42:53 +01:00
databaseController.getInstance().execSQL("REPLACE INTO tab(mid,date,title,url,theme) VALUES('"+ mTabModel.getmId() +"','" + m_date + "',?,?,?);",params);
2020-12-11 08:05:08 +01:00
}
2021-03-27 09:15:20 +01:00
return enums.AddTabCallback.TAB_ADDED;
2020-11-11 13:11:13 +01:00
}
2020-12-11 08:05:08 +01:00
2020-11-11 13:11:13 +01:00
void clearTab() {
int size = mTabs.size();
for(int counter = 0; counter< size; counter++){
2021-01-28 11:22:41 +01:00
if(mTabs.size()>0){
mTabs.get(0).getSession().stop();
2021-03-18 18:42:53 +01:00
mTabs.get(0).getSession().close();
2021-01-28 11:22:41 +01:00
mTabs.remove(0);
}
2020-11-11 13:11:13 +01:00
}
if(mTabs.size()>0){
2021-03-18 18:42:53 +01:00
mTabs.get(0).getSession().close();
mTabs.remove(0);
2020-11-11 13:11:13 +01:00
}
2020-12-11 08:05:08 +01:00
databaseController.getInstance().execSQL("DELETE FROM tab WHERE 1",null);
2020-12-24 09:55:18 +01:00
2020-11-11 13:11:13 +01:00
}
2020-12-11 08:05:08 +01:00
2021-03-14 18:59:37 +01:00
void closeTab(geckoSession mSession,Object pID) {
2021-03-18 18:42:53 +01:00
mSession.stop();
mSession.close();
2021-03-14 18:59:37 +01:00
if(pID == null){
String mID = strings.GENERIC_EMPTY_STR;
for(int counter = 0; counter< mTabs.size(); counter++){
if(mTabs.get(counter).getSession().getSessionID().equals(mSession.getSessionID()))
{
2021-03-18 18:42:53 +01:00
mTabs.get(counter).getSession().stop();
mTabs.get(counter).getSession().close();
2021-03-14 18:59:37 +01:00
mTabs.remove(counter);
mID = mTabs.get(counter).getmId();
break;
}
2020-11-11 13:11:13 +01:00
}
2021-03-14 18:59:37 +01:00
databaseController.getInstance().execSQL("DELETE FROM tab WHERE mid='" + mID + "'",null);
}else {
for(int counter = 0; counter< mTabs.size(); counter++){
if(mTabs.get(counter).getSession().getSessionID().equals(mSession.getSessionID()))
{
2021-03-18 18:42:53 +01:00
mTabs.get(counter).getSession().stop();
mTabs.get(counter).getSession().close();
2021-03-14 18:59:37 +01:00
mTabs.remove(counter);
break;
}
}
databaseController.getInstance().execSQL("DELETE FROM tab WHERE mid='" + pID + "'",null);
2020-11-11 13:11:13 +01:00
}
}
2020-12-11 08:05:08 +01:00
2020-11-11 13:11:13 +01:00
void moveTabToTop(geckoSession mSession) {
for(int counter = 0; counter< mTabs.size(); counter++){
2021-03-23 12:52:22 +01:00
try{
if(mTabs.get(counter).getSession().getSessionID().equals(mSession.getSessionID()))
{
String m_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH).format(Calendar.getInstance().getTime());
databaseController.getInstance().execSQL("UPDATE tab SET date = '" + m_date + "' WHERE mid='"+mTabs.get(counter).getmId() + "'",null);
mTabs.add(0,mTabs.remove(counter));
break;
}
}catch (Exception ex){
Log.i(ex.getMessage(), ex.getMessage());
2020-11-11 13:11:13 +01:00
}
}
}
2020-12-11 08:05:08 +01:00
2021-01-18 11:07:12 +01:00
boolean updateTab(String mSessionID, geckoSession pSession) {
2020-12-11 08:05:08 +01:00
for(int counter = 0; counter< mTabs.size(); counter++){
if(mTabs.get(counter).getSession().getSessionID().equals(mSessionID))
{
2021-01-18 11:07:12 +01:00
String[] params = new String[3];
2020-12-11 08:05:08 +01:00
params[0] = mTabs.get(counter).getSession().getTitle();
params[1] = mTabs.get(counter).getSession().getCurrentURL();
2021-01-18 11:07:12 +01:00
params[2] = mTabs.get(counter).getSession().getTheme();
2020-12-11 08:05:08 +01:00
String m_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH).format(Calendar.getInstance().getTime());
2021-04-18 10:37:16 +02:00
if(mTabs.get(counter).getSession().getTitle().equals("about:blank") || mTabs.get(counter).getSession().getTitle().equals("$TITLE") || mTabs.get(counter).getSession().getTitle().startsWith("http://loading") || mTabs.get(counter).getSession().getTitle().startsWith("loading")){
return false;
}
if(mTabs.get(counter).getSession().getCurrentURL().equals("about:blank") || mTabs.get(counter).getSession().getCurrentURL().equals("$TITLE") || mTabs.get(counter).getSession().getCurrentURL().startsWith("http://loading") || mTabs.get(counter).getSession().getCurrentURL().startsWith("loading")){
return false;
}
databaseController.getInstance().execSQL("REPLACE INTO tab(mid,date,title,url,theme) VALUES('"+ mTabs.get(counter).getmId() +"','" + m_date + "',?,?,?);",params);
2020-12-11 08:05:08 +01:00
return true;
}
}
2021-03-27 09:15:20 +01:00
addTabs(pSession, true);
2020-12-11 08:05:08 +01:00
return false;
}
2020-11-11 13:11:13 +01:00
tabRowModel getCurrentTab(){
if(mTabs.size()>0){
return mTabs.get(0);
}
else {
return null;
}
}
2020-11-27 12:40:46 +01:00
2021-03-15 15:11:31 +01:00
tabRowModel getRecentTab(){
2021-04-05 21:07:02 +02:00
if(mTabs.size()>1){
2021-03-15 15:11:31 +01:00
return mTabs.get(1);
}
else {
return null;
}
}
2020-12-11 08:05:08 +01:00
tabRowModel getLastTab(){
if(mTabs.size()>0){
return mTabs.get(mTabs.size()-1);
}
else {
return null;
}
}
2021-02-15 21:26:33 +01:00
@SuppressLint("HandlerLeak")
static Handler handler = new Handler()
{
@Override
public void dispatchMessage(@NonNull Message msg) {
super.dispatchMessage(msg);
}
@NonNull
@Override
public String getMessageName(@NonNull Message message) {
return super.getMessageName(message);
}
@Override
public boolean sendMessageAtTime(@NonNull Message msg, long uptimeMillis) {
return super.sendMessageAtTime(msg, uptimeMillis);
}
@Override
public String toString() {
return super.toString();
}
@Override
public void handleMessage(Message msg)
{
Log.i("FUCK","FUCK");
}
};
// int isLoading = 0;
2021-04-11 21:25:15 +02:00
public void updatePixels(String pSessionID, GeckoResult<Bitmap> pBitmapManager, ImageView pImageView, GeckoView pGeckoView, boolean pOpenTabView){
2021-02-15 21:26:33 +01:00
new Thread(){
public void run(){
try {
for(int counter = 0; counter< mTabs.size(); counter++) {
int finalCounter = counter;
if (mTabs.get(counter).getSession().getSessionID().equals(pSessionID)) {
GeckoResult<Bitmap> mResult = pBitmapManager.withHandler(handler);
2021-04-05 21:07:02 +02:00
Bitmap mBitmap = pBitmapManager.poll(0);
2021-03-27 09:15:20 +01:00
ByteArrayOutputStream out = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.PNG, 20, out);
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
2021-02-15 21:26:33 +01:00
2021-04-05 21:07:02 +02:00
Bitmap emptyBitmap = Bitmap.createBitmap(decoded.getWidth(), decoded.getHeight(), decoded.getConfig());
if (!decoded.sameAs(emptyBitmap)) {
mTabs.get(finalCounter).setmBitmap(decoded);
2021-02-15 21:26:33 +01:00
2021-04-05 21:07:02 +02:00
if(pImageView!=null){
activityContextManager.getInstance().getHomeController().runOnUiThread(() -> {
pImageView.setImageBitmap(mBitmap);
});
}
byte[] mThumbnail = out.toByteArray();
2021-04-11 21:25:15 +02:00
ContentValues mContentValues = new ContentValues();
mContentValues.put("mThumbnail", mThumbnail);
databaseController.getInstance().execTab("tab",mContentValues, mTabs.get(finalCounter).getmId());
2021-04-05 21:07:02 +02:00
}
2021-02-15 21:26:33 +01:00
}
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
2021-03-14 18:59:37 +01:00
if(pOpenTabView){
2021-04-05 21:07:02 +02:00
activityContextManager.getInstance().getHomeController().onLoadFirstElement();
2021-03-14 18:59:37 +01:00
}
2021-02-15 21:26:33 +01:00
2020-11-27 12:40:46 +01:00
}
2021-03-05 12:34:41 +01:00
}.start();
2020-11-27 12:40:46 +01:00
}
2021-01-18 11:07:12 +01:00
public ArrayList<ArrayList<String>> getSuggestions(String pQuery){
ArrayList<ArrayList<String>> mModel = new ArrayList<>();
for(int count = 0; count<= mTabs.size()-1 && mTabs.size()<500; count++){
if(mTabs.get(count).getSession().getTitle().toLowerCase().contains(pQuery) || mTabs.get(count).getSession().getCurrentURL().toLowerCase().contains(pQuery)){
ArrayList<String> mTempModel = new ArrayList<>();
mTempModel.add(mTabs.get(count).getSession().getTitle().toLowerCase());
mTempModel.add(mTabs.get(count).getSession().getCurrentURL());
mModel.add(mTempModel);
}
}
return mModel;
}
2020-11-11 13:11:13 +01:00
int getTotalTabs(){
return mTabs.size();
}
/*List Suggestion*/
2021-01-18 11:07:12 +01:00
public Object onTrigger(dataEnums.eTabCommands pCommands, List<Object> pData){
if(pCommands == dataEnums.eTabCommands.GET_TOTAL_TAB){
2020-11-11 13:11:13 +01:00
return getTotalTabs();
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.GET_CURRENT_TAB){
2020-11-11 13:11:13 +01:00
return getCurrentTab();
}
2021-03-15 15:11:31 +01:00
else if(pCommands == dataEnums.eTabCommands.GET_RECENT_TAB){
return getRecentTab();
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.GET_LAST_TAB){
2020-12-11 08:05:08 +01:00
return getLastTab();
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.MOVE_TAB_TO_TOP){
moveTabToTop((geckoSession)pData.get(0));
2020-11-11 13:11:13 +01:00
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.CLOSE_TAB){
2021-03-14 18:59:37 +01:00
closeTab((geckoSession)pData.get(0), pData.get(1));
2021-04-05 21:07:02 +02:00
activityContextManager.getInstance().getHomeController().initTabCountForced();
2020-11-11 13:11:13 +01:00
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.M_CLEAR_TAB){
2020-11-11 13:11:13 +01:00
clearTab();
2021-04-05 21:07:02 +02:00
activityContextManager.getInstance().getHomeController().initTabCountForced();
2020-11-11 13:11:13 +01:00
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.M_ADD_TAB){
2021-04-05 21:07:02 +02:00
int mTabs = addTabs((geckoSession)pData.get(0), (boolean)pData.get(1));
activityContextManager.getInstance().getHomeController().initTabCountForced();
return mTabs;
2020-11-11 13:11:13 +01:00
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.M_UPDATE_TAB){
updateTab((String) pData.get(1), (geckoSession) pData.get(5));
2021-04-05 21:07:02 +02:00
activityContextManager.getInstance().getHomeController().initTabCountForced();
2020-12-11 08:05:08 +01:00
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.GET_TAB){
2020-11-11 13:11:13 +01:00
return getTab();
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.M_GET_SUGGESTIONS){
return getSuggestions((String) pData.get(0));
}
else if(pCommands == dataEnums.eTabCommands.M_UPDATE_PIXEL){
2021-04-11 21:25:15 +02:00
updatePixels((String)pData.get(0), (GeckoResult<Bitmap>)pData.get(1), (ImageView) pData.get(2), (GeckoView) pData.get(3), (Boolean) pData.get(4));
2020-12-11 08:05:08 +01:00
}
2021-01-18 11:07:12 +01:00
else if(pCommands == dataEnums.eTabCommands.M_HOME_PAGE){
2020-12-11 08:05:08 +01:00
return getHomePage();
2020-11-27 12:40:46 +01:00
}
2020-11-11 13:11:13 +01:00
return null;
}
}