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 ;
import android.os.Handler ;
2020-12-11 08:05:08 +01:00
import com.darkweb.genesissearchengine.appManager.databaseManager.databaseController ;
2020-11-11 13:11:13 +01:00
import com.darkweb.genesissearchengine.appManager.homeManager.geckoSession ;
import com.darkweb.genesissearchengine.appManager.tabManager.tabRowModel ;
2020-11-27 12:40:46 +01:00
import org.mozilla.geckoview.GeckoResult ;
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 ( ) {
for ( int counter = 0 ; counter < mTabs . size ( ) ; counter + + ) {
if ( mTabs . get ( counter ) . getSession ( ) . getCurrentURL ( ) . equals ( "https://boogle.store/" ) ) {
moveTabToTop ( mTabs . get ( counter ) . getSession ( ) ) ;
return mTabs . get ( 0 ) . getSession ( ) ;
}
2020-11-11 13:11:13 +01:00
}
2020-12-11 08:05:08 +01:00
return null ;
2020-11-11 13:11:13 +01:00
}
2020-12-11 08:05:08 +01:00
void addTabs ( geckoSession mSession , boolean pIsDataSavable ) {
tabRowModel mTabModel = new tabRowModel ( mSession ) ;
mTabs . add ( 0 , mTabModel ) ;
if ( mTabs . size ( ) > 20 ) {
closeTab ( mTabs . get ( mTabs . size ( ) - 1 ) . getSession ( ) ) ;
}
if ( pIsDataSavable ) {
String [ ] params = new String [ 2 ] ;
params [ 0 ] = mTabModel . getSession ( ) . getTitle ( ) ;
params [ 1 ] = mTabModel . getSession ( ) . getCurrentURL ( ) ;
String m_date = new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss.SSS" , Locale . ENGLISH ) . format ( Calendar . getInstance ( ) . getTime ( ) ) ;
databaseController . getInstance ( ) . execSQL ( "INSERT INTO tab(mid,date,title,url) VALUES('" + mTabModel . getmId ( ) + "','" + m_date + "',?,?);" , params ) ;
}
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 + + ) {
mTabs . get ( 0 ) . getSession ( ) . stop ( ) ;
2020-12-24 09:55:18 +01:00
mTabs . get ( 0 ) . getSession ( ) . closeSession ( ) ;
2020-11-11 13:11:13 +01:00
mTabs . remove ( 0 ) ;
}
if ( mTabs . size ( ) > 0 ) {
mTabs . get ( 0 ) . getSession ( ) . closeSession ( ) ;
}
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
2020-11-11 13:11:13 +01:00
void closeTab ( geckoSession mSession ) {
for ( int counter = 0 ; counter < mTabs . size ( ) ; counter + + ) {
2020-12-11 08:05:08 +01:00
if ( mTabs . get ( counter ) . getSession ( ) . getSessionID ( ) . equals ( mSession . getSessionID ( ) ) )
2020-11-11 13:11:13 +01:00
{
2020-12-11 08:05:08 +01:00
databaseController . getInstance ( ) . execSQL ( "DELETE FROM tab WHERE mid='" + mTabs . get ( counter ) . getmId ( ) + "'" , null ) ;
2020-11-11 13:11:13 +01:00
mTabs . remove ( counter ) ;
break ;
}
}
}
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 + + ) {
2020-12-11 08:05:08 +01:00
if ( mTabs . get ( counter ) . getSession ( ) . getSessionID ( ) . equals ( mSession . getSessionID ( ) ) )
2020-11-11 13:11:13 +01:00
{
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 ( ) ) ;
databaseController . getInstance ( ) . execSQL ( "UPDATE tab SET date = '" + m_date + "' WHERE mid='" + mTabs . get ( counter ) . getmId ( ) + "'" , null ) ;
mTabs . add ( 0 , mTabs . remove ( counter ) ) ;
2020-11-11 13:11:13 +01:00
break ;
}
}
}
2020-12-11 08:05:08 +01:00
boolean updateTab ( String mSessionID ) {
for ( int counter = 0 ; counter < mTabs . size ( ) ; counter + + ) {
if ( mTabs . get ( counter ) . getSession ( ) . getSessionID ( ) . equals ( mSessionID ) )
{
String [ ] params = new String [ 2 ] ;
params [ 0 ] = mTabs . get ( counter ) . getSession ( ) . getTitle ( ) ;
params [ 1 ] = mTabs . get ( counter ) . getSession ( ) . getCurrentURL ( ) ;
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 + "' , url = ? , title = ? WHERE mid='" + mTabs . get ( counter ) . getmId ( ) + "'" , params ) ;
return true ;
}
}
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
2020-12-11 08:05:08 +01:00
tabRowModel getLastTab ( ) {
if ( mTabs . size ( ) > 0 ) {
return mTabs . get ( mTabs . size ( ) - 1 ) ;
}
else {
return null ;
}
}
public void updatePixels ( String pSessionID , GeckoResult < Bitmap > pBitmapManager ) {
2020-11-27 12:40:46 +01:00
for ( int counter = 0 ; counter < mTabs . size ( ) ; counter + + ) {
2020-12-11 08:05:08 +01:00
if ( mTabs . get ( counter ) . getSession ( ) . getSessionID ( ) . equals ( pSessionID ) )
2020-11-27 12:40:46 +01:00
{
final Handler handler = new Handler ( ) ;
int finalCounter = counter ;
2020-12-11 08:05:08 +01:00
int finalCounter1 = counter ;
2020-11-27 12:40:46 +01:00
handler . postDelayed ( ( ) - >
{
try {
Bitmap mBitmap = pBitmapManager . poll ( 0 ) ;
mTabs . get ( finalCounter ) . setmBitmap ( mBitmap ) ;
2020-12-11 08:05:08 +01:00
ByteArrayOutputStream bos = new ByteArrayOutputStream ( ) ;
mBitmap . compress ( Bitmap . CompressFormat . PNG , 100 , bos ) ;
byte [ ] mThumbnail = bos . toByteArray ( ) ;
ContentValues mContentValues = new ContentValues ( ) ;
mContentValues . put ( "mThumbnail" , mThumbnail ) ;
databaseController . getInstance ( ) . execTab ( "tab" , mContentValues , mTabs . get ( finalCounter1 ) . getmId ( ) ) ;
2020-11-27 12:40:46 +01:00
} catch ( Throwable throwable ) {
throwable . printStackTrace ( ) ;
}
2020-12-24 09:55:18 +01:00
} , 500 ) ;
2020-11-27 12:40:46 +01:00
}
}
}
2020-11-11 13:11:13 +01:00
int getTotalTabs ( ) {
return mTabs . size ( ) ;
}
/*List Suggestion*/
public Object onTrigger ( dataEnums . eTabCommands p_commands , List < Object > p_data ) {
if ( p_commands = = dataEnums . eTabCommands . GET_TOTAL_TAB ) {
return getTotalTabs ( ) ;
}
else if ( p_commands = = dataEnums . eTabCommands . GET_CURRENT_TAB ) {
return getCurrentTab ( ) ;
}
2020-12-11 08:05:08 +01:00
else if ( p_commands = = dataEnums . eTabCommands . GET_LAST_TAB ) {
return getLastTab ( ) ;
}
2020-11-11 13:11:13 +01:00
else if ( p_commands = = dataEnums . eTabCommands . MOVE_TAB_TO_TOP ) {
moveTabToTop ( ( geckoSession ) p_data . get ( 0 ) ) ;
}
else if ( p_commands = = dataEnums . eTabCommands . CLOSE_TAB ) {
closeTab ( ( geckoSession ) p_data . get ( 0 ) ) ;
}
else if ( p_commands = = dataEnums . eTabCommands . M_CLEAR_TAB ) {
clearTab ( ) ;
}
else if ( p_commands = = dataEnums . eTabCommands . M_ADD_TAB ) {
addTabs ( ( geckoSession ) p_data . get ( 0 ) , ( boolean ) p_data . get ( 1 ) ) ;
}
2020-12-11 08:05:08 +01:00
else if ( p_commands = = dataEnums . eTabCommands . M_UPDATE_TAB ) {
updateTab ( ( String ) p_data . get ( 1 ) ) ;
}
2020-11-11 13:11:13 +01:00
else if ( p_commands = = dataEnums . eTabCommands . GET_TAB ) {
return getTab ( ) ;
}
2020-11-27 12:40:46 +01:00
else if ( p_commands = = dataEnums . eTabCommands . M_UPDATE_PIXEL ) {
2020-12-11 08:05:08 +01:00
updatePixels ( ( String ) p_data . get ( 0 ) , ( GeckoResult < Bitmap > ) p_data . get ( 1 ) ) ;
}
else if ( p_commands = = dataEnums . eTabCommands . M_HOME_PAGE ) {
return getHomePage ( ) ;
2020-11-27 12:40:46 +01:00
}
2020-11-11 13:11:13 +01:00
return null ;
}
}