mirror of
https://github.com/tonikelope/megabasterd.git
synced 2025-05-23 18:16:18 +02:00
5.71
-GLobal progress lock
This commit is contained in:
parent
6455c35a4a
commit
4afc33da16
2
pom.xml
2
pom.xml
@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.tonikelope</groupId>
|
||||
<artifactId>MegaBasterd</artifactId>
|
||||
<version>5.70</version>
|
||||
<version>5.71</version>
|
||||
<packaging>jar</packaging>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
@ -44,7 +44,7 @@ public final class DownloadManager extends TransferenceManager {
|
||||
|
||||
if (((Download) d).isProvision_ok()) {
|
||||
|
||||
_total_transferences_size -= d.getFile_size();
|
||||
increment_total_size(-1 * d.getFile_size());
|
||||
|
||||
delete_down.add(((Download) d).getUrl());
|
||||
}
|
||||
@ -106,7 +106,7 @@ public final class DownloadManager extends TransferenceManager {
|
||||
|
||||
if (download.isProvision_ok()) {
|
||||
|
||||
_total_transferences_size += download.getFile_size();
|
||||
increment_total_size(download.getFile_size());
|
||||
|
||||
getTransference_waitstart_queue().add(download);
|
||||
|
||||
|
@ -48,7 +48,7 @@ import javax.swing.UIManager;
|
||||
*/
|
||||
public final class MainPanel {
|
||||
|
||||
public static final String VERSION = "5.70";
|
||||
public static final String VERSION = "5.71";
|
||||
public static final int THROTTLE_SLICE_SIZE = 16 * 1024;
|
||||
public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024;
|
||||
public static final int STREAMER_PORT = 1337;
|
||||
|
@ -23,6 +23,7 @@ public final class SpeedMeter implements Runnable {
|
||||
private long _speed_counter;
|
||||
private long _speed_acumulator;
|
||||
private volatile long _max_avg_global_speed;
|
||||
private final Object _speed_lock;
|
||||
|
||||
SpeedMeter(TransferenceManager trans_manager, JLabel sp_label, JLabel rem_label) {
|
||||
_speed_label = sp_label;
|
||||
@ -32,6 +33,7 @@ public final class SpeedMeter implements Runnable {
|
||||
_speed_counter = 0L;
|
||||
_speed_acumulator = 0L;
|
||||
_max_avg_global_speed = 0L;
|
||||
_speed_lock = new Object();
|
||||
}
|
||||
|
||||
private long _getAvgGlobalSpeed() {
|
||||
@ -40,19 +42,26 @@ public final class SpeedMeter implements Runnable {
|
||||
|
||||
public void attachTransference(Transference transference) {
|
||||
|
||||
HashMap<String, Object> properties = new HashMap<>();
|
||||
synchronized (_speed_lock) {
|
||||
|
||||
properties.put("last_progress", transference.getProgress());
|
||||
properties.put("no_data_count", 0);
|
||||
HashMap<String, Object> properties = new HashMap<>();
|
||||
|
||||
_transferences.put(transference, properties);
|
||||
properties.put("last_progress", transference.getProgress());
|
||||
properties.put("no_data_count", 0);
|
||||
|
||||
_transferences.put(transference, properties);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void detachTransference(Transference transference) {
|
||||
|
||||
if (_transferences.containsKey(transference)) {
|
||||
_transferences.remove(transference);
|
||||
synchronized (_speed_lock) {
|
||||
|
||||
if (_transferences.containsKey(transference)) {
|
||||
_transferences.remove(transference);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,7 +134,7 @@ public final class SpeedMeter implements Runnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
long global_speed, global_progress;
|
||||
long global_speed, global_progress, global_size;
|
||||
boolean visible = false;
|
||||
|
||||
_speed_label.setVisible(true);
|
||||
@ -137,73 +146,79 @@ public final class SpeedMeter implements Runnable {
|
||||
|
||||
try {
|
||||
|
||||
if (!_transferences.isEmpty()) {
|
||||
synchronized (_speed_lock) {
|
||||
|
||||
visible = true;
|
||||
if (!_transferences.isEmpty()) {
|
||||
|
||||
global_speed = 0L;
|
||||
visible = true;
|
||||
|
||||
global_progress = 0L;
|
||||
global_speed = 0L;
|
||||
|
||||
for (Map.Entry<Transference, HashMap> trans_info : _transferences.entrySet()) {
|
||||
global_progress = 0L;
|
||||
|
||||
long trans_sp = calcTransferenceSpeed(trans_info.getKey(), trans_info.getValue());
|
||||
global_size = _trans_manager.get_total_size();
|
||||
|
||||
if (trans_sp >= 0) {
|
||||
global_speed += trans_sp;
|
||||
for (Map.Entry<Transference, HashMap> trans_info : _transferences.entrySet()) {
|
||||
|
||||
long trans_sp = calcTransferenceSpeed(trans_info.getKey(), trans_info.getValue());
|
||||
|
||||
if (trans_sp >= 0) {
|
||||
global_speed += trans_sp;
|
||||
}
|
||||
|
||||
global_progress += trans_info.getKey().getProgress();
|
||||
|
||||
if (trans_sp > 0) {
|
||||
|
||||
trans_info.getKey().getView().updateSpeed(formatBytes(trans_sp) + "/s", true);
|
||||
|
||||
} else if (trans_sp == 0) {
|
||||
|
||||
trans_info.getKey().getView().updateSpeed("------", true);
|
||||
|
||||
} else {
|
||||
|
||||
trans_info.getKey().getView().updateSpeed("BANDWIDTH LIMIT ERROR!", true);
|
||||
}
|
||||
}
|
||||
|
||||
global_progress += trans_info.getKey().getProgress();
|
||||
for (Transference transference : _trans_manager.getTransference_finished_queue()) {
|
||||
|
||||
if (trans_sp > 0) {
|
||||
if (!transference.isStatusError()) {
|
||||
|
||||
trans_info.getKey().getView().updateSpeed(formatBytes(trans_sp) + "/s", true);
|
||||
global_progress += transference.getProgress();
|
||||
}
|
||||
}
|
||||
|
||||
} else if (trans_sp == 0) {
|
||||
if (global_speed > 0) {
|
||||
|
||||
trans_info.getKey().getView().updateSpeed("------", true);
|
||||
_speed_counter++;
|
||||
_speed_acumulator += global_speed;
|
||||
|
||||
long avg_global_speed = _getAvgGlobalSpeed();
|
||||
|
||||
if (avg_global_speed > _max_avg_global_speed) {
|
||||
_max_avg_global_speed = avg_global_speed;
|
||||
}
|
||||
|
||||
_speed_label.setText(formatBytes(global_speed) + "/s");
|
||||
|
||||
_rem_label.setText(formatBytes(global_progress) + "/" + formatBytes(global_size) + " @ " + formatBytes(avg_global_speed) + "/s @ " + calcRemTime((long) Math.floor((global_size - global_progress) / avg_global_speed)));
|
||||
|
||||
} else {
|
||||
|
||||
trans_info.getKey().getView().updateSpeed("BANDWIDTH LIMIT ERROR!", true);
|
||||
}
|
||||
}
|
||||
_speed_label.setText("------");
|
||||
_rem_label.setText(formatBytes(global_progress) + "/" + formatBytes(global_size) + " @ --d --:--:--");
|
||||
|
||||
for (Transference transference : _trans_manager.getTransference_finished_queue()) {
|
||||
|
||||
if (!transference.isStatusError()) {
|
||||
|
||||
global_progress += transference.getProgress();
|
||||
}
|
||||
}
|
||||
|
||||
if (global_speed > 0) {
|
||||
|
||||
_speed_counter++;
|
||||
_speed_acumulator += global_speed;
|
||||
|
||||
long avg_global_speed = _getAvgGlobalSpeed();
|
||||
|
||||
if (avg_global_speed > _max_avg_global_speed) {
|
||||
_max_avg_global_speed = avg_global_speed;
|
||||
}
|
||||
|
||||
_speed_label.setText(formatBytes(global_speed) + "/s");
|
||||
|
||||
_rem_label.setText(formatBytes(global_progress) + "/" + formatBytes(_trans_manager.getTotal_transferences_size()) + " @ " + formatBytes(avg_global_speed) + "/s @ " + calcRemTime((long) Math.floor((_trans_manager.getTotal_transferences_size() - global_progress) / avg_global_speed)));
|
||||
|
||||
} else {
|
||||
|
||||
_speed_label.setText("------");
|
||||
_rem_label.setText(formatBytes(global_progress) + "/" + formatBytes(_trans_manager.getTotal_transferences_size()) + " @ --d --:--:--");
|
||||
} else if (visible) {
|
||||
|
||||
_speed_label.setText("");
|
||||
_rem_label.setText("");
|
||||
visible = false;
|
||||
}
|
||||
|
||||
} else if (visible) {
|
||||
|
||||
_speed_label.setText("");
|
||||
_rem_label.setText("");
|
||||
visible = false;
|
||||
}
|
||||
|
||||
Thread.sleep(SLEEP);
|
||||
|
@ -42,7 +42,8 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
|
||||
private volatile boolean _preprocessing_transferences;
|
||||
private volatile boolean _paused_all;
|
||||
private boolean _tray_icon_finish;
|
||||
protected long _total_transferences_size;
|
||||
protected volatile long _total_size;
|
||||
protected final Object _total_size_lock;
|
||||
|
||||
public TransferenceManager(MainPanel main_panel, int max_running_trans, javax.swing.JLabel status, javax.swing.JPanel scroll_panel, javax.swing.JButton close_all_button, javax.swing.JButton pause_all_button, javax.swing.MenuElement clean_all_menu) {
|
||||
_notified = false;
|
||||
@ -59,8 +60,9 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
|
||||
_close_all_button = close_all_button;
|
||||
_pause_all_button = pause_all_button;
|
||||
_clean_all_menu = clean_all_menu;
|
||||
_total_transferences_size = 0L;
|
||||
_total_size = 0L;
|
||||
_secure_notify_lock = new Object();
|
||||
_total_size_lock = new Object();
|
||||
_queue_sort_lock = new Object();
|
||||
_transference_preprocess_global_queue = new ConcurrentLinkedQueue<>();
|
||||
_transference_waitstart_queue = new ConcurrentLinkedQueue<>();
|
||||
@ -96,8 +98,20 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
|
||||
_removing_transferences = removing;
|
||||
}
|
||||
|
||||
public long getTotal_transferences_size() {
|
||||
return _total_transferences_size;
|
||||
public long get_total_size() {
|
||||
|
||||
synchronized (_total_size_lock) {
|
||||
return _total_size;
|
||||
}
|
||||
}
|
||||
|
||||
public void increment_total_size(long val) {
|
||||
|
||||
synchronized (_total_size_lock) {
|
||||
|
||||
_total_size += val;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean isProvisioning_transferences() {
|
||||
|
@ -40,7 +40,7 @@ public final class UploadManager extends TransferenceManager {
|
||||
|
||||
if (((Upload) upload).isProvision_ok()) {
|
||||
|
||||
_total_transferences_size += upload.getFile_size();
|
||||
increment_total_size(upload.getFile_size());
|
||||
|
||||
getTransference_waitstart_queue().add(upload);
|
||||
|
||||
@ -102,7 +102,7 @@ public final class UploadManager extends TransferenceManager {
|
||||
|
||||
getTransference_finished_queue().remove(u);
|
||||
|
||||
_total_transferences_size -= u.getFile_size();
|
||||
increment_total_size(-1 * u.getFile_size());
|
||||
|
||||
delete_up.add(new String[]{u.getFile_name(), ((Upload) u).getMa().getFull_email()});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user