More SmartProxy tunning
Support for subfolder links -> https://github.com/tonikelope/megabasterd/issues/582
This commit is contained in:
tonikelope 2023-10-18 19:19:35 +02:00
parent 5da893b5eb
commit 618c1e671d
10 changed files with 153 additions and 79 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.tonikelope</groupId>
<artifactId>MegaBasterd</artifactId>
<version>7.88</version>
<version>7.89</version>
<packaging>jar</packaging>
<repositories>
<repository>

View File

@ -31,6 +31,7 @@ import java.util.logging.Logger;
*/
public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
public static final int SMART_PROXY_RECHECK_509_TIME = 3600;
private static final Logger LOG = Logger.getLogger(ChunkDownloader.class.getName());
private final int _id;
private final Download _download;
@ -42,6 +43,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
private final ArrayList<String> _excluded_proxy_list;
private volatile boolean _reset_current_chunk;
private volatile InputStream _chunk_inputstream = null;
private volatile long _509_timestamp = -1;
private String _current_smart_proxy;
@ -150,25 +152,12 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
String worker_url = null;
long init_chunk_time = -1, finish_chunk_time = -1, pause_init_time, paused = 0L;
long pause_init_time, paused = 0L;
byte[] buffer = new byte[DEFAULT_BYTE_BUFFER_SIZE];
SmartMegaProxyManager proxy_manager = MainPanel.getProxy_manager();
if (MainPanel.isUse_smart_proxy() && proxy_manager != null && proxy_manager.isForce_smart_proxy()) {
String[] smart_proxy = proxy_manager.getProxy(_excluded_proxy_list);
_current_smart_proxy = smart_proxy[0];
smart_proxy_socks = smart_proxy[1].equals("socks");
if (!getDownload().isTurbo()) {
getDownload().enableTurboMode();
}
}
while (!_download.getMain_panel().isExit() && !_exit && !_download.isStopped()) {
if (_download.isPaused() && !_download.isStopped() && !_download.getChunkmanager().isExit()) {
@ -183,6 +172,10 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
}
if (http_error == 509 && _509_timestamp == -1) {
_509_timestamp = System.currentTimeMillis();
}
if (worker_url == null || http_error == 403) {
worker_url = _download.getDownloadUrlForWorker();
@ -204,7 +197,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
MainPanel.LAST_EXTERNAL_COMMAND_TIMESTAMP = -1;
}
if ((_current_smart_proxy != null || http_error == 509) && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy()) {
if (MainPanel.isUse_smart_proxy() && ((proxy_manager != null && proxy_manager.isForce_smart_proxy()) || _current_smart_proxy != null || http_error == 509 || (_509_timestamp != -1 && _509_timestamp + SMART_PROXY_RECHECK_509_TIME * 1000 < System.currentTimeMillis())) && !MainPanel.isUse_proxy()) {
if (_current_smart_proxy != null && chunk_error) {
@ -316,8 +309,6 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
try (OutputStream tmp_chunk_file_os = new BufferedOutputStream(new FileOutputStream(tmp_chunk_file))) {
init_chunk_time = System.currentTimeMillis();
paused = 0L;
int reads = 0;
@ -348,15 +339,12 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
}
finish_chunk_time = System.currentTimeMillis();
}
} else {
LOG.log(Level.INFO, "{0} Worker [{1}] has RECOVERED PREVIOUS chunk [{2}]! {3}", new Object[]{Thread.currentThread().getName(), _id, chunk_id, _download.getFile_name()});
finish_chunk_time = -1;
chunk_reads = chunk_size;
_download.getPartialProgress().add(chunk_size);
@ -368,7 +356,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
if (chunk_reads == chunk_size) {
LOG.log(Level.INFO, "{0} Worker [{1}] has DOWNLOADED chunk [{2}]! {3}", new Object[]{Thread.currentThread().getName(), _id, chunk_id, _download.getFile_name()});
LOG.log(Level.INFO, "{0} Worker [{1}] has OK DOWNLOADED (" + (_current_smart_proxy != null ? "smartproxy" : "direct") + ") chunk [{2}]! {3}", new Object[]{Thread.currentThread().getName(), _id, chunk_id, _download.getFile_name()});
if (tmp_chunk_file != null && chunk_file != null && (!chunk_file.exists() || chunk_file.length() != chunk_size)) {
@ -385,6 +373,10 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
http_error = 0;
if (_current_smart_proxy != null && _509_timestamp != -1) {
_509_timestamp = -1;
}
_excluded_proxy_list.clear();
_download.getChunkmanager().secureNotify();
@ -413,15 +405,9 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
_chunk_inputstream = null;
}
if (_reset_current_chunk) {
LOG.log(Level.WARNING, "Worker [{0}] FORCE RESET CHUNK [{1}]! {2}", new Object[]{_id, chunk_id, _download.getFile_name()});
_current_smart_proxy = null;
_reset_current_chunk = false;
}
if (chunk_error) {
LOG.log(Level.INFO, "{0} Worker [{1}] has FAILED downloading chunk [{2}]! {3}", new Object[]{Thread.currentThread().getName(), _id, chunk_id, _download.getFile_name()});
LOG.log(Level.INFO, "{0} Worker [{1}] has FAILED downloading (" + (_current_smart_proxy != null ? "smartproxy" : "direct") + ") chunk [{2}]! {3}", new Object[]{Thread.currentThread().getName(), _id, chunk_id, _download.getFile_name()});
if (tmp_chunk_file != null && tmp_chunk_file.exists()) {
tmp_chunk_file.delete();
@ -457,6 +443,12 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
_current_smart_proxy = null;
}
if (_reset_current_chunk) {
LOG.log(Level.WARNING, "Worker [{0}] FORCE RESET CHUNK [{1}]! {2}", new Object[]{_id, chunk_id, _download.getFile_name()});
_current_smart_proxy = null;
_reset_current_chunk = false;
}
con.disconnect();
}
}

View File

@ -26,6 +26,7 @@ import javax.swing.JOptionPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
/**
*
@ -47,6 +48,10 @@ public class FolderLinkDialog extends javax.swing.JDialog {
private volatile boolean exit = false;
private volatile MegaMutableTreeNode _subfolder_node = null;
private volatile boolean _subfolder_finish = false;
public List<HashMap> getDownload_links() {
return Collections.unmodifiableList(_download_links);
}
@ -326,12 +331,16 @@ public class FolderLinkDialog extends javax.swing.JDialog {
node_bar.setVisible(true);
skip_rest_button.setEnabled(false);
skip_button.setEnabled(false);
THREAD_POOL.execute(() -> {
MiscTools.resetTreeFolderSizes(((MegaMutableTreeNode) file_tree.getModel().getRoot()));
MiscTools.calculateTreeFolderSizes(((MegaMutableTreeNode) file_tree.getModel().getRoot()));
_genDownloadLiks();
MiscTools.GUIRun(() -> {
MiscTools.GUIRunAndWait(() -> {
restore_button.setVisible(true);
file_tree.setEnabled(true);
@ -345,6 +354,7 @@ public class FolderLinkDialog extends javax.swing.JDialog {
skip_button.setEnabled(root_childs);
skip_rest_button.setEnabled(root_childs);
});
});
@ -414,6 +424,17 @@ public class FolderLinkDialog extends javax.swing.JDialog {
String folder_id = findFirstRegex("#F!([^!]+)", _link, 1);
String subfolder_id = null;
if (folder_id.contains("@")) {
String[] fids = folder_id.split("@");
folder_id = fids[0];
subfolder_id = fids[1];
}
String folder_key = findFirstRegex("#F![^!]+!(.+)", _link, 1);
folder_nodes = ma.getFolderNodes(folder_id, folder_key, node_bar);
@ -515,7 +536,9 @@ public class FolderLinkDialog extends javax.swing.JDialog {
final MegaMutableTreeNode roott = root;
MiscTools.GUIRun(() -> {
final String ssubfolder_id = subfolder_id;
MiscTools.GUIRunAndWait(() -> {
node_bar.setIndeterminate(true);
@ -526,6 +549,12 @@ public class FolderLinkDialog extends javax.swing.JDialog {
ftree.setEnabled(true);
});
if (ssubfolder_id != null) {
_subfolder_node = MiscTools.findMegaTreeNodeByID(roott, ssubfolder_id);
}
}
} catch (MegaAPIException mex) {
@ -620,7 +649,7 @@ public class FolderLinkDialog extends javax.swing.JDialog {
}
}
MiscTools.GUIRun(() -> {
MiscTools.GUIRunAndWait(() -> {
total_space_label.setText("[" + formatBytes(_total_space) + "]");
@ -634,6 +663,28 @@ public class FolderLinkDialog extends javax.swing.JDialog {
working = false;
});
if (_subfolder_node != null && !_subfolder_finish) {
MiscTools.GUIRunAndWait(() -> {
file_tree.setSelectionPath(new TreePath(_subfolder_node.getPath()));
});
_subfolder_finish = true;
MiscTools.GUIRun(() -> {
skip_rest_button.setEnabled(true);
skip_rest_button.doClick();
});
} else if (_subfolder_node != null && _subfolder_finish) {
MiscTools.GUIRunAndWait(() -> {
file_tree.setSelectionPath(new TreePath(_subfolder_node.getPath()));
});
}
});
});
}

View File

@ -69,7 +69,7 @@ import javax.swing.UIManager;
*/
public final class MainPanel {
public static final String VERSION = "7.88";
public static final String VERSION = "7.89";
public static final boolean FORCE_SMART_PROXY = false; //TRUE FOR DEBUGING SMART PROXY
public static final int THROTTLE_SLICE_SIZE = 16 * 1024;
public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024;

View File

@ -14,7 +14,6 @@ import static com.tonikelope.megabasterd.DBTools.*;
import static com.tonikelope.megabasterd.MainPanel.*;
import static com.tonikelope.megabasterd.MiscTools.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.datatransfer.DataFlavor;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
@ -177,13 +176,9 @@ public final class MainPanelView extends javax.swing.JFrame {
String old_status = getKiss_server_status().getText();
if (!old_status.equals(status + " ")) {
Dimension frame_size = this.getSize();
getKiss_server_status().setText(status + " ");
pack();
setSize(frame_size);
}
});
}
@ -194,13 +189,9 @@ public final class MainPanelView extends javax.swing.JFrame {
String old_status = getSmart_proxy_status().getText();
if (!old_status.equals(status + " ")) {
Dimension frame_size = this.getSize();
getSmart_proxy_status().setText(status + " ");
pack();
setSize(frame_size);
}
});
}
@ -212,13 +203,8 @@ public final class MainPanelView extends javax.swing.JFrame {
String old_status = getMc_reverse_status().getText();
if (!old_status.equals(status + " ")) {
Dimension frame_size = this.getSize();
getMc_reverse_status().setText(status + " ");
pack();
setSize(frame_size);
}
});
}
@ -1100,7 +1086,7 @@ public final class MainPanelView extends javax.swing.JFrame {
Set<String> folder_file_links = new HashSet(findAllRegex("(?:https?|mega)://[^\r\n]+#F\\*[^\r\n!]*?![^\r\n!]+![^\\?\r\n/]+", link_data, 0));
if (!folder_file_links.isEmpty()) {
ArrayList<String> nlinks = ma.getNlinks(folder_file_links);
ArrayList<String> nlinks = ma.GENERATE_N_LINKS(folder_file_links);
urls.removeAll(folder_file_links);

View File

@ -161,7 +161,7 @@ public class MegaAPI implements Serializable {
request = "[{\"a\":\"us\",\"user\":\"" + _email + "\",\"uh\":\"" + _user_hash + "\"}]";
}
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=");
String res = RAW_REQUEST(request, url_api);
@ -197,7 +197,7 @@ public class MegaAPI implements Serializable {
String request = "[{\"a\":\"us0\",\"user\":\"" + _email + "\"}]";
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=");
String res = RAW_REQUEST(request, url_api);
@ -215,7 +215,7 @@ public class MegaAPI implements Serializable {
String request = "[{\"a\":\"mfag\",\"e\":\"" + email + "\"}]";
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=");
String res = RAW_REQUEST(request, url_api);
@ -285,7 +285,7 @@ public class MegaAPI implements Serializable {
URL url_api;
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String res = RAW_REQUEST(request, url_api);
@ -329,7 +329,7 @@ public class MegaAPI implements Serializable {
try {
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String res = RAW_REQUEST(request, url_api);
@ -550,12 +550,12 @@ public class MegaAPI implements Serializable {
request = "[{\"a\":\"g\", \"g\":\"1\", \"n\":\"" + file_id + "\"}]";
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : "") + "&n=" + folder_id);
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : "") + "&n=" + folder_id);
} else {
request = "[{\"a\":\"g\", \"g\":\"1\", \"p\":\"" + file_id + "\"}]";
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
}
String data = RAW_REQUEST(request, url_api);
@ -588,13 +588,13 @@ public class MegaAPI implements Serializable {
request = "[{\"a\":\"g\", \"g\":\"1\", \"n\":\"" + file_id + "\"}]";
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : "") + "&n=" + folder_id);
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : "") + "&n=" + folder_id);
} else {
request = "[{\"a\":\"g\", \"p\":\"" + file_id + "\"}]";
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
}
String data = RAW_REQUEST(request, url_api);
@ -697,7 +697,7 @@ public class MegaAPI implements Serializable {
String request = "[{\"a\":\"u\", \"s\":" + String.valueOf(f.length()) + "}]";
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String res = RAW_REQUEST(request, url_api);
@ -741,7 +741,7 @@ public class MegaAPI implements Serializable {
String request = "[{\"a\":\"ufa\", \"s\":" + String.valueOf(file_bytes[0].length) + ", \"ssl\":1}, {\"a\":\"ufa\", \"s\":" + String.valueOf(file_bytes[1].length) + ", \"ssl\":1}]";
System.out.println(request);
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String res = RAW_REQUEST(request, url_api);
@ -802,7 +802,7 @@ public class MegaAPI implements Serializable {
request = "[{\"a\":\"pfa\", \"fa\":\"0*" + hash[0] + "/1*" + hash[1] + "\", \"n\":\"" + node_handle + "\"}]";
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
res = RAW_REQUEST(request, url_api);
@ -835,7 +835,7 @@ public class MegaAPI implements Serializable {
byte[] enc_att = _encAttr("{\"n\":\"" + fbasename + "\"}", i32a2bin(Arrays.copyOfRange(ul_key, 0, 4)));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String request = "[{\"a\":\"p\", \"t\":\"" + mega_parent + "\", \"n\":[{\"h\":\"" + completion_handle + "\", \"t\":0, \"a\":\"" + Bin2UrlBASE64(enc_att) + "\", \"k\":\"" + Bin2UrlBASE64(encryptKey(i32a2bin(fkey), master_key)) + "\"}], \"i\":\"" + _req_id + "\", \"cr\" : [ [\"" + root_node + "\"] , [\"" + completion_handle + "\"] , [0,0, \"" + Bin2UrlBASE64(encryptKey(i32a2bin(fkey), share_key)) + "\"]]}]";
@ -892,7 +892,7 @@ public class MegaAPI implements Serializable {
byte[] enc_node_key = encryptKey(node_key, master_key);
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String request = "[{\"a\":\"p\", \"t\":\"" + parent_node + "\", \"n\":[{\"h\":\"xxxxxxxx\",\"t\":1,\"a\":\"" + Bin2UrlBASE64(enc_att) + "\",\"k\":\"" + Bin2UrlBASE64(enc_node_key) + "\"}],\"i\":\"" + _req_id + "\"}]";
@ -922,7 +922,7 @@ public class MegaAPI implements Serializable {
byte[] enc_node_key_s = encryptKey(node_key, share_key);
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String request = "[{\"a\":\"p\", \"t\":\"" + parent_node + "\", \"n\":[{\"h\":\"xxxxxxxx\",\"t\":1,\"a\":\"" + Bin2UrlBASE64(enc_att) + "\",\"k\":\"" + Bin2UrlBASE64(enc_node_key) + "\"}],\"i\":\"" + _req_id + "\", \"cr\" : [ [\"" + root_node + "\"] , [\"xxxxxxxx\"] , [0,0, \"" + Bin2UrlBASE64(enc_node_key_s) + "\"]]}]";
@ -952,7 +952,7 @@ public class MegaAPI implements Serializable {
String request = "[{\"a\":\"l\", \"n\":\"" + node + "\"}]";
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String res = RAW_REQUEST(request, url_api);
@ -983,7 +983,7 @@ public class MegaAPI implements Serializable {
String request = "[{\"a\":\"l\", \"n\":\"" + node + "\", \"i\":\"" + _req_id + "\"}]";
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
String res = RAW_REQUEST(request, url_api);
@ -1030,7 +1030,7 @@ public class MegaAPI implements Serializable {
//OJO
String request = "[{\"a\":\"s2\",\"n\":\"" + node + "\",\"s\":[{\"u\":\"EXP\",\"r\":0}],\"i\":\"" + _req_id + "\",\"ok\":\"AAAAAAAAAAAAAAAAAAAAAA\",\"ha\":\"AAAAAAAAAAAAAAAAAAAAAA\",\"cr\":[[\"" + node + "\"],[\"" + node + "\"],[0,0,\"" + enc_nk + "\"]]}]";
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (_sid != null ? "&sid=" + _sid : "") + (API_KEY != null ? "&ak=" + API_KEY : ""));
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + (_sid != null ? "&sid=" + _sid : ""));
return RAW_REQUEST(request, url_api);
@ -1062,7 +1062,7 @@ public class MegaAPI implements Serializable {
String request = "[{\"a\":\"f\", \"c\":\"1\", \"r\":\"1\"}]";
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (API_KEY != null ? "&ak=" + API_KEY : "") + "&n=" + folder_id);
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + "&n=" + folder_id);
String res = RAW_REQUEST(request, url_api);
@ -1076,12 +1076,13 @@ public class MegaAPI implements Serializable {
int s = ((List) res_map[0].get("f")).size();
MiscTools.GUIRun(() -> {
bar.setIndeterminate(false);
bar.setMaximum(s);
bar.setValue(0);
});
if (bar != null) {
MiscTools.GUIRun(() -> {
bar.setIndeterminate(false);
bar.setMaximum(s);
bar.setValue(0);
});
}
int conta_nodo = 0;
for (Object o : (Iterable<? extends Object>) res_map[0].get("f")) {
@ -1090,10 +1091,12 @@ public class MegaAPI implements Serializable {
int c = conta_nodo;
MiscTools.GUIRun(() -> {
if (bar != null) {
MiscTools.GUIRun(() -> {
bar.setValue(c);
});
bar.setValue(c);
});
}
HashMap<String, Object> node = (HashMap<String, Object>) o;
@ -1155,7 +1158,7 @@ public class MegaAPI implements Serializable {
return folder_nodes;
}
public ArrayList<String> getNlinks(Set<String> links) {
public ArrayList<String> GENERATE_N_LINKS(Set<String> links) {
HashMap<String, ArrayList<String>> map = new HashMap<>();
@ -1206,7 +1209,7 @@ public class MegaAPI implements Serializable {
String request = "[{\"a\":\"f\", \"c\":\"1\", \"r\":\"1\"}]";
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + (API_KEY != null ? "&ak=" + API_KEY : "") + "&n=" + folder_id);
URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&v=3&lang=es&domain=meganz&ec=" + "&n=" + folder_id);
String res = RAW_REQUEST(request, url_api);

View File

@ -660,6 +660,24 @@ public class MiscTools {
}
public static MegaMutableTreeNode findMegaTreeNodeByID(MegaMutableTreeNode root, String node_id) {
Enumeration e = root.depthFirstEnumeration();
while (e.hasMoreElements()) {
MegaMutableTreeNode node = (MegaMutableTreeNode) e.nextElement();
HashMap<String, Object> mega_node = (HashMap<String, Object>) node.getUserObject();
if (mega_node.get("h").equals(node_id)) {
return node;
}
}
return null;
}
public static DefaultMutableTreeNode sortTree(DefaultMutableTreeNode root) {
Enumeration e = root.depthFirstEnumeration();
@ -1564,6 +1582,8 @@ public class MiscTools {
data = data.replaceAll("(?:https://)?mega(?:\\.co)?\\.nz/folder/([^#]+)#([^\r\n/]+)/file/([^\r\n/]+)", "https://mega.nz/#F*$3!$1!$2");
data = data.replaceAll("(?:https://)?mega(?:\\.co)?\\.nz/folder/([^#]+)#([^\r\n/]+)/folder/([^\r\n/]+)", "https://mega.nz/#F!$1@$3!$2");
return data.replaceAll("(?:https://)?mega(?:\\.co)?\\.nz/folder/([^#]+)#([^\r\n]+)", "https://mega.nz/#F!$1!$2").replaceAll("(?:https://)?mega(?:\\.co)?\\.nz/file/([^#]+)#([^\r\n]+)", "https://mega.nz/#!$1!$2");
}

View File

@ -39,6 +39,7 @@ public final class SmartMegaProxyManager {
public static String DEFAULT_SMART_PROXY_URL = null;
public static final int PROXY_BLOCK_TIME = 300;
public static final int PROXY_AUTO_REFRESH_SLEEP_TIME = 30;
private static final Logger LOG = Logger.getLogger(SmartMegaProxyManager.class.getName());
private volatile String _proxy_list_url;
private final LinkedHashMap<String, Long[]> _proxy_list;
@ -70,6 +71,24 @@ public final class SmartMegaProxyManager {
refreshProxyList();
}
private synchronized int countBlockedProxies() {
int i = 0;
Long current_time = System.currentTimeMillis();
for (String k : _proxy_list.keySet()) {
if (_proxy_list.get(k)[0] > current_time) {
i++;
}
}
return i;
}
public synchronized void refreshSmartProxySettings() {
String smartproxy_ban_time = DBTools.selectSettingValue("smartproxy_ban_time");
@ -159,6 +178,9 @@ public final class SmartMegaProxyManager {
LOG.log(Level.WARNING, "[Smart Proxy] BLOCKING PROXY {0} ({1} secs) ({2})", new Object[]{proxy, _ban_time, cause});
}
_main_panel.getView().updateSmartProxyStatus("SmartProxy: ON (" + String.valueOf(getProxyCount() - countBlockedProxies()) + ")" + (this.isForce_smart_proxy() ? " F!" : ""));
}
}

View File

@ -238,7 +238,7 @@ public class StreamerDialog extends javax.swing.JDialog implements ClipboardChan
links.add(link);
List nlinks = ma.getNlinks(links);
List nlinks = ma.GENERATE_N_LINKS(links);
link = (String) nlinks.get(0);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 204 KiB