LeOS-Genesis/app/src/main/java/com/darkweb/genesissearchengine/helperManager/localFileDownloader.java

287 lines
11 KiB
Java
Raw Normal View History

2021-03-06 19:55:24 +01:00
package com.darkweb.genesissearchengine.helperManager;
import android.annotation.SuppressLint;
2021-03-09 07:36:59 +01:00
import android.app.DownloadManager;
2021-03-06 19:55:24 +01:00
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
2021-04-13 10:20:07 +02:00
import android.content.ContentResolver;
import android.content.ContentValues;
2021-03-06 19:55:24 +01:00
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Environment;
import android.os.StrictMode;
2021-04-13 10:20:07 +02:00
import android.provider.MediaStore;
2021-03-06 19:55:24 +01:00
import androidx.core.app.NotificationCompat;
2021-03-09 07:36:59 +01:00
import androidx.core.content.FileProvider;
2021-04-21 14:48:24 +02:00
import com.darkweb.genesissearchengine.netcipher.client.StrongHttpsClient;
2021-03-06 19:55:24 +01:00
import com.example.myapplication.R;
import org.mozilla.thirdparty.com.google.android.exoplayer2.util.Log;
2021-04-23 14:13:50 +02:00
import org.torproject.android.proxy.util.Prefs;
2021-04-21 14:48:24 +02:00
import java.io.BufferedReader;
2021-03-06 19:55:24 +01:00
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
2021-04-21 14:48:24 +02:00
import java.io.InputStreamReader;
2021-03-06 19:55:24 +01:00
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Proxy;
2021-04-18 10:37:16 +02:00
import java.net.URI;
2021-03-06 19:55:24 +01:00
import java.net.URL;
import java.net.URLConnection;
2021-04-21 14:48:24 +02:00
import java.net.URLEncoder;
2021-04-18 10:37:16 +02:00
2021-04-21 14:48:24 +02:00
import ch.boye.httpclientandroidlib.HttpResponse;
import ch.boye.httpclientandroidlib.client.methods.HttpGet;
2021-03-06 19:55:24 +01:00
import static java.lang.Thread.sleep;
public class localFileDownloader extends AsyncTask<String, Integer, String> {
@SuppressLint("StaticFieldLeak")
private Context context;
private NotificationManager mNotifyManager;
private NotificationCompat.Builder build;
private OutputStream output;
private InputStream mStream;
private String PROXY_ADDRESS = "localhost";
private int PROXY_PORT = 9050;
2021-04-21 14:48:24 +02:00
private int mID;
private String mFileName;
2021-03-06 19:55:24 +01:00
private float mTotalByte;
private float mDownloadByte;
2021-03-09 07:36:59 +01:00
private String mURL;
2021-03-06 19:55:24 +01:00
public localFileDownloader(Context pContext, String pURL, String pFileName, int pID) {
this.context = pContext;
this.mFileName = pFileName;
2021-03-09 07:36:59 +01:00
this.mURL = pURL;
2021-03-06 19:55:24 +01:00
this.mID = pID;
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
mFileName = pFileName;
}
protected void onPreExecute() {
super.onPreExecute();
Intent snoozeIntent = new Intent(context, downloadNotification.class);
snoozeIntent.setAction("Download_Cancelled");
snoozeIntent.putExtra("N_ID", mID);
snoozeIntent.putExtra("N_COMMAND", 0);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, mID, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mNotifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
build = new NotificationCompat.Builder(context);
2021-03-23 12:52:22 +01:00
if(mFileName.length()>30){
mFileName = "..." + mFileName.substring(mFileName.length()-30);
}
2021-03-06 19:55:24 +01:00
build.setContentTitle(mFileName)
.setContentText("starting...")
.setChannelId(mID + "")
.setAutoCancel(false)
.setDefaults(0)
2021-03-14 18:59:37 +01:00
.setColor(Color.parseColor("#84989f"))
2021-03-06 19:55:24 +01:00
.setCategory(Notification.CATEGORY_SERVICE)
.setPriority(Notification.PRIORITY_DEFAULT)
.addAction(R.drawable.ic_download, "Cancel",pendingIntent)
2021-03-14 18:59:37 +01:00
.setSmallIcon(android.R.drawable.stat_sys_download);
2021-03-06 19:55:24 +01:00
build.setOngoing(Prefs.persistNotifications());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(mID + "",
"Social Media Downloader",
NotificationManager.IMPORTANCE_HIGH);
channel.setDescription("no sound");
channel.setSound(null, null);
channel.enableLights(false);
channel.setLightColor(Color.BLUE);
channel.enableVibration(false);
mNotifyManager.createNotificationChannel(channel);
}
build.setProgress(100, 0, false);
mNotifyManager.notify(mID, build.build());
}
@Override
protected String doInBackground(String... f_url) {
int count;
2021-04-21 14:48:24 +02:00
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
try {
URL url = new URL(f_url[0]);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, InetSocketAddress.createUnresolved(PROXY_ADDRESS, PROXY_PORT));
URLConnection conection;
conection = url.openConnection(proxy);
//conection = (HttpsURLConnection)ProxySelector.openConnectionWithProxy(new URI(f_url[0]));
conection.connect();
int lenghtOfFile = conection.getContentLength();
mStream = conection.getInputStream();
// Output stream
output = new FileOutputStream(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+"/"+mFileName));
byte[] data = new byte[100000];
long total = 0;
mTotalByte = lenghtOfFile;
while ((count = mStream.read(data)) != -1) {
total += count;
int cur = (int) ((total * 100) / lenghtOfFile);
mDownloadByte = cur;
publishProgress(Math.min(cur, 100));
if (Math.min(cur, 100) > 98) {
sleep(500);
}
Log.i("currentProgress", "currentProgress: " + Math.min(cur, 100) + "\n " + cur);
output.write(data, 0, count);
2021-03-06 19:55:24 +01:00
}
2021-04-21 14:48:24 +02:00
build.setContentText("saving file");
build.setSmallIcon(android.R.drawable.stat_sys_download);
mNotifyManager.notify(mID, build.build());
2021-03-06 19:55:24 +01:00
2021-04-21 14:48:24 +02:00
output.flush();
output.close();
mStream.close();
} catch (Exception ex) {
onCancel();
2021-03-06 19:55:24 +01:00
}
2021-04-21 14:48:24 +02:00
}else {
try {
String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(f_url[0], ALLOWED_URI_CHARS);
2021-03-06 19:55:24 +01:00
2021-04-21 14:48:24 +02:00
StrongHttpsClient httpclient = new StrongHttpsClient(context);
2021-03-14 18:59:37 +01:00
2021-04-21 14:48:24 +02:00
httpclient.useProxy(true, "SOCKS", "127.0.0.1", 9050);
2021-03-06 19:55:24 +01:00
2021-04-21 14:48:24 +02:00
HttpGet httpget = new HttpGet(urlEncoded);
HttpResponse response = httpclient.execute(httpget);
StringBuffer sb = new StringBuffer();
sb.append(response.getStatusLine()).append("\n\n");
InputStream mStream = response.getEntity().getContent();
2021-03-06 19:55:24 +01:00
2021-04-21 14:48:24 +02:00
output = new FileOutputStream(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+"/"+mFileName));
byte[] data = new byte[100000];
long total = 0;
mTotalByte = response.getEntity().getContentLength();
int read;
while ((read = mStream.read(data)) != -1) {
total += read;
int cur = (int) ((total * 100) / response.getEntity().getContentLength());
mDownloadByte = cur;
publishProgress(Math.min(cur, 100));
if (Math.min(cur, 100) > 98) {
sleep(500);
}
Log.i("currentProgress", "currentProgress: " + Math.min(cur, 100) + "\n " + cur);
output.write(data, 0, read);
}
build.setContentText("saving file");
build.setSmallIcon(android.R.drawable.stat_sys_download);
mNotifyManager.notify(mID, build.build());
output.flush();
output.close();
mStream.close();
}catch (Exception ex){
Log.d("sda", "dsa");
}
}
2021-03-06 19:55:24 +01:00
return null;
}
protected void onProgressUpdate(Integer... progress) {
build.setProgress(100, progress[0], false);
int mPercentage = (int)(mDownloadByte);
if(mPercentage<0){
mPercentage = 0;
}
build.setContentText(mPercentage+"%");
mNotifyManager.notify(mID, build.build());
super.onProgressUpdate(progress);
}
@Override
protected void onPostExecute(String file_url) {
Intent snoozeIntentPost = new Intent(context, downloadNotification.class);
snoozeIntentPost.setAction("Download_Cancelled");
snoozeIntentPost.putExtra("N_ID", mID);
snoozeIntentPost.putExtra("N_COMMAND", 1);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, mID, snoozeIntentPost, PendingIntent.FLAG_UPDATE_CURRENT);
build.setContentIntent(pendingIntent);
2021-03-14 18:59:37 +01:00
build.addAction(android.R.drawable.stat_sys_download, "Open",pendingIntent);
2021-03-06 19:55:24 +01:00
build.setContentText("Download complete");
2021-03-14 18:59:37 +01:00
build.setSmallIcon(R.xml.ic_check);
2021-03-06 19:55:24 +01:00
build.setProgress(0, 0, false);
build.setAutoCancel(true);
2021-03-14 18:59:37 +01:00
build.setColor(Color.parseColor("#212d45"));
2021-03-09 07:36:59 +01:00
build.setOngoing(false);
2021-03-06 19:55:24 +01:00
build.setPriority(Notification.PRIORITY_LOW);
mNotifyManager.notify(mID, build.build());
2021-03-09 07:36:59 +01:00
DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
String mPath = (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + File.separator + mFileName).replace("File//","content://");
File mFile = new File(mPath);
2021-04-13 10:20:07 +02:00
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", mFile);
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Downloads.TITLE, mFileName);
contentValues.put(MediaStore.Downloads.DISPLAY_NAME, mFileName);
contentValues.put(MediaStore.Downloads.SIZE, mDownloadByte);
contentValues.put(MediaStore.Downloads.MIME_TYPE, helperMethod.getMimeType(uri.toString()));
contentValues.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + File.separator + "Temp");
ContentResolver database = context.getContentResolver();
database.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues);
} else {
Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", mFile);
dm.addCompletedDownload(mFileName, mURL, false, helperMethod.getMimeType(uri.toString()), mFile.getAbsolutePath(), mFile.length(), false);
}
2021-03-09 07:36:59 +01:00
2021-03-06 19:55:24 +01:00
}
public void onCancel(){
mNotifyManager.cancel(mID);
cancel(true);
}
public void onTrigger(){
mNotifyManager.cancel(mID);
String mPath = (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + File.separator + mFileName).replace("File//","content://");
File mFile = new File(mPath);
helperMethod.openFile(mFile, context);
}
}